From 408bac09a120b984a6131ea5607c686f01d506ed Mon Sep 17 00:00:00 2001 From: "meilin.huang" <954537473@qq.com> Date: Sat, 6 Apr 2024 18:19:17 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E6=A0=87=E7=AD=BE=E8=B5=84?= =?UTF-8?q?=E6=BA=90=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mayfly_go_web/src/common/Enum.ts | 12 +- mayfly_go_web/src/common/commonEnum.ts | 9 +- mayfly_go_web/src/common/pattern.ts | 5 + .../src/components/enumtag/EnumTag.vue | 2 +- .../src/views/ops/component/TagTreeSelect.vue | 2 +- mayfly_go_web/src/views/ops/db/DbEdit.vue | 22 +++- mayfly_go_web/src/views/ops/db/DbList.vue | 7 +- .../src/views/ops/machine/MachineEdit.vue | 53 ++++++-- .../src/views/ops/machine/MachineList.vue | 8 +- mayfly_go_web/src/views/ops/machine/enums.ts | 5 + .../src/views/ops/mongo/MongoEdit.vue | 22 +++- .../src/views/ops/mongo/MongoList.vue | 4 +- .../src/views/ops/redis/RedisEdit.vue | 30 ++++- .../src/views/ops/redis/RedisList.vue | 4 +- .../src/views/ops/tag/TagTreeList.vue | 25 +++- mayfly_go_web/src/views/ops/tag/TeamList.vue | 6 +- mayfly_go_web/src/views/ops/tag/api.ts | 1 - server/config.yml.example | 5 - server/go.mod | 4 +- server/internal/db/api/form/db.go | 1 + server/internal/db/application/db.go | 26 +++- server/internal/db/domain/entity/query.go | 4 +- .../db/infrastructure/persistence/db.go | 4 + server/internal/machine/api/form/form.go | 1 + .../internal/machine/application/machine.go | 27 +++- server/internal/machine/config/config.go | 2 +- .../internal/machine/domain/entity/query.go | 1 + server/internal/machine/guac/guac.go | 11 +- .../infrastructure/persistence/machine.go | 3 +- server/internal/mongo/api/form/mongo.go | 1 + server/internal/mongo/application/mongo.go | 26 ++-- server/internal/mongo/domain/entity/query.go | 1 + .../mongo/infrastructure/persistence/mongo.go | 1 + server/internal/redis/api/form/redis.go | 1 + server/internal/redis/application/redis.go | 26 +++- server/internal/redis/domain/entity/query.go | 1 + .../infrastructure/persistence/redis_repo.go | 3 +- server/internal/tag/api/tag_tree.go | 22 ++-- .../internal/tag/application/application.go | 1 - .../internal/tag/application/tag_resource.go | 26 ---- server/internal/tag/application/tag_tree.go | 124 ++++++++++-------- server/internal/tag/domain/entity/query.go | 17 +-- .../tag/domain/entity/tag_resource.go | 47 ------- server/internal/tag/domain/entity/tag_tree.go | 52 +++++++- .../tag/domain/repository/tag_resource.go | 12 -- .../infrastructure/persistence/persistence.go | 1 - .../persistence/tag_resource.go | 65 --------- .../infrastructure/persistence/tag_tree.go | 12 +- server/internal/tag/router/tag_tree.go | 2 - server/pkg/model/model.go | 13 ++ server/resources/script/sql/mayfly-go.sql | 23 +--- server/resources/script/sql/v1.7/v1.7.5.sql | 40 +++++- 52 files changed, 476 insertions(+), 347 deletions(-) delete mode 100644 server/internal/tag/application/tag_resource.go delete mode 100644 server/internal/tag/domain/entity/tag_resource.go delete mode 100644 server/internal/tag/domain/repository/tag_resource.go delete mode 100644 server/internal/tag/infrastructure/persistence/tag_resource.go diff --git a/mayfly_go_web/src/common/Enum.ts b/mayfly_go_web/src/common/Enum.ts index 19cad5c0..655fea71 100644 --- a/mayfly_go_web/src/common/Enum.ts +++ b/mayfly_go_web/src/common/Enum.ts @@ -22,6 +22,8 @@ export class EnumValue { */ tag: EnumValueTag; + extra: any; + constructor(value: any, label: string) { this.value = value; this.label = label; @@ -53,6 +55,11 @@ export class EnumValue { return this; } + setExtra(extra: any): EnumValue { + this.extra = extra; + return this; + } + public static of(value: any, label: string): EnumValue { return new EnumValue(value, label); } @@ -60,11 +67,12 @@ export class EnumValue { /** * 根据枚举值获取指定枚举值对象 * - * @param enumValues 所有枚举值 + * @param enums 枚举对象 * @param value 需要匹配的枚举值 * @returns 枚举值对象 */ - static getEnumByValue(enumValues: EnumValue[], value: any): EnumValue | null { + static getEnumByValue(enums: any, value: any): EnumValue | null { + const enumValues = Object.values(enums) as any; for (let enumValue of enumValues) { if (enumValue.value == value) { return enumValue; diff --git a/mayfly_go_web/src/common/commonEnum.ts b/mayfly_go_web/src/common/commonEnum.ts index 4c16050d..9a7d97c8 100644 --- a/mayfly_go_web/src/common/commonEnum.ts +++ b/mayfly_go_web/src/common/commonEnum.ts @@ -2,8 +2,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'), + Tag: EnumValue.of(-1, '标签').setExtra({ icon: 'CollectionTag' }), + Machine: EnumValue.of(1, '机器').setExtra({ icon: 'Monitor' }), + Db: EnumValue.of(2, '数据库').setExtra({ icon: 'Coin' }), + Redis: EnumValue.of(3, 'redis').setExtra({ icon: 'iconfont icon-redis' }), + Mongo: EnumValue.of(4, 'mongo').setExtra({ icon: 'iconfont icon-mongo' }), }; diff --git a/mayfly_go_web/src/common/pattern.ts b/mayfly_go_web/src/common/pattern.ts index 7c0943aa..a27d17cb 100644 --- a/mayfly_go_web/src/common/pattern.ts +++ b/mayfly_go_web/src/common/pattern.ts @@ -2,3 +2,8 @@ export const AccountUsernamePattern = { pattern: /^[a-zA-Z0-9_]{5,20}$/g, message: '只允许输入5-20位大小写字母、数字、下划线', }; + +export const ResourceCodePattern = { + pattern: /^[a-zA-Z0-9_]{1,32}$/g, + message: '只允许输入1-32位大小写字母、数字、下划线', +}; diff --git a/mayfly_go_web/src/components/enumtag/EnumTag.vue b/mayfly_go_web/src/components/enumtag/EnumTag.vue index 1a581961..82114dc5 100644 --- a/mayfly_go_web/src/components/enumtag/EnumTag.vue +++ b/mayfly_go_web/src/components/enumtag/EnumTag.vue @@ -40,7 +40,7 @@ onMounted(() => { }); const convert = (value: any) => { - const enumValue = EnumValue.getEnumByValue(Object.values(props.enums as any) as any, value) as any; + const enumValue = EnumValue.getEnumByValue(props.enums, value) as any; if (!enumValue) { state.enumLabel = '-'; state.type = 'danger'; diff --git a/mayfly_go_web/src/views/ops/component/TagTreeSelect.vue b/mayfly_go_web/src/views/ops/component/TagTreeSelect.vue index 4e3dc7c2..846d1f56 100644 --- a/mayfly_go_web/src/views/ops/component/TagTreeSelect.vue +++ b/mayfly_go_web/src/views/ops/component/TagTreeSelect.vue @@ -58,7 +58,7 @@ onMounted(async () => { state.selectTags = props.selectTags; } - state.tags = await tagApi.getTagTrees.request(null); + state.tags = await tagApi.getTagTrees.request({ type: -1 }); }); const changeTag = () => { diff --git a/mayfly_go_web/src/views/ops/db/DbEdit.vue b/mayfly_go_web/src/views/ops/db/DbEdit.vue index af3ea840..c22cf66d 100644 --- a/mayfly_go_web/src/views/ops/db/DbEdit.vue +++ b/mayfly_go_web/src/views/ops/db/DbEdit.vue @@ -47,6 +47,14 @@ + + + @@ -96,6 +104,7 @@ import TagTreeSelect from '../component/TagTreeSelect.vue'; import type { CheckboxValueType } from 'element-plus'; import ProcdefSelectFormItem from '@/views/flow/components/ProcdefSelectFormItem.vue'; import { DbType } from '@/views/ops/db/dialect'; +import { ResourceCodePattern } from '@/common/pattern'; const props = defineProps({ visible: { @@ -128,7 +137,18 @@ const rules = { trigger: ['change', 'blur'], }, ], - + code: [ + { + required: true, + message: '请输入编码', + trigger: ['change', 'blur'], + }, + { + pattern: ResourceCodePattern.pattern, + message: ResourceCodePattern.message, + trigger: ['blur'], + }, + ], name: [ { required: true, diff --git a/mayfly_go_web/src/views/ops/db/DbList.vue b/mayfly_go_web/src/views/ops/db/DbList.vue index a06e0eb7..eeac1cd6 100644 --- a/mayfly_go_web/src/views/ops/db/DbList.vue +++ b/mayfly_go_web/src/views/ops/db/DbList.vue @@ -239,10 +239,15 @@ const perms = { restoreDb: 'db:restore', }; -const searchItems = [getTagPathSearchItem(TagResourceTypeEnum.Db.value), SearchItem.slot('instanceId', '实例', 'instanceSelect')]; +const searchItems = [ + getTagPathSearchItem(TagResourceTypeEnum.Db.value), + SearchItem.slot('instanceId', '实例', 'instanceSelect'), + SearchItem.input('code', '编号'), +]; const columns = ref([ TableColumn.new('tags[0].tagPath', '关联标签').isSlot('tagPath').setAddWidth(20), + TableColumn.new('code', '编号'), TableColumn.new('name', '名称'), TableColumn.new('type', '类型').isSlot().setAddWidth(-15).alignCenter(), TableColumn.new('instanceName', '实例名'), diff --git a/mayfly_go_web/src/views/ops/machine/MachineEdit.vue b/mayfly_go_web/src/views/ops/machine/MachineEdit.vue index 750289f1..c81a5630 100644 --- a/mayfly_go_web/src/views/ops/machine/MachineEdit.vue +++ b/mayfly_go_web/src/views/ops/machine/MachineEdit.vue @@ -1,6 +1,10 @@ - + @@ -92,6 +102,9 @@ import { ElMessage } from 'element-plus'; import TagTreeSelect from '../component/TagTreeSelect.vue'; import SshTunnelSelect from '../component/SshTunnelSelect.vue'; import AuthCertSelect from './authcert/AuthCertSelect.vue'; +import { MachineProtocolEnum } from './enums'; +import DrawerHeader from '@/components/drawer-header/DrawerHeader.vue'; +import { ResourceCodePattern } from '@/common/pattern'; const props = defineProps({ visible: { @@ -116,6 +129,18 @@ const rules = { trigger: ['change'], }, ], + code: [ + { + required: true, + message: '请输入编码', + trigger: ['change', 'blur'], + }, + { + pattern: ResourceCodePattern.pattern, + message: ResourceCodePattern.message, + trigger: ['blur'], + }, + ], name: [ { required: true, @@ -134,7 +159,7 @@ const rules = { { required: true, message: '请输入主机ip和端口', - trigger: ['change', 'blur'], + trigger: ['blur'], }, ], authCertId: [ @@ -263,11 +288,11 @@ const getReqForm = () => { }; const handleChangeProtocol = (val: any) => { - if (val == 1) { + if (val == MachineProtocolEnum.Ssh.value) { state.form.port = 22; - } else if (val == 2) { + } else if (val == MachineProtocolEnum.Rdp.value) { state.form.port = 3389; - } else if (val == 3) { + } else { state.form.port = 5901; } }; diff --git a/mayfly_go_web/src/views/ops/machine/MachineList.vue b/mayfly_go_web/src/views/ops/machine/MachineList.vue index f743a91d..cc8ee70b 100644 --- a/mayfly_go_web/src/views/ops/machine/MachineList.vue +++ b/mayfly_go_web/src/views/ops/machine/MachineList.vue @@ -251,10 +251,16 @@ const perms = { terminal: 'machine:terminal', }; -const searchItems = [getTagPathSearchItem(TagResourceTypeEnum.Machine.value), SearchItem.input('ip', 'IP'), SearchItem.input('name', '名称')]; +const searchItems = [ + getTagPathSearchItem(TagResourceTypeEnum.Machine.value), + SearchItem.input('code', '编号'), + SearchItem.input('ip', 'IP'), + SearchItem.input('name', '名称'), +]; const columns = [ TableColumn.new('tags[0].tagPath', '关联标签').isSlot('tagPath').setAddWidth(20), + TableColumn.new('code', '编号'), TableColumn.new('name', '名称'), TableColumn.new('ipPort', 'ip:port').isSlot().setAddWidth(50), TableColumn.new('stat', '运行状态').isSlot().setAddWidth(55), diff --git a/mayfly_go_web/src/views/ops/machine/enums.ts b/mayfly_go_web/src/views/ops/machine/enums.ts index 345d7d15..c817424f 100644 --- a/mayfly_go_web/src/views/ops/machine/enums.ts +++ b/mayfly_go_web/src/views/ops/machine/enums.ts @@ -1,5 +1,10 @@ import { EnumValue } from '@/common/Enum'; +export const MachineProtocolEnum = { + Ssh: EnumValue.of(1, 'SSH'), + Rdp: EnumValue.of(2, 'RDP'), +}; + // 脚本执行结果类型 export const ScriptResultEnum = { Result: EnumValue.of(1, '有结果'), diff --git a/mayfly_go_web/src/views/ops/mongo/MongoEdit.vue b/mayfly_go_web/src/views/ops/mongo/MongoEdit.vue index 74919e1f..2d5574ac 100644 --- a/mayfly_go_web/src/views/ops/mongo/MongoEdit.vue +++ b/mayfly_go_web/src/views/ops/mongo/MongoEdit.vue @@ -17,7 +17,14 @@ style="width: 100%" /> - + + + @@ -57,6 +64,7 @@ import { mongoApi } from './api'; import { ElMessage } from 'element-plus'; import TagTreeSelect from '../component/TagTreeSelect.vue'; import SshTunnelSelect from '../component/SshTunnelSelect.vue'; +import { ResourceCodePattern } from '@/common/pattern'; const props = defineProps({ visible: { @@ -81,6 +89,18 @@ const rules = { trigger: ['change', 'blur'], }, ], + code: [ + { + required: true, + message: '请输入编码', + trigger: ['change', 'blur'], + }, + { + pattern: ResourceCodePattern.pattern, + message: ResourceCodePattern.message, + trigger: ['blur'], + }, + ], name: [ { required: true, diff --git a/mayfly_go_web/src/views/ops/mongo/MongoList.vue b/mayfly_go_web/src/views/ops/mongo/MongoList.vue index 679bc6ae..5f2613c6 100644 --- a/mayfly_go_web/src/views/ops/mongo/MongoList.vue +++ b/mayfly_go_web/src/views/ops/mongo/MongoList.vue @@ -52,6 +52,7 @@ import { TableColumn } from '@/components/pagetable'; import { TagResourceTypeEnum } from '@/common/commonEnum'; import { useRoute } from 'vue-router'; import { getTagPathSearchItem } from '../component/tag'; +import { SearchItem } from '@/components/SearchForm'; const MongoEdit = defineAsyncComponent(() => import('./MongoEdit.vue')); const MongoDbs = defineAsyncComponent(() => import('./MongoDbs.vue')); @@ -67,10 +68,11 @@ const props = defineProps({ const route = useRoute(); const pageTableRef: Ref = ref(null); -const searchItems = [getTagPathSearchItem(TagResourceTypeEnum.Mongo.value)]; +const searchItems = [getTagPathSearchItem(TagResourceTypeEnum.Mongo.value), SearchItem.input('code', '编号')]; const columns = [ TableColumn.new('tags[0].tagPath', '关联标签').isSlot('tagPath').setAddWidth(20), + TableColumn.new('code', '编号'), TableColumn.new('name', '名称'), TableColumn.new('uri', '连接uri'), TableColumn.new('createTime', '创建时间').isTime(), diff --git a/mayfly_go_web/src/views/ops/redis/RedisEdit.vue b/mayfly_go_web/src/views/ops/redis/RedisEdit.vue index 50313034..53256134 100644 --- a/mayfly_go_web/src/views/ops/redis/RedisEdit.vue +++ b/mayfly_go_web/src/views/ops/redis/RedisEdit.vue @@ -1,6 +1,10 @@ - + @@ -102,6 +114,8 @@ import { RsaEncrypt } from '@/common/rsa'; import TagTreeSelect from '../component/TagTreeSelect.vue'; import SshTunnelSelect from '../component/SshTunnelSelect.vue'; import ProcdefSelectFormItem from '@/views/flow/components/ProcdefSelectFormItem.vue'; +import { ResourceCodePattern } from '@/common/pattern'; +import DrawerHeader from '@/components/drawer-header/DrawerHeader.vue'; const props = defineProps({ visible: { @@ -125,6 +139,18 @@ const rules = { trigger: ['blur', 'change'], }, ], + code: [ + { + required: true, + message: '请输入编码', + trigger: ['change', 'blur'], + }, + { + pattern: ResourceCodePattern.pattern, + message: ResourceCodePattern.message, + trigger: ['blur'], + }, + ], name: [ { required: true, diff --git a/mayfly_go_web/src/views/ops/redis/RedisList.vue b/mayfly_go_web/src/views/ops/redis/RedisList.vue index 29d63f13..9864b9cb 100644 --- a/mayfly_go_web/src/views/ops/redis/RedisList.vue +++ b/mayfly_go_web/src/views/ops/redis/RedisList.vue @@ -161,6 +161,7 @@ import { TableColumn } from '@/components/pagetable'; import { TagResourceTypeEnum } from '@/common/commonEnum'; import { useRoute } from 'vue-router'; import { getTagPathSearchItem } from '../component/tag'; +import { SearchItem } from '@/components/SearchForm'; const props = defineProps({ lazy: { @@ -172,10 +173,11 @@ const props = defineProps({ const route = useRoute(); const pageTableRef: Ref = ref(null); -const searchItems = [getTagPathSearchItem(TagResourceTypeEnum.Redis.value)]; +const searchItems = [getTagPathSearchItem(TagResourceTypeEnum.Redis.value), SearchItem.input('code', '编号')]; const columns = ref([ TableColumn.new('tags[0].tagPath', '关联标签').isSlot('tagPath').setAddWidth(20), + TableColumn.new('code', '编号'), TableColumn.new('name', '名称'), TableColumn.new('host', 'host:port'), TableColumn.new('mode', 'mode'), diff --git a/mayfly_go_web/src/views/ops/tag/TagTreeList.vue b/mayfly_go_web/src/views/ops/tag/TagTreeList.vue index b169756a..c4fc3ff2 100644 --- a/mayfly_go_web/src/views/ops/tag/TagTreeList.vue +++ b/mayfly_go_web/src/views/ops/tag/TagTreeList.vue @@ -43,7 +43,9 @@ >