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 @@
-
-
+
+
搜索
-
+
重置
-
+
新增
-
+
-
-
+
+
- 切换
-
-
+ 切换
+
+
+ background
+ @size-change="handleSizeChange"
+ @current-change="handleCurrentChange"
+ :current-page="paginate.current"
+ hide-on-single-page
+ :page-sizes="paginate.sizes"
+ :page-size="paginate.limit"
+ :layout="paginate.layout"
+ :total="paginate.total"/>
-
-
-
-
+
+
+
+
-
+
+
-
- {{ row.$cellEdit ? "自定义保存" : "自定义修改" }}
-
+ ref="crudJSON"
+ :option="tableOption"
+ :data="jsonTableData"
+ @row-update="addUpdateJSON"
+ @row-del="rowDelJSON"
+ @row-save="rowSaveJSON"
+ >
+
+ {{ row.$cellEdit ? "自定义保存" : "自定义修改" }}
+
@@ -134,137 +77,141 @@
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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 查询
+
+
+
+
+
+
+
+
+ 刷新
+
+
+ 同步至数据库
+
+ 批量删除
+ 清除所有过滤器
+
+
+
+
+
+
+
+
+
+ 配置表格
+ 移除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ API测试
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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