From e02ecf053f640a9016608ac861a05ab17bc41ef0 Mon Sep 17 00:00:00 2001 From: "meilin.huang" <954537473@qq.com> Date: Sun, 31 Aug 2025 21:46:10 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=B5=84=E6=BA=90=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=E7=AE=A1=E7=90=86&=E5=AE=B9=E5=99=A8?= =?UTF-8?q?=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/package.json | 10 +- frontend/src/assets/icon/db/db.svg | 1 + frontend/src/assets/icon/db/table.svg | 1 + frontend/src/assets/icon/docker/docker.svg | 1 + frontend/src/assets/icon/machine/machine.svg | 1 + frontend/src/assets/icon/mongo/mongo.svg | 2 +- frontend/src/assets/icon/redis/redis.svg | 2 +- frontend/src/common/commonEnum.ts | 10 +- frontend/src/components/auth/auth.ts | 4 +- frontend/src/components/contextmenu/index.vue | 4 +- .../src/components/monaco/RealLogViewer.vue | 67 ++ .../src/components/terminal/TerminalBody.vue | 2 +- frontend/src/hooks/useDataState.ts | 20 + frontend/src/i18n/en/common.ts | 139 --- frontend/src/i18n/en/docker.ts | 79 ++ frontend/src/i18n/en/es.ts | 10 +- frontend/src/i18n/en/menu.ts | 142 +++ frontend/src/i18n/en/tag.ts | 6 + frontend/src/i18n/zh-cn/common.ts | 139 --- frontend/src/i18n/zh-cn/docker.ts | 79 ++ frontend/src/i18n/zh-cn/es.ts | 10 +- frontend/src/i18n/zh-cn/menu.ts | 142 +++ frontend/src/i18n/zh-cn/tag.ts | 6 + frontend/src/layout/navMenu/horizontal.vue | 8 +- frontend/src/store/autoOpenResource.ts | 18 +- frontend/src/theme/common/transition.scss | 35 + frontend/src/theme/element.scss | 8 - frontend/src/theme/mixins/index.scss | 12 - frontend/src/views/home/Home.vue | 22 +- .../views/ops/component/ResourceOpPanel.vue | 2 +- frontend/src/views/ops/component/tag.ts | 67 +- frontend/src/views/ops/db/InstanceList.vue | 4 +- frontend/src/views/ops/db/SqlExec.vue | 1009 ---------------- .../ops/db/component/table/DbTableData.vue | 1 + .../ops/db/component/table/DbTableDataOp.vue | 2 +- frontend/src/views/ops/db/db.ts | 3 +- .../src/views/ops/db/resource/DbDataOp.vue | 690 +++++++++++ .../src/views/ops/db/resource/NodeDbInst.vue | 53 + .../src/views/ops/db/resource/NodeDbTable.vue | 13 + frontend/src/views/ops/db/resource/index.ts | 295 +++++ frontend/src/views/ops/db/route.ts | 2 - frontend/src/views/ops/docker/DockerPanel.vue | 42 + .../views/ops/docker/DockerPanelDrawer.vue | 39 + frontend/src/views/ops/docker/api.ts | 27 + .../ops/docker/container/ContainerCreate.vue | 453 ++++++++ .../ops/docker/container/ContainerList.vue | 354 ++++++ .../ops/docker/container/ContainerLog.vue | 77 ++ frontend/src/views/ops/docker/enums.ts | 11 + .../src/views/ops/docker/image/ImageList.vue | 209 ++++ frontend/src/views/ops/docker/route.ts | 3 + frontend/src/views/ops/es/EsInstanceList.vue | 4 +- .../views/ops/es/component/EsDashboard.vue | 20 +- .../src/views/ops/es/component/EsSearch.vue | 2 +- .../src/views/ops/es/resource/EsDataOp.vue | 1034 +++++++++++++++++ frontend/src/views/ops/es/resource/NodeEs.vue | 30 + .../src/views/ops/es/resource/NodeEsIndex.vue | 28 + frontend/src/views/ops/es/resource/index.ts | 175 +++ frontend/src/views/ops/es/route.ts | 5 +- .../src/views/ops/machine/MachineList.vue | 2 +- frontend/src/views/ops/machine/MachineOp.vue | 595 ---------- .../src/views/ops/machine/MachineStats.vue | 138 ++- .../views/ops/machine/resource/MachineOp.vue | 457 ++++++++ .../ops/machine/resource/NodeMachineAc.vue | 13 + .../src/views/ops/machine/resource/index.ts | 119 ++ frontend/src/views/ops/machine/route.ts | 2 - frontend/src/views/ops/mongo/MongoDataOp.vue | 561 --------- .../views/ops/mongo/resource/MongoDataOp.vue | 422 +++++++ .../views/ops/mongo/resource/NodeMongo.vue | 28 + .../views/ops/mongo/resource/NodeMongoDb.vue | 14 + .../src/views/ops/mongo/resource/index.ts | 103 ++ frontend/src/views/ops/mongo/route.ts | 5 +- .../src/views/ops/redis/DataOperation.vue | 653 ----------- .../views/ops/redis/resource/NodeRedis.vue | 35 + .../views/ops/redis/resource/NodeRedisDb.vue | 16 + .../views/ops/redis/resource/RedisDataOp.vue | 526 +++++++++ .../src/views/ops/redis/resource/index.ts | 94 ++ frontend/src/views/ops/redis/route.ts | 5 +- .../src/views/ops/resource/BaseTreeNode.vue | 93 ++ .../src/views/ops/resource/ResourceOp.vue | 410 +++++++ frontend/src/views/ops/resource/resource.ts | 57 + frontend/src/views/ops/resource/route.ts | 3 + frontend/src/views/ops/tag/TagTreeList.vue | 203 ++-- .../views/system/resource/ResourceList.vue | 14 +- server/go.mod | 30 +- server/internal/docker/api/api.go | 9 + server/internal/docker/api/container.go | 678 +++++++++++ server/internal/docker/api/docker.go | 27 + server/internal/docker/api/form/container.go | 55 + server/internal/docker/api/form/image.go | 6 + server/internal/docker/api/image.go | 111 ++ server/internal/docker/api/vo/docker.go | 38 + server/internal/docker/dkm/client.go | 286 +++++ server/internal/docker/imsg/en.go | 8 + server/internal/docker/imsg/imsg.go | 21 + server/internal/docker/imsg/zh_cn.go | 13 + server/internal/docker/init/init.go | 7 + .../internal/machine/mcm/terminal_session.go | 20 +- server/internal/pkg/consts/consts.go | 1 + server/internal/tag/api/tag_tree.go | 4 +- server/main.go | 1 + server/migration/migrations/v1_10.go | 100 ++ 101 files changed, 8206 insertions(+), 3411 deletions(-) create mode 100644 frontend/src/assets/icon/db/db.svg create mode 100644 frontend/src/assets/icon/db/table.svg create mode 100644 frontend/src/assets/icon/docker/docker.svg create mode 100644 frontend/src/assets/icon/machine/machine.svg create mode 100644 frontend/src/components/monaco/RealLogViewer.vue create mode 100644 frontend/src/hooks/useDataState.ts create mode 100644 frontend/src/i18n/en/docker.ts create mode 100644 frontend/src/i18n/en/menu.ts create mode 100644 frontend/src/i18n/zh-cn/docker.ts create mode 100644 frontend/src/i18n/zh-cn/menu.ts delete mode 100644 frontend/src/views/ops/db/SqlExec.vue create mode 100644 frontend/src/views/ops/db/resource/DbDataOp.vue create mode 100644 frontend/src/views/ops/db/resource/NodeDbInst.vue create mode 100644 frontend/src/views/ops/db/resource/NodeDbTable.vue create mode 100644 frontend/src/views/ops/db/resource/index.ts create mode 100644 frontend/src/views/ops/docker/DockerPanel.vue create mode 100644 frontend/src/views/ops/docker/DockerPanelDrawer.vue create mode 100644 frontend/src/views/ops/docker/api.ts create mode 100644 frontend/src/views/ops/docker/container/ContainerCreate.vue create mode 100644 frontend/src/views/ops/docker/container/ContainerList.vue create mode 100644 frontend/src/views/ops/docker/container/ContainerLog.vue create mode 100644 frontend/src/views/ops/docker/enums.ts create mode 100644 frontend/src/views/ops/docker/image/ImageList.vue create mode 100644 frontend/src/views/ops/docker/route.ts create mode 100644 frontend/src/views/ops/es/resource/EsDataOp.vue create mode 100644 frontend/src/views/ops/es/resource/NodeEs.vue create mode 100644 frontend/src/views/ops/es/resource/NodeEsIndex.vue create mode 100644 frontend/src/views/ops/es/resource/index.ts delete mode 100644 frontend/src/views/ops/machine/MachineOp.vue create mode 100644 frontend/src/views/ops/machine/resource/MachineOp.vue create mode 100644 frontend/src/views/ops/machine/resource/NodeMachineAc.vue create mode 100644 frontend/src/views/ops/machine/resource/index.ts delete mode 100644 frontend/src/views/ops/mongo/MongoDataOp.vue create mode 100644 frontend/src/views/ops/mongo/resource/MongoDataOp.vue create mode 100644 frontend/src/views/ops/mongo/resource/NodeMongo.vue create mode 100644 frontend/src/views/ops/mongo/resource/NodeMongoDb.vue create mode 100644 frontend/src/views/ops/mongo/resource/index.ts delete mode 100644 frontend/src/views/ops/redis/DataOperation.vue create mode 100644 frontend/src/views/ops/redis/resource/NodeRedis.vue create mode 100644 frontend/src/views/ops/redis/resource/NodeRedisDb.vue create mode 100644 frontend/src/views/ops/redis/resource/RedisDataOp.vue create mode 100644 frontend/src/views/ops/redis/resource/index.ts create mode 100644 frontend/src/views/ops/resource/BaseTreeNode.vue create mode 100644 frontend/src/views/ops/resource/ResourceOp.vue create mode 100644 frontend/src/views/ops/resource/resource.ts create mode 100644 frontend/src/views/ops/resource/route.ts create mode 100644 server/internal/docker/api/api.go create mode 100644 server/internal/docker/api/container.go create mode 100644 server/internal/docker/api/docker.go create mode 100644 server/internal/docker/api/form/container.go create mode 100644 server/internal/docker/api/form/image.go create mode 100644 server/internal/docker/api/image.go create mode 100644 server/internal/docker/api/vo/docker.go create mode 100644 server/internal/docker/dkm/client.go create mode 100644 server/internal/docker/imsg/en.go create mode 100644 server/internal/docker/imsg/imsg.go create mode 100644 server/internal/docker/imsg/zh_cn.go create mode 100644 server/internal/docker/init/init.go diff --git a/frontend/package.json b/frontend/package.json index 336ad120..641bad8a 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -13,7 +13,7 @@ "@element-plus/icons-vue": "^2.3.2", "@logicflow/core": "^2.1.1", "@logicflow/extension": "^2.1.2", - "@vueuse/core": "^13.6.0", + "@vueuse/core": "^13.8.0", "@xterm/addon-fit": "^0.10.0", "@xterm/addon-search": "^0.15.0", "@xterm/addon-web-links": "^0.11.0", @@ -22,9 +22,9 @@ "axios": "^1.6.2", "clipboard": "^2.0.11", "crypto-js": "^4.2.0", - "dayjs": "^1.11.13", + "dayjs": "^1.11.18", "echarts": "^6.0.0", - "element-plus": "^2.10.7", + "element-plus": "^2.11.1", "js-base64": "^3.7.7", "jsencrypt": "^3.3.2", "monaco-editor": "^0.52.2", @@ -44,7 +44,7 @@ "vuedraggable": "^4.1.0" }, "devDependencies": { - "@tailwindcss/vite": "^4.1.11", + "@tailwindcss/vite": "^4.1.12", "@types/crypto-js": "^4.2.2", "@types/node": "^22.13.14", "@types/nprogress": "^0.2.0", @@ -60,7 +60,7 @@ "postcss": "^8.5.6", "prettier": "^3.6.1", "sass": "^1.90.0", - "tailwindcss": "^4.1.11", + "tailwindcss": "^4.1.12", "typescript": "^5.9.2", "vite": "npm:rolldown-vite@latest", "vite-plugin-progress": "0.0.7", diff --git a/frontend/src/assets/icon/db/db.svg b/frontend/src/assets/icon/db/db.svg new file mode 100644 index 00000000..21d43721 --- /dev/null +++ b/frontend/src/assets/icon/db/db.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/icon/db/table.svg b/frontend/src/assets/icon/db/table.svg new file mode 100644 index 00000000..ff6de6d2 --- /dev/null +++ b/frontend/src/assets/icon/db/table.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/icon/docker/docker.svg b/frontend/src/assets/icon/docker/docker.svg new file mode 100644 index 00000000..76cbab73 --- /dev/null +++ b/frontend/src/assets/icon/docker/docker.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/icon/machine/machine.svg b/frontend/src/assets/icon/machine/machine.svg new file mode 100644 index 00000000..7fc01e39 --- /dev/null +++ b/frontend/src/assets/icon/machine/machine.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/icon/mongo/mongo.svg b/frontend/src/assets/icon/mongo/mongo.svg index 9674ed4d..a9cf0741 100644 --- a/frontend/src/assets/icon/mongo/mongo.svg +++ b/frontend/src/assets/icon/mongo/mongo.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/frontend/src/assets/icon/redis/redis.svg b/frontend/src/assets/icon/redis/redis.svg index 186c36cb..795d16f1 100644 --- a/frontend/src/assets/icon/redis/redis.svg +++ b/frontend/src/assets/icon/redis/redis.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/frontend/src/common/commonEnum.ts b/frontend/src/common/commonEnum.ts index a4759b38..d0fdd800 100644 --- a/frontend/src/common/commonEnum.ts +++ b/frontend/src/common/commonEnum.ts @@ -16,12 +16,12 @@ export const LinkTypeEnum = { // 资源类型 export const ResourceTypeEnum = { - Machine: EnumValue.of(1, '机器').setExtra({ icon: 'Monitor', iconColor: 'var(--el-color-primary)' }).tagTypeSuccess(), - Db: EnumValue.of(2, '数据库实例').setExtra({ icon: 'Coin', iconColor: 'var(--el-color-warning)' }).tagTypeWarning(), + Machine: EnumValue.of(1, 'tag.machine').setExtra({ icon: 'icon machine/machine', iconColor: 'var(--el-color-primary)' }).tagTypeSuccess(), + Db: EnumValue.of(2, 'tag.db').setExtra({ icon: 'icon db/db', iconColor: 'var(--el-color-warning)' }).tagTypeWarning(), Redis: EnumValue.of(3, 'redis').setExtra({ icon: 'icon redis/redis', iconColor: 'var(--el-color-danger)' }).tagTypeInfo(), Mongo: EnumValue.of(4, 'mongo').setExtra({ icon: 'icon mongo/mongo', iconColor: 'var(--el-color-success)' }).tagTypeDanger(), - AuthCert: EnumValue.of(5, '授权凭证').setExtra({ icon: 'Ticket', iconColor: 'var(--el-color-success)' }), - Es: EnumValue.of(6, 'ES实例').setExtra({ icon: 'icon es/es-color', iconColor: 'var(--el-color-warning)' }).tagTypeWarning(), + AuthCert: EnumValue.of(5, 'ac.ac').setExtra({ icon: 'Ticket', iconColor: 'var(--el-color-success)' }), + Es: EnumValue.of(6, 'tag.es').setExtra({ icon: 'icon es/es-color', iconColor: 'var(--el-color-warning)' }).tagTypeWarning(), }; // 标签关联的资源类型 @@ -36,7 +36,7 @@ export const TagResourceTypeEnum = { Mongo: ResourceTypeEnum.Mongo, AuthCert: ResourceTypeEnum.AuthCert, - Db: EnumValue.of(22, '数据库').setExtra({ icon: 'Coin' }), + Db: EnumValue.of(22, '数据库').setExtra({ icon: 'icon db/db' }), }; // 标签关联的资源类型路径 diff --git a/frontend/src/components/auth/auth.ts b/frontend/src/components/auth/auth.ts index 89718864..535487f3 100644 --- a/frontend/src/components/auth/auth.ts +++ b/frontend/src/components/auth/auth.ts @@ -5,7 +5,7 @@ import { useUserInfo } from '@/store/userInfo'; * @param code 权限code * @returns */ -export function hasPerm(code: string) { +export function hasPerm(code: string): boolean { if (!code) { return true; } @@ -17,7 +17,7 @@ export function hasPerm(code: string) { * @returns {"xxx:save": true} key->permission code * @param permCodes */ -export function hasPerms(permCodes: any[]) { +export function hasPerms(permCodes: any[]): Record { const res = {} as { [key: string]: boolean }; for (let permCode of permCodes) { if (hasPerm(permCode)) { diff --git a/frontend/src/components/contextmenu/index.vue b/frontend/src/components/contextmenu/index.vue index dc0253f6..4754182f 100644 --- a/frontend/src/components/contextmenu/index.vue +++ b/frontend/src/components/contextmenu/index.vue @@ -1,7 +1,7 @@