diff --git a/catch/apimanager/README.md b/catch/apimanager/README.md index d924fed..4f3b482 100644 --- a/catch/apimanager/README.md +++ b/catch/apimanager/README.md @@ -14,8 +14,9 @@ apimanager 模块是一个用于API管理、测试的模块。 6. 基于catchadmin开发,模块安装简单,使用便捷,支持模块数据导入导出。 7. 开源开放易于二次开发,测试用例可共享,形成产品API知识库。 8. 支持私有化部署、云原生部署。 +9. 可视化管理系统路由列表,并可与API测试工具结合可视化测试系统接口。 - 演示地址:www.uctoo.com 控制台使用demo帐号登录 + 演示地址:demo.uctoo.com 控制台使用demo帐号登录 模块使用界面截图: @@ -39,6 +40,9 @@ apimanager 模块是一个用于API管理、测试的模块。 + + +
## 产品架构 @@ -70,8 +74,10 @@ apimanager 模块是一个用于API管理、测试的模块。 ## 使用手册 1. 可以通过API管理->API分类功能增删改查API分类。 2. 可以通过API环境变量功能增删改查用户环境变量。环境变量的key值以{{key}}方式定义,在API测试用例中对应的{{key}}值将替换为环境变量的value值。每个用户可以创建多组环境变量,可以切换当前选中的环境变量组。 -3. 可以通过API列表功能增删改查API测试用例。api_url、header、body、query、auth字段支持环境变量。 +3. 可以通过API列表功能增删改查API测试用例。api_url、header、body、query、auth字段支持环境变量。新增API测试用例时,标识字段请与路由列表name字段保持一致,以便API测试用例与路由一一对应快速检索。 4. 可以对已添加的API测试用例执行测试操作,在API测试界面,可以对api_url、header、body、query、auth等字段进行自定义编辑。发送按钮可以实际执行API测试用例,获得接口返回值。 +5. 可以使用路由列表->同步至数据库功能,将系统内所有路由信息保存至数据库,以便可视化管理和测试。与 php think route:list -m 命令相同效果。 +6. 可以使用路由列表->API测试功能,以路由name字段为请求参数跳转至API测试列表页面,以便快速查询出对应的API测试用例进行API测试。(需更新前端vue项目layout/mixin/formOperate.js文件修复了页面初始化传参bug) 具体请参考 https://www.kancloud.cn/doc_uctoo/manual diff --git a/catch/apimanager/catch-admin-vue/src/views/apimanager/apienv/index.vue b/catch/apimanager/catch-admin-vue/src/views/apimanager/apienv/index.vue index f80a3d0..9b0c2e6 100644 --- a/catch/apimanager/catch-admin-vue/src/views/apimanager/apienv/index.vue +++ b/catch/apimanager/catch-admin-vue/src/views/apimanager/apienv/index.vue @@ -1,128 +1,71 @@ diff --git a/catch/apimanager/catch-admin-vue/src/views/apimanager/apirun/index.vue b/catch/apimanager/catch-admin-vue/src/views/apimanager/apirun/index.vue index addbf8a..f8ad78e 100644 --- a/catch/apimanager/catch-admin-vue/src/views/apimanager/apirun/index.vue +++ b/catch/apimanager/catch-admin-vue/src/views/apimanager/apirun/index.vue @@ -329,11 +329,11 @@ export default { this.apiBaseInfo = response.data; this.apiBaseInfo.body = this.apiBaseInfo.body.replace(/'/g, '"'); if (this.apiBaseInfo.body) { - let resstr = this.apiBaseInfo.body - .replace(/\\/g, "") - .replace(/"{/g, "{") - .replace(/}"/g, "}"); - this.rawJson = JSON.parse(resstr); + // let resstr = this.apiBaseInfo.body + // .replace(/\\/g, "") + // .replace(/"{/g, "{") + // .replace(/}"/g, "}"); + this.rawJson = JSON.parse(this.apiBaseInfo.body); } else { this.rawJson = {}; } diff --git a/catch/apimanager/catch-admin-vue/src/views/apimanager/apitester/index.vue b/catch/apimanager/catch-admin-vue/src/views/apimanager/apitester/index.vue index e1a8153..7085812 100644 --- a/catch/apimanager/catch-admin-vue/src/views/apimanager/apitester/index.vue +++ b/catch/apimanager/catch-admin-vue/src/views/apimanager/apitester/index.vue @@ -239,13 +239,13 @@ /> diff --git a/catch/apimanager/catch-admin-vue/src/views/apimanager/route_list/route_list.vue b/catch/apimanager/catch-admin-vue/src/views/apimanager/route_list/route_list.vue new file mode 100644 index 0000000..3370cd5 --- /dev/null +++ b/catch/apimanager/catch-admin-vue/src/views/apimanager/route_list/route_list.vue @@ -0,0 +1,159 @@ + + + diff --git a/catch/apimanager/catch-admin-vue/src/views/apimanager/router.js b/catch/apimanager/catch-admin-vue/src/views/apimanager/router.js index 554a808..2d65ba3 100644 --- a/catch/apimanager/catch-admin-vue/src/views/apimanager/router.js +++ b/catch/apimanager/catch-admin-vue/src/views/apimanager/router.js @@ -4,5 +4,6 @@ export default { // api测试 apitester: () => import('@/views/apimanager/apitester'), apirun: () => import('@/views/apimanager/apirun'), - apienv: () => import('@/views/apimanager/apienv') + apienv: () => import('@/views/apimanager/apienv'), + apimanager_routeList: () => import('@/views/apimanager/route_list/route_list'), } diff --git a/catch/apimanager/controller/RouteList.php b/catch/apimanager/controller/RouteList.php new file mode 100644 index 0000000..0d0139c --- /dev/null +++ b/catch/apimanager/controller/RouteList.php @@ -0,0 +1,93 @@ +routeListModel = $routeListModel; + } + + /** + * + * @time 2021/11/11 17:47 + * @return Response + */ + public function index() : Response + { + return CatchResponse::paginate($this->routeListModel->getList()); + } + + /** + * + * @time 2021/11/11 17:47 + * @param Request $request + * @return Response + */ + public function save(Request $request) : Response + { + return CatchResponse::success($this->routeListModel->storeBy($request->post())); + } + + /** + * + * @time 2021/11/11 17:47 + * @param $id + * @return Response + */ + public function read($id) : Response + { + return CatchResponse::success($this->routeListModel->findBy($id)); + } + + /** + * + * @time 2021/11/11 17:47 + * @param $id + * @param Request $request + * @return Response + */ + public function update($id, Request $request) : Response + { + return CatchResponse::success($this->routeListModel->updateBy($id, $request->post())); + } + + /** + * + * @time 2021/11/11 17:47 + * @param $id + * @return Response + */ + public function delete($id) : Response + { + return CatchResponse::success($this->routeListModel->deleteBy($id)); + } + + /** + * 同步 + * + * @time 2021/11/11 17:47 + * @return \think\response\Json + * @throws \Exception + */ + public function sync() + { + return CatchResponse::success($this->routeListModel->sync()); + } +} \ No newline at end of file diff --git a/catch/apimanager/database/migrations/20211111174836_route_list.php b/catch/apimanager/database/migrations/20211111174836_route_list.php new file mode 100644 index 0000000..c738109 --- /dev/null +++ b/catch/apimanager/database/migrations/20211111174836_route_list.php @@ -0,0 +1,48 @@ +table('route_list', ['engine' => 'InnoDB', 'collation' => 'utf8mb4_general_ci', 'comment' => '路由表' ,'id' => 'id' ,'primary_key' => ['id']]); + $table->addColumn('rule', 'string', ['limit' => 128,'null' => true,'signed' => true,'comment' => 'rule',]) + ->addColumn('route', 'string', ['limit' => 256,'null' => true,'signed' => true,'comment' => 'route',]) + ->addColumn('method', 'string', ['limit' => 16,'null' => true,'signed' => true,'comment' => 'method',]) + ->addColumn('name', 'string', ['limit' => 256,'null' => true,'signed' => true,'comment' => 'name',]) + ->addColumn('domain', 'string', ['limit' => 128,'null' => true,'signed' => true,'comment' => 'domain',]) + ->addColumn('option', 'string', ['limit' => 256,'null' => true,'signed' => true,'comment' => 'option',]) + ->addColumn('pattern', 'string', ['limit' => 128,'null' => true,'signed' => true,'comment' => 'pattern',]) + ->addColumn('title', 'string', ['limit' => 128,'null' => true,'signed' => true,'comment' => 'title',]) + ->addColumn('created_at', 'integer', ['limit' => MysqlAdapter::INT_REGULAR,'null' => false,'default' => 0,'signed' => false,'comment' => '创建时间',]) + ->addColumn('updated_at', 'integer', ['limit' => MysqlAdapter::INT_REGULAR,'null' => false,'default' => 0,'signed' => false,'comment' => '更新时间',]) + ->addColumn('deleted_at', 'integer', ['limit' => MysqlAdapter::INT_REGULAR,'null' => false,'default' => 0,'signed' => false,'comment' => '软删除字段',]) + ->addColumn('creator_id', 'integer', ['limit' => MysqlAdapter::INT_REGULAR,'null' => false,'default' => 0,'signed' => false,'comment' => '创建人ID',]) + ->addIndex(['name'], ['unique' => true,'name' => 'route_list_name']) + ->create(); + } +} diff --git a/catch/apimanager/database/seeds/ApimanagerMenusSeed.php b/catch/apimanager/database/seeds/ApimanagerMenusSeed.php index 79e06c2..ba01738 100644 --- a/catch/apimanager/database/seeds/ApimanagerMenusSeed.php +++ b/catch/apimanager/database/seeds/ApimanagerMenusSeed.php @@ -9,7 +9,6 @@ // | Author: UCToo // +---------------------------------------------------------------------- -use think\facade\Log; use think\migration\Seeder; class ApimanagerMenusSeed extends Seeder @@ -24,7 +23,6 @@ class ApimanagerMenusSeed extends Seeder */ public function run() { - Log::write("ApimanagerMenusSeed",'debug'); \catcher\Utils::importTreeData($this->getPermissions(), 'permissions', 'parent_id'); } @@ -33,7 +31,7 @@ class ApimanagerMenusSeed extends Seeder return array ( 0 => array ( - 'id' => 136, + 'id' => 143, 'permission_name' => 'API管理', 'parent_id' => 0, 'level' => '', @@ -47,97 +45,430 @@ class ApimanagerMenusSeed extends Seeder 'keepalive' => 1, 'type' => 1, 'hidden' => 1, - 'sort' => 10, - 'created_at' => 1622926698, - 'updated_at' => 1622959419, + 'sort' => 1, + 'created_at' => 1621425807, + 'updated_at' => 1621427128, + 'deleted_at' => 0, + ), + 1 => + array ( + 'id' => 144, + 'permission_name' => 'API分类', + 'parent_id' => 143, + 'level' => '', + 'route' => '/apicategory', + 'icon' => 'el-icon-s-grid', + 'module' => 'apimanager', + 'creator_id' => 1, + 'permission_mark' => 'apicategory', + 'component' => 'apicategory', + 'redirect' => '', + 'keepalive' => 1, + 'type' => 1, + 'hidden' => 1, + 'sort' => 10, + 'created_at' => 1621413029, + 'updated_at' => 1624010103, + 'deleted_at' => 0, + ), + 2 => + array ( + 'id' => 145, + 'permission_name' => 'API测试列表', + 'parent_id' => 143, + 'level' => '', + 'route' => '/apitester', + 'icon' => 'el-icon-stopwatch', + 'module' => 'apimanager', + 'creator_id' => 1, + 'permission_mark' => 'apitester', + 'component' => 'apitester', + 'redirect' => '', + 'keepalive' => 1, + 'type' => 1, + 'hidden' => 1, + 'sort' => 1, + 'created_at' => 1621479275, + 'updated_at' => 1624010086, + 'deleted_at' => 0, + ), + 3 => + array ( + 'id' => 146, + 'permission_name' => '列表', + 'parent_id' => 145, + 'level' => '', + 'route' => '', + 'icon' => '', + 'module' => 'apimanager', + 'creator_id' => 1, + 'permission_mark' => 'apitester@index', + 'component' => '', + 'redirect' => '', + 'keepalive' => 1, + 'type' => 2, + 'hidden' => 1, + 'sort' => 1, + 'created_at' => 1621778966, + 'updated_at' => 1624010086, + 'deleted_at' => 0, + ), + 4 => + array ( + 'id' => 147, + 'permission_name' => '创建', + 'parent_id' => 145, + 'level' => '', + 'route' => '', + 'icon' => '', + 'module' => 'apimanager', + 'creator_id' => 1, + 'permission_mark' => 'apitester@save', + 'component' => '', + 'redirect' => '', + 'keepalive' => 1, + 'type' => 2, + 'hidden' => 1, + 'sort' => 1, + 'created_at' => 1621779011, + 'updated_at' => 1624010086, + 'deleted_at' => 0, + ), + 5 => + array ( + 'id' => 148, + 'permission_name' => '更新', + 'parent_id' => 145, + 'level' => '', + 'route' => '', + 'icon' => '', + 'module' => 'apimanager', + 'creator_id' => 1, + 'permission_mark' => 'apitester@update', + 'component' => '', + 'redirect' => '', + 'keepalive' => 1, + 'type' => 2, + 'hidden' => 1, + 'sort' => 1, + 'created_at' => 1621779033, + 'updated_at' => 1624010086, + 'deleted_at' => 0, + ), + 6 => + array ( + 'id' => 149, + 'permission_name' => '读取', + 'parent_id' => 145, + 'level' => '', + 'route' => '', + 'icon' => '', + 'module' => 'apimanager', + 'creator_id' => 1, + 'permission_mark' => 'apitester@read', + 'component' => '', + 'redirect' => '', + 'keepalive' => 1, + 'type' => 2, + 'hidden' => 1, + 'sort' => 1, + 'created_at' => 1621779051, + 'updated_at' => 1624010086, + 'deleted_at' => 0, + ), + 7 => + array ( + 'id' => 150, + 'permission_name' => '删除', + 'parent_id' => 145, + 'level' => '', + 'route' => '', + 'icon' => '', + 'module' => 'apimanager', + 'creator_id' => 1, + 'permission_mark' => 'apitester@delete', + 'component' => '', + 'redirect' => '', + 'keepalive' => 1, + 'type' => 2, + 'hidden' => 1, + 'sort' => 1, + 'created_at' => 1621779083, + 'updated_at' => 1624010086, + 'deleted_at' => 0, + ), + 8 => + array ( + 'id' => 151, + 'permission_name' => '列表', + 'parent_id' => 144, + 'level' => '', + 'route' => '', + 'icon' => '', + 'module' => 'apimanager', + 'creator_id' => 1, + 'permission_mark' => 'apicategory@index', + 'component' => '', + 'redirect' => '', + 'keepalive' => 1, + 'type' => 2, + 'hidden' => 1, + 'sort' => 1, + 'created_at' => 1621779121, + 'updated_at' => 1624010103, + 'deleted_at' => 0, + ), + 9 => + array ( + 'id' => 152, + 'permission_name' => '创建', + 'parent_id' => 144, + 'level' => '', + 'route' => '', + 'icon' => '', + 'module' => 'apimanager', + 'creator_id' => 1, + 'permission_mark' => 'apicategory@save', + 'component' => '', + 'redirect' => '', + 'keepalive' => 1, + 'type' => 2, + 'hidden' => 1, + 'sort' => 1, + 'created_at' => 1621779137, + 'updated_at' => 1624010103, + 'deleted_at' => 0, + ), + 10 => + array ( + 'id' => 153, + 'permission_name' => '更新', + 'parent_id' => 144, + 'level' => '', + 'route' => '', + 'icon' => '', + 'module' => 'apimanager', + 'creator_id' => 1, + 'permission_mark' => 'apicategory@update', + 'component' => '', + 'redirect' => '', + 'keepalive' => 1, + 'type' => 2, + 'hidden' => 1, + 'sort' => 1, + 'created_at' => 1621779154, + 'updated_at' => 1624010103, + 'deleted_at' => 0, + ), + 11 => + array ( + 'id' => 154, + 'permission_name' => '读取', + 'parent_id' => 144, + 'level' => '', + 'route' => '', + 'icon' => '', + 'module' => 'apimanager', + 'creator_id' => 1, + 'permission_mark' => 'apicategory@read', + 'component' => '', + 'redirect' => '', + 'keepalive' => 1, + 'type' => 2, + 'hidden' => 1, + 'sort' => 1, + 'created_at' => 1621779171, + 'updated_at' => 1624010103, + 'deleted_at' => 0, + ), + 12 => + array ( + 'id' => 155, + 'permission_name' => '删除', + 'parent_id' => 144, + 'level' => '', + 'route' => '', + 'icon' => '', + 'module' => 'apimanager', + 'creator_id' => 1, + 'permission_mark' => 'apicategory@delete', + 'component' => '', + 'redirect' => '', + 'keepalive' => 1, + 'type' => 2, + 'hidden' => 1, + 'sort' => 1, + 'created_at' => 1621779186, + 'updated_at' => 1624010103, + 'deleted_at' => 0, + ), + 13 => + array ( + 'id' => 156, + 'permission_name' => 'API运行', + 'parent_id' => 143, + 'level' => '', + 'route' => '/apimanager/apirun', + 'icon' => 'el-icon-position', + 'module' => 'apimanager', + 'creator_id' => 1, + 'permission_mark' => 'apirun', + 'component' => 'apirun', + 'redirect' => '', + 'keepalive' => 1, + 'type' => 1, + 'hidden' => 2, + 'sort' => 1, + 'created_at' => 1621798022, + 'updated_at' => 1621831249, + 'deleted_at' => 0, + ), + 14 => + array ( + 'id' => 161, + 'permission_name' => 'API环境变量', + 'parent_id' => 143, + 'level' => '', + 'route' => '/apienv', + 'icon' => 'el-icon-setting', + 'module' => 'apimanager', + 'creator_id' => 1, + 'permission_mark' => 'apienv', + 'component' => 'apienv', + 'redirect' => '', + 'keepalive' => 1, + 'type' => 1, + 'hidden' => 1, + 'sort' => 1, + 'created_at' => 1622176953, + 'updated_at' => 1622177106, + 'deleted_at' => 0, + ), + 15 => + array ( + 'id' => 281, + 'permission_name' => '路由列表', + 'parent_id' => 143, + 'level' => '143', + 'route' => '/apimanager/routeList/curd', + 'icon' => 'el-icon-link', + 'module' => 'apimanager', + 'creator_id' => 1, + 'permission_mark' => 'routeList', + 'component' => 'apimanager_routeList', + 'redirect' => '', + 'keepalive' => 1, + 'type' => 1, + 'hidden' => 1, + 'sort' => 0, + 'created_at' => 1636624116, + 'updated_at' => 1636689266, + 'deleted_at' => 0, + ), + 16 => + array ( + 'id' => 282, + 'permission_name' => '列表', + 'parent_id' => 281, + 'level' => '143-281', + 'route' => '', + 'icon' => '', + 'module' => 'apimanager', + 'creator_id' => 1, + 'permission_mark' => 'routeList@index', + 'component' => '', + 'redirect' => '', + 'keepalive' => 1, + 'type' => 2, + 'hidden' => 1, + 'sort' => 1, + 'created_at' => 1636624117, + 'updated_at' => 1636689266, + 'deleted_at' => 0, + ), + 17 => + array ( + 'id' => 283, + 'permission_name' => '保存', + 'parent_id' => 281, + 'level' => '143-281', + 'route' => '', + 'icon' => '', + 'module' => 'apimanager', + 'creator_id' => 1, + 'permission_mark' => 'routeList@save', + 'component' => '', + 'redirect' => '', + 'keepalive' => 1, + 'type' => 2, + 'hidden' => 1, + 'sort' => 1, + 'created_at' => 1636624117, + 'updated_at' => 1636689266, + 'deleted_at' => 0, + ), + 18 => + array ( + 'id' => 284, + 'permission_name' => '读取', + 'parent_id' => 281, + 'level' => '143-281', + 'route' => '', + 'icon' => '', + 'module' => 'apimanager', + 'creator_id' => 1, + 'permission_mark' => 'routeList@read', + 'component' => '', + 'redirect' => '', + 'keepalive' => 1, + 'type' => 2, + 'hidden' => 1, + 'sort' => 1, + 'created_at' => 1636624118, + 'updated_at' => 1636689266, + 'deleted_at' => 0, + ), + 19 => + array ( + 'id' => 285, + 'permission_name' => '更新', + 'parent_id' => 281, + 'level' => '143-281', + 'route' => '', + 'icon' => '', + 'module' => 'apimanager', + 'creator_id' => 1, + 'permission_mark' => 'routeList@update', + 'component' => '', + 'redirect' => '', + 'keepalive' => 1, + 'type' => 2, + 'hidden' => 1, + 'sort' => 1, + 'created_at' => 1636624118, + 'updated_at' => 1636689266, + 'deleted_at' => 0, + ), + 20 => + array ( + 'id' => 286, + 'permission_name' => '删除', + 'parent_id' => 281, + 'level' => '143-281', + 'route' => '', + 'icon' => '', + 'module' => 'apimanager', + 'creator_id' => 1, + 'permission_mark' => 'routeList@delete', + 'component' => '', + 'redirect' => '', + 'keepalive' => 1, + 'type' => 2, + 'hidden' => 1, + 'sort' => 1, + 'created_at' => 1636624119, + 'updated_at' => 1636689266, 'deleted_at' => 0, - 'children' => - array ( - 0 => - array ( - 'id' => 137, - 'permission_name' => 'API分类', - 'parent_id' => 136, - 'level' => '', - 'route' => '/apicategory', - 'icon' => 'el-icon-s-grid', - 'module' => 'apimanager', - 'creator_id' => 1, - 'permission_mark' => 'apicategory', - 'component' => 'apicategory', - 'redirect' => '', - 'keepalive' => 1, - 'type' => 1, - 'hidden' => 1, - 'sort' => 10, - 'created_at' => 1622928640, - 'updated_at' => 1622959419, - 'deleted_at' => 0, - ), - 1 => - array ( - 'id' => 138, - 'permission_name' => 'API环境变量', - 'parent_id' => 136, - 'level' => '', - 'route' => '/apienv', - 'icon' => 'el-icon-setting', - 'module' => 'apimanager', - 'creator_id' => 1, - 'permission_mark' => 'apienv', - 'component' => 'apienv', - 'redirect' => '', - 'keepalive' => 1, - 'type' => 1, - 'hidden' => 1, - 'sort' => 9, - 'created_at' => 1622930243, - 'updated_at' => 1622959419, - 'deleted_at' => 0, - ), - 2 => - array ( - 'id' => 140, - 'permission_name' => 'API测试列表', - 'parent_id' => 136, - 'level' => '', - 'route' => '/apitester', - 'icon' => 'el-icon-stopwatch', - 'module' => 'apimanager', - 'creator_id' => 1, - 'permission_mark' => 'apitester', - 'component' => 'apitester', - 'redirect' => '', - 'keepalive' => 1, - 'type' => 1, - 'hidden' => 1, - 'sort' => 8, - 'created_at' => 1622951640, - 'updated_at' => 1622959419, - 'deleted_at' => 0, - ), - 3 => - array ( - 'id' => 141, - 'permission_name' => 'API运行', - 'parent_id' => 136, - 'level' => '', - 'route' => '/apimanager/apirun', - 'icon' => 'el-icon-position', - 'module' => 'apimanager', - 'creator_id' => 1, - 'permission_mark' => 'apirun', - 'component' => 'apirun', - 'redirect' => '', - 'keepalive' => 1, - 'type' => 1, - 'hidden' => 2, - 'sort' => 1, - 'created_at' => 1622951894, - 'updated_at' => 1622959419, - 'deleted_at' => 0, - ), - ), ), ); } diff --git a/catch/apimanager/model/RouteList.php b/catch/apimanager/model/RouteList.php new file mode 100644 index 0000000..3d6c426 --- /dev/null +++ b/catch/apimanager/model/RouteList.php @@ -0,0 +1,66 @@ + +// +---------------------------------------------------------------------- + +namespace catchAdmin\apimanager\model; + +use catchAdmin\apimanager\model\search\RouteListSearch; +use catcher\base\CatchModel as Model; +/** + * + * @property int $id + * @property string $rule + * @property string $route + * @property string $method + * @property string $name + * @property string $domain + * @property string $option + * @property string $pattern + * @property string $title + * @property int $created_at + * @property int $updated_at + * @property int $deleted_at + * @property int $creator_id + */ +class RouteList extends Model +{ + use RouteListSearch; + public $field = [ + // + 'id', + // + 'rule', + // + 'route', + // + 'method', + // + 'name', + // + 'domain', + // + 'option', + // + 'pattern', + // + 'title', + // 创建时间 + 'created_at', + // 更新时间 + 'updated_at', + // 软删除字段 + 'deleted_at', + // 创建人ID + 'creator_id', + ]; + + public $name = 'route_list'; + +} \ No newline at end of file diff --git a/catch/apimanager/model/search/RouteListSearch.php b/catch/apimanager/model/search/RouteListSearch.php new file mode 100644 index 0000000..1f8e35c --- /dev/null +++ b/catch/apimanager/model/search/RouteListSearch.php @@ -0,0 +1,50 @@ + +// +---------------------------------------------------------------------- + +namespace catchAdmin\apimanager\model\search; + +use catchAdmin\apimanager\model\ApiCategory; + +trait RouteListSearch +{ + public function searchRuleAttr($query, $value, $data) + { + return $query->whereLike('rule', $value); + } + + public function searchRouteAttr($query, $value, $data) + { + return $query->whereLike('route', $value); + } + + public function searchMethodAttr($query, $value, $data) + { + return $query->whereLike('method', $value); + } + + public function searchNameAttr($query, $value, $data) + { + return $query->whereLike('name', $value); + } + public function searchDomainAttr($query, $value, $data) + { + return $query->whereLike('domain', $value); + } + public function searchOptionAttr($query, $value, $data) + { + return $query->whereLike('option', $value); + } + public function searchPatternAttr($query, $value, $data) + { + return $query->whereLike('pattern', $value); + } + +} diff --git a/catch/apimanager/repository/RouteListRepository.php b/catch/apimanager/repository/RouteListRepository.php new file mode 100644 index 0000000..05c4bdd --- /dev/null +++ b/catch/apimanager/repository/RouteListRepository.php @@ -0,0 +1,66 @@ + +// +---------------------------------------------------------------------- +namespace catchAdmin\apimanager\repository; + +use catchAdmin\permissions\middleware\PermissionsMiddleware; +use catchAdmin\apimanager\model\RouteList; +use catcher\base\CatchRepository; +use catcher\exceptions\FailedException; +use think\facade\Console; +use think\facade\Log; +use think\facade\Db; + +class RouteListRepository extends CatchRepository +{ + protected $routeList; + + public function __construct(RouteList $routeList) + { + $this->routeList = $routeList; + } + + protected function model() + { + return $this->routeList; + } + + public function all() + { + $routeList = $this->routeList->select(); + + return $routeList->toArray(); + } + + /** + * 同步 + * + * @time 2020年06月26日 + * @throws \Exception + * @return bool + */ + public function sync() + { + DB::table('route_list')->delete(true); + Console::call('route:list', ['-m']); //没用,也不是从命令生成的route_list文件读的数据,就是想执行一下命令 + $routeList = app()->route->getRuleList(); + $rows = []; + foreach ($routeList as $item) { + $item['route'] = $item['route'] instanceof \Closure ? '' : $item['route']; + $item['option'] = json_encode($item['option']); + $item['pattern'] = json_encode($item['pattern']); + $rows[] = $item; + } + $res = $this->routeList->saveAll($rows); + + return true; + } + +} \ No newline at end of file diff --git a/catch/apimanager/route.php b/catch/apimanager/route.php index 5729c6d..1c0ee9d 100644 --- a/catch/apimanager/route.php +++ b/catch/apimanager/route.php @@ -23,4 +23,7 @@ $router->group(function () use ($router){ $router->get('apiTesterUserenv/selectAPIenv/', '\catchAdmin\apimanager\controller\ApiTesterUserenv@selectAPIenv'); // apiTesterLog路由 $router->resource('apiTesterLog', '\catchAdmin\apimanager\controller\ApiTesterLog'); + // routeList 路由 + $router->resource('routeList', catchAdmin\apimanager\controller\RouteList::class); + $router->post('apimanager/routelist/sync', 'catchAdmin\apimanager\controller\RouteList@sync'); })->middleware('auth'); \ No newline at end of file diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..5d9bc2b --- /dev/null +++ b/public/index.html @@ -0,0 +1,10 @@ + + + + + catchadmin app server + + +catchadmin app server V2.0.0 + + \ No newline at end of file