From f852b22d07d220d6526a9173765e21f39160de4e Mon Sep 17 00:00:00 2001 From: "Ray.Hao" <1490493387@qq.com> Date: Wed, 30 Sep 2026 19:00:47 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E7=A7=BB=E9=99=A4=E6=97=A7?= =?UTF-8?q?=E7=89=88=E5=A4=A7=E5=B1=8F=E7=A4=BA=E4=BE=8B=E5=B9=B6=E6=8E=A5?= =?UTF-8?q?=E5=85=A5=E6=96=B0=E7=89=88=E6=95=B0=E6=8D=AE=E5=A4=A7=E5=B1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 删除 demo 下大屏与路由面板示例;新增数据大屏页面;部署脚本纳入版本库 --- .env.production | 2 +- .gitignore | 6 +- deploy.example.mjs | 9 +- deploy.mjs | 31 + mock/dict.mock.ts | 2 +- mock/menu.mock.ts | 4343 ++- src/components/AppLink/index.vue | 3 + src/components/CopyButton/index.vue | 3 + src/components/Crud/CrudModal.vue | 3 + src/components/DictSelect/index.vue | 3 + src/components/DictTag/index.vue | 3 + src/components/ECharts/index.vue | 3 + src/components/Hamburger/index.vue | 6 + src/components/IconSelect/index.vue | 6 + src/components/InputTag/index.vue | 3 + src/components/LangSelect/index.vue | 3 + src/components/NoticeDetailDialog/index.vue | 3 + src/components/OperationColumn/index.vue | 3 + src/components/Pagination/index.vue | 6 + src/components/SectionTitle/index.vue | 3 + src/components/TenantSwitcher/index.vue | 3 + src/components/TextScroll/index.vue | 6 + src/components/Upload/MultiImageUpload.vue | 5 +- src/components/Upload/SingleImageUpload.vue | 5 +- src/components/WangEditor/index.vue | 3 + src/layouts/components/LayoutSidebar.vue | 4 + src/layouts/components/LayoutSidebarItem.vue | 3 + src/router/index.ts | 15 + src/stores/permission.ts | 64 +- src/styles/index.scss | 1 - src/styles/screen.scss | 196 - src/utils/index.ts | 2 +- src/utils/route.ts | 13 + .../codegen/components/BasicConfigStep.vue | 6 + .../codegen/components/FieldConfigStep.vue | 5 +- .../codegen/components/GeneratorDrawer.vue | 9 + src/views/codegen/components/PreviewStep.vue | 9 + src/views/codegen/components/TableList.vue | 6 + .../codegen/components/WriteLocalDialog.vue | 6 + .../data-screen/assets/chinaGeoJSON.json | 27252 ++++++++++++++++ src/views/data-screen/assets/fonts/DIN.woff | Bin 0 -> 14776 bytes .../data-screen/assets/fonts/MetroDF.woff | Bin 0 -> 30008 bytes .../assets/fonts/YouSheBiaoTiHei.woff | Bin 0 -> 864076 bytes src/views/data-screen/assets/fonts/font.scss | 14 + src/views/data-screen/assets/images/bg.webp | Bin 0 -> 828526 bytes .../data-screen/assets/images/header-bg.webp | Bin 0 -> 5776 bytes src/views/data-screen/assets/images/line.webp | Bin 0 -> 1490 bytes src/views/data-screen/assets/images/ray.webp | Bin 0 -> 42262 bytes .../data-screen/assets/styles/index.scss | 128 + .../data-screen/components/base-chart.vue | 184 + .../data-screen/components/battery-health.vue | 90 + .../data-screen/components/center-charts.vue | 13 + .../data-screen/components/cephalosome.vue | 35 + .../components/electricity-usage-mode.vue | 92 + .../data-screen/components/left-charts.vue | 15 + .../data-screen/components/map-chart.vue | 97 + .../components/mileage-energy-consumption.vue | 203 + .../components/real-time-alarm.vue | 85 + .../components/real-time-operation.vue | 105 + .../components/real-time-status.vue | 134 + .../components/regional-operation.vue | 114 + .../data-screen/components/right-charts.vue | 15 + .../data-screen/components/text-carousel.vue | 85 + .../components/vehicle-charging-chart.vue | 132 + .../components/vehicle-distribution.vue | 118 + .../data-screen/composables/useKeepTicking.ts | 52 + src/views/data-screen/index.vue | 76 + src/views/data-screen/utils/seriesData.ts | 421 + src/views/data-screen/utils/time.ts | 56 + src/views/demo/component/dictionary.vue | 4 + src/views/demo/component/icon-select.vue | 5 +- src/views/demo/component/icons.vue | 2 +- .../demo/component/table-select/index.vue | 4 + src/views/demo/component/upload.vue | 4 + src/views/demo/component/wang-editor.vue | 4 + src/views/demo/route/cache/index.vue | 8 - .../demo/route/components/RouteInfoPanel.vue | 81 - .../level-two/level-three-a/index.vue | 7 - .../level-two/level-three-b/index.vue | 7 - src/views/demo/route/navigate/edit.vue | 7 - src/views/demo/route/navigate/index.vue | 7 - src/views/demo/route/route-param.vue | 128 +- .../demo/screen/components/ScreenHeader.vue | 75 - src/views/demo/screen/device/index.vue | 595 - src/views/demo/screen/ecommerce/index.vue | 591 - src/views/demo/screen/system/index.vue | 720 - src/views/demo/screen/utils.ts | 107 - .../demo/table/auto-operation-column.vue | 4 + src/views/demo/table/crud-single.vue | 2 +- src/views/demo/table/crud/config2/edit.ts | 1 - src/views/demo/table/crud/index.vue | 4 + src/views/demo/table/vxe-table/index.vue | 8 +- .../dynamic-form/components/FormRenderer.vue | 3 + .../dynamic-form/components/PublishDialog.vue | 3 + .../components/publish/EntryConfigStep.vue | 6 + .../components/publish/MethodStep.vue | 3 + .../components/publish/PublishResultStep.vue | 3 + src/views/dynamic-form/index.vue | 28 +- src/views/error/components/ErrorPage.vue | 3 + src/views/login/components/QrCodeLogin.vue | 3 + src/views/login/components/Register.vue | 3 + src/views/login/components/ResetPwd.vue | 3 + .../system/dict/components/DictItemPanel.vue | 3 + src/views/system/menu/index.vue | 18 +- .../system/user/components/UserDeptTree.vue | 6 + .../user/components/UserImportDialog.vue | 3 + .../workflow/components/BpmnDesigner.vue | 6 + .../components/InstanceDetailDrawer.vue | 3 + .../workflow/components/ProcessStages.vue | 3 + 109 files changed, 33216 insertions(+), 3580 deletions(-) create mode 100644 deploy.mjs delete mode 100644 src/styles/screen.scss create mode 100644 src/views/data-screen/assets/chinaGeoJSON.json create mode 100644 src/views/data-screen/assets/fonts/DIN.woff create mode 100644 src/views/data-screen/assets/fonts/MetroDF.woff create mode 100644 src/views/data-screen/assets/fonts/YouSheBiaoTiHei.woff create mode 100644 src/views/data-screen/assets/fonts/font.scss create mode 100644 src/views/data-screen/assets/images/bg.webp create mode 100644 src/views/data-screen/assets/images/header-bg.webp create mode 100644 src/views/data-screen/assets/images/line.webp create mode 100644 src/views/data-screen/assets/images/ray.webp create mode 100644 src/views/data-screen/assets/styles/index.scss create mode 100644 src/views/data-screen/components/base-chart.vue create mode 100644 src/views/data-screen/components/battery-health.vue create mode 100644 src/views/data-screen/components/center-charts.vue create mode 100644 src/views/data-screen/components/cephalosome.vue create mode 100644 src/views/data-screen/components/electricity-usage-mode.vue create mode 100644 src/views/data-screen/components/left-charts.vue create mode 100644 src/views/data-screen/components/map-chart.vue create mode 100644 src/views/data-screen/components/mileage-energy-consumption.vue create mode 100644 src/views/data-screen/components/real-time-alarm.vue create mode 100644 src/views/data-screen/components/real-time-operation.vue create mode 100644 src/views/data-screen/components/real-time-status.vue create mode 100644 src/views/data-screen/components/regional-operation.vue create mode 100644 src/views/data-screen/components/right-charts.vue create mode 100644 src/views/data-screen/components/text-carousel.vue create mode 100644 src/views/data-screen/components/vehicle-charging-chart.vue create mode 100644 src/views/data-screen/components/vehicle-distribution.vue create mode 100644 src/views/data-screen/composables/useKeepTicking.ts create mode 100644 src/views/data-screen/index.vue create mode 100644 src/views/data-screen/utils/seriesData.ts create mode 100644 src/views/data-screen/utils/time.ts delete mode 100644 src/views/demo/route/components/RouteInfoPanel.vue delete mode 100644 src/views/demo/screen/components/ScreenHeader.vue delete mode 100644 src/views/demo/screen/device/index.vue delete mode 100644 src/views/demo/screen/ecommerce/index.vue delete mode 100644 src/views/demo/screen/system/index.vue delete mode 100644 src/views/demo/screen/utils.ts diff --git a/.env.production b/.env.production index 2b18b8cf..648bf26b 100644 --- a/.env.production +++ b/.env.production @@ -8,4 +8,4 @@ VITE_APP_TITLE=vue3-element-admin VITE_TENANT_ENABLED=false # AI 辅助功能开关(true:开启 false:关闭,缺省关闭) -# VITE_AI_ENABLED=true +VITE_AI_ENABLED=true diff --git a/.gitignore b/.gitignore index bda38629..494f1617 100644 --- a/.gitignore +++ b/.gitignore @@ -34,8 +34,4 @@ package-lock.json yarn.lock # Local history -.history - -# 本地部署脚本(含服务器地址与账号) -deploy.mjs -deploy.config.mjs +.history \ No newline at end of file diff --git a/deploy.example.mjs b/deploy.example.mjs index b4aa1a8e..9e898789 100644 --- a/deploy.example.mjs +++ b/deploy.example.mjs @@ -1,9 +1,12 @@ /* eslint-disable no-console */ /** - * 构建并上传到服务器 + * 部署模板:构建并上传到服务器 * - * 服务器信息取自 deploy.config.mjs(已加入忽略,不会入库),缺该文件时回落到 - * 环境变量 DEPLOY_HOST / DEPLOY_USER / DEPLOY_PORT / DEPLOY_TARGET + * 用法:复制本文件为 deploy.mjs(已加入忽略,不入库),再创建 deploy.config.mjs + * 填写服务器信息,然后执行 pnpm run deploy + * + * 服务器信息取自 deploy.config.mjs,缺该文件时回落到环境变量 + * DEPLOY_HOST / DEPLOY_USER / DEPLOY_PORT / DEPLOY_TARGET * * 前置:SSH 免密登录(只需一次) * 1. 没有 %USERPROFILE%\.ssh\id_rsa 就先 ssh-keygen -t rsa 回车到底 diff --git a/deploy.mjs b/deploy.mjs new file mode 100644 index 00000000..255fc53e --- /dev/null +++ b/deploy.mjs @@ -0,0 +1,31 @@ +/* eslint-disable no-console */ +/** + * 部署管理后台到服务器 | 用法:pnpm run deploy + * + * 前置:SSH 免密登录(只需一次) + * 1. 如果 %USERPROFILE%\.ssh\id_rsa 已存在跳过,否则 ssh-keygen -t rsa 回车到底 + * + * 2. 拷贝公钥到服务器(会提示输一次服务器密码): + * Windows: type %USERPROFILE%\.ssh\id_rsa.pub | ssh root@server "cat >> ~/.ssh/authorized_keys" + * Mac: ssh-copy-id root@server + * + * 3. ssh root@server 输完不弹密码直接连上即成功 + */ +import { execSync } from "node:child_process"; + +const HOST = "www.youlai.tech"; // 服务器 IP,改为你的 +const USER = "root"; // SSH 用户名,改为你的 +const PORT = 1010; // SSH 端口,改为你的 +const TARGET = "/mnt/nginx/html/vue"; // 部署目录,改为你的 +// ========================================================= + +console.log("构建中..."); +execSync("pnpm build-only", { stdio: "inherit" }); + +console.log(`部署 → ${USER}@${HOST}:${TARGET}`); +execSync(`scp -o StrictHostKeyChecking=no -P ${PORT} -r "dist/." "${USER}@${HOST}:${TARGET}/"`, { + stdio: "inherit", + shell: true, +}); + +console.log("部署完成"); diff --git a/mock/dict.mock.ts b/mock/dict.mock.ts index 999f92a3..fd404e00 100644 --- a/mock/dict.mock.ts +++ b/mock/dict.mock.ts @@ -290,7 +290,7 @@ const dictMap: Record = { }, }; -// 字典项数据:tagType 用全称,与 sql/youlai-admin.sql 种子数据保持一致 +// 字典项数据:tagType 取全称(primary、success 等),对应 sys_dict_item.tag_type const dictItemList: Record = { gender: [ { diff --git a/mock/menu.mock.ts b/mock/menu.mock.ts index 59ca1e77..ef3cfc21 100644 --- a/mock/menu.mock.ts +++ b/mock/menu.mock.ts @@ -116,105 +116,260 @@ export default defineMock([ }, ], }, + { + path: "/data-screen", + component: null, + name: null, + meta: { + title: "数据大屏", + icon: "el-icon-Monitor", + hidden: false, + params: null, + externalUrl: "/data-screen", + }, + }, { path: "/codegen", - component: "Layout", - name: "/codegen", + component: "codegen/index", + name: "Codegen", meta: { - title: "系统工具", - icon: "menu", + title: "代码生成", + icon: "code", hidden: false, + keepAlive: true, params: null, }, - children: [ - { - path: "codegen", - component: "codegen/index", - name: "Codegen", - meta: { - title: "代码生成", - icon: "code", - hidden: false, - keepAlive: true, - params: null, - }, - }, - ], }, { - path: "/api", + path: "/component", component: "Layout", - name: "/api", + redirect: "/component/basic/icon-demo", + name: "/component", meta: { - title: "接口文档", - icon: "api", + title: "通用组件", + icon: "el-icon-SetUp", hidden: false, params: null, }, children: [ { - path: "apifox", - component: "iframe", - name: "Apifox", + path: "basic", + component: "Layout", + redirect: "", + name: "basic", meta: { - title: "Apifox", - type: "E", - icon: "api", + title: "基础组件", + icon: "el-icon-Brush", hidden: false, - keepAlive: true, - externalUrl: - "https://www.apifox.cn/apidoc/shared-195e783f-4d85-4235-a038-eec696de4ea5", - params: null, - }, - }, - ], - }, - { - path: "/doc", - component: "Layout", - redirect: "/doc/internal-doc", - name: "/doc", - meta: { - title: "平台文档", - icon: "document", - hidden: false, - params: null, - }, - children: [ - { - path: "internal-doc", - component: "iframe", - name: "InternalDoc", - meta: { - title: "平台文档(内嵌)", - type: "E", - icon: "document", - hidden: false, - keepAlive: true, - externalUrl: "https://juejin.cn/post/7228990409909108793", params: null, }, + children: [ + { + path: "icon-demo", + component: "demo/component/icons", + redirect: "", + name: "IconDemo", + meta: { + title: "Icons", + icon: "el-icon-Notification", + hidden: false, + keepAlive: true, + params: null, + }, + }, + { + path: "drag", + component: "demo/component/drag", + redirect: "", + name: "Drag", + meta: { + title: "拖拽组件", + icon: "", + hidden: false, + params: null, + }, + }, + { + path: "text-scroll", + component: "demo/component/text-scroll", + redirect: "", + name: "TextScroll", + meta: { + title: "滚动文本", + icon: "", + hidden: false, + params: null, + }, + }, + { + path: "dict-sync", + component: "demo/component/dict-sync", + redirect: "", + name: "DictSync", + meta: { + title: "字典实时同步", + icon: "", + hidden: false, + params: null, + }, + }, + ], }, { - path: "https://juejin.cn/post/7228990409909108793", + path: "form", + component: "Layout", + redirect: "", + name: "form", meta: { - title: "平台文档(外链)", - type: "E", - icon: "link", + title: "表单组件", + icon: "el-icon-EditPen", hidden: false, - externalUrl: "https://juejin.cn/post/7228990409909108793", params: null, }, + children: [ + { + path: "wang-editor", + component: "demo/component/wang-editor", + redirect: "", + name: "WangEditor", + meta: { + title: "富文本编辑器", + icon: "", + hidden: false, + keepAlive: true, + params: null, + }, + }, + { + path: "upload", + component: "demo/component/upload", + redirect: "", + name: "Upload", + meta: { + title: "图片上传", + icon: "", + hidden: false, + keepAlive: true, + params: null, + }, + }, + { + path: "icon-select", + component: "demo/component/icon-select", + redirect: "", + name: "DemoIconSelect", + meta: { + title: "图标选择器", + icon: "", + hidden: false, + keepAlive: true, + params: null, + }, + }, + { + path: "dict-demo", + component: "demo/component/dictionary", + redirect: "", + name: "DictDemo", + meta: { + title: "字典组件", + icon: "", + hidden: false, + keepAlive: true, + params: null, + }, + }, + { + path: "table-select", + component: "demo/component/table-select/index", + redirect: "", + name: "TableSelect", + meta: { + title: "列表选择器", + icon: "", + hidden: false, + keepAlive: true, + params: null, + }, + }, + ], + }, + { + path: "table", + component: "Layout", + redirect: "", + name: "table", + meta: { + title: "表格组件", + icon: "el-icon-Grid", + hidden: false, + params: null, + }, + children: [ + { + path: "crud", + component: "demo/table/crud/index", + redirect: "", + name: "Crud", + meta: { + title: "增删改查", + icon: "", + hidden: false, + keepAlive: true, + params: null, + }, + }, + { + path: "crud-single", + component: "demo/table/crud-single", + redirect: "", + name: "CrudSingle", + meta: { + title: "CRUD单文件", + icon: "el-icon-Reading", + hidden: false, + keepAlive: true, + params: null, + }, + }, + { + path: "vxe-table", + component: "demo/table/vxe-table/index", + redirect: "", + name: "VxeTable", + meta: { + title: "VxeTable", + icon: "el-icon-MagicStick", + hidden: false, + keepAlive: true, + params: null, + }, + }, + { + path: "operation-column", + component: "demo/table/auto-operation-column", + redirect: "", + name: "AutoOperationColumn", + meta: { + title: "自适应表格操作列", + icon: "", + hidden: false, + keepAlive: true, + params: null, + }, + }, + ], }, ], }, { path: "/multi-level", component: "Layout", - name: "/multiLevel", + redirect: "/multi-level/level-one/level-two/level-three-a", + name: "/multi-level", meta: { title: "多级菜单", - icon: "cascader", + icon: "el-icon-Guide", hidden: false, params: null, }, @@ -222,7 +377,7 @@ export default defineMock([ { path: "level-one", component: "Layout", - name: "MultiLevelLevelOne", + name: "level-one", meta: { title: "一级菜单", icon: "", @@ -233,7 +388,7 @@ export default defineMock([ { path: "level-two", component: "Layout", - name: "MultiLevelLevelTwo", + name: "level-two", meta: { title: "二级菜单", icon: "", @@ -244,6 +399,7 @@ export default defineMock([ { path: "level-three-a", component: "demo/route/multi-level/level-one/level-two/level-three-a/index", + redirect: "", name: "MultiLevelLevelThreeA", meta: { title: "三级菜单 A", @@ -256,6 +412,7 @@ export default defineMock([ { path: "level-three-b", component: "demo/route/multi-level/level-one/level-two/level-three-b/index", + redirect: "", name: "MultiLevelLevelThreeB", meta: { title: "三级菜单 B", @@ -272,214 +429,247 @@ export default defineMock([ ], }, { - path: "/component", + path: "/route-example", component: "Layout", - name: "/component", + redirect: "/route-example/route-param", + name: "/route-example", meta: { - title: "组件封装", - icon: "menu", + title: "路由示例", + icon: "el-icon-Share", hidden: false, params: null, }, children: [ { - path: "crud", - component: "demo/table/crud/index", - name: "Crud", - meta: { - title: "增删改查", - icon: "", - hidden: false, - keepAlive: true, - params: null, - }, - }, - { - path: "table-select", - component: "demo/component/table-select/index", - name: "TableSelect", - meta: { - title: "列表选择器", - icon: "", - hidden: false, - keepAlive: true, - params: null, - }, - }, - { - path: "wang-editor", - component: "demo/component/wang-editor", - name: "WangEditor", - meta: { - title: "富文本编辑器", - icon: "", - hidden: false, - keepAlive: true, - params: null, - }, - }, - { - path: "upload", - component: "demo/component/upload", - name: "Upload", - meta: { - title: "图片上传", - icon: "", - hidden: false, - keepAlive: true, - params: null, - }, - }, - { - path: "dict-demo", - component: "demo/component/dictionary", - name: "DictDemo", - meta: { - title: "字典组件", - icon: "", - hidden: false, - keepAlive: true, - params: null, - }, - }, - { - path: "icon-select", - component: "demo/component/icon-select", - name: "IconSelect", - meta: { - title: "图标选择器", - icon: "", - hidden: false, - keepAlive: true, - params: null, - }, - }, - { - path: "drag", - component: "demo/component/drag", - name: "Drag", - meta: { - title: "拖拽组件", - icon: "", - hidden: false, - keepAlive: true, - params: null, - }, - }, - { - path: "text-scroll", - component: "demo/component/text-scroll", - name: "TextScroll", - meta: { - title: "滚动文本", - icon: "", - hidden: false, - keepAlive: true, - params: null, - }, - }, - ], - }, - { - path: "/route-param", - component: "Layout", - name: "/routeParam", - meta: { - title: "路由参数", - icon: "el-icon-ElementPlus", - hidden: false, - params: null, - }, - children: [ - { - path: "route-param-type1", + path: "route-param", component: "demo/route/route-param", - name: "RouteParamType1", + name: "RouteParam", meta: { - title: "参数(type=1)", + title: "路由参数", icon: "el-icon-Star", hidden: false, keepAlive: true, - params: { - type: "1", - }, + params: null, }, }, { - path: "route-param-type2", - component: "demo/route/route-param", - name: "RouteParamType2", + path: "cache", + component: "demo/route/cache/index", + name: "RouteCache", meta: { - title: "参数(type=2)", - icon: "el-icon-StarFilled", + title: "页面缓存", + icon: "el-icon-Stopwatch", hidden: false, keepAlive: true, - params: { - type: "2", - }, + params: null, + }, + }, + { + path: "navigate", + component: "demo/route/navigate/index", + name: "RouteNavigate", + meta: { + title: "页面跳转", + icon: "el-icon-Position", + hidden: false, + keepAlive: true, + params: null, + }, + }, + { + path: "iframe", + component: "iframe", + name: null, + meta: { + title: "内嵌页面", + icon: "el-icon-Document", + hidden: false, + keepAlive: true, + params: null, + externalUrl: + "https://www.apifox.cn/apidoc/shared-195e783f-4d85-4235-a038-eec696de4ea5", + }, + }, + { + path: "https://juejin.cn/post/7228990409909108793", + component: null, + name: null, + meta: { + title: "外部链接", + icon: "el-icon-Link", + hidden: false, + params: null, + externalUrl: "https://juejin.cn/post/7228990409909108793", }, }, ], }, { - path: "/function", + path: "/dynamic-form", component: "Layout", - name: "/function", + redirect: "/dynamic-form/definition", + name: "/dynamic-form", meta: { - title: "功能演示", - icon: "menu", + title: "动态表单", + icon: "el-icon-Document", hidden: false, - params: null, + params: JSON.parse('{"badge":"NEW"}'), }, children: [ { - path: "icon-demo", - component: "demo/component/icons", - name: "IconDemo", + path: "definition", + component: "dynamic-form/index", + name: "FormDefinition", meta: { - title: "Icons", - icon: "el-icon-Notification", + title: "表单列表", + icon: "el-icon-List", hidden: false, keepAlive: true, params: null, }, }, { - path: "dict-sync", - component: "demo/component/dict-sync", - name: "DictSync", + path: "data", + component: "dynamic-form/data", + name: "FormData", meta: { - title: "字典实时同步", + title: "表单数据", icon: "", - hidden: false, + hidden: true, keepAlive: true, params: null, }, }, { - path: "vxe-table", - component: "demo/table/vxe-table/index", - name: "VxeTable", + path: "designer", + component: "dynamic-form/designer", + name: "FormDesigner", meta: { - title: "VxeTable", - icon: "el-icon-MagicStick", - hidden: false, + title: "表单设计器", + icon: "", + hidden: true, keepAlive: true, params: null, }, }, { - path: "crud-single", - component: "demo/table/crud-single", - name: "CrudSingle", + path: "preview", + component: "dynamic-form/preview", + name: "FormPreview", meta: { - title: "CRUD单文件", - icon: "el-icon-Reading", - hidden: false, + title: "表单预览", + icon: "", + hidden: true, keepAlive: true, params: null, }, }, + { + path: "sample", + component: "Layout", + redirect: "/dynamic-form/sample/open_source_survey", + name: "sample", + meta: { + title: "表单示例", + icon: "el-icon-Files", + hidden: false, + params: null, + }, + children: [ + { + path: "open_source_survey", + component: "dynamic-form/render", + name: "FormRenderOpenSourceSurvey", + meta: { + title: "开源项目问卷收集", + icon: "el-icon-Tickets", + hidden: false, + params: JSON.parse('{"formKey":"open_source_survey"}'), + }, + }, + { + path: "activity_registration", + component: "dynamic-form/render", + name: "FormRenderActivityRegistration", + meta: { + title: "活动报名表", + icon: "el-icon-Calendar", + hidden: false, + params: JSON.parse('{"formKey":"activity_registration"}'), + }, + }, + { + path: "feedback", + component: "dynamic-form/render", + name: "FormRenderFeedback", + meta: { + title: "意见反馈", + icon: "el-icon-ChatLineRound", + hidden: false, + params: JSON.parse('{"formKey":"feedback"}'), + }, + }, + ], + }, + ], + }, + { + path: "/workflow", + component: "Layout", + redirect: "/workflow/launch", + name: "/workflow", + meta: { + title: "工作流", + icon: "el-icon-Connection", + hidden: false, + params: JSON.parse('{"badge":"NEW"}'), + }, + children: [ + { + path: "model", + component: "workflow/model", + name: "WorkflowModel", + meta: { + title: "流程设计", + icon: "el-icon-Coin", + hidden: false, + params: null, + }, + }, + { + path: "designer", + component: "workflow/designer", + name: "WorkflowDesigner", + meta: { + title: "流程设计器", + icon: "", + hidden: true, + keepAlive: true, + params: null, + }, + }, + { + path: "launch", + component: "workflow/launch", + name: "WorkflowLaunch", + meta: { + title: "发起流程", + icon: "el-icon-Promotion", + hidden: false, + params: null, + }, + }, + { + path: "task", + component: "workflow/task/index", + name: "WorkflowTask", + meta: { + title: "审批中心", + icon: "el-icon-Stamp", + hidden: false, + params: null, + }, + }, ], }, ], @@ -502,6 +692,7 @@ export default defineMock([ routeName: "", routePath: "/system", component: "Layout", + externalUrl: null, sort: 1, visible: 1, icon: "system", @@ -509,28 +700,31 @@ export default defineMock([ perm: null, children: [ { - id: "2", + id: "101", parentId: "1", name: "用户管理", type: "M", routeName: "User", routePath: "user", component: "system/user/index", + externalUrl: null, sort: 1, visible: 1, icon: "el-icon-User", redirect: null, perm: null, + keepAlive: 1, children: [ { - id: "105", - parentId: "2", + id: "10101", + parentId: "101", name: "用户查询", type: "B", routeName: null, routePath: "", component: null, - sort: 0, + externalUrl: null, + sort: 1, visible: 1, icon: "", redirect: null, @@ -538,74 +732,79 @@ export default defineMock([ children: [], }, { - id: "31", - parentId: "2", + id: "10102", + parentId: "101", name: "用户新增", type: "B", routeName: null, routePath: "", component: null, - sort: 1, + externalUrl: null, + sort: 2, visible: 1, icon: "", - redirect: "", + redirect: null, perm: "sys:user:create", children: [], }, { - id: "32", - parentId: "2", + id: "10103", + parentId: "101", name: "用户编辑", type: "B", routeName: null, routePath: "", component: null, - sort: 2, + externalUrl: null, + sort: 3, visible: 1, icon: "", - redirect: "", + redirect: null, perm: "sys:user:update", children: [], }, { - id: "33", - parentId: "2", + id: "10104", + parentId: "101", name: "用户删除", type: "B", routeName: null, routePath: "", component: null, - sort: 3, + externalUrl: null, + sort: 4, visible: 1, icon: "", - redirect: "", + redirect: null, perm: "sys:user:delete", children: [], }, { - id: "88", - parentId: "2", + id: "10105", + parentId: "101", name: "重置密码", type: "B", routeName: null, routePath: "", component: null, - sort: 4, + externalUrl: null, + sort: 5, visible: 1, icon: "", redirect: null, - perm: "sys:user:password:reset", + perm: "sys:user:reset-password", children: [], }, { - id: "106", - parentId: "2", + id: "10106", + parentId: "101", name: "用户导入", type: "B", routeName: null, routePath: "", component: null, - sort: 5, + externalUrl: null, + sort: 6, visible: 1, icon: "", redirect: null, @@ -613,14 +812,15 @@ export default defineMock([ children: [], }, { - id: "107", - parentId: "2", + id: "10107", + parentId: "101", name: "用户导出", type: "B", routeName: null, routePath: "", component: null, - sort: 6, + externalUrl: null, + sort: 7, visible: 1, icon: "", redirect: null, @@ -630,28 +830,47 @@ export default defineMock([ ], }, { - id: "3", + id: "102", parentId: "1", name: "角色管理", type: "M", routeName: "Role", routePath: "role", component: "system/role/index", + externalUrl: null, sort: 2, visible: 1, icon: "role", redirect: null, perm: null, + keepAlive: 1, children: [ { - id: "70", - parentId: "3", + id: "10201", + parentId: "102", + name: "角色查询", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + sort: 1, + visible: 1, + icon: "", + redirect: null, + perm: "sys:role:list", + children: [], + }, + { + id: "10202", + parentId: "102", name: "角色新增", type: "B", routeName: null, routePath: "", component: null, - sort: 1, + externalUrl: null, + sort: 2, visible: 1, icon: "", redirect: null, @@ -659,14 +878,15 @@ export default defineMock([ children: [], }, { - id: "71", - parentId: "3", + id: "10203", + parentId: "102", name: "角色编辑", type: "B", routeName: null, routePath: "", component: null, - sort: 2, + externalUrl: null, + sort: 3, visible: 1, icon: "", redirect: null, @@ -674,45 +894,81 @@ export default defineMock([ children: [], }, { - id: "72", - parentId: "3", + id: "10204", + parentId: "102", name: "角色删除", type: "B", routeName: null, routePath: "", component: null, - sort: 3, + externalUrl: null, + sort: 4, visible: 1, icon: "", redirect: null, perm: "sys:role:delete", children: [], }, + { + id: "10205", + parentId: "102", + name: "角色分配权限", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + sort: 5, + visible: 1, + icon: "", + redirect: null, + perm: "sys:role:assign", + children: [], + }, ], }, { - id: "4", + id: "103", parentId: "1", name: "菜单管理", type: "M", - routeName: "Menu", + routeName: "SysMenu", routePath: "menu", component: "system/menu/index", + externalUrl: null, sort: 3, visible: 1, icon: "menu", redirect: null, perm: null, + keepAlive: 1, children: [ { - id: "73", - parentId: "4", + id: "10301", + parentId: "103", + name: "菜单查询", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + sort: 1, + visible: 1, + icon: "", + redirect: null, + perm: "sys:menu:list", + children: [], + }, + { + id: "10302", + parentId: "103", name: "菜单新增", type: "B", routeName: null, routePath: "", component: null, - sort: 1, + externalUrl: null, + sort: 2, visible: 1, icon: "", redirect: null, @@ -720,13 +976,14 @@ export default defineMock([ children: [], }, { - id: "74", - parentId: "4", + id: "10303", + parentId: "103", name: "菜单编辑", type: "B", routeName: null, routePath: "", component: null, + externalUrl: null, sort: 3, visible: 1, icon: "", @@ -735,14 +992,15 @@ export default defineMock([ children: [], }, { - id: "75", - parentId: "4", + id: "10304", + parentId: "103", name: "菜单删除", type: "B", routeName: null, routePath: "", component: null, - sort: 3, + externalUrl: null, + sort: 4, visible: 1, icon: "", redirect: null, @@ -752,28 +1010,47 @@ export default defineMock([ ], }, { - id: "5", + id: "104", parentId: "1", name: "部门管理", type: "M", routeName: "Dept", routePath: "dept", component: "system/dept/index", + externalUrl: null, sort: 4, visible: 1, icon: "tree", redirect: null, perm: null, + keepAlive: 1, children: [ { - id: "76", - parentId: "5", + id: "10401", + parentId: "104", + name: "部门查询", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + sort: 1, + visible: 1, + icon: "", + redirect: null, + perm: "sys:dept:list", + children: [], + }, + { + id: "10402", + parentId: "104", name: "部门新增", type: "B", routeName: null, routePath: "", component: null, - sort: 1, + externalUrl: null, + sort: 2, visible: 1, icon: "", redirect: null, @@ -781,14 +1058,15 @@ export default defineMock([ children: [], }, { - id: "77", - parentId: "5", + id: "10403", + parentId: "104", name: "部门编辑", type: "B", routeName: null, routePath: "", component: null, - sort: 2, + externalUrl: null, + sort: 3, visible: 1, icon: "", redirect: null, @@ -796,14 +1074,15 @@ export default defineMock([ children: [], }, { - id: "78", - parentId: "5", + id: "10404", + parentId: "104", name: "部门删除", type: "B", routeName: null, routePath: "", component: null, - sort: 3, + externalUrl: null, + sort: 4, visible: 1, icon: "", redirect: null, @@ -813,28 +1092,47 @@ export default defineMock([ ], }, { - id: "6", + id: "105", parentId: "1", name: "字典管理", type: "M", routeName: "Dict", routePath: "dict", component: "system/dict/index", + externalUrl: null, sort: 5, visible: 1, icon: "dict", redirect: null, perm: null, + keepAlive: 1, children: [ { - id: "79", - parentId: "6", + id: "10501", + parentId: "105", + name: "字典查询", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + sort: 1, + visible: 1, + icon: "", + redirect: null, + perm: "sys:dict:list", + children: [], + }, + { + id: "10502", + parentId: "105", name: "字典新增", type: "B", routeName: null, routePath: "", component: null, - sort: 1, + externalUrl: null, + sort: 2, visible: 1, icon: "", redirect: null, @@ -842,44 +1140,63 @@ export default defineMock([ children: [], }, { - id: "81", - parentId: "6", + id: "10503", + parentId: "105", name: "字典编辑", type: "B", routeName: null, routePath: "", component: null, - sort: 2, + externalUrl: null, + sort: 3, visible: 1, icon: "", redirect: null, - perm: "sys:dict_type:update", + perm: "sys:dict:update", children: [], }, { - id: "84", - parentId: "6", + id: "10504", + parentId: "105", name: "字典删除", type: "B", routeName: null, routePath: "", component: null, - sort: 3, + externalUrl: null, + sort: 4, visible: 1, icon: "", redirect: null, - perm: "sys:dict_type:delete", + perm: "sys:dict:delete", children: [], }, { - id: "136", - parentId: "6", + id: "10505", + parentId: "105", + name: "字典项查询", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + sort: 5, + visible: 1, + icon: "", + redirect: null, + perm: "sys:dict-item:list", + children: [], + }, + { + id: "10506", + parentId: "105", name: "字典项新增", type: "B", routeName: null, routePath: "", component: null, - sort: 4, + externalUrl: null, + sort: 6, visible: 1, icon: "", redirect: null, @@ -887,14 +1204,15 @@ export default defineMock([ children: [], }, { - id: "137", - parentId: "6", + id: "10507", + parentId: "105", name: "字典项编辑", type: "B", routeName: null, routePath: "", component: null, - sort: 5, + externalUrl: null, + sort: 7, visible: 1, icon: "", redirect: null, @@ -902,14 +1220,15 @@ export default defineMock([ children: [], }, { - id: "138", - parentId: "6", + id: "10508", + parentId: "105", name: "字典项删除", type: "B", routeName: null, routePath: "", component: null, - sort: 6, + externalUrl: null, + sort: 8, visible: 1, icon: "", redirect: null, @@ -919,119 +1238,151 @@ export default defineMock([ ], }, { - id: "117", + id: "107", parentId: "1", name: "系统日志", type: "M", routeName: "Log", routePath: "log", component: "system/log/index", - sort: 6, + externalUrl: null, + sort: 7, visible: 1, icon: "document", redirect: null, perm: null, - children: [], + keepAlive: 1, + children: [ + { + id: "10701", + parentId: "107", + name: "日志查询", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + sort: 1, + visible: 1, + icon: "", + redirect: null, + perm: "sys:log:list", + children: [], + }, + ], }, { - id: "120", + id: "108", parentId: "1", name: "系统配置", type: "M", routeName: "Config", routePath: "config", component: "system/config/index", - sort: 7, + externalUrl: null, + sort: 8, visible: 1, icon: "setting", redirect: null, perm: null, + keepAlive: 1, children: [ { - id: "121", - parentId: "120", - name: "查询系统配置", + id: "10801", + parentId: "108", + name: "系统配置查询", type: "B", routeName: null, routePath: "", component: null, + externalUrl: null, sort: 1, visible: 1, icon: "", redirect: null, perm: "sys:config:list", + keepAlive: 1, children: [], }, { - id: "122", - parentId: "120", - name: "新增系统配置", + id: "10802", + parentId: "108", + name: "系统配置新增", type: "B", routeName: null, routePath: "", component: null, + externalUrl: null, sort: 2, visible: 1, icon: "", redirect: null, perm: "sys:config:create", + keepAlive: 1, children: [], }, { - id: "123", - parentId: "120", - name: "修改系统配置", + id: "10803", + parentId: "108", + name: "系统配置修改", type: "B", routeName: null, routePath: "", component: null, + externalUrl: null, sort: 3, visible: 1, icon: "", redirect: null, perm: "sys:config:update", + keepAlive: 1, children: [], }, { - id: "124", - parentId: "120", - name: "删除系统配置", + id: "10804", + parentId: "108", + name: "系统配置删除", type: "B", routeName: null, routePath: "", component: null, + externalUrl: null, sort: 4, visible: 1, icon: "", redirect: null, perm: "sys:config:delete", + keepAlive: 1, children: [], }, { - id: "125", - parentId: "120", - name: "刷新系统配置", + id: "10805", + parentId: "108", + name: "系统配置刷新", type: "B", routeName: null, routePath: "", component: null, + externalUrl: null, sort: 5, visible: 1, icon: "", redirect: null, perm: "sys:config:refresh", + keepAlive: 1, children: [], }, ], }, { - id: "126", + id: "109", parentId: "1", name: "通知公告", type: "M", routeName: "Notice", routePath: "notice", component: "system/notice/index", + externalUrl: null, sort: 9, visible: 1, icon: "", @@ -1039,13 +1390,14 @@ export default defineMock([ perm: null, children: [ { - id: "127", - parentId: "126", - name: "查询", + id: "10901", + parentId: "109", + name: "通知查询", type: "B", routeName: null, routePath: "", component: null, + externalUrl: null, sort: 1, visible: 1, icon: "", @@ -1054,13 +1406,14 @@ export default defineMock([ children: [], }, { - id: "128", - parentId: "126", - name: "新增", + id: "10902", + parentId: "109", + name: "通知新增", type: "B", routeName: null, routePath: "", component: null, + externalUrl: null, sort: 2, visible: 1, icon: "", @@ -1069,13 +1422,14 @@ export default defineMock([ children: [], }, { - id: "129", - parentId: "126", - name: "编辑", + id: "10903", + parentId: "109", + name: "通知编辑", type: "B", routeName: null, routePath: "", component: null, + externalUrl: null, sort: 3, visible: 1, icon: "", @@ -1084,13 +1438,14 @@ export default defineMock([ children: [], }, { - id: "130", - parentId: "126", - name: "删除", + id: "10904", + parentId: "109", + name: "通知删除", type: "B", routeName: null, routePath: "", component: null, + externalUrl: null, sort: 4, visible: 1, icon: "", @@ -1099,33 +1454,37 @@ export default defineMock([ children: [], }, { - id: "133", - parentId: "126", - name: "发布", + id: "10905", + parentId: "109", + name: "通知发布", type: "B", routeName: null, routePath: "", component: null, + externalUrl: null, sort: 5, visible: 1, icon: "", redirect: null, perm: "sys:notice:publish", + keepAlive: 1, children: [], }, { - id: "134", - parentId: "126", - name: "撤回", + id: "10906", + parentId: "109", + name: "通知撤回", type: "B", routeName: null, routePath: "", component: null, + externalUrl: null, sort: 6, visible: 1, icon: "", redirect: null, perm: "sys:notice:revoke", + keepAlive: 1, children: [], }, ], @@ -1133,157 +1492,363 @@ export default defineMock([ ], }, { - id: "118", + id: "2", parentId: "0", - name: "系统工具", - type: "C", + name: "数据大屏", + type: "E", routeName: null, - routePath: "/codegen", - component: "Layout", + routePath: null, + component: null, + externalUrl: "/data-screen", sort: 2, visible: 1, - icon: "menu", + icon: "el-icon-Monitor", redirect: null, perm: null, - children: [ - { - id: "119", - parentId: "118", - name: "代码生成", - type: "M", - routeName: "Codegen", - routePath: "codegen", - component: "codegen/index", - sort: 1, - visible: 1, - icon: "code", - redirect: null, - perm: null, - children: [], - }, - ], + children: [], }, { - id: "40", + id: "3", parentId: "0", - name: "接口文档", - type: "C", - routeName: null, - routePath: "/api", - component: "Layout", - sort: 7, + name: "代码生成", + type: "M", + routeName: "Codegen", + routePath: "/codegen", + component: "codegen/index", + externalUrl: null, + sort: 3, visible: 1, - icon: "api", - redirect: "", + icon: "code", + redirect: null, + perm: null, + keepAlive: 1, + children: [], + }, + { + id: "4", + parentId: "0", + name: "通用组件", + type: "C", + routeName: "", + routePath: "/component", + component: "Layout", + externalUrl: null, + sort: 4, + visible: 1, + icon: "el-icon-SetUp", + redirect: "/component/basic/icon-demo", perm: null, children: [ { - id: "41", - parentId: "40", - name: "Apifox", - type: "E", - routeName: "Apifox", - routePath: "apifox", - component: "iframe", - externalUrl: - "https://www.apifox.cn/apidoc/shared-195e783f-4d85-4235-a038-eec696de4ea5", - sort: 1, - visible: 1, - icon: "api", - redirect: "", - perm: null, - keepAlive: 1, - params: [], - children: [], - }, - ], - }, - { - id: "26", - parentId: "0", - name: "平台文档", - type: "C", - routeName: null, - routePath: "/doc", - component: "Layout", - sort: 8, - visible: 1, - icon: "document", - redirect: "https://juejin.cn/post/7228990409909108793", - perm: null, - children: [ - { - id: "102", - parentId: "26", - name: "平台文档(内嵌)", - type: "E", - routeName: "InternalDoc", - routePath: "internal-doc", - component: "iframe", - externalUrl: "https://juejin.cn/post/7228990409909108793", - sort: 1, - visible: 1, - icon: "document", - redirect: "", - perm: null, - keepAlive: 1, - params: [], - children: [], - }, - { - id: "30", - parentId: "26", - name: "平台文档(外链)", - type: "E", - routeName: null, - routePath: "", - component: null, - externalUrl: "https://juejin.cn/post/7228990409909108793", - sort: 2, - visible: 1, - icon: "link", - redirect: "", - perm: null, - children: [], - }, - ], - }, - { - id: "20", - parentId: "0", - name: "多级菜单", - type: "C", - routeName: null, - routePath: "/multi-level", - component: "Layout", - sort: 9, - visible: 1, - icon: "cascader", - redirect: "", - perm: null, - children: [ - { - id: "21", - parentId: "20", - name: "一级菜单", + id: "401", + parentId: "4", + name: "基础组件", type: "C", - routeName: null, - routePath: "level-one", + routeName: "", + routePath: "basic", component: "Layout", + externalUrl: null, sort: 1, visible: 1, - icon: "", + icon: "el-icon-Brush", redirect: "", perm: null, children: [ { - id: "22", - parentId: "21", + id: "40101", + parentId: "401", + name: "Icons", + type: "M", + routeName: "IconDemo", + routePath: "icon-demo", + component: "demo/component/icons", + externalUrl: null, + sort: 1, + visible: 1, + icon: "el-icon-Notification", + redirect: "", + perm: null, + keepAlive: 1, + children: [], + }, + { + id: "40102", + parentId: "401", + name: "拖拽组件", + type: "M", + routeName: "Drag", + routePath: "drag", + component: "demo/component/drag", + externalUrl: null, + sort: 2, + visible: 1, + icon: "", + redirect: "", + perm: null, + children: [], + }, + { + id: "40103", + parentId: "401", + name: "滚动文本", + type: "M", + routeName: "TextScroll", + routePath: "text-scroll", + component: "demo/component/text-scroll", + externalUrl: null, + sort: 3, + visible: 1, + icon: "", + redirect: "", + perm: null, + children: [], + }, + { + id: "40104", + parentId: "401", + name: "字典实时同步", + type: "M", + routeName: "DictSync", + routePath: "dict-sync", + component: "demo/component/dict-sync", + externalUrl: null, + sort: 4, + visible: 1, + icon: "", + redirect: "", + perm: null, + children: [], + }, + ], + }, + { + id: "402", + parentId: "4", + name: "表单组件", + type: "C", + routeName: "", + routePath: "form", + component: "Layout", + externalUrl: null, + sort: 2, + visible: 1, + icon: "el-icon-EditPen", + redirect: "", + perm: null, + children: [ + { + id: "40201", + parentId: "402", + name: "富文本编辑器", + type: "M", + routeName: "WangEditor", + routePath: "wang-editor", + component: "demo/component/wang-editor", + externalUrl: null, + sort: 1, + visible: 1, + icon: "", + redirect: "", + perm: null, + keepAlive: 1, + children: [], + }, + { + id: "40202", + parentId: "402", + name: "图片上传", + type: "M", + routeName: "Upload", + routePath: "upload", + component: "demo/component/upload", + externalUrl: null, + sort: 2, + visible: 1, + icon: "", + redirect: "", + perm: null, + keepAlive: 1, + children: [], + }, + { + id: "40203", + parentId: "402", + name: "图标选择器", + type: "M", + routeName: "DemoIconSelect", + routePath: "icon-select", + component: "demo/component/icon-select", + externalUrl: null, + sort: 3, + visible: 1, + icon: "", + redirect: "", + perm: null, + keepAlive: 1, + children: [], + }, + { + id: "40204", + parentId: "402", + name: "字典组件", + type: "M", + routeName: "DictDemo", + routePath: "dict-demo", + component: "demo/component/dictionary", + externalUrl: null, + sort: 4, + visible: 1, + icon: "", + redirect: "", + perm: null, + keepAlive: 1, + children: [], + }, + { + id: "40205", + parentId: "402", + name: "列表选择器", + type: "M", + routeName: "TableSelect", + routePath: "table-select", + component: "demo/component/table-select/index", + externalUrl: null, + sort: 5, + visible: 1, + icon: "", + redirect: "", + perm: null, + keepAlive: 1, + children: [], + }, + ], + }, + { + id: "403", + parentId: "4", + name: "表格组件", + type: "C", + routeName: "", + routePath: "table", + component: "Layout", + externalUrl: null, + sort: 3, + visible: 1, + icon: "el-icon-Grid", + redirect: "", + perm: null, + children: [ + { + id: "40301", + parentId: "403", + name: "增删改查", + type: "M", + routeName: "Crud", + routePath: "crud", + component: "demo/table/crud/index", + externalUrl: null, + sort: 1, + visible: 1, + icon: "", + redirect: "", + perm: null, + keepAlive: 1, + children: [], + }, + { + id: "40302", + parentId: "403", + name: "CRUD单文件", + type: "M", + routeName: "CrudSingle", + routePath: "crud-single", + component: "demo/table/crud-single", + externalUrl: null, + sort: 2, + visible: 1, + icon: "el-icon-Reading", + redirect: "", + perm: null, + keepAlive: 1, + children: [], + }, + { + id: "40303", + parentId: "403", + name: "VxeTable", + type: "M", + routeName: "VxeTable", + routePath: "vxe-table", + component: "demo/table/vxe-table/index", + externalUrl: null, + sort: 3, + visible: 1, + icon: "el-icon-MagicStick", + redirect: "", + perm: null, + keepAlive: 1, + children: [], + }, + { + id: "40304", + parentId: "403", + name: "自适应表格操作列", + type: "M", + routeName: "AutoOperationColumn", + routePath: "operation-column", + component: "demo/table/auto-operation-column", + externalUrl: null, + sort: 4, + visible: 1, + icon: "", + redirect: "", + perm: null, + keepAlive: 1, + children: [], + }, + ], + }, + ], + }, + { + id: "5", + parentId: "0", + name: "多级菜单", + type: "C", + routeName: "", + routePath: "/multi-level", + component: "Layout", + externalUrl: null, + sort: 5, + visible: 1, + icon: "el-icon-Guide", + redirect: "/multi-level/level-one/level-two/level-three-a", + perm: null, + children: [ + { + id: "501", + parentId: "5", + name: "一级菜单", + type: "C", + routeName: "", + routePath: "level-one", + component: "Layout", + externalUrl: null, + sort: 1, + visible: 1, + icon: "", + redirect: null, + perm: null, + children: [ + { + id: "50101", + parentId: "501", name: "二级菜单", type: "C", - routeName: null, + routeName: "", routePath: "level-two", component: "Layout", + externalUrl: null, sort: 1, visible: 1, icon: "", @@ -1291,33 +1856,37 @@ export default defineMock([ perm: null, children: [ { - id: "23", - parentId: "22", + id: "5010101", + parentId: "50101", name: "三级菜单 A", type: "M", - routeName: null, + routeName: "MultiLevelLevelThreeA", routePath: "level-three-a", component: "demo/route/multi-level/level-one/level-two/level-three-a/index", + externalUrl: null, sort: 1, visible: 1, icon: "", redirect: "", perm: null, + keepAlive: 1, children: [], }, { - id: "24", - parentId: "22", + id: "5010102", + parentId: "50101", name: "三级菜单 B", type: "M", - routeName: null, + routeName: "MultiLevelLevelThreeB", routePath: "level-three-b", component: "demo/route/multi-level/level-one/level-two/level-three-b/index", + externalUrl: null, sort: 2, visible: 1, icon: "", redirect: "", perm: null, + keepAlive: 1, children: [], }, ], @@ -1327,231 +1896,570 @@ export default defineMock([ ], }, { - id: "36", + id: "6", parentId: "0", - name: "组件封装", + name: "路由示例", type: "C", - routeName: null, - routePath: "/component", + routeName: "", + routePath: "/route-example", component: "Layout", - sort: 10, + externalUrl: null, + sort: 6, visible: 1, - icon: "menu", - redirect: "", + icon: "el-icon-Share", + redirect: "/route-example/route-param", perm: null, children: [ { - id: "108", - parentId: "36", - name: "增删改查", + id: "601", + parentId: "6", + name: "路由参数", type: "M", - routeName: null, - routePath: "crud", - component: "demo/table/crud/index", - sort: 0, - visible: 1, - icon: "", - redirect: "", - perm: null, - children: [], - }, - { - id: "109", - parentId: "36", - name: "列表选择器", - type: "M", - routeName: null, - routePath: "table-select", - component: "demo/component/table-select/index", - sort: 1, - visible: 1, - icon: "", - redirect: "", - perm: null, - children: [], - }, - { - id: "37", - parentId: "36", - name: "富文本编辑器", - type: "M", - routeName: null, - routePath: "wang-editor", - component: "demo/component/wang-editor", - sort: 2, - visible: 1, - icon: "", - redirect: "", - perm: null, - children: [], - }, - { - id: "38", - parentId: "36", - name: "图片上传", - type: "M", - routeName: null, - routePath: "upload", - component: "demo/component/upload", - sort: 3, - visible: 1, - icon: "", - redirect: "", - perm: null, - children: [], - }, - { - id: "95", - parentId: "36", - name: "字典组件", - type: "M", - routeName: null, - routePath: "dict-demo", - component: "demo/component/dictionary", - sort: 4, - visible: 1, - icon: "", - redirect: "", - perm: null, - children: [], - }, - { - id: "39", - parentId: "36", - name: "图标选择器", - type: "M", - routeName: null, - routePath: "icon-select", - component: "demo/component/icon-select", - sort: 4, - visible: 1, - icon: "", - redirect: "", - perm: null, - children: [], - }, - ], - }, - { - id: "110", - parentId: "0", - name: "路由参数", - type: "C", - routeName: null, - routePath: "/route-param", - component: "Layout", - sort: 11, - visible: 1, - icon: "el-icon-ElementPlus", - redirect: null, - perm: null, - children: [ - { - id: "111", - parentId: "110", - name: "参数(type=1)", - type: "M", - routeName: null, - routePath: "route-param-type1", + routeName: "RouteParam", + routePath: "route-param", component: "demo/route/route-param", + externalUrl: null, sort: 1, visible: 1, icon: "el-icon-Star", redirect: null, perm: null, + keepAlive: 1, children: [], }, { - id: "112", - parentId: "110", - name: "参数(type=2)", + id: "602", + parentId: "6", + name: "页面缓存", type: "M", - routeName: null, - routePath: "route-param-type2", - component: "demo/route/route-param", + routeName: "RouteCache", + routePath: "cache", + component: "demo/route/cache/index", + externalUrl: null, sort: 2, visible: 1, - icon: "el-icon-StarFilled", + icon: "el-icon-Stopwatch", redirect: null, perm: null, + keepAlive: 1, + children: [], + }, + { + id: "603", + parentId: "6", + name: "页面跳转", + type: "M", + routeName: "RouteNavigate", + routePath: "navigate", + component: "demo/route/navigate/index", + externalUrl: null, + sort: 3, + visible: 1, + icon: "el-icon-Position", + redirect: null, + perm: null, + keepAlive: 1, + children: [], + }, + { + id: "604", + parentId: "6", + name: "内嵌页面", + type: "E", + routeName: "PracticeDoc", + routePath: "iframe", + component: "iframe", + externalUrl: + "https://www.apifox.cn/apidoc/shared-195e783f-4d85-4235-a038-eec696de4ea5", + sort: 4, + visible: 1, + icon: "el-icon-Document", + redirect: "", + perm: null, + keepAlive: 1, + children: [], + }, + { + id: "605", + parentId: "6", + name: "外部链接", + type: "E", + routeName: null, + routePath: null, + component: null, + externalUrl: "https://juejin.cn/post/7228990409909108793", + sort: 5, + visible: 1, + icon: "el-icon-Link", + redirect: "", + perm: null, children: [], }, ], }, { - id: "7", + id: "8", parentId: "0", - name: "功能演示", + name: "动态表单", type: "C", - routeName: null, - routePath: "/function", + routeName: "", + routePath: "/dynamic-form", component: "Layout", - sort: 12, + externalUrl: null, + sort: 8, visible: 1, - icon: "menu", - redirect: "", + icon: "el-icon-Document", + redirect: "/dynamic-form/definition", perm: null, + params: JSON.parse('{"badge":"NEW"}'), children: [ { id: "801", - parentId: "7", - name: "Icons", + parentId: "8", + name: "表单列表", type: "M", - routeName: null, - routePath: "icon-demo", - component: "demo/component/icons", - sort: 2, + routeName: "FormDefinition", + routePath: "definition", + component: "dynamic-form/index", + externalUrl: null, + sort: 1, visible: 1, - icon: "el-icon-Notification", - redirect: "", + icon: "el-icon-List", + redirect: null, perm: null, - children: [], + keepAlive: 1, + children: [ + { + id: "80101", + parentId: "801", + name: "表单查询", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + sort: 1, + visible: 1, + icon: "", + redirect: null, + perm: "form:definition:list", + children: [], + }, + { + id: "80102", + parentId: "801", + name: "表单新增", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + sort: 2, + visible: 1, + icon: "", + redirect: null, + perm: "form:definition:create", + children: [], + }, + { + id: "80103", + parentId: "801", + name: "表单修改", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + sort: 3, + visible: 1, + icon: "", + redirect: null, + perm: "form:definition:update", + children: [], + }, + { + id: "80104", + parentId: "801", + name: "表单删除", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + sort: 4, + visible: 1, + icon: "", + redirect: null, + perm: "form:definition:delete", + children: [], + }, + ], }, { id: "802", - parentId: "7", - name: "字典实时同步", + parentId: "8", + name: "表单数据", type: "M", - routeName: null, - routePath: "dict-sync", - component: "demo/component/dict-sync", - sort: 3, - visible: 1, + routeName: "FormData", + routePath: "data", + component: "dynamic-form/data", + externalUrl: null, + sort: 2, + visible: 0, icon: "", - redirect: "", + redirect: null, perm: null, - children: [], + keepAlive: 1, + children: [ + { + id: "80201", + parentId: "802", + name: "数据查询", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + sort: 1, + visible: 1, + icon: "", + redirect: null, + perm: "form:data:list", + children: [], + }, + { + id: "80202", + parentId: "802", + name: "数据删除", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + sort: 2, + visible: 1, + icon: "", + redirect: null, + perm: "form:data:delete", + children: [], + }, + ], }, { id: "803", - parentId: "7", - name: "VxeTable", + parentId: "8", + name: "表单设计器", type: "M", - routeName: null, - routePath: "vxe-table", - component: "demo/table/vxe-table/index", - sort: 4, - visible: 1, - icon: "el-icon-MagicStick", - redirect: "", + routeName: "FormDesigner", + routePath: "designer", + component: "dynamic-form/designer", + externalUrl: null, + sort: 3, + visible: 0, + icon: "", + redirect: null, perm: null, + keepAlive: 1, children: [], }, { id: "804", - parentId: "7", - name: "CRUD单文件", + parentId: "8", + name: "表单预览", type: "M", - routeName: null, - routePath: "crud-single", - component: "demo/table/crud-single", + routeName: "FormPreview", + routePath: "preview", + component: "dynamic-form/preview", + externalUrl: null, + sort: 4, + visible: 0, + icon: "", + redirect: null, + perm: null, + keepAlive: 1, + children: [], + }, + { + id: "805", + parentId: "8", + name: "表单示例", + type: "C", + routeName: "", + routePath: "sample", + component: "Layout", + externalUrl: null, sort: 5, visible: 1, - icon: "el-icon-Reading", - redirect: "", + icon: "el-icon-Files", + redirect: "/dynamic-form/sample/open_source_survey", + perm: null, + children: [ + { + id: "80501", + parentId: "805", + name: "开源项目问卷收集", + type: "M", + routeName: "FormRenderOpenSourceSurvey", + routePath: "open_source_survey", + component: "dynamic-form/render", + externalUrl: null, + sort: 1, + visible: 1, + icon: "el-icon-Tickets", + redirect: null, + perm: null, + params: JSON.parse('{"formKey":"open_source_survey"}'), + children: [], + }, + { + id: "80502", + parentId: "805", + name: "活动报名表", + type: "M", + routeName: "FormRenderActivityRegistration", + routePath: "activity_registration", + component: "dynamic-form/render", + externalUrl: null, + sort: 2, + visible: 1, + icon: "el-icon-Calendar", + redirect: null, + perm: null, + params: JSON.parse('{"formKey":"activity_registration"}'), + children: [], + }, + { + id: "80503", + parentId: "805", + name: "意见反馈", + type: "M", + routeName: "FormRenderFeedback", + routePath: "feedback", + component: "dynamic-form/render", + externalUrl: null, + sort: 3, + visible: 1, + icon: "el-icon-ChatLineRound", + redirect: null, + perm: null, + params: JSON.parse('{"formKey":"feedback"}'), + children: [], + }, + ], + }, + ], + }, + { + id: "9", + parentId: "0", + name: "工作流", + type: "C", + routeName: "", + routePath: "/workflow", + component: "Layout", + externalUrl: null, + sort: 9, + visible: 1, + icon: "el-icon-Connection", + redirect: "/workflow/launch", + perm: null, + params: JSON.parse('{"badge":"NEW"}'), + children: [ + { + id: "901", + parentId: "9", + name: "流程设计", + type: "M", + routeName: "WorkflowModel", + routePath: "model", + component: "workflow/model", + externalUrl: null, + sort: 1, + visible: 1, + icon: "el-icon-Coin", + redirect: null, + perm: null, + children: [ + { + id: "90101", + parentId: "901", + name: "流程查询", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + sort: 1, + visible: 1, + icon: "", + redirect: null, + perm: "workflow:model:list", + children: [], + }, + { + id: "90102", + parentId: "901", + name: "流程新增", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + sort: 2, + visible: 1, + icon: "", + redirect: null, + perm: "workflow:model:create", + children: [], + }, + { + id: "90103", + parentId: "901", + name: "流程修改", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + sort: 3, + visible: 1, + icon: "", + redirect: null, + perm: "workflow:model:update", + children: [], + }, + { + id: "90104", + parentId: "901", + name: "流程删除", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + sort: 4, + visible: 1, + icon: "", + redirect: null, + perm: "workflow:model:delete", + children: [], + }, + { + id: "90105", + parentId: "901", + name: "流程发布", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + sort: 5, + visible: 1, + icon: "", + redirect: null, + perm: "workflow:model:deploy", + children: [], + }, + { + id: "90106", + parentId: "901", + name: "流程重置", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + sort: 6, + visible: 1, + icon: "", + redirect: null, + perm: "workflow:model:reset", + children: [], + }, + { + id: "90107", + parentId: "901", + name: "流程启停", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + sort: 7, + visible: 1, + icon: "", + redirect: null, + perm: "workflow:definition:update", + children: [], + }, + ], + }, + { + id: "902", + parentId: "9", + name: "流程设计器", + type: "M", + routeName: "WorkflowDesigner", + routePath: "designer", + component: "workflow/designer", + externalUrl: null, + sort: 2, + visible: 0, + icon: "", + redirect: null, + perm: null, + keepAlive: 1, + children: [], + }, + { + id: "904", + parentId: "9", + name: "发起流程", + type: "M", + routeName: "WorkflowLaunch", + routePath: "launch", + component: "workflow/launch", + externalUrl: null, + sort: 4, + visible: 1, + icon: "el-icon-Promotion", + redirect: null, perm: null, children: [], }, + { + id: "905", + parentId: "9", + name: "审批中心", + type: "M", + routeName: "WorkflowTask", + routePath: "task", + component: "workflow/task/index", + externalUrl: null, + sort: 5, + visible: 1, + icon: "el-icon-Stamp", + redirect: null, + perm: null, + children: [ + { + id: "90501", + parentId: "905", + name: "终止流程", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + sort: 1, + visible: 1, + icon: "", + redirect: null, + perm: "workflow:instance:terminate", + children: [], + }, + ], + }, ], }, ], @@ -1571,265 +2479,146 @@ export default defineMock([ label: "系统管理", children: [ { - value: "2", + value: "101", label: "用户管理", children: [ - { - value: "105", - label: "用户查询", - }, - { - value: "31", - label: "用户新增", - }, - { - value: "32", - label: "用户编辑", - }, - { - value: "33", - label: "用户删除", - }, - { - value: "88", - label: "重置密码", - }, - { - value: "106", - label: "用户导入", - }, - { - value: "107", - label: "用户导出", - }, + { value: "10101", label: "用户查询" }, + { value: "10102", label: "用户新增" }, + { value: "10103", label: "用户编辑" }, + { value: "10104", label: "用户删除" }, + { value: "10105", label: "重置密码" }, + { value: "10106", label: "用户导入" }, + { value: "10107", label: "用户导出" }, ], }, - { - value: "3", - label: "角色管理", - children: [ - { - value: "139", - label: "角色查询", - }, - { - value: "70", - label: "角色新增", - }, - { - value: "71", - label: "角色编辑", - }, - { - value: "72", - label: "角色删除", - }, - ], - }, - { - value: "4", - label: "菜单管理", - children: [ - { - value: "73", - label: "菜单新增", - }, - { - value: "140", - label: "菜单查询", - }, - { - value: "75", - label: "菜单删除", - }, - { - value: "74", - label: "菜单编辑", - }, - ], - }, - { - value: "5", - label: "部门管理", - children: [ - { - value: "76", - label: "部门新增", - }, - { - value: "141", - label: "部门查询", - }, - { - value: "77", - label: "部门编辑", - }, - { - value: "78", - label: "部门删除", - }, - ], - }, - { - value: "6", - label: "字典管理", - children: [ - { - value: "79", - label: "字典新增", - }, - { - value: "142", - label: "字典查询", - }, - { - value: "81", - label: "字典编辑", - }, - { - value: "84", - label: "字典删除", - }, - ], - }, - { - value: "117", - label: "系统日志", - }, - { - value: "135", - label: "字典项", - children: [ - { - value: "143", - label: "字典项查询", - }, - { - value: "136", - label: "字典项新增", - }, - { - value: "137", - label: "字典项编辑", - }, - { - value: "138", - label: "字典项删除", - }, - ], - }, - { - value: "120", - label: "系统配置", - children: [ - { - value: "121", - label: "系统配置查询", - }, - { - value: "122", - label: "系统配置新增", - }, - { - value: "123", - label: "系统配置修改", - }, - { - value: "124", - label: "系统配置删除", - }, - { - value: "125", - label: "系统配置刷新", - }, - ], - }, - { - value: "126", - label: "通知公告", - children: [ - { - value: "127", - label: "通知查询", - }, - { - value: "128", - label: "通知新增", - }, - { - value: "129", - label: "通知编辑", - }, - { - value: "130", - label: "通知删除", - }, - { - value: "133", - label: "通知发布", - }, - { - value: "134", - label: "通知撤回", - }, - ], - }, - ], - }, - { - value: "118", - label: "系统工具", - children: [ - { - value: "119", - label: "代码生成", - }, - ], - }, - { - value: "40", - label: "接口文档", - children: [ - { - value: "41", - label: "Apifox", - }, - ], - }, - { - value: "26", - label: "平台文档", - children: [ { value: "102", - label: "document", + label: "角色管理", + children: [ + { value: "10201", label: "角色查询" }, + { value: "10202", label: "角色新增" }, + { value: "10203", label: "角色编辑" }, + { value: "10204", label: "角色删除" }, + { value: "10205", label: "角色分配权限" }, + ], }, { - value: "30", - label: "平台文档(外链)", + value: "103", + label: "菜单管理", + children: [ + { value: "10301", label: "菜单查询" }, + { value: "10302", label: "菜单新增" }, + { value: "10303", label: "菜单编辑" }, + { value: "10304", label: "菜单删除" }, + ], + }, + { + value: "104", + label: "部门管理", + children: [ + { value: "10401", label: "部门查询" }, + { value: "10402", label: "部门新增" }, + { value: "10403", label: "部门编辑" }, + { value: "10404", label: "部门删除" }, + ], + }, + { + value: "105", + label: "字典管理", + children: [ + { value: "10501", label: "字典查询" }, + { value: "10502", label: "字典新增" }, + { value: "10503", label: "字典编辑" }, + { value: "10504", label: "字典删除" }, + { value: "10505", label: "字典项查询" }, + { value: "10506", label: "字典项新增" }, + { value: "10507", label: "字典项编辑" }, + { value: "10508", label: "字典项删除" }, + ], + }, + { + value: "107", + label: "系统日志", + children: [{ value: "10701", label: "日志查询" }], + }, + { + value: "108", + label: "系统配置", + children: [ + { value: "10801", label: "系统配置查询" }, + { value: "10802", label: "系统配置新增" }, + { value: "10803", label: "系统配置修改" }, + { value: "10804", label: "系统配置删除" }, + { value: "10805", label: "系统配置刷新" }, + ], + }, + { + value: "109", + label: "通知公告", + children: [ + { value: "10901", label: "通知查询" }, + { value: "10902", label: "通知新增" }, + { value: "10903", label: "通知编辑" }, + { value: "10904", label: "通知删除" }, + { value: "10905", label: "通知发布" }, + { value: "10906", label: "通知撤回" }, + ], + }, + ], + }, + { value: "2", label: "数据大屏" }, + { value: "3", label: "代码生成" }, + { + value: "4", + label: "通用组件", + children: [ + { + value: "401", + label: "基础组件", + children: [ + { value: "40101", label: "Icons" }, + { value: "40102", label: "拖拽组件" }, + { value: "40103", label: "滚动文本" }, + { value: "40104", label: "字典实时同步" }, + ], + }, + { + value: "402", + label: "表单组件", + children: [ + { value: "40201", label: "富文本编辑器" }, + { value: "40202", label: "图片上传" }, + { value: "40203", label: "图标选择器" }, + { value: "40204", label: "字典组件" }, + { value: "40205", label: "列表选择器" }, + ], + }, + { + value: "403", + label: "表格组件", + children: [ + { value: "40301", label: "增删改查" }, + { value: "40302", label: "CRUD单文件" }, + { value: "40303", label: "VxeTable" }, + { value: "40304", label: "自适应表格操作列" }, + ], }, ], }, { - value: "20", + value: "5", label: "多级菜单", children: [ { - value: "21", + value: "501", label: "一级菜单", children: [ { - value: "22", + value: "50101", label: "二级菜单", children: [ - { - value: "23", - label: "三级菜单 A", - }, - { - value: "24", - label: "三级菜单 B", - }, + { value: "5010101", label: "三级菜单 A" }, + { value: "5010102", label: "三级菜单 B" }, ], }, ], @@ -1837,68 +2626,74 @@ export default defineMock([ ], }, { - value: "36", - label: "组件封装", + value: "6", + label: "路由示例", children: [ - { - value: "108", - label: "增删改查", - }, - { - value: "109", - label: "列表选择器", - }, - { - value: "37", - label: "富文本编辑器", - }, - { - value: "38", - label: "图片上传", - }, - { - value: "39", - label: "图标选择器", - }, - { - value: "95", - label: "字典组件", - }, + { value: "601", label: "路由参数" }, + { value: "602", label: "页面缓存" }, + { value: "603", label: "页面跳转" }, + { value: "604", label: "内嵌页面" }, + { value: "605", label: "外部链接" }, ], }, { - value: "110", - label: "路由参数", - children: [ - { - value: "111", - label: "参数(type=1)", - }, - { - value: "112", - label: "参数(type=2)", - }, - ], - }, - { - value: "7", - label: "功能演示", + value: "8", + label: "动态表单", children: [ { value: "801", - label: "Icons", + label: "表单列表", + children: [ + { value: "80101", label: "表单查询" }, + { value: "80102", label: "表单新增" }, + { value: "80103", label: "表单修改" }, + { value: "80104", label: "表单删除" }, + ], }, { value: "802", - label: "字典实时同步", + label: "表单数据", + children: [ + { value: "80201", label: "数据查询" }, + { value: "80202", label: "数据删除" }, + ], }, + { value: "803", label: "表单设计器" }, + { value: "804", label: "表单预览" }, { - value: "803", - label: "VxeTable", + value: "805", + label: "表单示例", + children: [ + { value: "80501", label: "开源项目问卷收集" }, + { value: "80502", label: "活动报名表" }, + { value: "80503", label: "意见反馈" }, + ], }, + ], + }, + { + value: "9", + label: "工作流", + children: [ { - value: "804", - label: "CRUD单文件", + value: "901", + label: "流程设计", + children: [ + { value: "90101", label: "流程查询" }, + { value: "90102", label: "流程新增" }, + { value: "90103", label: "流程修改" }, + { value: "90104", label: "流程删除" }, + { value: "90105", label: "流程发布" }, + { value: "90106", label: "流程重置" }, + { value: "90107", label: "流程启停" }, + ], + }, + { value: "902", label: "流程设计器" }, + { value: "904", label: "发起流程" }, + { + value: "905", + label: "审批中心", + children: [{ value: "90501", label: "终止流程" }], }, ], }, @@ -1990,37 +2785,151 @@ const menuMap: Record = { routeName: "", routePath: "/system", component: "Layout", + externalUrl: null, perm: null, visible: 1, sort: 1, icon: "system", redirect: "/system/user", keepAlive: null, - params: null, }, 2: { id: "2", + parentId: "0", + name: "数据大屏", + type: "E", + routeName: null, + routePath: null, + component: null, + externalUrl: "/data-screen", + perm: null, + visible: 1, + sort: 2, + icon: "el-icon-Monitor", + redirect: null, + keepAlive: null, + }, + 3: { + id: "3", + parentId: "0", + name: "代码生成", + type: "M", + routeName: "Codegen", + routePath: "/codegen", + component: "codegen/index", + externalUrl: null, + perm: null, + visible: 1, + sort: 3, + icon: "code", + redirect: null, + keepAlive: 1, + }, + 4: { + id: "4", + parentId: "0", + name: "通用组件", + type: "C", + routeName: "", + routePath: "/component", + component: "Layout", + externalUrl: null, + perm: null, + visible: 1, + sort: 4, + icon: "el-icon-SetUp", + redirect: "/component/basic/icon-demo", + keepAlive: null, + }, + 5: { + id: "5", + parentId: "0", + name: "多级菜单", + type: "C", + routeName: "", + routePath: "/multi-level", + component: "Layout", + externalUrl: null, + perm: null, + visible: 1, + sort: 5, + icon: "el-icon-Guide", + redirect: "/multi-level/level-one/level-two/level-three-a", + keepAlive: null, + }, + 6: { + id: "6", + parentId: "0", + name: "路由示例", + type: "C", + routeName: "", + routePath: "/route-example", + component: "Layout", + externalUrl: null, + perm: null, + visible: 1, + sort: 6, + icon: "el-icon-Share", + redirect: "/route-example/route-param", + keepAlive: null, + }, + 8: { + id: "8", + parentId: "0", + name: "动态表单", + type: "C", + routeName: "", + routePath: "/dynamic-form", + component: "Layout", + externalUrl: null, + perm: null, + visible: 1, + sort: 8, + icon: "el-icon-Document", + redirect: "/dynamic-form/definition", + keepAlive: null, + }, + 9: { + id: "9", + parentId: "0", + name: "工作流", + type: "C", + routeName: "", + routePath: "/workflow", + component: "Layout", + externalUrl: null, + perm: null, + visible: 1, + sort: 9, + icon: "el-icon-Connection", + redirect: "/workflow/launch", + keepAlive: null, + }, + 101: { + id: "101", parentId: "1", name: "用户管理", type: "M", routeName: "User", routePath: "user", component: "system/user/index", + externalUrl: null, perm: null, visible: 1, sort: 1, - icon: "user", + icon: "el-icon-User", redirect: null, keepAlive: 1, }, - 3: { - id: "3", + 102: { + id: "102", parentId: "1", name: "角色管理", type: "M", routeName: "Role", routePath: "role", component: "system/role/index", + externalUrl: null, perm: null, visible: 1, sort: 2, @@ -2028,14 +2937,15 @@ const menuMap: Record = { redirect: null, keepAlive: 1, }, - 4: { - id: "4", + 103: { + id: "103", parentId: "1", name: "菜单管理", type: "M", - routeName: "Menu", + routeName: "SysMenu", routePath: "menu", component: "system/menu/index", + externalUrl: null, perm: null, visible: 1, sort: 3, @@ -2043,14 +2953,15 @@ const menuMap: Record = { redirect: null, keepAlive: 1, }, - 5: { - id: "5", + 104: { + id: "104", parentId: "1", name: "部门管理", type: "M", routeName: "Dept", routePath: "dept", component: "system/dept/index", + externalUrl: null, perm: null, visible: 1, sort: 4, @@ -2058,14 +2969,15 @@ const menuMap: Record = { redirect: null, keepAlive: 1, }, - 6: { - id: "6", + 105: { + id: "105", parentId: "1", name: "字典管理", type: "M", routeName: "Dict", routePath: "dict", component: "system/dict/index", + externalUrl: null, perm: null, visible: 1, sort: 5, @@ -2073,135 +2985,1508 @@ const menuMap: Record = { redirect: null, keepAlive: 1, }, - 7: { - id: "7", - parentId: "0", - name: "功能演示", - type: "C", - routeName: "", - routePath: "/function", - component: "Layout", + 107: { + id: "107", + parentId: "1", + name: "系统日志", + type: "M", + routeName: "Log", + routePath: "log", + component: "system/log/index", + externalUrl: null, perm: null, visible: 1, - sort: 3, - icon: "menu", - redirect: "/function/icon-demo", - keepAlive: null, - params: null, + sort: 7, + icon: "document", + redirect: null, + keepAlive: 1, }, - 801: { - id: "801", - parentId: "7", - name: "Icons", + 108: { + id: "108", + parentId: "1", + name: "系统配置", type: "M", - routeName: "IconDemo", - routePath: "icon-demo", - component: "demo/component/icons", + routeName: "Config", + routePath: "config", + component: "system/config/index", + externalUrl: null, + perm: null, + visible: 1, + sort: 8, + icon: "setting", + redirect: null, + keepAlive: 1, + }, + 109: { + id: "109", + parentId: "1", + name: "通知公告", + type: "M", + routeName: "Notice", + routePath: "notice", + component: "system/notice/index", + externalUrl: null, + perm: null, + visible: 1, + sort: 9, + icon: "", + redirect: null, + keepAlive: null, + }, + 401: { + id: "401", + parentId: "4", + name: "基础组件", + type: "C", + routeName: "", + routePath: "basic", + component: "Layout", + externalUrl: null, perm: null, visible: 1, sort: 1, - icon: "el-icon-Notification", + icon: "el-icon-Brush", + redirect: "", + keepAlive: null, + }, + 402: { + id: "402", + parentId: "4", + name: "表单组件", + type: "C", + routeName: "", + routePath: "form", + component: "Layout", + externalUrl: null, + perm: null, + visible: 1, + sort: 2, + icon: "el-icon-EditPen", + redirect: "", + keepAlive: null, + }, + 403: { + id: "403", + parentId: "4", + name: "表格组件", + type: "C", + routeName: "", + routePath: "table", + component: "Layout", + externalUrl: null, + perm: null, + visible: 1, + sort: 3, + icon: "el-icon-Grid", + redirect: "", + keepAlive: null, + }, + 501: { + id: "501", + parentId: "5", + name: "一级菜单", + type: "C", + routeName: "", + routePath: "level-one", + component: "Layout", + externalUrl: null, + perm: null, + visible: 1, + sort: 1, + icon: "", + redirect: null, + keepAlive: null, + }, + 601: { + id: "601", + parentId: "6", + name: "路由参数", + type: "M", + routeName: "RouteParam", + routePath: "route-param", + component: "demo/route/route-param", + externalUrl: null, + perm: null, + visible: 1, + sort: 1, + icon: "el-icon-Star", + redirect: null, + keepAlive: 1, + }, + 602: { + id: "602", + parentId: "6", + name: "页面缓存", + type: "M", + routeName: "RouteCache", + routePath: "cache", + component: "demo/route/cache/index", + externalUrl: null, + perm: null, + visible: 1, + sort: 2, + icon: "el-icon-Stopwatch", + redirect: null, + keepAlive: 1, + }, + 603: { + id: "603", + parentId: "6", + name: "页面跳转", + type: "M", + routeName: "RouteNavigate", + routePath: "navigate", + component: "demo/route/navigate/index", + externalUrl: null, + perm: null, + visible: 1, + sort: 3, + icon: "el-icon-Position", + redirect: null, + keepAlive: 1, + }, + 604: { + id: "604", + parentId: "6", + name: "内嵌页面", + type: "E", + routeName: "PracticeDoc", + routePath: "iframe", + component: "iframe", + externalUrl: "https://www.apifox.cn/apidoc/shared-195e783f-4d85-4235-a038-eec696de4ea5", + perm: null, + visible: 1, + sort: 4, + icon: "el-icon-Document", + redirect: "", + keepAlive: 1, + }, + 605: { + id: "605", + parentId: "6", + name: "外部链接", + type: "E", + routeName: null, + routePath: null, + component: null, + externalUrl: "https://juejin.cn/post/7228990409909108793", + perm: null, + visible: 1, + sort: 5, + icon: "el-icon-Link", + redirect: "", + keepAlive: null, + }, + 801: { + id: "801", + parentId: "8", + name: "表单列表", + type: "M", + routeName: "FormDefinition", + routePath: "definition", + component: "dynamic-form/index", + externalUrl: null, + perm: null, + visible: 1, + sort: 1, + icon: "el-icon-List", redirect: null, keepAlive: 1, - params: null, }, 802: { id: "802", - parentId: "7", - name: "字典实时同步", + parentId: "8", + name: "表单数据", type: "M", - routeName: "DictSync", - routePath: "dict-sync", - component: "demo/component/dict-sync", + routeName: "FormData", + routePath: "data", + component: "dynamic-form/data", + externalUrl: null, perm: null, + visible: 0, + sort: 2, + icon: "", + redirect: null, + keepAlive: 1, + }, + 803: { + id: "803", + parentId: "8", + name: "表单设计器", + type: "M", + routeName: "FormDesigner", + routePath: "designer", + component: "dynamic-form/designer", + externalUrl: null, + perm: null, + visible: 0, + sort: 3, + icon: "", + redirect: null, + keepAlive: 1, + }, + 804: { + id: "804", + parentId: "8", + name: "表单预览", + type: "M", + routeName: "FormPreview", + routePath: "preview", + component: "dynamic-form/preview", + externalUrl: null, + perm: null, + visible: 0, + sort: 4, + icon: "", + redirect: null, + keepAlive: 1, + }, + 805: { + id: "805", + parentId: "8", + name: "表单示例", + type: "C", + routeName: "", + routePath: "sample", + component: "Layout", + externalUrl: null, + perm: null, + visible: 1, + sort: 5, + icon: "el-icon-Files", + redirect: "/dynamic-form/sample/open_source_survey", + keepAlive: null, + }, + 901: { + id: "901", + parentId: "9", + name: "流程设计", + type: "M", + routeName: "WorkflowModel", + routePath: "model", + component: "workflow/model", + externalUrl: null, + perm: null, + visible: 1, + sort: 1, + icon: "el-icon-Coin", + redirect: null, + keepAlive: null, + }, + 902: { + id: "902", + parentId: "9", + name: "流程设计器", + type: "M", + routeName: "WorkflowDesigner", + routePath: "designer", + component: "workflow/designer", + externalUrl: null, + perm: null, + visible: 0, + sort: 2, + icon: "", + redirect: null, + keepAlive: 1, + }, + 904: { + id: "904", + parentId: "9", + name: "发起流程", + type: "M", + routeName: "WorkflowLaunch", + routePath: "launch", + component: "workflow/launch", + externalUrl: null, + perm: null, + visible: 1, + sort: 4, + icon: "el-icon-Promotion", + redirect: null, + keepAlive: null, + }, + 905: { + id: "905", + parentId: "9", + name: "审批中心", + type: "M", + routeName: "WorkflowTask", + routePath: "task", + component: "workflow/task/index", + externalUrl: null, + perm: null, + visible: 1, + sort: 5, + icon: "el-icon-Stamp", + redirect: null, + keepAlive: null, + }, + 10101: { + id: "10101", + parentId: "101", + name: "用户查询", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "sys:user:list", + visible: 1, + sort: 1, + icon: "", + redirect: null, + keepAlive: null, + }, + 10102: { + id: "10102", + parentId: "101", + name: "用户新增", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "sys:user:create", + visible: 1, + sort: 2, + icon: "", + redirect: null, + keepAlive: null, + }, + 10103: { + id: "10103", + parentId: "101", + name: "用户编辑", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "sys:user:update", + visible: 1, + sort: 3, + icon: "", + redirect: null, + keepAlive: null, + }, + 10104: { + id: "10104", + parentId: "101", + name: "用户删除", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "sys:user:delete", + visible: 1, + sort: 4, + icon: "", + redirect: null, + keepAlive: null, + }, + 10105: { + id: "10105", + parentId: "101", + name: "重置密码", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "sys:user:reset-password", + visible: 1, + sort: 5, + icon: "", + redirect: null, + keepAlive: null, + }, + 10106: { + id: "10106", + parentId: "101", + name: "用户导入", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "sys:user:import", + visible: 1, + sort: 6, + icon: "", + redirect: null, + keepAlive: null, + }, + 10107: { + id: "10107", + parentId: "101", + name: "用户导出", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "sys:user:export", + visible: 1, + sort: 7, + icon: "", + redirect: null, + keepAlive: null, + }, + 10201: { + id: "10201", + parentId: "102", + name: "角色查询", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "sys:role:list", + visible: 1, + sort: 1, + icon: "", + redirect: null, + keepAlive: null, + }, + 10202: { + id: "10202", + parentId: "102", + name: "角色新增", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "sys:role:create", + visible: 1, + sort: 2, + icon: "", + redirect: null, + keepAlive: null, + }, + 10203: { + id: "10203", + parentId: "102", + name: "角色编辑", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "sys:role:update", + visible: 1, + sort: 3, + icon: "", + redirect: null, + keepAlive: null, + }, + 10204: { + id: "10204", + parentId: "102", + name: "角色删除", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "sys:role:delete", + visible: 1, + sort: 4, + icon: "", + redirect: null, + keepAlive: null, + }, + 10205: { + id: "10205", + parentId: "102", + name: "角色分配权限", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "sys:role:assign", + visible: 1, + sort: 5, + icon: "", + redirect: null, + keepAlive: null, + }, + 10301: { + id: "10301", + parentId: "103", + name: "菜单查询", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "sys:menu:list", + visible: 1, + sort: 1, + icon: "", + redirect: null, + keepAlive: null, + }, + 10302: { + id: "10302", + parentId: "103", + name: "菜单新增", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "sys:menu:create", + visible: 1, + sort: 2, + icon: "", + redirect: null, + keepAlive: null, + }, + 10303: { + id: "10303", + parentId: "103", + name: "菜单编辑", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "sys:menu:update", + visible: 1, + sort: 3, + icon: "", + redirect: null, + keepAlive: null, + }, + 10304: { + id: "10304", + parentId: "103", + name: "菜单删除", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "sys:menu:delete", + visible: 1, + sort: 4, + icon: "", + redirect: null, + keepAlive: null, + }, + 10401: { + id: "10401", + parentId: "104", + name: "部门查询", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "sys:dept:list", + visible: 1, + sort: 1, + icon: "", + redirect: null, + keepAlive: null, + }, + 10402: { + id: "10402", + parentId: "104", + name: "部门新增", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "sys:dept:create", + visible: 1, + sort: 2, + icon: "", + redirect: null, + keepAlive: null, + }, + 10403: { + id: "10403", + parentId: "104", + name: "部门编辑", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "sys:dept:update", + visible: 1, + sort: 3, + icon: "", + redirect: null, + keepAlive: null, + }, + 10404: { + id: "10404", + parentId: "104", + name: "部门删除", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "sys:dept:delete", + visible: 1, + sort: 4, + icon: "", + redirect: null, + keepAlive: null, + }, + 10501: { + id: "10501", + parentId: "105", + name: "字典查询", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "sys:dict:list", + visible: 1, + sort: 1, + icon: "", + redirect: null, + keepAlive: null, + }, + 10502: { + id: "10502", + parentId: "105", + name: "字典新增", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "sys:dict:create", + visible: 1, + sort: 2, + icon: "", + redirect: null, + keepAlive: null, + }, + 10503: { + id: "10503", + parentId: "105", + name: "字典编辑", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "sys:dict:update", + visible: 1, + sort: 3, + icon: "", + redirect: null, + keepAlive: null, + }, + 10504: { + id: "10504", + parentId: "105", + name: "字典删除", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "sys:dict:delete", + visible: 1, + sort: 4, + icon: "", + redirect: null, + keepAlive: null, + }, + 10505: { + id: "10505", + parentId: "105", + name: "字典项查询", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "sys:dict-item:list", + visible: 1, + sort: 5, + icon: "", + redirect: null, + keepAlive: null, + }, + 10506: { + id: "10506", + parentId: "105", + name: "字典项新增", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "sys:dict-item:create", + visible: 1, + sort: 6, + icon: "", + redirect: null, + keepAlive: null, + }, + 10507: { + id: "10507", + parentId: "105", + name: "字典项编辑", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "sys:dict-item:update", + visible: 1, + sort: 7, + icon: "", + redirect: null, + keepAlive: null, + }, + 10508: { + id: "10508", + parentId: "105", + name: "字典项删除", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "sys:dict-item:delete", + visible: 1, + sort: 8, + icon: "", + redirect: null, + keepAlive: null, + }, + 10701: { + id: "10701", + parentId: "107", + name: "日志查询", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "sys:log:list", + visible: 1, + sort: 1, + icon: "", + redirect: null, + keepAlive: null, + }, + 10801: { + id: "10801", + parentId: "108", + name: "系统配置查询", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "sys:config:list", + visible: 1, + sort: 1, + icon: "", + redirect: null, + keepAlive: 1, + }, + 10802: { + id: "10802", + parentId: "108", + name: "系统配置新增", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "sys:config:create", visible: 1, sort: 2, icon: "", redirect: null, keepAlive: 1, - params: null, }, - 803: { - id: "803", - parentId: "7", - name: "VxeTable", + 10803: { + id: "10803", + parentId: "108", + name: "系统配置修改", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "sys:config:update", + visible: 1, + sort: 3, + icon: "", + redirect: null, + keepAlive: 1, + }, + 10804: { + id: "10804", + parentId: "108", + name: "系统配置删除", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "sys:config:delete", + visible: 1, + sort: 4, + icon: "", + redirect: null, + keepAlive: 1, + }, + 10805: { + id: "10805", + parentId: "108", + name: "系统配置刷新", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "sys:config:refresh", + visible: 1, + sort: 5, + icon: "", + redirect: null, + keepAlive: 1, + }, + 10901: { + id: "10901", + parentId: "109", + name: "通知查询", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "sys:notice:list", + visible: 1, + sort: 1, + icon: "", + redirect: null, + keepAlive: null, + }, + 10902: { + id: "10902", + parentId: "109", + name: "通知新增", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "sys:notice:create", + visible: 1, + sort: 2, + icon: "", + redirect: null, + keepAlive: null, + }, + 10903: { + id: "10903", + parentId: "109", + name: "通知编辑", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "sys:notice:update", + visible: 1, + sort: 3, + icon: "", + redirect: null, + keepAlive: null, + }, + 10904: { + id: "10904", + parentId: "109", + name: "通知删除", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "sys:notice:delete", + visible: 1, + sort: 4, + icon: "", + redirect: null, + keepAlive: null, + }, + 10905: { + id: "10905", + parentId: "109", + name: "通知发布", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "sys:notice:publish", + visible: 1, + sort: 5, + icon: "", + redirect: null, + keepAlive: 1, + }, + 10906: { + id: "10906", + parentId: "109", + name: "通知撤回", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "sys:notice:revoke", + visible: 1, + sort: 6, + icon: "", + redirect: null, + keepAlive: 1, + }, + 40101: { + id: "40101", + parentId: "401", + name: "Icons", type: "M", - routeName: "VxeTable", - routePath: "vxe-table", - component: "demo/table/vxe-table/index", + routeName: "IconDemo", + routePath: "icon-demo", + component: "demo/component/icons", + externalUrl: null, + perm: null, + visible: 1, + sort: 1, + icon: "el-icon-Notification", + redirect: "", + keepAlive: 1, + }, + 40102: { + id: "40102", + parentId: "401", + name: "拖拽组件", + type: "M", + routeName: "Drag", + routePath: "drag", + component: "demo/component/drag", + externalUrl: null, + perm: null, + visible: 1, + sort: 2, + icon: "", + redirect: "", + keepAlive: null, + }, + 40103: { + id: "40103", + parentId: "401", + name: "滚动文本", + type: "M", + routeName: "TextScroll", + routePath: "text-scroll", + component: "demo/component/text-scroll", + externalUrl: null, perm: null, visible: 1, sort: 3, - icon: "el-icon-MagicStick", - redirect: null, - keepAlive: 1, - params: null, + icon: "", + redirect: "", + keepAlive: null, }, - 804: { - id: "804", - parentId: "7", + 40104: { + id: "40104", + parentId: "401", + name: "字典实时同步", + type: "M", + routeName: "DictSync", + routePath: "dict-sync", + component: "demo/component/dict-sync", + externalUrl: null, + perm: null, + visible: 1, + sort: 4, + icon: "", + redirect: "", + keepAlive: null, + }, + 40201: { + id: "40201", + parentId: "402", + name: "富文本编辑器", + type: "M", + routeName: "WangEditor", + routePath: "wang-editor", + component: "demo/component/wang-editor", + externalUrl: null, + perm: null, + visible: 1, + sort: 1, + icon: "", + redirect: "", + keepAlive: 1, + }, + 40202: { + id: "40202", + parentId: "402", + name: "图片上传", + type: "M", + routeName: "Upload", + routePath: "upload", + component: "demo/component/upload", + externalUrl: null, + perm: null, + visible: 1, + sort: 2, + icon: "", + redirect: "", + keepAlive: 1, + }, + 40203: { + id: "40203", + parentId: "402", + name: "图标选择器", + type: "M", + routeName: "DemoIconSelect", + routePath: "icon-select", + component: "demo/component/icon-select", + externalUrl: null, + perm: null, + visible: 1, + sort: 3, + icon: "", + redirect: "", + keepAlive: 1, + }, + 40204: { + id: "40204", + parentId: "402", + name: "字典组件", + type: "M", + routeName: "DictDemo", + routePath: "dict-demo", + component: "demo/component/dictionary", + externalUrl: null, + perm: null, + visible: 1, + sort: 4, + icon: "", + redirect: "", + keepAlive: 1, + }, + 40205: { + id: "40205", + parentId: "402", + name: "列表选择器", + type: "M", + routeName: "TableSelect", + routePath: "table-select", + component: "demo/component/table-select/index", + externalUrl: null, + perm: null, + visible: 1, + sort: 5, + icon: "", + redirect: "", + keepAlive: 1, + }, + 40301: { + id: "40301", + parentId: "403", + name: "增删改查", + type: "M", + routeName: "Crud", + routePath: "crud", + component: "demo/table/crud/index", + externalUrl: null, + perm: null, + visible: 1, + sort: 1, + icon: "", + redirect: "", + keepAlive: 1, + }, + 40302: { + id: "40302", + parentId: "403", name: "CRUD单文件", type: "M", routeName: "CrudSingle", routePath: "crud-single", component: "demo/table/crud-single", - perm: null, - visible: 1, - sort: 4, - icon: "el-icon-Reading", - redirect: null, - keepAlive: 1, - params: null, - }, - 41: { - id: "41", - parentId: "40", - name: "Apifox", - type: "E", - routeName: "Apifox", - routePath: "apifox", - component: "iframe", - externalUrl: "https://www.apifox.cn/apidoc/shared-195e783f-4d85-4235-a038-eec696de4ea5", - perm: null, - visible: 1, - sort: 1, - icon: "api", - redirect: "", - keepAlive: 1, - params: [], - }, - 102: { - id: "102", - parentId: "26", - name: "平台文档(内嵌)", - type: "E", - routeName: "InternalDoc", - routePath: "internal-doc", - component: "iframe", - externalUrl: "https://juejin.cn/post/7228990409909108793", - perm: null, - visible: 1, - sort: 1, - icon: "document", - redirect: "", - keepAlive: 1, - params: [], - }, - 30: { - id: "30", - parentId: "26", - name: "平台文档(外链)", - type: "E", - routeName: null, - routePath: "", - component: null, - externalUrl: "https://juejin.cn/post/7228990409909108793", + externalUrl: null, perm: null, visible: 1, sort: 2, - icon: "link", + icon: "el-icon-Reading", redirect: "", + keepAlive: 1, + }, + 40303: { + id: "40303", + parentId: "403", + name: "VxeTable", + type: "M", + routeName: "VxeTable", + routePath: "vxe-table", + component: "demo/table/vxe-table/index", + externalUrl: null, + perm: null, + visible: 1, + sort: 3, + icon: "el-icon-MagicStick", + redirect: "", + keepAlive: 1, + }, + 40304: { + id: "40304", + parentId: "403", + name: "自适应表格操作列", + type: "M", + routeName: "AutoOperationColumn", + routePath: "operation-column", + component: "demo/table/auto-operation-column", + externalUrl: null, + perm: null, + visible: 1, + sort: 4, + icon: "", + redirect: "", + keepAlive: 1, + }, + 50101: { + id: "50101", + parentId: "501", + name: "二级菜单", + type: "C", + routeName: "", + routePath: "level-two", + component: "Layout", + externalUrl: null, + perm: null, + visible: 1, + sort: 1, + icon: "", + redirect: null, keepAlive: null, - params: [], + }, + 80101: { + id: "80101", + parentId: "801", + name: "表单查询", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "form:definition:list", + visible: 1, + sort: 1, + icon: "", + redirect: null, + keepAlive: null, + }, + 80102: { + id: "80102", + parentId: "801", + name: "表单新增", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "form:definition:create", + visible: 1, + sort: 2, + icon: "", + redirect: null, + keepAlive: null, + }, + 80103: { + id: "80103", + parentId: "801", + name: "表单修改", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "form:definition:update", + visible: 1, + sort: 3, + icon: "", + redirect: null, + keepAlive: null, + }, + 80104: { + id: "80104", + parentId: "801", + name: "表单删除", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "form:definition:delete", + visible: 1, + sort: 4, + icon: "", + redirect: null, + keepAlive: null, + }, + 80201: { + id: "80201", + parentId: "802", + name: "数据查询", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "form:data:list", + visible: 1, + sort: 1, + icon: "", + redirect: null, + keepAlive: null, + }, + 80202: { + id: "80202", + parentId: "802", + name: "数据删除", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "form:data:delete", + visible: 1, + sort: 2, + icon: "", + redirect: null, + keepAlive: null, + }, + 80501: { + id: "80501", + parentId: "805", + name: "开源项目问卷收集", + type: "M", + routeName: "FormRenderOpenSourceSurvey", + routePath: "open_source_survey", + component: "dynamic-form/render", + externalUrl: null, + perm: null, + visible: 1, + sort: 1, + icon: "el-icon-Tickets", + redirect: null, + keepAlive: null, + }, + 80502: { + id: "80502", + parentId: "805", + name: "活动报名表", + type: "M", + routeName: "FormRenderActivityRegistration", + routePath: "activity_registration", + component: "dynamic-form/render", + externalUrl: null, + perm: null, + visible: 1, + sort: 2, + icon: "el-icon-Calendar", + redirect: null, + keepAlive: null, + }, + 80503: { + id: "80503", + parentId: "805", + name: "意见反馈", + type: "M", + routeName: "FormRenderFeedback", + routePath: "feedback", + component: "dynamic-form/render", + externalUrl: null, + perm: null, + visible: 1, + sort: 3, + icon: "el-icon-ChatLineRound", + redirect: null, + keepAlive: null, + }, + 90101: { + id: "90101", + parentId: "901", + name: "流程查询", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "workflow:model:list", + visible: 1, + sort: 1, + icon: "", + redirect: null, + keepAlive: null, + }, + 90102: { + id: "90102", + parentId: "901", + name: "流程新增", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "workflow:model:create", + visible: 1, + sort: 2, + icon: "", + redirect: null, + keepAlive: null, + }, + 90103: { + id: "90103", + parentId: "901", + name: "流程修改", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "workflow:model:update", + visible: 1, + sort: 3, + icon: "", + redirect: null, + keepAlive: null, + }, + 90104: { + id: "90104", + parentId: "901", + name: "流程删除", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "workflow:model:delete", + visible: 1, + sort: 4, + icon: "", + redirect: null, + keepAlive: null, + }, + 90105: { + id: "90105", + parentId: "901", + name: "流程发布", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "workflow:model:deploy", + visible: 1, + sort: 5, + icon: "", + redirect: null, + keepAlive: null, + }, + 90106: { + id: "90106", + parentId: "901", + name: "流程重置", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "workflow:model:reset", + visible: 1, + sort: 6, + icon: "", + redirect: null, + keepAlive: null, + }, + 90107: { + id: "90107", + parentId: "901", + name: "流程启停", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "workflow:definition:update", + visible: 1, + sort: 7, + icon: "", + redirect: null, + keepAlive: null, + }, + 90501: { + id: "90501", + parentId: "905", + name: "终止流程", + type: "B", + routeName: null, + routePath: "", + component: null, + externalUrl: null, + perm: "workflow:instance:terminate", + visible: 1, + sort: 1, + icon: "", + redirect: null, + keepAlive: null, + }, + 5010101: { + id: "5010101", + parentId: "50101", + name: "三级菜单 A", + type: "M", + routeName: "MultiLevelLevelThreeA", + routePath: "level-three-a", + component: "demo/route/multi-level/level-one/level-two/level-three-a/index", + externalUrl: null, + perm: null, + visible: 1, + sort: 1, + icon: "", + redirect: "", + keepAlive: 1, + }, + 5010102: { + id: "5010102", + parentId: "50101", + name: "三级菜单 B", + type: "M", + routeName: "MultiLevelLevelThreeB", + routePath: "level-three-b", + component: "demo/route/multi-level/level-one/level-two/level-three-b/index", + externalUrl: null, + perm: null, + visible: 1, + sort: 2, + icon: "", + redirect: "", + keepAlive: 1, }, }; diff --git a/src/components/AppLink/index.vue b/src/components/AppLink/index.vue index e1d142a4..becf5b7a 100644 --- a/src/components/AppLink/index.vue +++ b/src/components/AppLink/index.vue @@ -21,6 +21,9 @@ interface AppLinkTo { query?: Record | null; } +/** + * 应用内链接:按菜单路径跳转 + */ const props = defineProps<{ to: AppLinkTo; }>(); diff --git a/src/components/CopyButton/index.vue b/src/components/CopyButton/index.vue index 02baf3d0..4615251f 100644 --- a/src/components/CopyButton/index.vue +++ b/src/components/CopyButton/index.vue @@ -13,6 +13,9 @@ defineOptions({ inheritAttrs: false, }); +/** + * 复制按钮:点击复制指定文本 + */ const props = defineProps({ text: { type: String, diff --git a/src/components/Crud/CrudModal.vue b/src/components/Crud/CrudModal.vue index 3bcb9818..b8388100 100644 --- a/src/components/Crud/CrudModal.vue +++ b/src/components/Crud/CrudModal.vue @@ -140,6 +140,9 @@ import type { IComponentType, IModalConfig, IObject } from "./types"; import InputTag from "@/components/InputTag/index.vue"; import IconSelect from "@/components/IconSelect/index.vue"; +/** + * 声明透传插槽:父组件可传入任意具名插槽 + */ defineSlots<{ [key: string]: (_args: any) => any }>(); /** * 定义接收的属性 diff --git a/src/components/DictSelect/index.vue b/src/components/DictSelect/index.vue index c30aacce..c58d1ccf 100644 --- a/src/components/DictSelect/index.vue +++ b/src/components/DictSelect/index.vue @@ -45,6 +45,9 @@ defineOptions({ name: "DictSelect", }); +/** + * 字典下拉选择:按字典类型加载选项 + */ const props = defineProps({ /** 字典编码 */ code: { diff --git a/src/components/DictTag/index.vue b/src/components/DictTag/index.vue index ce19d1b9..3fb8f526 100644 --- a/src/components/DictTag/index.vue +++ b/src/components/DictTag/index.vue @@ -10,6 +10,9 @@ diff --git a/src/views/codegen/components/FieldConfigStep.vue b/src/views/codegen/components/FieldConfigStep.vue index fbee9828..8da56339 100644 --- a/src/views/codegen/components/FieldConfigStep.vue +++ b/src/views/codegen/components/FieldConfigStep.vue @@ -201,6 +201,9 @@ import type { AiChangeItem } from "../composables/useAiFillDiff"; const formData = defineModel({ required: true }); +/** + * 代码生成字段配置步骤 + */ const props = defineProps<{ loading: boolean; loadingText: string; @@ -329,7 +332,7 @@ function destroySort() { } /** - * 暴露给父组件 + * 暴露字段排序、显隐切换与定位能力 */ defineExpose({ initSort, destroySort, showOnlyAiChanged, locateField }); diff --git a/src/views/codegen/components/GeneratorDrawer.vue b/src/views/codegen/components/GeneratorDrawer.vue index 90e4e628..20fc5b5d 100644 --- a/src/views/codegen/components/GeneratorDrawer.vue +++ b/src/views/codegen/components/GeneratorDrawer.vue @@ -229,7 +229,13 @@ const STEPS = [ const visible = defineModel("visible", { required: true }); +/** + * 代码生成抽屉:承载三步向导 + */ defineProps<{ title: string }>(); +/** + * 生成成功或重置配置时上抛 + */ defineEmits<{ success: [] }>(); const currentStep = ref(STEP.BASIC_CONFIG); @@ -497,6 +503,9 @@ function handleClose() { fieldConfigRef.value?.destroySort(); } +/** + * 暴露 open 供列表页打开抽屉 + */ defineExpose({ open }); diff --git a/src/views/codegen/components/PreviewStep.vue b/src/views/codegen/components/PreviewStep.vue index a3f2a6e7..8aced30e 100644 --- a/src/views/codegen/components/PreviewStep.vue +++ b/src/views/codegen/components/PreviewStep.vue @@ -150,6 +150,9 @@ import GeneratorAPI from "@/api/codegen"; import type { GenConfigForm } from "@/api/codegen"; import { getFileIcon } from "../utils/tree-builder"; +/** + * 代码预览步骤 + */ const props = defineProps<{ genConfigFormData: GenConfigForm; previewScope: "all" | "frontend" | "backend"; @@ -161,6 +164,9 @@ const props = defineProps<{ tableName: string; }>(); +/** + * 上抛预览范围变化与文件点击 + */ const emit = defineEmits<{ (_e: "update:previewScope", _val: "all" | "frontend" | "backend"): void; (_e: "update:previewTypes", _val: string[]): void; @@ -256,6 +262,9 @@ function startResize(e: MouseEvent) { document.addEventListener("mouseup", onUp); } +/** + * 暴露编辑器刷新与文件树引用 + */ defineExpose({ refreshEditor, fileTreeRef }); onBeforeUnmount(() => { diff --git a/src/views/codegen/components/TableList.vue b/src/views/codegen/components/TableList.vue index 1705c72a..89a78560 100644 --- a/src/views/codegen/components/TableList.vue +++ b/src/views/codegen/components/TableList.vue @@ -86,6 +86,9 @@ import { usePageTable } from "@/composables"; // 表已配置代码生成(1:是;0:否) const TABLE_CONFIGURED = 1; +/** + * 上抛生成与重置配置操作 + */ const emit = defineEmits<{ generate: [tableName: string]; "reset-config": [tableName: string]; @@ -128,5 +131,8 @@ onMounted(() => { handleQuery(); }); +/** + * 暴露查询与重置能力供父组件调用 + */ defineExpose({ handleQuery, handleResetConfig }); diff --git a/src/views/codegen/components/WriteLocalDialog.vue b/src/views/codegen/components/WriteLocalDialog.vue index 8129584f..6741a6d3 100644 --- a/src/views/codegen/components/WriteLocalDialog.vue +++ b/src/views/codegen/components/WriteLocalDialog.vue @@ -133,6 +133,9 @@ + diff --git a/src/views/data-screen/components/battery-health.vue b/src/views/data-screen/components/battery-health.vue new file mode 100644 index 00000000..3b82b3cc --- /dev/null +++ b/src/views/data-screen/components/battery-health.vue @@ -0,0 +1,90 @@ + + diff --git a/src/views/data-screen/components/center-charts.vue b/src/views/data-screen/components/center-charts.vue new file mode 100644 index 00000000..8d0ac054 --- /dev/null +++ b/src/views/data-screen/components/center-charts.vue @@ -0,0 +1,13 @@ + + diff --git a/src/views/data-screen/components/cephalosome.vue b/src/views/data-screen/components/cephalosome.vue new file mode 100644 index 00000000..f1ad393c --- /dev/null +++ b/src/views/data-screen/components/cephalosome.vue @@ -0,0 +1,35 @@ + + diff --git a/src/views/data-screen/components/electricity-usage-mode.vue b/src/views/data-screen/components/electricity-usage-mode.vue new file mode 100644 index 00000000..46298f60 --- /dev/null +++ b/src/views/data-screen/components/electricity-usage-mode.vue @@ -0,0 +1,92 @@ + + + diff --git a/src/views/data-screen/components/left-charts.vue b/src/views/data-screen/components/left-charts.vue new file mode 100644 index 00000000..2d7dd671 --- /dev/null +++ b/src/views/data-screen/components/left-charts.vue @@ -0,0 +1,15 @@ + + diff --git a/src/views/data-screen/components/map-chart.vue b/src/views/data-screen/components/map-chart.vue new file mode 100644 index 00000000..76c0713d --- /dev/null +++ b/src/views/data-screen/components/map-chart.vue @@ -0,0 +1,97 @@ + + diff --git a/src/views/data-screen/components/mileage-energy-consumption.vue b/src/views/data-screen/components/mileage-energy-consumption.vue new file mode 100644 index 00000000..d55a5c51 --- /dev/null +++ b/src/views/data-screen/components/mileage-energy-consumption.vue @@ -0,0 +1,203 @@ + + diff --git a/src/views/data-screen/components/real-time-alarm.vue b/src/views/data-screen/components/real-time-alarm.vue new file mode 100644 index 00000000..cf04e299 --- /dev/null +++ b/src/views/data-screen/components/real-time-alarm.vue @@ -0,0 +1,85 @@ + + diff --git a/src/views/data-screen/components/real-time-operation.vue b/src/views/data-screen/components/real-time-operation.vue new file mode 100644 index 00000000..f0baea31 --- /dev/null +++ b/src/views/data-screen/components/real-time-operation.vue @@ -0,0 +1,105 @@ + + diff --git a/src/views/data-screen/components/real-time-status.vue b/src/views/data-screen/components/real-time-status.vue new file mode 100644 index 00000000..b16e7e80 --- /dev/null +++ b/src/views/data-screen/components/real-time-status.vue @@ -0,0 +1,134 @@ + + + diff --git a/src/views/data-screen/components/regional-operation.vue b/src/views/data-screen/components/regional-operation.vue new file mode 100644 index 00000000..78ad4c42 --- /dev/null +++ b/src/views/data-screen/components/regional-operation.vue @@ -0,0 +1,114 @@ + + + diff --git a/src/views/data-screen/components/right-charts.vue b/src/views/data-screen/components/right-charts.vue new file mode 100644 index 00000000..85a4f3ba --- /dev/null +++ b/src/views/data-screen/components/right-charts.vue @@ -0,0 +1,15 @@ + + diff --git a/src/views/data-screen/components/text-carousel.vue b/src/views/data-screen/components/text-carousel.vue new file mode 100644 index 00000000..339d87eb --- /dev/null +++ b/src/views/data-screen/components/text-carousel.vue @@ -0,0 +1,85 @@ + + + + diff --git a/src/views/data-screen/components/vehicle-charging-chart.vue b/src/views/data-screen/components/vehicle-charging-chart.vue new file mode 100644 index 00000000..3030caa6 --- /dev/null +++ b/src/views/data-screen/components/vehicle-charging-chart.vue @@ -0,0 +1,132 @@ + + diff --git a/src/views/data-screen/components/vehicle-distribution.vue b/src/views/data-screen/components/vehicle-distribution.vue new file mode 100644 index 00000000..738b9baa --- /dev/null +++ b/src/views/data-screen/components/vehicle-distribution.vue @@ -0,0 +1,118 @@ + + diff --git a/src/views/data-screen/composables/useKeepTicking.ts b/src/views/data-screen/composables/useKeepTicking.ts new file mode 100644 index 00000000..ad5720e5 --- /dev/null +++ b/src/views/data-screen/composables/useKeepTicking.ts @@ -0,0 +1,52 @@ +import { onMounted, onUnmounted } from "vue"; + +/** + * 常驻定时器:组件存活期间按固定间隔执行回调,页面隐藏时自动暂停 + * + * @param callback 定时器每次触发时执行的回调 + * @param interval 间隔毫秒数,默认 3000 + */ +export function useKeepTicking(callback: () => void, interval = 3000) { + /** 定时器是否正在运行 */ + let ticking = false; + /** 定时器标识 */ + let timerId: ReturnType | null = null; + + const startTicker = () => { + if (!ticking) { + ticking = true; + timerId = setInterval(callback, interval); + } + }; + + const stopTicker = () => { + if (ticking) { + ticking = false; + if (timerId) clearInterval(timerId); + timerId = null; + } + }; + + const handleVisibilityChange = () => { + if (document.hidden) { + stopTicker(); + } else { + startTicker(); + } + }; + + onMounted(() => { + document.addEventListener("visibilitychange", handleVisibilityChange); + startTicker(); + }); + + onUnmounted(() => { + document.removeEventListener("visibilitychange", handleVisibilityChange); + stopTicker(); + }); + + return { + startTicker, + stopTicker, + }; +} diff --git a/src/views/data-screen/index.vue b/src/views/data-screen/index.vue new file mode 100644 index 00000000..294749aa --- /dev/null +++ b/src/views/data-screen/index.vue @@ -0,0 +1,76 @@ + + + diff --git a/src/views/data-screen/utils/seriesData.ts b/src/views/data-screen/utils/seriesData.ts new file mode 100644 index 00000000..79e4ffc7 --- /dev/null +++ b/src/views/data-screen/utils/seriesData.ts @@ -0,0 +1,421 @@ +interface City { + name: string; + value: [number, number, number]; + symbolSize?: number; + itemStyle: { color: string }; +} + +interface MoveLine { + fromName: string; + toName: string; + coords: [[number, number], [number, number]]; +} + +export const city: City[] = [ + { name: "北京", value: [116.395645, 39.929986, 12], itemStyle: { color: "#58B3CC" } }, + { name: "上海", value: [121.487899, 31.249162, 12], itemStyle: { color: "#58B3CC" } }, + { name: "天津", value: [117.210813, 39.14393, 12], itemStyle: { color: "#58B3CC" } }, + { name: "重庆", value: [106.530635, 29.544606, 12], itemStyle: { color: "#58B3CC" } }, + { name: "合肥", value: [117.282699, 31.866942, 12], itemStyle: { color: "#58B3CC" } }, + { name: "安庆", value: [117.058739, 30.537898, 13], itemStyle: { color: "#F58158" } }, + { name: "蚌埠", value: [117.35708, 32.929499, 13], itemStyle: { color: "#F58158" } }, + { name: "亳州", value: [115.787928, 33.871211, 13], itemStyle: { color: "#F58158" } }, + { name: "巢湖", value: [117.88049, 31.608733, 13], itemStyle: { color: "#F58158" } }, + { name: "池州", value: [117.494477, 30.660019, 14], itemStyle: { color: "#F58158" } }, + { name: "滁州", value: [118.32457, 32.317351, 13], itemStyle: { color: "#F58158" } }, + { name: "阜阳", value: [115.820932, 32.901211, 13], itemStyle: { color: "#F58158" } }, + { name: "淮北", value: [116.791447, 33.960023, 13], itemStyle: { color: "#F58158" } }, + { name: "淮南", value: [117.018639, 32.642812, 13], itemStyle: { color: "#F58158" } }, + { name: "黄山", value: [118.29357, 29.734435, 13], itemStyle: { color: "#F58158" } }, + { name: "六安", value: [116.505253, 31.755558, 13], itemStyle: { color: "#F58158" } }, + { name: "马鞍山", value: [118.515882, 31.688528, 13], itemStyle: { color: "#F58158" } }, + { name: "宿州", value: [116.988692, 33.636772, 13], itemStyle: { color: "#F58158" } }, + { name: "铜陵", value: [117.819429, 30.94093, 14], itemStyle: { color: "#F58158" } }, + { name: "芜湖", value: [118.384108, 31.36602, 12], itemStyle: { color: "#F58158" } }, + { name: "宣城", value: [118.752096, 30.951642, 13], itemStyle: { color: "#F58158" } }, + { name: "福州", value: [119.330221, 26.047125, 12], itemStyle: { color: "#58B3CC" } }, + { name: "龙岩", value: [117.017997, 25.078685, 13], itemStyle: { color: "#F58158" } }, + { name: "南平", value: [118.181883, 26.643626, 13], itemStyle: { color: "#F58158" } }, + { name: "宁德", value: [119.542082, 26.656527, 14], itemStyle: { color: "#F58158" } }, + { name: "莆田", value: [119.077731, 25.44845, 13], itemStyle: { color: "#F58158" } }, + { name: "泉州", value: [118.600362, 24.901652, 12], itemStyle: { color: "#F58158" } }, + { name: "三明", value: [117.642194, 26.270835, 14], itemStyle: { color: "#F58158" } }, + { name: "厦门", value: [118.103886, 24.489231, 12], itemStyle: { color: "#F58158" } }, + { name: "漳州", value: [117.676205, 24.517065, 12], itemStyle: { color: "#F58158" } }, + { name: "兰州", value: [103.823305, 36.064226, 12], itemStyle: { color: "#58B3CC" } }, + { name: "白银", value: [104.171241, 36.546682, 13], itemStyle: { color: "#F58158" } }, + { name: "定西", value: [104.626638, 35.586056, 13], itemStyle: { color: "#F58158" } }, + { name: "甘南州", value: [102.917442, 34.992211, 14], itemStyle: { color: "#F58158" } }, + { name: "嘉峪关", value: [98.281635, 39.802397, 13], itemStyle: { color: "#F58158" } }, + { name: "金昌", value: [102.208126, 38.516072, 13], itemStyle: { color: "#F58158" } }, + { name: "酒泉", value: [98.508415, 39.741474, 13], itemStyle: { color: "#F58158" } }, + { name: "临夏州", value: [103.215249, 35.598514, 13], itemStyle: { color: "#F58158" } }, + { name: "陇南", value: [104.934573, 33.39448, 14], itemStyle: { color: "#F58158" } }, + { name: "平凉", value: [106.688911, 35.55011, 13], itemStyle: { color: "#F58158" } }, + { name: "庆阳", value: [107.644227, 35.726801, 13], itemStyle: { color: "#F58158" } }, + { name: "天水", value: [105.736932, 34.584319, 13], itemStyle: { color: "#F58158" } }, + { name: "武威", value: [102.640147, 37.933172, 13], itemStyle: { color: "#F58158" } }, + { name: "张掖", value: [100.459892, 38.93932, 13], itemStyle: { color: "#F58158" } }, + { name: "广州", value: [113.30765, 23.120049, 12], itemStyle: { color: "#58B3CC" } }, + { name: "潮州", value: [116.630076, 23.661812, 13], itemStyle: { color: "#F58158" } }, + { name: "东莞", value: [113.763434, 23.043024, 12], itemStyle: { color: "#F58158" } }, + { name: "佛山", value: [113.134026, 23.035095, 13], itemStyle: { color: "#F58158" } }, + { name: "河源", value: [114.713721, 23.757251, 12], itemStyle: { color: "#F58158" } }, + { name: "惠州", value: [114.410658, 23.11354, 12], itemStyle: { color: "#F58158" } }, + { name: "江门", value: [113.078125, 22.575117, 13], itemStyle: { color: "#F58158" } }, + { name: "揭阳", value: [116.379501, 23.547999, 13], itemStyle: { color: "#F58158" } }, + { name: "茂名", value: [110.931245, 21.668226, 13], itemStyle: { color: "#F58158" } }, + { name: "梅州", value: [116.126403, 24.304571, 13], itemStyle: { color: "#F58158" } }, + { name: "清远", value: [113.040773, 23.698469, 13], itemStyle: { color: "#F58158" } }, + { name: "汕头", value: [116.72865, 23.383908, 13], itemStyle: { color: "#F58158" } }, + { name: "汕尾", value: [115.372924, 22.778731, 14], itemStyle: { color: "#F58158" } }, + { name: "韶关", value: [113.594461, 24.80296, 13], itemStyle: { color: "#F58158" } }, + { name: "深圳", value: [114.025974, 22.546054, 12], itemStyle: { color: "#F58158" } }, + { name: "阳江", value: [111.97701, 21.871517, 14], itemStyle: { color: "#F58158" } }, + { name: "云浮", value: [112.050946, 22.937976, 13], itemStyle: { color: "#F58158" } }, + { name: "湛江", value: [110.365067, 21.257463, 13], itemStyle: { color: "#F58158" } }, + { name: "肇庆", value: [112.479653, 23.078663, 13], itemStyle: { color: "#F58158" } }, + { name: "中山", value: [113.42206, 22.545178, 12], itemStyle: { color: "#F58158" } }, + { name: "珠海", value: [113.562447, 22.256915, 13], itemStyle: { color: "#F58158" } }, + { name: "南宁", value: [108.297234, 22.806493, 12], itemStyle: { color: "#58B3CC" } }, + { name: "百色", value: [106.631821, 23.901512, 13], itemStyle: { color: "#F58158" } }, + { name: "北海", value: [109.122628, 21.472718, 13], itemStyle: { color: "#F58158" } }, + { name: "崇左", value: [107.357322, 22.415455, 14], itemStyle: { color: "#F58158" } }, + { name: "防城港", value: [108.351791, 21.617398, 15], itemStyle: { color: "#F58158" } }, + { name: "桂林", value: [110.26092, 25.262901, 12], itemStyle: { color: "#F58158" } }, + { name: "贵港", value: [109.613708, 23.103373, 13], itemStyle: { color: "#F58158" } }, + { name: "河池", value: [108.069948, 24.699521, 14], itemStyle: { color: "#F58158" } }, + { name: "贺州", value: [111.552594, 24.411054, 14], itemStyle: { color: "#F58158" } }, + { name: "来宾", value: [109.231817, 23.741166, 14], itemStyle: { color: "#F58158" } }, + { name: "柳州", value: [109.422402, 24.329053, 12], itemStyle: { color: "#F58158" } }, + { name: "钦州", value: [108.638798, 21.97335, 13], itemStyle: { color: "#F58158" } }, + { name: "梧州", value: [111.305472, 23.485395, 13], itemStyle: { color: "#F58158" } }, + { name: "玉林", value: [110.151676, 22.643974, 14], itemStyle: { color: "#F58158" } }, + { name: "贵阳", value: [106.709177, 26.629907, 12], itemStyle: { color: "#58B3CC" } }, + { name: "安顺", value: [105.92827, 26.228595, 13], itemStyle: { color: "#F58158" } }, + { name: "毕节地区", value: [105.300492, 27.302612, 14], itemStyle: { color: "#F58158" } }, + { name: "六盘水", value: [104.852087, 26.591866, 13], itemStyle: { color: "#F58158" } }, + { name: "铜仁地区", value: [109.196161, 27.726271, 14], itemStyle: { color: "#F58158" } }, + { name: "遵义", value: [106.93126, 27.699961, 13], itemStyle: { color: "#F58158" } }, + { name: "黔西南州", value: [104.900558, 25.095148, 11], itemStyle: { color: "#F58158" } }, + { name: "黔东南州", value: [107.985353, 26.583992, 11], itemStyle: { color: "#F58158" } }, + { name: "黔南州", value: [107.523205, 26.264536, 11], itemStyle: { color: "#F58158" } }, + { name: "海口", value: [110.330802, 20.022071, 13], itemStyle: { color: "#58B3CC" } }, + { name: "白沙", value: [109.358586, 19.216056, 12], itemStyle: { color: "#F58158" } }, + { name: "保亭", value: [109.656113, 18.597592, 12], itemStyle: { color: "#F58158" } }, + { name: "昌江", value: [109.0113, 19.222483, 12], itemStyle: { color: "#F58158" } }, + { name: "儋州", value: [109.413973, 19.571153, 13], itemStyle: { color: "#F58158" } }, + { name: "澄迈", value: [109.996736, 19.693135, 13], itemStyle: { color: "#F58158" } }, + { name: "东方", value: [108.85101, 18.998161, 13], itemStyle: { color: "#F58158" } }, + { name: "定安", value: [110.32009, 19.490991, 13], itemStyle: { color: "#F58158" } }, + { name: "琼海", value: [110.414359, 19.21483, 13], itemStyle: { color: "#F58158" } }, + { name: "琼中", value: [109.861849, 19.039771, 12], itemStyle: { color: "#F58158" } }, + { name: "乐东", value: [109.062698, 18.658614, 12], itemStyle: { color: "#F58158" } }, + { name: "临高", value: [109.724101, 19.805922, 13], itemStyle: { color: "#F58158" } }, + { name: "陵水", value: [109.948661, 18.575985, 12], itemStyle: { color: "#F58158" } }, + { name: "三亚", value: [109.522771, 18.257776, 12], itemStyle: { color: "#F58158" } }, + { name: "屯昌", value: [110.063364, 19.347749, 13], itemStyle: { color: "#F58158" } }, + { name: "万宁", value: [110.292505, 18.839886, 13], itemStyle: { color: "#F58158" } }, + { name: "文昌", value: [110.780909, 19.750947, 13], itemStyle: { color: "#F58158" } }, + { name: "五指山", value: [109.51775, 18.831306, 13], itemStyle: { color: "#F58158" } }, + { name: "石家庄", value: [114.522082, 38.048958, 12], itemStyle: { color: "#58B3CC" } }, + { name: "保定", value: [115.49481, 38.886565, 13], itemStyle: { color: "#F58158" } }, + { name: "沧州", value: [116.863806, 38.297615, 13], itemStyle: { color: "#F58158" } }, + { name: "承德", value: [117.933822, 40.992521, 14], itemStyle: { color: "#F58158" } }, + { name: "邯郸", value: [114.482694, 36.609308, 13], itemStyle: { color: "#F58158" } }, + { name: "衡水", value: [115.686229, 37.746929, 13], itemStyle: { color: "#F58158" } }, + { name: "廊坊", value: [116.703602, 39.518611, 13], itemStyle: { color: "#F58158" } }, + { name: "秦皇岛", value: [119.604368, 39.945462, 12], itemStyle: { color: "#F58158" } }, + { name: "唐山", value: [118.183451, 39.650531, 13], itemStyle: { color: "#F58158" } }, + { name: "邢台", value: [114.520487, 37.069531, 13], itemStyle: { color: "#F58158" } }, + { name: "张家口", value: [114.893782, 40.811188, 13], itemStyle: { color: "#F58158" } }, + { name: "郑州", value: [113.649644, 34.75661, 12], itemStyle: { color: "#58B3CC" } }, + { name: "安阳", value: [114.351807, 36.110267, 12], itemStyle: { color: "#F58158" } }, + { name: "鹤壁", value: [114.29777, 35.755426, 13], itemStyle: { color: "#F58158" } }, + { name: "焦作", value: [113.211836, 35.234608, 13], itemStyle: { color: "#F58158" } }, + { name: "开封", value: [114.351642, 34.801854, 13], itemStyle: { color: "#F58158" } }, + { name: "洛阳", value: [112.447525, 34.657368, 12], itemStyle: { color: "#F58158" } }, + { name: "漯河", value: [114.046061, 33.576279, 13], itemStyle: { color: "#F58158" } }, + { name: "南阳", value: [112.542842, 33.01142, 13], itemStyle: { color: "#F58158" } }, + { name: "平顶山", value: [113.300849, 33.745301, 13], itemStyle: { color: "#F58158" } }, + { name: "濮阳", value: [115.026627, 35.753298, 12], itemStyle: { color: "#F58158" } }, + { name: "三门峡", value: [111.181262, 34.78332, 13], itemStyle: { color: "#F58158" } }, + { name: "商丘", value: [115.641886, 34.438589, 13], itemStyle: { color: "#F58158" } }, + { name: "新乡", value: [113.91269, 35.307258, 13], itemStyle: { color: "#F58158" } }, + { name: "信阳", value: [114.085491, 32.128582, 13], itemStyle: { color: "#F58158" } }, + { name: "许昌", value: [113.835312, 34.02674, 13], itemStyle: { color: "#F58158" } }, + { name: "周口", value: [114.654102, 33.623741, 13], itemStyle: { color: "#F58158" } }, + { name: "驻马店", value: [114.049154, 32.983158, 13], itemStyle: { color: "#F58158" } }, + { name: "哈尔滨", value: [126.657717, 45.773225, 12], itemStyle: { color: "#58B3CC" } }, + { name: "大庆", value: [125.02184, 46.596709, 12], itemStyle: { color: "#F58158" } }, + { name: "大兴安岭地区", value: [124.196104, 51.991789, 10], itemStyle: { color: "#F58158" } }, + { name: "鹤岗", value: [130.292472, 47.338666, 13], itemStyle: { color: "#F58158" } }, + { name: "黑河", value: [127.50083, 50.25069, 14], itemStyle: { color: "#F58158" } }, + { name: "鸡西", value: [130.941767, 45.32154, 13], itemStyle: { color: "#F58158" } }, + { name: "佳木斯", value: [130.284735, 46.81378, 12], itemStyle: { color: "#F58158" } }, + { name: "牡丹江", value: [129.608035, 44.588521, 13], itemStyle: { color: "#F58158" } }, + { name: "七台河", value: [131.019048, 45.775005, 14], itemStyle: { color: "#F58158" } }, + { name: "齐齐哈尔", value: [123.987289, 47.3477, 13], itemStyle: { color: "#F58158" } }, + { name: "双鸭山", value: [131.171402, 46.655102, 13], itemStyle: { color: "#F58158" } }, + { name: "绥化", value: [126.989095, 46.646064, 13], itemStyle: { color: "#F58158" } }, + { name: "伊春", value: [128.910766, 47.734685, 14], itemStyle: { color: "#F58158" } }, + { name: "武汉", value: [114.3162, 30.581084, 12], itemStyle: { color: "#58B3CC" } }, + { name: "鄂州", value: [114.895594, 30.384439, 14], itemStyle: { color: "#F58158" } }, + { name: "恩施", value: [109.517433, 30.308978, 14], itemStyle: { color: "#F58158" } }, + { name: "黄冈", value: [114.906618, 30.446109, 14], itemStyle: { color: "#F58158" } }, + { name: "黄石", value: [115.050683, 30.216127, 13], itemStyle: { color: "#F58158" } }, + { name: "荆门", value: [112.21733, 31.042611, 13], itemStyle: { color: "#F58158" } }, + { name: "荆州", value: [112.241866, 30.332591, 12], itemStyle: { color: "#F58158" } }, + { name: "潜江", value: [112.768768, 30.343116, 13], itemStyle: { color: "#F58158" } }, + { name: "神农架林区", value: [110.487231, 31.595768, 13], itemStyle: { color: "#F58158" } }, + { name: "十堰", value: [110.801229, 32.636994, 13], itemStyle: { color: "#F58158" } }, + { name: "随州", value: [113.379358, 31.717858, 13], itemStyle: { color: "#F58158" } }, + { name: "天门", value: [113.12623, 30.649047, 13], itemStyle: { color: "#F58158" } }, + { name: "仙桃", value: [113.387448, 30.293966, 13], itemStyle: { color: "#F58158" } }, + { name: "咸宁", value: [114.300061, 29.880657, 13], itemStyle: { color: "#F58158" } }, + { name: "襄阳", value: [112.176326, 32.094934, 12], itemStyle: { color: "#F58158" } }, + { name: "孝感", value: [113.935734, 30.927955, 13], itemStyle: { color: "#F58158" } }, + { name: "宜昌", value: [111.310981, 30.732758, 13], itemStyle: { color: "#F58158" } }, + { name: "长沙", value: [112.979353, 28.213478, 12], itemStyle: { color: "#58B3CC" } }, + { name: "常德", value: [111.653718, 29.012149, 12], itemStyle: { color: "#F58158" } }, + { name: "郴州", value: [113.037704, 25.782264, 13], itemStyle: { color: "#F58158" } }, + { name: "衡阳", value: [112.583819, 26.898164, 13], itemStyle: { color: "#F58158" } }, + { name: "怀化", value: [109.986959, 27.557483, 13], itemStyle: { color: "#F58158" } }, + { name: "娄底", value: [111.996396, 27.741073, 13], itemStyle: { color: "#F58158" } }, + { name: "邵阳", value: [111.461525, 27.236811, 13], itemStyle: { color: "#F58158" } }, + { name: "湘潭", value: [112.935556, 27.835095, 13], itemStyle: { color: "#F58158" } }, + { name: "湘西州", value: [109.745746, 28.317951, 14], itemStyle: { color: "#F58158" } }, + { name: "益阳", value: [112.366547, 28.588088, 13], itemStyle: { color: "#F58158" } }, + { name: "永州", value: [111.614648, 26.435972, 13], itemStyle: { color: "#F58158" } }, + { name: "岳阳", value: [113.146196, 29.378007, 13], itemStyle: { color: "#F58158" } }, + { name: "张家界", value: [110.48162, 29.124889, 13], itemStyle: { color: "#F58158" } }, + { name: "株洲", value: [113.131695, 27.827433, 13], itemStyle: { color: "#F58158" } }, + { name: "南京", value: [118.778074, 32.057236, 12], itemStyle: { color: "#58B3CC" } }, + { name: "常州", value: [119.981861, 31.771397, 12], itemStyle: { color: "#F58158" } }, + { name: "淮安", value: [119.030186, 33.606513, 12], itemStyle: { color: "#F58158" } }, + { name: "连云港", value: [119.173872, 34.601549, 12], itemStyle: { color: "#F58158" } }, + { name: "南通", value: [120.873801, 32.014665, 12], itemStyle: { color: "#F58158" } }, + { name: "苏州", value: [120.619907, 31.317987, 12], itemStyle: { color: "#F58158" } }, + { name: "宿迁", value: [118.296893, 33.95205, 13], itemStyle: { color: "#F58158" } }, + { name: "泰州", value: [119.919606, 32.476053, 13], itemStyle: { color: "#F58158" } }, + { name: "无锡", value: [120.305456, 31.570037, 12], itemStyle: { color: "#F58158" } }, + { name: "徐州", value: [117.188107, 34.271553, 12], itemStyle: { color: "#F58158" } }, + { name: "盐城", value: [120.148872, 33.379862, 12], itemStyle: { color: "#F58158" } }, + { name: "扬州", value: [119.427778, 32.408505, 13], itemStyle: { color: "#F58158" } }, + { name: "镇江", value: [119.455835, 32.204409, 13], itemStyle: { color: "#F58158" } }, + { name: "南昌", value: [115.893528, 28.689578, 12], itemStyle: { color: "#58B3CC" } }, + { name: "抚州", value: [116.360919, 27.954545, 13], itemStyle: { color: "#F58158" } }, + { name: "赣州", value: [114.935909, 25.845296, 13], itemStyle: { color: "#F58158" } }, + { name: "吉安", value: [114.992039, 27.113848, 13], itemStyle: { color: "#F58158" } }, + { name: "景德镇", value: [117.186523, 29.303563, 12], itemStyle: { color: "#F58158" } }, + { name: "九江", value: [115.999848, 29.71964, 13], itemStyle: { color: "#F58158" } }, + { name: "萍乡", value: [113.859917, 27.639544, 13], itemStyle: { color: "#F58158" } }, + { name: "上饶", value: [117.955464, 28.457623, 13], itemStyle: { color: "#F58158" } }, + { name: "新余", value: [114.947117, 27.822322, 13], itemStyle: { color: "#F58158" } }, + { name: "宜春", value: [114.400039, 27.81113, 13], itemStyle: { color: "#F58158" } }, + { name: "鹰潭", value: [117.03545, 28.24131, 13], itemStyle: { color: "#F58158" } }, + { name: "长春", value: [125.313642, 43.898338, 12], itemStyle: { color: "#58B3CC" } }, + { name: "白城", value: [122.840777, 45.621086, 13], itemStyle: { color: "#F58158" } }, + { name: "白山", value: [126.435798, 41.945859, 13], itemStyle: { color: "#F58158" } }, + { name: "吉林市", value: [126.564544, 43.871988, 12], itemStyle: { color: "#F58158" } }, + { name: "辽源", value: [125.133686, 42.923303, 13], itemStyle: { color: "#F58158" } }, + { name: "四平", value: [124.391382, 43.175525, 12], itemStyle: { color: "#F58158" } }, + { name: "松原", value: [124.832995, 45.136049, 13], itemStyle: { color: "#F58158" } }, + { name: "通化", value: [125.94265, 41.736397, 13], itemStyle: { color: "#F58158" } }, + { name: "延边", value: [129.485902, 42.896414, 13], itemStyle: { color: "#F58158" } }, + { name: "沈阳", value: [123.432791, 41.808645, 12], itemStyle: { color: "#58B3CC" } }, + { name: "鞍山", value: [123.007763, 41.118744, 13], itemStyle: { color: "#F58158" } }, + { name: "本溪", value: [123.778062, 41.325838, 12], itemStyle: { color: "#F58158" } }, + { name: "朝阳", value: [120.446163, 41.571828, 13], itemStyle: { color: "#F58158" } }, + { name: "大连", value: [121.593478, 38.94871, 12], itemStyle: { color: "#F58158" } }, + { name: "丹东", value: [124.338543, 40.129023, 12], itemStyle: { color: "#F58158" } }, + { name: "抚顺", value: [123.92982, 41.877304, 12], itemStyle: { color: "#F58158" } }, + { name: "阜新", value: [121.660822, 42.01925, 14], itemStyle: { color: "#F58158" } }, + { name: "葫芦岛", value: [120.860758, 40.74303, 13], itemStyle: { color: "#F58158" } }, + { name: "锦州", value: [121.147749, 41.130879, 13], itemStyle: { color: "#F58158" } }, + { name: "辽阳", value: [123.172451, 41.273339, 14], itemStyle: { color: "#F58158" } }, + { name: "盘锦", value: [122.073228, 41.141248, 13], itemStyle: { color: "#F58158" } }, + { name: "铁岭", value: [123.85485, 42.299757, 13], itemStyle: { color: "#F58158" } }, + { name: "营口", value: [122.233391, 40.668651, 13], itemStyle: { color: "#F58158" } }, + { name: "呼和浩特", value: [111.660351, 40.828319, 12], itemStyle: { color: "#58B3CC" } }, + { name: "阿拉善盟", value: [105.695683, 38.843075, 14], itemStyle: { color: "#F58158" } }, + { name: "包头", value: [109.846239, 40.647119, 12], itemStyle: { color: "#F58158" } }, + { name: "巴彦淖尔", value: [107.423807, 40.76918, 12], itemStyle: { color: "#F58158" } }, + { name: "赤峰", value: [118.930761, 42.297112, 12], itemStyle: { color: "#F58158" } }, + { name: "鄂尔多斯", value: [109.993706, 39.81649, 12], itemStyle: { color: "#F58158" } }, + { name: "呼伦贝尔", value: [119.760822, 49.201636, 12], itemStyle: { color: "#F58158" } }, + { name: "通辽", value: [122.260363, 43.633756, 12], itemStyle: { color: "#F58158" } }, + { name: "乌海", value: [106.831999, 39.683177, 13], itemStyle: { color: "#F58158" } }, + { name: "乌兰察布", value: [113.112846, 41.022363, 12], itemStyle: { color: "#F58158" } }, + { name: "锡林郭勒盟", value: [116.02734, 43.939705, 11], itemStyle: { color: "#F58158" } }, + { name: "兴安盟", value: [122.048167, 46.083757, 11], itemStyle: { color: "#F58158" } }, + { name: "银川", value: [106.206479, 38.502621, 12], itemStyle: { color: "#58B3CC" } }, + { name: "固原", value: [106.285268, 36.021523, 13], itemStyle: { color: "#F58158" } }, + { name: "石嘴山", value: [106.379337, 39.020223, 13], itemStyle: { color: "#F58158" } }, + { name: "吴忠", value: [106.208254, 37.993561, 14], itemStyle: { color: "#F58158" } }, + { name: "中卫", value: [105.196754, 37.521124, 14], itemStyle: { color: "#F58158" } }, + { name: "西宁", value: [101.767921, 36.640739, 12], itemStyle: { color: "#58B3CC" } }, + { name: "果洛州", value: [100.223723, 34.480485, 11], itemStyle: { color: "#F58158" } }, + { name: "海东地区", value: [102.085207, 36.51761, 11], itemStyle: { color: "#F58158" } }, + { name: "海北州", value: [100.879802, 36.960654, 11], itemStyle: { color: "#F58158" } }, + { name: "海南州", value: [100.624066, 36.284364, 11], itemStyle: { color: "#F58158" } }, + { name: "海西州", value: [97.342625, 37.373799, 11], itemStyle: { color: "#F58158" } }, + { name: "黄南州", value: [102.0076, 35.522852, 11], itemStyle: { color: "#F58158" } }, + { name: "玉树州", value: [97.013316, 33.00624, 14], itemStyle: { color: "#F58158" } }, + { name: "济南", value: [117.024967, 36.682785, 12], itemStyle: { color: "#58B3CC" } }, + { name: "滨州", value: [117.968292, 37.405314, 12], itemStyle: { color: "#F58158" } }, + { name: "东营", value: [118.583926, 37.487121, 12], itemStyle: { color: "#F58158" } }, + { name: "德州", value: [116.328161, 37.460826, 12], itemStyle: { color: "#F58158" } }, + { name: "菏泽", value: [115.46336, 35.26244, 13], itemStyle: { color: "#F58158" } }, + { name: "济宁", value: [116.600798, 35.402122, 13], itemStyle: { color: "#F58158" } }, + { name: "莱芜", value: [117.684667, 36.233654, 13], itemStyle: { color: "#F58158" } }, + { name: "聊城", value: [115.986869, 36.455829, 12], itemStyle: { color: "#F58158" } }, + { name: "临沂", value: [118.340768, 35.072409, 12], itemStyle: { color: "#F58158" } }, + { name: "青岛", value: [120.384428, 36.105215, 12], itemStyle: { color: "#F58158" } }, + { name: "日照", value: [119.50718, 35.420225, 12], itemStyle: { color: "#F58158" } }, + { name: "泰安", value: [117.089415, 36.188078, 13], itemStyle: { color: "#F58158" } }, + { name: "威海", value: [122.093958, 37.528787, 13], itemStyle: { color: "#F58158" } }, + { name: "潍坊", value: [119.142634, 36.716115, 12], itemStyle: { color: "#F58158" } }, + { name: "烟台", value: [121.309555, 37.536562, 12], itemStyle: { color: "#F58158" } }, + { name: "枣庄", value: [117.279305, 34.807883, 13], itemStyle: { color: "#F58158" } }, + { name: "淄博", value: [118.059134, 36.804685, 12], itemStyle: { color: "#F58158" } }, + { name: "太原", value: [112.550864, 37.890277, 12], itemStyle: { color: "#58B3CC" } }, + { name: "长治", value: [113.120292, 36.201664, 12], itemStyle: { color: "#F58158" } }, + { name: "大同", value: [113.290509, 40.113744, 12], itemStyle: { color: "#F58158" } }, + { name: "晋城", value: [112.867333, 35.499834, 13], itemStyle: { color: "#F58158" } }, + { name: "晋中", value: [112.738514, 37.693362, 13], itemStyle: { color: "#F58158" } }, + { name: "临汾", value: [111.538788, 36.099745, 13], itemStyle: { color: "#F58158" } }, + { name: "吕梁", value: [111.143157, 37.527316, 14], itemStyle: { color: "#F58158" } }, + { name: "朔州", value: [112.479928, 39.337672, 13], itemStyle: { color: "#F58158" } }, + { name: "忻州", value: [112.727939, 38.461031, 12], itemStyle: { color: "#F58158" } }, + { name: "阳泉", value: [113.569238, 37.869529, 13], itemStyle: { color: "#F58158" } }, + { name: "运城", value: [111.006854, 35.038859, 13], itemStyle: { color: "#F58158" } }, + { name: "西安", value: [108.953098, 34.2778, 12], itemStyle: { color: "#58B3CC" } }, + { name: "安康", value: [109.038045, 32.70437, 13], itemStyle: { color: "#F58158" } }, + { name: "宝鸡", value: [107.170645, 34.364081, 12], itemStyle: { color: "#F58158" } }, + { name: "汉中", value: [107.045478, 33.081569, 13], itemStyle: { color: "#F58158" } }, + { name: "商洛", value: [109.934208, 33.873907, 13], itemStyle: { color: "#F58158" } }, + { name: "铜川", value: [108.968067, 34.908368, 13], itemStyle: { color: "#F58158" } }, + { name: "渭南", value: [109.483933, 34.502358, 13], itemStyle: { color: "#F58158" } }, + { name: "咸阳", value: [108.707509, 34.345373, 13], itemStyle: { color: "#F58158" } }, + { name: "延安", value: [109.50051, 36.60332, 13], itemStyle: { color: "#F58158" } }, + { name: "榆林", value: [109.745926, 38.279439, 12], itemStyle: { color: "#F58158" } }, + { name: "成都", value: [104.067923, 30.679943, 12], itemStyle: { color: "#58B3CC" } }, + { name: "阿坝州", value: [102.228565, 31.905763, 15], itemStyle: { color: "#F58158" } }, + { name: "巴中", value: [106.757916, 31.869189, 14], itemStyle: { color: "#F58158" } }, + { name: "达州", value: [107.494973, 31.214199, 14], itemStyle: { color: "#F58158" } }, + { name: "德阳", value: [104.402398, 31.13114, 13], itemStyle: { color: "#F58158" } }, + { name: "甘孜州", value: [101.969232, 30.055144, 15], itemStyle: { color: "#F58158" } }, + { name: "广安", value: [106.63572, 30.463984, 13], itemStyle: { color: "#F58158" } }, + { name: "广元", value: [105.819687, 32.44104, 13], itemStyle: { color: "#F58158" } }, + { name: "乐山", value: [103.760824, 29.600958, 13], itemStyle: { color: "#F58158" } }, + { name: "凉山州", value: [102.259591, 27.892393, 14], itemStyle: { color: "#F58158" } }, + { name: "泸州", value: [105.44397, 28.89593, 14], itemStyle: { color: "#F58158" } }, + { name: "南充", value: [106.105554, 30.800965, 13], itemStyle: { color: "#F58158" } }, + { name: "眉山", value: [103.84143, 30.061115, 13], itemStyle: { color: "#F58158" } }, + { name: "绵阳", value: [104.705519, 31.504701, 12], itemStyle: { color: "#F58158" } }, + { name: "内江", value: [105.073056, 29.599462, 13], itemStyle: { color: "#F58158" } }, + { name: "攀枝花", value: [101.722423, 26.587571, 14], itemStyle: { color: "#F58158" } }, + { name: "遂宁", value: [105.564888, 30.557491, 12], itemStyle: { color: "#F58158" } }, + { name: "雅安", value: [103.009356, 29.999716, 13], itemStyle: { color: "#F58158" } }, + { name: "宜宾", value: [104.633019, 28.769675, 13], itemStyle: { color: "#F58158" } }, + { name: "资阳", value: [104.63593, 30.132191, 13], itemStyle: { color: "#F58158" } }, + { name: "自贡", value: [104.776071, 29.359157, 13], itemStyle: { color: "#F58158" } }, + { name: "拉萨", value: [91.111891, 29.662557, 13], itemStyle: { color: "#58B3CC" } }, + { name: "阿里地区", value: [81.107669, 30.404557, 11], itemStyle: { color: "#F58158" } }, + { name: "昌都地区", value: [97.185582, 31.140576, 15], itemStyle: { color: "#F58158" } }, + { name: "林芝地区", value: [94.349985, 29.666941, 11], itemStyle: { color: "#F58158" } }, + { name: "那曲地区", value: [92.067018, 31.48068, 14], itemStyle: { color: "#F58158" } }, + { name: "日喀则地区", value: [88.891486, 29.269023, 14], itemStyle: { color: "#F58158" } }, + { name: "山南地区", value: [91.750644, 29.229027, 11], itemStyle: { color: "#F58158" } }, + { name: "乌鲁木齐", value: [87.564988, 43.84038, 12], itemStyle: { color: "#58B3CC" } }, + { name: "阿拉尔", value: [81.291737, 40.61568, 13], itemStyle: { color: "#F58158" } }, + { name: "阿克苏地区", value: [80.269846, 41.171731, 12], itemStyle: { color: "#F58158" } }, + { name: "阿勒泰地区", value: [88.137915, 47.839744, 13], itemStyle: { color: "#F58158" } }, + { name: "巴音郭楞", value: [86.121688, 41.771362, 12], itemStyle: { color: "#F58158" } }, + { name: "博尔塔拉州", value: [82.052436, 44.913651, 11], itemStyle: { color: "#F58158" } }, + { name: "昌吉州", value: [87.296038, 44.007058, 13], itemStyle: { color: "#F58158" } }, + { name: "哈密地区", value: [93.528355, 42.858596, 13], itemStyle: { color: "#F58158" } }, + { name: "和田地区", value: [79.930239, 37.116774, 13], itemStyle: { color: "#F58158" } }, + { name: "喀什地区", value: [75.992973, 39.470627, 12], itemStyle: { color: "#F58158" } }, + { name: "克拉玛依", value: [84.88118, 45.594331, 13], itemStyle: { color: "#F58158" } }, + { name: "克孜勒苏州", value: [76.137564, 39.750346, 11], itemStyle: { color: "#F58158" } }, + { name: "石河子", value: [86.041865, 44.308259, 13], itemStyle: { color: "#F58158" } }, + { name: "塔城地区", value: [82.974881, 46.758684, 12], itemStyle: { color: "#F58158" } }, + { name: "图木舒克", value: [79.198155, 39.889223, 13], itemStyle: { color: "#F58158" } }, + { name: "吐鲁番地区", value: [89.181595, 42.96047, 13], itemStyle: { color: "#F58158" } }, + { name: "五家渠", value: [87.565449, 44.368899, 13], itemStyle: { color: "#F58158" } }, + { name: "伊犁州", value: [81.297854, 43.922248, 11], itemStyle: { color: "#F58158" } }, + { name: "昆明", value: [102.714601, 25.049153, 12], itemStyle: { color: "#58B3CC" } }, + { name: "保山", value: [99.177996, 25.120489, 13], itemStyle: { color: "#F58158" } }, + { name: "楚雄州", value: [101.529382, 25.066356, 13], itemStyle: { color: "#F58158" } }, + { name: "大理州", value: [100.223675, 25.5969, 14], itemStyle: { color: "#F58158" } }, + { name: "德宏州", value: [98.589434, 24.44124, 14], itemStyle: { color: "#F58158" } }, + { name: "迪庆州", value: [99.713682, 27.831029, 14], itemStyle: { color: "#F58158" } }, + { name: "红河州", value: [103.384065, 23.367718, 11], itemStyle: { color: "#F58158" } }, + { name: "丽江", value: [100.229628, 26.875351, 13], itemStyle: { color: "#F58158" } }, + { name: "临沧", value: [100.092613, 23.887806, 14], itemStyle: { color: "#F58158" } }, + { name: "怒江州", value: [98.859932, 25.860677, 14], itemStyle: { color: "#F58158" } }, + { name: "普洱", value: [100.980058, 22.788778, 14], itemStyle: { color: "#F58158" } }, + { name: "曲靖", value: [103.782539, 25.520758, 12], itemStyle: { color: "#F58158" } }, + { name: "昭通", value: [103.725021, 27.340633, 13], itemStyle: { color: "#F58158" } }, + { name: "文山", value: [104.089112, 23.401781, 14], itemStyle: { color: "#F58158" } }, + { name: "西双版纳", value: [100.803038, 22.009433, 13], itemStyle: { color: "#F58158" } }, + { name: "玉溪", value: [102.545068, 24.370447, 13], itemStyle: { color: "#F58158" } }, + { name: "杭州", value: [120.219375, 30.259244, 12], itemStyle: { color: "#58B3CC" } }, + { name: "湖州", value: [120.137243, 30.877925, 12], itemStyle: { color: "#F58158" } }, + { name: "嘉兴", value: [120.760428, 30.773992, 13], itemStyle: { color: "#F58158" } }, + { name: "金华", value: [119.652576, 29.102899, 12], itemStyle: { color: "#F58158" } }, + { name: "丽水", value: [119.929576, 28.4563, 13], itemStyle: { color: "#F58158" } }, + { name: "宁波", value: [121.579006, 29.885259, 12], itemStyle: { color: "#F58158" } }, + { name: "衢州", value: [118.875842, 28.95691, 12], itemStyle: { color: "#F58158" } }, + { name: "绍兴", value: [120.592467, 30.002365, 13], itemStyle: { color: "#F58158" } }, + { name: "台州", value: [121.440613, 28.668283, 13], itemStyle: { color: "#F58158" } }, + { name: "温州", value: [120.690635, 28.002838, 12], itemStyle: { color: "#F58158" } }, + { name: "舟山", value: [122.169872, 30.03601, 13], itemStyle: { color: "#F58158" } }, + { name: "香港", value: [114.186124, 22.293586, 11], itemStyle: { color: "#58B3CC" } }, + { name: "澳门", value: [113.557519, 22.204118, 13], itemStyle: { color: "#58B3CC" } }, + { name: "台湾", value: [120.961454, 23.80406, 8], itemStyle: { color: "#58B3CC" } }, +]; + +/** + * 获取折线数据 + * @param length 折线数量 + * @returns 折线数据 + */ +const getSeriesData = (length: number) => { + const cityList = city.sort(() => Math.random() - 0.5); + + const moveLines: MoveLine[] = []; + + for (let i = 0; i <= length; i++) { + const from = cityList[Math.floor(Math.random() * cityList.length)]; + const to = cityList[Math.floor(Math.random() * cityList.length)]; + + const [a1, b1] = from.value; + const [a2, b2] = to.value; + + moveLines.push({ + fromName: from.name, + toName: to.name, + coords: [ + [a1, b1], + [a2, b2], + ], + }); + } + + // 通过数量计算出symbolSize的值 + city.forEach((item) => { + item.symbolSize = + moveLines.filter((line) => line.fromName === item.name || line.toName === item.name).length * + 2; + }); + + return { + cityData: city, + moveLines, + }; +}; + +export default getSeriesData; diff --git a/src/views/data-screen/utils/time.ts b/src/views/data-screen/utils/time.ts new file mode 100644 index 00000000..e9119138 --- /dev/null +++ b/src/views/data-screen/utils/time.ts @@ -0,0 +1,56 @@ +/** + * 时间格式化:按 pattern 里的占位符替换为对应时间片段 + * + * 支持占位符:YYYY/YY/MM/M/DD/D/HH/H/hh/h/mm/m/ss/s/SSS(A 为上午下午,dd 为星期,d 为星期序号) + * + * @param time 时间对象、时间戳或时间字符串 + * @param pattern 输出格式,默认 "YYYY-MM-DD HH:mm:ss" + */ +export function parseTime(time: Date | string | number, pattern = "YYYY-MM-DD HH:mm:ss"): string { + let date: Date; + + if (time instanceof Date) { + date = time; + } else if (typeof time === "number") { + // 秒级时间戳补成毫秒 + date = time.toString().length < 13 ? new Date(time * 1000) : new Date(time); + } else { + date = new Date(time); + } + + const weekdays = ["日", "一", "二", "三", "四", "五", "六"]; + const year = date.getFullYear(); + const month = date.getMonth() + 1; + const day = date.getDate(); + const hours = date.getHours(); + const minutes = date.getMinutes(); + const seconds = date.getSeconds(); + const milliseconds = date.getMilliseconds(); + const hours12 = hours % 12 || 12; + + const formatMap: Record = { + YYYY: String(year), + YY: String(year).slice(-2), + MM: String(month).padStart(2, "0"), + M: String(month), + DD: String(day).padStart(2, "0"), + D: String(day), + HH: String(hours).padStart(2, "0"), + H: String(hours), + hh: String(hours12).padStart(2, "0"), + h: String(hours12), + mm: String(minutes).padStart(2, "0"), + m: String(minutes), + ss: String(seconds).padStart(2, "0"), + s: String(seconds), + SSS: String(milliseconds).padStart(3, "0"), + A: hours < 12 ? "上午" : "下午", + dd: weekdays[date.getDay()], + d: String(date.getDay()), + }; + + return pattern.replace( + /YYYY|YY|MM|M|DD|D|HH|H|hh|h|mm|m|ss|s|SSS|A|dd|d/g, + (match) => formatMap[match] || match + ); +} diff --git a/src/views/demo/component/dictionary.vue b/src/views/demo/component/dictionary.vue index f3f8a541..c3a172ea 100644 --- a/src/views/demo/component/dictionary.vue +++ b/src/views/demo/component/dictionary.vue @@ -46,6 +46,10 @@ diff --git a/src/views/demo/component/icons.vue b/src/views/demo/component/icons.vue index fff01fca..2ff6fc6c 100644 --- a/src/views/demo/component/icons.vue +++ b/src/views/demo/component/icons.vue @@ -39,7 +39,7 @@ import * as ElementPlusIconsVue from "@element-plus/icons-vue"; defineOptions({ - name: "Icons", + name: "IconDemo", inheritAttrs: false, }); const svg_icons: string[] = [ diff --git a/src/views/demo/component/table-select/index.vue b/src/views/demo/component/table-select/index.vue index a9d2da04..7e21952b 100644 --- a/src/views/demo/component/table-select/index.vue +++ b/src/views/demo/component/table-select/index.vue @@ -27,6 +27,10 @@ diff --git a/src/views/demo/route/multi-level/level-one/level-two/level-three-a/index.vue b/src/views/demo/route/multi-level/level-one/level-two/level-three-a/index.vue index 1c2a08f1..4d97d941 100644 --- a/src/views/demo/route/multi-level/level-one/level-two/level-three-a/index.vue +++ b/src/views/demo/route/multi-level/level-one/level-two/level-three-a/index.vue @@ -1,11 +1,5 @@ diff --git a/src/views/demo/screen/device/index.vue b/src/views/demo/screen/device/index.vue deleted file mode 100644 index cdb16961..00000000 --- a/src/views/demo/screen/device/index.vue +++ /dev/null @@ -1,595 +0,0 @@ - - - - - diff --git a/src/views/demo/screen/ecommerce/index.vue b/src/views/demo/screen/ecommerce/index.vue deleted file mode 100644 index 86052b3a..00000000 --- a/src/views/demo/screen/ecommerce/index.vue +++ /dev/null @@ -1,591 +0,0 @@ - - - diff --git a/src/views/demo/screen/system/index.vue b/src/views/demo/screen/system/index.vue deleted file mode 100644 index d9473c6c..00000000 --- a/src/views/demo/screen/system/index.vue +++ /dev/null @@ -1,720 +0,0 @@ - - - - - diff --git a/src/views/demo/screen/utils.ts b/src/views/demo/screen/utils.ts deleted file mode 100644 index 1c07dcb8..00000000 --- a/src/views/demo/screen/utils.ts +++ /dev/null @@ -1,107 +0,0 @@ -// 数据大屏示例共用的工具函数与配色 - -import type * as echartsCore from "echarts/core"; - -/** - * 图表通用配色 - */ -export const SCREEN_COLORS = { - /** 坐标轴文字 */ - axis: "#5c7fa8", - /** 分隔线 */ - grid: "rgba(92, 127, 168, 0.16)", - /** 主题色 */ - accent: "#3ba9ff", - /** 正向色 */ - success: "#34d399", - /** 强调色 */ - purple: "#a78bfa", - /** 环形图配色:同一冷色系内的明度递进,避免彩虹色观感 */ - pie: ["#2f8fd4", "#3ba9ff", "#38bdf8", "#22d3ee"], -} as const; - -/** - * hex 转 rgba,用于指标图标的半透明底色 - */ -export function hexToRgba(hex: string, alpha: number): string { - const value = Number.parseInt(hex.slice(1), 16); - return `rgba(${(value >> 16) & 255}, ${(value >> 8) & 255}, ${value & 255}, ${alpha})`; -} - -/** - * 竖向渐变填充,面积图与柱状图共用 - */ -export function verticalGradient(from: string, to: string) { - return { - type: "linear" as const, - x: 0, - y: 0, - x2: 0, - y2: 1, - colorStops: [ - { offset: 0, color: from }, - { offset: 1, color: to }, - ], - }; -} - -/** - * 千分位格式化 - */ -export function formatNumber(value: number): string { - return value.toLocaleString("zh-CN"); -} - -/** - * 数值平滑过渡到目标值(easeOutCubic) - * - * 大屏多处需要「数字滚动」效果:首次进入时 0 → 真实值,定时刷新时小幅增涨 - * - * @param from 当前值 - * @param to 目标值 - * @param onUpdate 每帧回调 - * @param duration 动画时长,单位毫秒 - */ -export function tweenValue( - from: number, - to: number, - onUpdate: (value: number) => void, - duration = 1200 -): void { - const startAt = performance.now(); - - // 逐帧推进动画 - const step = (now: number) => { - const progress = Math.min(1, (now - startAt) / duration); - const eased = 1 - (1 - progress) ** 3; - onUpdate(Math.round(from + (to - from) * eased)); - if (progress < 1) requestAnimationFrame(step); - }; - - requestAnimationFrame(step); -} - -/** - * 加载并注册中国地图 - * - * 地图数据放在 public 下运行时加载,避免 582KB 的 GeoJSON 打进主包 - * - * @param echarts echarts 核心模块 - * @returns 省份中心点坐标,用于绘制散点与飞线 - */ -export async function registerChinaMap( - echarts: typeof echartsCore -): Promise> { - const response = await fetch(`${import.meta.env.BASE_URL}map/china.json`); - const geoJson = await response.json(); - echarts.registerMap("china", geoJson); - - const centers: Record = {}; - (geoJson.features as { properties: { name: string; cp?: [number, number] } }[]).forEach( - (feature) => { - const { name, cp } = feature.properties; - if (cp) centers[name] = cp; - } - ); - return centers; -} diff --git a/src/views/demo/table/auto-operation-column.vue b/src/views/demo/table/auto-operation-column.vue index 7b880f1c..8725daec 100644 --- a/src/views/demo/table/auto-operation-column.vue +++ b/src/views/demo/table/auto-operation-column.vue @@ -52,6 +52,10 @@ diff --git a/src/views/dynamic-form/components/publish/MethodStep.vue b/src/views/dynamic-form/components/publish/MethodStep.vue index 0fc4e303..3ec1a998 100644 --- a/src/views/dynamic-form/components/publish/MethodStep.vue +++ b/src/views/dynamic-form/components/publish/MethodStep.vue @@ -59,6 +59,9 @@ defineProps<{ shareOpened: boolean; }>(); +/** + * 上抛发布方式切换 + */ const emit = defineEmits<{ /** 切换发布方式选中态 */ toggle: [method: PublishMethod]; diff --git a/src/views/dynamic-form/components/publish/PublishResultStep.vue b/src/views/dynamic-form/components/publish/PublishResultStep.vue index 9060213c..317d53d7 100644 --- a/src/views/dynamic-form/components/publish/PublishResultStep.vue +++ b/src/views/dynamic-form/components/publish/PublishResultStep.vue @@ -73,6 +73,9 @@ const props = defineProps<{ subtitle: string; }>(); +/** + * 上抛前往查看与复制链接操作 + */ const emit = defineEmits<{ /** 前往查看(容器负责重载动态路由后跳转) */ goView: []; diff --git a/src/views/dynamic-form/index.vue b/src/views/dynamic-form/index.vue index 8d774d5d..fdfe4301 100644 --- a/src/views/dynamic-form/index.vue +++ b/src/views/dynamic-form/index.vue @@ -39,8 +39,19 @@ {{ label }} - 新增 - + + 新增 + + 删除 @@ -102,6 +113,7 @@ diff --git a/src/views/error/components/ErrorPage.vue b/src/views/error/components/ErrorPage.vue index ad1b4d48..4d436d48 100644 --- a/src/views/error/components/ErrorPage.vue +++ b/src/views/error/components/ErrorPage.vue @@ -70,6 +70,9 @@ interface ErrorPageProps { variant: "locked" | "missing"; } +/** + * 错误页:404 / 无权限等场景通用 + */ const props = defineProps(); // 使用系统色生成异常页视觉,避免固定插画破坏主题一致性 diff --git a/src/views/login/components/QrCodeLogin.vue b/src/views/login/components/QrCodeLogin.vue index 210b2f67..5f863c38 100644 --- a/src/views/login/components/QrCodeLogin.vue +++ b/src/views/login/components/QrCodeLogin.vue @@ -54,6 +54,9 @@ import { onBeforeUnmount, onMounted, ref } from "vue"; // → done(已登录) / expired(过期或已使用) / canceled(APP 取消) type State = "loading" | "waiting" | "scanned" | "expired" | "canceled" | "done"; +/** + * 切换登录方式 + */ const emit = defineEmits<{ (e: "switch", mode: "login"): void }>(); const userStore = useUserStore(); diff --git a/src/views/login/components/Register.vue b/src/views/login/components/Register.vue index 0cf76882..f22314b6 100644 --- a/src/views/login/components/Register.vue +++ b/src/views/login/components/Register.vue @@ -107,6 +107,9 @@ import type { LoginRequest } from "@/api/auth"; const { t } = useI18n(); +/** + * 切换登录或注册表单 + */ const emit = defineEmits(["update:modelValue"]); /** * 切回登录表单 diff --git a/src/views/login/components/ResetPwd.vue b/src/views/login/components/ResetPwd.vue index 44bfde0a..eb172b26 100644 --- a/src/views/login/components/ResetPwd.vue +++ b/src/views/login/components/ResetPwd.vue @@ -29,6 +29,9 @@ import type { FormInstance } from "element-plus"; const { t } = useI18n(); +/** + * 切换登录或重置密码表单 + */ const emit = defineEmits(["update:modelValue"]); /** * 切回登录表单 diff --git a/src/views/system/dict/components/DictItemPanel.vue b/src/views/system/dict/components/DictItemPanel.vue index 109ddede..cd42a1eb 100644 --- a/src/views/system/dict/components/DictItemPanel.vue +++ b/src/views/system/dict/components/DictItemPanel.vue @@ -180,6 +180,9 @@ defineOptions({ inheritAttrs: false, }); +/** + * 字典项面板 + */ const props = defineProps({ /** 当前字典编码 */ dictCode: { diff --git a/src/views/system/menu/index.vue b/src/views/system/menu/index.vue index 6e141a44..e4e3f618 100644 --- a/src/views/system/menu/index.vue +++ b/src/views/system/menu/index.vue @@ -270,7 +270,11 @@