From f93231da6180934eed4c12c1a403d3345e4031a0 Mon Sep 17 00:00:00 2001 From: "meilin.huang" <954537473@qq.com> Date: Thu, 29 Feb 2024 22:12:50 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20dbms=E6=96=B0=E5=A2=9E=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E5=B7=A5=E5=8D=95=E6=B5=81=E7=A8=8B=E5=AE=A1=E6=89=B9?= 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/config.ts | 2 +- mayfly_go_web/src/common/utils/format.ts | 93 ++--- mayfly_go_web/src/common/utils/object.ts | 27 ++ .../components/drawer-header/DrawerHeader.vue | 33 ++ .../src/components/pagetable/PageTable.vue | 8 +- .../src/components/pagetable/index.ts | 19 +- .../src/components/terminal/TerminalBody.vue | 54 +-- .../components/terminal/TerminalDialog.vue | 2 +- mayfly_go_web/src/hooks/usePageTable.ts | 8 +- .../layout/navBars/breadcrumb/breadcrumb.vue | 9 +- .../src/layout/navBars/breadcrumb/setings.vue | 19 + .../src/layout/navBars/tagsView/tagsView.vue | 4 +- mayfly_go_web/src/theme/element.scss | 386 +++++++++--------- mayfly_go_web/src/views/error/401.vue | 1 - mayfly_go_web/src/views/flow/ProcdefEdit.vue | 211 ++++++++++ mayfly_go_web/src/views/flow/ProcdefList.vue | 141 +++++++ .../src/views/flow/ProcinstDetail.vue | 158 +++++++ mayfly_go_web/src/views/flow/ProcinstList.vue | 120 ++++++ .../src/views/flow/ProcinstTaskList.vue | 110 +++++ mayfly_go_web/src/views/flow/api.ts | 20 + .../flow/components/ProcdefSelectFormItem.vue | 33 ++ .../views/flow/components/ProcdefTasks.vue | 136 ++++++ mayfly_go_web/src/views/flow/enums.ts | 33 ++ .../src/views/flow/flowbiz/DbSqlExecBiz.vue | 79 ++++ .../src/views/ops/component/ResourceTag.vue | 45 -- .../src/views/ops/component/ResourceTags.vue | 33 ++ .../src/views/ops/component/TagTreeSelect.vue | 26 +- mayfly_go_web/src/views/ops/db/DbEdit.vue | 10 +- mayfly_go_web/src/views/ops/db/DbList.vue | 32 +- .../src/views/ops/db/DbSqlExecLog.vue | 14 +- mayfly_go_web/src/views/ops/db/SqlExec.vue | 32 +- mayfly_go_web/src/views/ops/db/api.ts | 7 +- .../db/component/sqleditor/DbSqlEditor.vue | 27 +- .../ops/db/component/sqleditor/SqlExecBox.ts | 1 + .../db/component/sqleditor/SqlExecDialog.vue | 30 +- .../ops/db/component/table/DbTableData.vue | 15 +- .../ops/db/component/table/DbTableOp.vue | 4 + .../ops/db/component/table/DbTablesOp.vue | 7 +- mayfly_go_web/src/views/ops/db/db.ts | 7 + mayfly_go_web/src/views/ops/db/enums.ts | 5 + .../src/views/ops/machine/MachineEdit.vue | 6 +- .../src/views/ops/machine/MachineList.vue | 10 +- .../src/views/ops/machine/MachineOp.vue | 10 +- .../src/views/ops/mongo/MongoEdit.vue | 5 +- .../src/views/ops/mongo/MongoList.vue | 6 +- .../src/views/ops/redis/KeyHeader.vue | 29 +- .../src/views/ops/redis/RedisEdit.vue | 5 +- .../src/views/ops/redis/RedisList.vue | 10 +- .../src/views/ops/tag/TagTreeList.vue | 1 - .../components/AccountSelectFormItem.vue | 19 +- mayfly_go_web/src/views/system/api.ts | 1 + server/go.mod | 2 +- server/internal/db/api/db.go | 20 +- server/internal/db/api/db_sql_exec.go | 9 + server/internal/db/api/form/db.go | 13 +- server/internal/db/api/vo/db.go | 13 +- server/internal/db/application/application.go | 5 + server/internal/db/application/db.go | 7 +- server/internal/db/application/db_flow.go | 11 + server/internal/db/application/db_sql_exec.go | 127 ++++-- server/internal/db/dbm/dbi/info.go | 1 + server/internal/db/domain/entity/db.go | 11 +- .../internal/db/domain/entity/db_instance.go | 22 +- .../internal/db/domain/entity/db_sql_exec.go | 13 +- server/internal/db/domain/entity/query.go | 12 +- .../infrastructure/persistence/db_sql_exec.go | 2 + server/internal/db/router/db_sql_exec.go | 2 +- server/internal/flow/api/form/procdef.go | 12 + server/internal/flow/api/form/procinst.go | 6 + server/internal/flow/api/procdef.go | 50 +++ server/internal/flow/api/procinst.go | 99 +++++ server/internal/flow/api/vo/procinst.go | 45 ++ .../internal/flow/application/application.go | 13 + .../internal/flow/application/biz_handler.go | 42 ++ server/internal/flow/application/param.go | 13 + server/internal/flow/application/procdef.go | 75 ++++ server/internal/flow/application/procinst.go | 295 +++++++++++++ server/internal/flow/domain/entity/procdef.go | 52 +++ .../internal/flow/domain/entity/procinst.go | 100 +++++ server/internal/flow/domain/entity/query.go | 20 + .../flow/domain/repository/procdef.go | 13 + .../flow/domain/repository/procinst.go | 19 + .../infrastructure/persistence/persistence.go | 11 + .../infrastructure/persistence/procdef.go | 24 ++ .../infrastructure/persistence/procinst.go | 37 ++ server/internal/flow/init/init.go | 12 + server/internal/flow/router/procdef.go | 30 ++ server/internal/flow/router/procinst.go | 36 ++ server/internal/flow/router/router.go | 8 + server/internal/machine/api/machine.go | 11 +- server/internal/machine/api/vo/vo.go | 7 + server/internal/machine/mcm/client_cache.go | 3 + server/internal/mongo/api/mongo.go | 11 +- server/internal/mongo/api/vo/mongo.go | 20 + server/internal/redis/api/redis.go | 10 +- server/internal/redis/api/vo/redis.go | 12 +- server/internal/sys/api/account.go | 19 +- server/internal/sys/api/vo/account.go | 6 + server/internal/sys/application/account.go | 4 +- server/internal/sys/domain/entity/query.go | 6 + .../internal/sys/domain/repository/account.go | 2 +- .../sys/infrastructure/persistence/account.go | 5 +- server/internal/sys/router/account.go | 3 + server/internal/tag/application/tag_tree.go | 23 ++ .../tag/domain/entity/tag_resource.go | 32 ++ server/main.go | 1 + server/pkg/config/app.go | 2 +- server/pkg/utils/collx/array.go | 15 + server/pkg/utils/stringx/stringx.go | 8 + server/pkg/utils/structx/structx.go | 23 ++ server/pkg/utils/structx/structx_test.go | 13 +- .../resources/script/sql/mayfly-go-sqlite.sql | 7 + server/resources/script/sql/mayfly-go.sql | 114 +++++- server/resources/script/sql/v1.7/v1.7.4.sql | 87 ++++ 115 files changed, 3280 insertions(+), 553 deletions(-) create mode 100644 mayfly_go_web/src/common/utils/object.ts create mode 100644 mayfly_go_web/src/components/drawer-header/DrawerHeader.vue create mode 100755 mayfly_go_web/src/views/flow/ProcdefEdit.vue create mode 100644 mayfly_go_web/src/views/flow/ProcdefList.vue create mode 100755 mayfly_go_web/src/views/flow/ProcinstDetail.vue create mode 100644 mayfly_go_web/src/views/flow/ProcinstList.vue create mode 100644 mayfly_go_web/src/views/flow/ProcinstTaskList.vue create mode 100644 mayfly_go_web/src/views/flow/api.ts create mode 100644 mayfly_go_web/src/views/flow/components/ProcdefSelectFormItem.vue create mode 100755 mayfly_go_web/src/views/flow/components/ProcdefTasks.vue create mode 100644 mayfly_go_web/src/views/flow/enums.ts create mode 100755 mayfly_go_web/src/views/flow/flowbiz/DbSqlExecBiz.vue delete mode 100644 mayfly_go_web/src/views/ops/component/ResourceTag.vue create mode 100644 mayfly_go_web/src/views/ops/component/ResourceTags.vue create mode 100644 server/internal/db/application/db_flow.go create mode 100644 server/internal/flow/api/form/procdef.go create mode 100644 server/internal/flow/api/form/procinst.go create mode 100644 server/internal/flow/api/procdef.go create mode 100644 server/internal/flow/api/procinst.go create mode 100644 server/internal/flow/api/vo/procinst.go create mode 100644 server/internal/flow/application/application.go create mode 100644 server/internal/flow/application/biz_handler.go create mode 100644 server/internal/flow/application/param.go create mode 100644 server/internal/flow/application/procdef.go create mode 100644 server/internal/flow/application/procinst.go create mode 100644 server/internal/flow/domain/entity/procdef.go create mode 100644 server/internal/flow/domain/entity/procinst.go create mode 100644 server/internal/flow/domain/entity/query.go create mode 100644 server/internal/flow/domain/repository/procdef.go create mode 100644 server/internal/flow/domain/repository/procinst.go create mode 100644 server/internal/flow/infrastructure/persistence/persistence.go create mode 100644 server/internal/flow/infrastructure/persistence/procdef.go create mode 100644 server/internal/flow/infrastructure/persistence/procinst.go create mode 100644 server/internal/flow/init/init.go create mode 100644 server/internal/flow/router/procdef.go create mode 100644 server/internal/flow/router/procinst.go create mode 100644 server/internal/flow/router/router.go create mode 100644 server/internal/mongo/api/vo/mongo.go create mode 100644 server/resources/script/sql/v1.7/v1.7.4.sql diff --git a/mayfly_go_web/package.json b/mayfly_go_web/package.json index e48af67d..f611e873 100644 --- a/mayfly_go_web/package.json +++ b/mayfly_go_web/package.json @@ -33,7 +33,7 @@ "splitpanes": "^3.1.5", "sql-formatter": "^15.0.2", "uuid": "^9.0.1", - "vue": "^3.4.19", + "vue": "^3.4.21", "vue-router": "^4.3.0", "xterm": "^5.3.0", "xterm-addon-fit": "^0.8.0", @@ -48,7 +48,7 @@ "@typescript-eslint/eslint-plugin": "^6.7.4", "@typescript-eslint/parser": "^6.7.4", "@vitejs/plugin-vue": "^5.0.4", - "@vue/compiler-sfc": "^3.4.19", + "@vue/compiler-sfc": "^3.4.21", "code-inspector-plugin": "^0.4.5", "dotenv": "^16.3.1", "eslint": "^8.35.0", diff --git a/mayfly_go_web/src/common/config.ts b/mayfly_go_web/src/common/config.ts index 16a591b7..f8cc6ecd 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.7.3', + version: 'v1.7.4', }; export default config; diff --git a/mayfly_go_web/src/common/utils/format.ts b/mayfly_go_web/src/common/utils/format.ts index a3ea3e58..2f6e34ad 100644 --- a/mayfly_go_web/src/common/utils/format.ts +++ b/mayfly_go_web/src/common/utils/format.ts @@ -46,60 +46,6 @@ export function convertToBytes(sizeStr: string) { return bytes; } -/** - * 格式化json字符串 - * @param txt json字符串 - * @param compress 是否压缩 - * @returns 格式化后的字符串 - */ -export function formatJsonString(txt: string, compress: boolean) { - var indentChar = ' '; - if (/^\s*$/.test(txt)) { - console.log('数据为空,无法格式化! '); - return txt; - } - try { - var data = JSON.parse(txt); - } catch (e: any) { - console.log('数据源语法错误,格式化失败! 错误信息: ' + e.description, 'err'); - return txt; - } - var draw: any = [], - line = compress ? '' : '\n', - // eslint-disable-next-line no-unused-vars - nodeCount: number = 0, - // eslint-disable-next-line no-unused-vars - maxDepth: number = 0; - - var notify = function (name: any, value: any, isLast: any, indent: any, formObj: any) { - nodeCount++; /*节点计数*/ - for (var i = 0, tab = ''; i < indent; i++) tab += indentChar; /* 缩进HTML */ - tab = compress ? '' : tab; /*压缩模式忽略缩进*/ - maxDepth = ++indent; /*缩进递增并记录*/ - if (value && value.constructor == Array) { - /*处理数组*/ - draw.push(tab + (formObj ? '"' + name + '": ' : '') + '[' + line); /*缩进'[' 然后换行*/ - for (var i = 0; i < value.length; i++) notify(i, value[i], i == value.length - 1, indent, false); - draw.push(tab + ']' + (isLast ? line : ',' + line)); /*缩进']'换行,若非尾元素则添加逗号*/ - } else if (value && typeof value == 'object') { - /*处理对象*/ - draw.push(tab + (formObj ? '"' + name + '": ' : '') + '{' + line); /*缩进'{' 然后换行*/ - var len = 0, - i = 0; - for (var key in value) len++; - for (var key in value) notify(key, value[key], ++i == len, indent, true); - draw.push(tab + '}' + (isLast ? line : ',' + line)); /*缩进'}'换行,若非尾元素则添加逗号*/ - } else { - if (typeof value == 'string') value = '"' + value + '"'; - draw.push(tab + (formObj ? '"' + name + '": ' : '') + value + (isLast ? '' : ',') + line); - } - }; - var isLast = true, - indent = 0; - notify('', data, isLast, indent, false); - return draw.join(''); -} - /* * 年(Y) 可用1-4个占位符 * 月(m)、日(d)、小时(H)、分(M)、秒(S) 可用1-2个占位符 @@ -204,6 +150,45 @@ export function formatPast(param: any, format: string = 'YYYY-mm-dd') { } } +/** + * 格式化指定时间数为人性化可阅读的内容(默认time为秒单位) + * + * @param time 时间数 + * @param unit time对应的单位 + * @returns + */ +export function formatTime(time: number, unit: string = 's') { + const units = { + y: 31536000, + M: 2592000, + d: 86400, + h: 3600, + m: 60, + s: 1, + }; + + if (!units[unit]) { + return 'Invalid unit'; + } + + let seconds = time * units[unit]; + let result = ''; + + const timeUnits = Object.entries(units).map(([unit, duration]) => { + const value = Math.floor(seconds / duration); + seconds %= duration; + return { value, unit }; + }); + + timeUnits.forEach(({ value, unit }) => { + if (value > 0) { + result += `${value}${unit} `; + } + }); + + return result; +} + /** * formatAxis(new Date()) // 上午好 */ diff --git a/mayfly_go_web/src/common/utils/object.ts b/mayfly_go_web/src/common/utils/object.ts new file mode 100644 index 00000000..127fd332 --- /dev/null +++ b/mayfly_go_web/src/common/utils/object.ts @@ -0,0 +1,27 @@ +// 根据对象访问路径,获取对应的值 +export function getValueByPath(obj: any, path: string) { + const keys = path.split('.'); + let result = obj; + for (let key of keys) { + if (!result || typeof result !== 'object') { + return undefined; + } + + if (key.includes('[') && key.includes(']')) { + // 处理包含数组索引的情况 + const arrayKey = key.substring(0, key.indexOf('[')); + const matchIndex = key.match(/\[(.*?)\]/); + + if (!matchIndex) { + return undefined; + } + + const index = parseInt(matchIndex[1]); + result = Array.isArray(result[arrayKey]) ? result[arrayKey][index] : undefined; + } else { + result = result[key]; + } + } + + return result; +} diff --git a/mayfly_go_web/src/components/drawer-header/DrawerHeader.vue b/mayfly_go_web/src/components/drawer-header/DrawerHeader.vue new file mode 100644 index 00000000..b9ba3f61 --- /dev/null +++ b/mayfly_go_web/src/components/drawer-header/DrawerHeader.vue @@ -0,0 +1,33 @@ + + + diff --git a/mayfly_go_web/src/components/pagetable/PageTable.vue b/mayfly_go_web/src/components/pagetable/PageTable.vue index af848d74..679d14fa 100644 --- a/mayfly_go_web/src/components/pagetable/PageTable.vue +++ b/mayfly_go_web/src/components/pagetable/PageTable.vue @@ -115,18 +115,18 @@ >