# tpBaseFrame **Repository Path**: chenlong_sd/tpBaseFrame ## Basic Information - **Project Name**: tpBaseFrame - **Description**: 基于TP8和elementUI2的后台框架 - **Primary Language**: PHP - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-10-20 - **Last Updated**: 2024-11-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SC后台框架 ### 说明 * php >= 8.1 * mysql >= 5.7 推荐 8.0 * 依赖 thinkphp8.0~ * 依赖 element-ui2.2~ * 依赖 layui2.9~ ### 安装 * 复制 .example.env 到 .env * 配置数据库信息 * 拉取核心文件sc库到根目录 * 然后运行 `composer install` 安装 vendor * 运行命令 `php think run` 后访问 http://127.0.0.1:8000 (或使用nginx/apache等web服务器启动均可,然后访问对应的地址) 会自动判断数据库,然后点击初始化 ## 页面 * 分两种模式解析 * * `.php` 结尾的文件以thinkphp的模板解析 * * `.sc.php` 结尾的文件以本框架定义的类定义及解析 ### `.sc.php`文件示例 ```injectablephp append('hello world!'); ``` ### 列表页 #### 示例 + 使用开发辅助插件创建文件时已经自动生成好下面的格式 + 可查看系统已有的文件了解更多使用方式 ```injectablephp to([RouteController::class, 'listsData'])->url(), 'route'); $table->addColumns( Table\Column::selection(), Table\Column::normal('标题', 'title'), ); $component = include __DIR__ . '/edit.sc.php'; $table->setRowEvent('@primary.Edit.编辑', Table\EventHandler::window('编辑路由')->setConfig(['width' => '500px'])->setContent($component) ); $table->setHeaderEvent("@danger.delete.删除", Table\EventHandler::post( url: TP::route()->to([RouteController::class, 'destroy']), data: ['ids' => '@selection.map(v => v.id)'], successHandler: JsCode::create("this.\$message.success('删除成功')")->then("this.routeGetData()") )->confirmMessage('确认删除选中数据吗?') ->addLoading() ); return $table->render(); ``` #### 创建表格 ```injectablephp // 数据地址格式 Sc\Util\HtmlStructure\Table::create('http://127.0.0.1/admin/index/index', 'table_id'); // 直接给数据 Sc\Util\HtmlStructure\Table::create([ ['id' => 1, 'title' => 'data1'], ['id' => 2, 'title' => 'data2'], ], 'table_id1'); ``` #### 可用方法 | 方法名 | 描述 | |------------------------|-----------------| | addColumns | 添加展示列,`Column` | | setRowEvent | 设置行事件 | | setRowGroupEvent | 设置一组行事件(下拉菜单形式) | | setHeaderEvent | 设置头部事件(左) | | setPagination | 设置是否开启分页,默认开启 | | setHeaderRightEvent | 设置头部事件(右) | | setAttr | 设置属性 | | setId | 设置ID,同创建时的第二个参数 | | addStatusToggleButtons | 添加状态切换搜索的按钮组 | | setMaxHeight | 设置表格最大高度 | | setDraw | 设置行可拖动 | | enableTrash | 启用回收站 | | render | 渲染表格 | #### 列设置 Column ``` Table\Column::selection(); Table\Column::normal('标题', 'title'); ``` ###### 列类型 | 类型 | 描述 | |-----------|-----------------| | index | 序号列 | | normal | 常规列 | | selection | 多选框列 | | expand | 可展开列,限ElementUI | | event | 事件列 | ###### 列方法 | 方法名 | 描述 | |------------|---------------------------------| | setAttr | 设置元素属性 | | enableSort | 开启排序 | | fixed | 设置固定位置 | | addSearch | 添加到搜索项 | | setFormat | 设置自定义展示模板,设置展示类型的时候,后面的会顶掉前面的设置 | | showSwitch | 设置行展示开关 | | showTag | 设置展示标签 | | showImage | 设置展示图片 | | notShow | 设置不显示,php层面 | | align | 设置对齐 | #### 事件 `setHeaderEvent` `setRowEvent` `setRowGroupEvent` ```injectablephp use App\Admin\Controller\Base\RouteController; use App\Common\Enums\Base\RouteEnumType; use App\Common\Util\TP; use Sc\Util\HtmlStructure\Html\Html; use Sc\Util\HtmlStructure\Html\Js\JsCode; use Sc\Util\HtmlStructure\Table; // 行事件 // 第一个元素为事件dom元素,可使用 '@primary.Edit.编辑' 格式 // 第一个元素为事件dom元素,可使用 ['@primary.Edit.编辑', ['v-if' => 'a == 1']] 同时设置dom属性格式 // 第一个元素为事件dom元素,可使用 El::double('el-button')->append('事件dom') 自定义格式 // 第二个元素为处理事件的js代码,或返回js代码的回调函数 $table->setRowEvent('@primary.Edit.编辑', // ===== 类型 ==== // window 打开窗口 // redirect 跳转页面 // get、post 发起异步请求 // layer layer弹窗 // injectSearchRedirectDownload 加页面搜索条件跳转 // 行事件需要带行参数的时候,如果是跳转页面,如下,@id 则是该行的id参数 Table\EventHandler::window('编辑')->setConfig(['width' => '1000px'])->setUrl('url', ['id' => '@id']); // 行事件需要带行参数的时候,如果是异步请求或表单,如下,@row.id 则是该行的id参数 Table\EventHandler::post('url', ['id' => '@row.id']); Table\EventHandler::window('请假')->setRowData([ 'activity_id' => "@row.id" ])->setContent( Form::create('ask')->addFormItems( FormItem::hidden('activity_id'), FormItem::textarea('content', '内容'), FormItem::submit()->successClose('current')->submitUrl('url') )->render() ); // 头部公共事件需要获取选择的数据时,@selection 则是已选择的数据,实际变量为 selection ,@是标记这是一个js变量不是字符串 // 也可以用 Gramar::mark("selection") 标记 Table\EventHandler::post( url: TP::route()->to([ActivityController::class, 'destroy']), data: ['ids' => '@selection.map(v => v.id)'], successHandler: JsCode::create("this.\$message.success('删除成功')")->then("this.activityGetData()") )->confirmMessage('确认删除选中数据吗?') ->addLoading() ); // 设置一组行事件 $table->setRowGroupEvent('@primary.一组', function() { // 在回调内设置的事件为组事件,在对应的下拉菜单打开 $table->setRowEvent('@primary.Edit.编辑', Table\EventHandler::window('编辑路由')->setConfig(['width' => '500px'])->setContent($component) ); }); ``` ### 表单页 #### 示例 ```injectablephp config('label-width', '80px'); $form->addFormItems( FormItem::hidden('id', 'ID'), FormItem::text('name', '角色'), FormItem::textarea('describe', '描述'), FormItem::submit()->successClose('current')->submitUrl( TP::route()->to([RoleController::class, 'store'])->url(), TP::route()->to([RoleController::class, 'update'])->url(), )->success('VueApp.roleGetData()') ); return $form->render(); ```