From 57361d8241113becf79d256bf83eb165eacc2e29 Mon Sep 17 00:00:00 2001 From: "meilin.huang" <954537473@qq.com> Date: Tue, 5 Dec 2023 23:03:51 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E5=85=B3=E8=81=94?= =?UTF-8?q?=E5=A4=9A=E6=A0=87=E7=AD=BE=E3=80=81=E8=AE=A1=E5=88=92=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E7=AB=8B=E5=8D=B3=E6=89=A7=E8=A1=8C=E3=80=81=E6=A0=87?= =?UTF-8?q?=E7=AD=BE=E7=9B=B8=E5=85=B3=E6=93=8D=E4=BD=9C=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mayfly_go_web/package.json | 4 +- mayfly_go_web/src/common/commonEnum.ts | 9 + mayfly_go_web/src/common/config.ts | 2 +- mayfly_go_web/src/common/utils/loading.ts | 4 + .../src/components/pagetable/PageTable.vue | 11 +- .../src/views/ops/component/ResourceTag.vue | 45 ++++ .../src/views/ops/component/TagTree.vue | 31 ++- .../{TagSelect.vue => TagTreeSelect.vue} | 41 ++-- mayfly_go_web/src/views/ops/db/DbEdit.vue | 26 +- mayfly_go_web/src/views/ops/db/DbList.vue | 21 +- mayfly_go_web/src/views/ops/db/SqlExec.vue | 40 +--- .../ops/db/component/table/DbTableData.vue | 2 +- .../src/views/ops/machine/MachineEdit.vue | 35 +-- .../src/views/ops/machine/MachineList.vue | 27 ++- .../src/views/ops/machine/MachineRec.vue | 145 +++++++----- mayfly_go_web/src/views/ops/machine/api.ts | 6 +- .../ops/machine/cronjob/CronJobExecList.vue | 6 +- .../views/ops/machine/cronjob/CronJobList.vue | 8 + .../src/views/ops/mongo/MongoDataOp.vue | 42 +--- .../src/views/ops/mongo/MongoEdit.vue | 26 +- .../src/views/ops/mongo/MongoList.vue | 22 +- .../src/views/ops/redis/DataOperation.vue | 64 ++--- .../src/views/ops/redis/RedisEdit.vue | 24 +- .../src/views/ops/redis/RedisList.vue | 22 +- .../src/views/ops/tag/TagTreeList.vue | 86 ++++++- mayfly_go_web/src/views/ops/tag/api.ts | 4 +- mayfly_go_web/yarn.lock | 202 ++++++++-------- server/internal/common/api/index.go | 20 +- server/internal/common/consts/consts.go | 15 +- server/internal/db/api/db.go | 21 +- server/internal/db/api/form/db.go | 13 +- server/internal/db/api/vo/db.go | 3 +- server/internal/db/application/application.go | 3 +- server/internal/db/application/db.go | 31 ++- server/internal/db/application/instance.go | 1 + server/internal/db/dbm/info.go | 2 +- server/internal/db/domain/entity/db.go | 3 +- server/internal/db/domain/entity/query.go | 1 + .../db/infrastructure/persistence/db.go | 6 +- server/internal/db/router/db.go | 2 - server/internal/machine/api/form/form.go | 9 +- server/internal/machine/api/machine.go | 81 ++----- .../internal/machine/api/machine_cronjob.go | 6 + server/internal/machine/api/machine_script.go | 2 +- server/internal/machine/api/vo/vo.go | 5 +- .../machine/application/application.go | 8 + .../internal/machine/application/machine.go | 35 ++- .../machine/application/machine_cronjob.go | 51 ++-- .../machine/application/machine_term_op.go | 93 ++++++++ .../internal/machine/domain/entity/machine.go | 13 +- .../machine/domain/entity/machine_term_op.go | 19 ++ .../internal/machine/domain/entity/query.go | 3 +- .../machine/domain/repository/machine.go | 2 - .../domain/repository/machine_term_op.go | 14 ++ .../infrastructure/persistence/machine.go | 13 +- .../persistence/machine_term_op.go | 22 ++ .../infrastructure/persistence/persistence.go | 5 + server/internal/machine/mcm/machine.go | 2 +- .../internal/machine/mcm/terminal_session.go | 1 + server/internal/machine/router/machine.go | 14 +- .../machine/router/machine_cronjob.go | 2 + server/internal/mongo/api/form/mongo.go | 11 +- server/internal/mongo/api/mongo.go | 13 +- .../internal/mongo/application/application.go | 7 +- server/internal/mongo/application/mongo.go | 54 +++-- server/internal/mongo/domain/entity/mongo.go | 6 +- server/internal/mongo/domain/entity/query.go | 2 +- .../internal/mongo/domain/repository/mongo.go | 2 - .../mongo/infrastructure/persistence/mongo.go | 12 +- server/internal/mongo/mgm/info.go | 4 +- server/internal/mongo/router/mongo.go | 2 - server/internal/redis/api/form/redis.go | 21 +- server/internal/redis/api/redis.go | 15 +- server/internal/redis/api/vo/redis.go | 3 +- .../internal/redis/application/application.go | 7 +- server/internal/redis/application/redis.go | 42 ++-- server/internal/redis/domain/entity/query.go | 2 +- server/internal/redis/domain/entity/redis.go | 6 +- .../internal/redis/domain/repository/redis.go | 2 - .../infrastructure/persistence/redis_repo.go | 13 +- server/internal/redis/rdm/info.go | 6 +- server/internal/redis/router/redis.go | 2 - server/internal/sys/application/syslog.go | 5 +- server/internal/tag/api/tag_tree.go | 80 +++++-- server/internal/tag/api/vo/tag_tree.go | 29 +-- .../internal/tag/application/application.go | 15 +- .../internal/tag/application/tag_resource.go | 27 +++ server/internal/tag/application/tag_tree.go | 224 ++++++++++++------ server/internal/tag/domain/entity/query.go | 13 + .../tag/domain/entity/tag_resource.go | 15 ++ .../tag/domain/repository/tag_resource.go | 12 + .../infrastructure/persistence/persistence.go | 5 + .../persistence/tag_resource.go | 65 +++++ .../infrastructure/persistence/tag_tree.go | 31 +-- server/internal/tag/router/tag_tree.go | 10 +- server/pkg/base/app.go | 31 +++ server/pkg/base/repo.go | 26 +- server/pkg/config/app.go | 2 +- server/pkg/contextx/contextx.go | 31 +++ server/pkg/ginx/ginx.go | 6 +- server/pkg/logx/logx.go | 13 +- server/pkg/model/model.go | 11 +- server/pkg/req/req_ctx.go | 1 + server/pkg/utils/collx/stack.go | 41 ++++ server/resources/data/mayfly-go.sqlite | Bin 180224 -> 188416 bytes server/resources/script/sql/mayfly-go.sql | 49 +++- server/resources/script/sql/v1.6.0.sql | 194 +++++++++++++++ 107 files changed, 1819 insertions(+), 825 deletions(-) create mode 100644 mayfly_go_web/src/common/commonEnum.ts create mode 100644 mayfly_go_web/src/views/ops/component/ResourceTag.vue rename mayfly_go_web/src/views/ops/component/{TagSelect.vue => TagTreeSelect.vue} (65%) create mode 100644 server/internal/machine/application/machine_term_op.go create mode 100644 server/internal/machine/domain/entity/machine_term_op.go create mode 100644 server/internal/machine/domain/repository/machine_term_op.go create mode 100644 server/internal/machine/infrastructure/persistence/machine_term_op.go create mode 100644 server/internal/tag/application/tag_resource.go create mode 100644 server/internal/tag/domain/entity/tag_resource.go create mode 100644 server/internal/tag/domain/repository/tag_resource.go create mode 100644 server/internal/tag/infrastructure/persistence/tag_resource.go create mode 100644 server/pkg/utils/collx/stack.go create mode 100644 server/resources/script/sql/v1.6.0.sql diff --git a/mayfly_go_web/package.json b/mayfly_go_web/package.json index 7d06114e..34c8d721 100644 --- a/mayfly_go_web/package.json +++ b/mayfly_go_web/package.json @@ -30,7 +30,7 @@ "sortablejs": "^1.15.0", "sql-formatter": "^14.0.0", "uuid": "^9.0.1", - "vue": "^3.3.9", + "vue": "^3.3.10", "vue-router": "^4.2.5", "xterm": "^5.3.0", "xterm-addon-fit": "^0.8.0", @@ -52,7 +52,7 @@ "prettier": "^3.0.3", "sass": "^1.69.0", "typescript": "^5.3.2", - "vite": "^5.0.3", + "vite": "^5.0.5", "vue-eslint-parser": "^9.3.1" }, "browserslist": [ diff --git a/mayfly_go_web/src/common/commonEnum.ts b/mayfly_go_web/src/common/commonEnum.ts new file mode 100644 index 00000000..4c16050d --- /dev/null +++ b/mayfly_go_web/src/common/commonEnum.ts @@ -0,0 +1,9 @@ +import EnumValue from './Enum'; + +// 标签关联的资源类型 +export const TagResourceTypeEnum = { + Machine: EnumValue.of(1, '机器'), + Db: EnumValue.of(2, '数据库'), + Redis: EnumValue.of(3, 'redis'), + Mongo: EnumValue.of(4, 'mongo'), +}; diff --git a/mayfly_go_web/src/common/config.ts b/mayfly_go_web/src/common/config.ts index 9e874db3..278d0a79 100644 --- a/mayfly_go_web/src/common/config.ts +++ b/mayfly_go_web/src/common/config.ts @@ -15,7 +15,7 @@ const config = { baseWsUrl: `${(window as any).globalConfig.BaseWsUrl || `${location.protocol == 'https:' ? 'wss:' : 'ws:'}//${getBaseApiUrl()}`}/api`, // 系统版本 - version: 'v1.5.4', + version: 'v1.6.0', }; export default config; diff --git a/mayfly_go_web/src/common/utils/loading.ts b/mayfly_go_web/src/common/utils/loading.ts index 8df43eaf..4d8e79db 100644 --- a/mayfly_go_web/src/common/utils/loading.ts +++ b/mayfly_go_web/src/common/utils/loading.ts @@ -40,3 +40,7 @@ export const NextLoading = { }); }, }; + +export function sleep(ms: number) { + return new Promise((resolve) => setTimeout(resolve, ms)); +} diff --git a/mayfly_go_web/src/components/pagetable/PageTable.vue b/mayfly_go_web/src/components/pagetable/PageTable.vue index 7ca52ae0..aa8729ff 100644 --- a/mayfly_go_web/src/components/pagetable/PageTable.vue +++ b/mayfly_go_web/src/components/pagetable/PageTable.vue @@ -265,7 +265,7 @@ const state = reactive({ tableMaxHeight: window.innerHeight - 240 + 'px', }); -const { pageSizes, isOpenMoreQuery, defaultQueryCount, queryForm_, inputWidth_, loadingData, tableMaxHeight } = toRefs(state); +const { pageSizes, isOpenMoreQuery, defaultQueryCount, queryForm_, inputWidth_, formatVal, loadingData, tableMaxHeight } = toRefs(state); watch( () => props.queryForm, @@ -335,6 +335,15 @@ const calcuTableHeight = () => { state.tableMaxHeight = window.innerHeight - 240 + 'px'; }; +const formatText = (data: any) => { + state.formatVal = ''; + try { + state.formatVal = JSON.stringify(JSON.parse(data), null, 4); + } catch (e) { + state.formatVal = data; + } +}; + const getRowQueryItem = (row: number) => { // 第一行需要加个查询等按钮列 if (row === 1) { diff --git a/mayfly_go_web/src/views/ops/component/ResourceTag.vue b/mayfly_go_web/src/views/ops/component/ResourceTag.vue new file mode 100644 index 00000000..6eab7e6d --- /dev/null +++ b/mayfly_go_web/src/views/ops/component/ResourceTag.vue @@ -0,0 +1,45 @@ + + + + + diff --git a/mayfly_go_web/src/views/ops/component/TagTree.vue b/mayfly_go_web/src/views/ops/component/TagTree.vue index dba9cfc8..5e43a89f 100644 --- a/mayfly_go_web/src/views/ops/component/TagTree.vue +++ b/mayfly_go_web/src/views/ops/component/TagTree.vue @@ -43,17 +43,22 @@ diff --git a/mayfly_go_web/src/views/ops/db/DbEdit.vue b/mayfly_go_web/src/views/ops/db/DbEdit.vue index 60d4850d..2791b687 100644 --- a/mayfly_go_web/src/views/ops/db/DbEdit.vue +++ b/mayfly_go_web/src/views/ops/db/DbEdit.vue @@ -10,8 +10,19 @@ width="38%" > - - + + @@ -77,7 +88,8 @@ import { toRefs, reactive, watch, ref } from 'vue'; import { dbApi } from './api'; import { ElMessage } from 'element-plus'; -import TagSelect from '../component/TagSelect.vue'; +import TagTreeSelect from '../component/TagTreeSelect.vue'; +import { TagResourceTypeEnum } from '@/common/commonEnum'; const props = defineProps({ visible: { @@ -128,6 +140,7 @@ const rules = { }; const dbForm: any = ref(null); +const tagSelectRef: any = ref(null); const state = reactive({ dialogVisible: false, @@ -135,9 +148,9 @@ const state = reactive({ databaseList: [] as any, form: { id: null, - tagId: null as any, - tagPath: null as any, + tagId: [], name: null, + code: '', database: '', remark: '', instanceId: null as any, @@ -148,13 +161,14 @@ const state = reactive({ const { dialogVisible, allDatabases, databaseList, form, btnLoading } = toRefs(state); -watch(props, (newValue: any) => { +watch(props, async (newValue: any) => { state.dialogVisible = newValue.visible; if (!state.dialogVisible) { return; } if (newValue.db) { state.form = { ...newValue.db }; + // 将数据库名使用空格切割,获取所有数据库列表 state.databaseList = newValue.db.database.split(' '); } else { diff --git a/mayfly_go_web/src/views/ops/db/DbList.vue b/mayfly_go_web/src/views/ops/db/DbList.vue index f9217758..641d976f 100644 --- a/mayfly_go_web/src/views/ops/db/DbList.vue +++ b/mayfly_go_web/src/views/ops/db/DbList.vue @@ -46,10 +46,7 @@