From 875de022c1e0f7efd8487b497e6b4527af00ec5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=AE=97=E6=B4=8B?= Date: Fri, 28 Oct 2022 17:42:23 +0800 Subject: [PATCH 01/17] monaco --- mayfly_go_web/package.json | 2 + mayfly_go_web/src/views/ops/db/DbList.vue | 2 - mayfly_go_web/src/views/ops/db/SqlExec.vue | 296 +++++++++++++++++---- mayfly_go_web/vite.config.ts | 9 +- 4 files changed, 253 insertions(+), 56 deletions(-) diff --git a/mayfly_go_web/package.json b/mayfly_go_web/package.json index 6eb7901b..b8fbc135 100644 --- a/mayfly_go_web/package.json +++ b/mayfly_go_web/package.json @@ -19,6 +19,8 @@ "jsoneditor": "^9.9.2", "lodash": "^4.17.21", "mitt": "^3.0.0", + "monaco-editor": "^0.34.1", + "monaco-sql-languages": "^0.9.5", "nprogress": "^0.2.0", "screenfull": "^6.0.2", "sortablejs": "^1.13.0", diff --git a/mayfly_go_web/src/views/ops/db/DbList.vue b/mayfly_go_web/src/views/ops/db/DbList.vue index 1c3b4842..6297f3f4 100644 --- a/mayfly_go_web/src/views/ops/db/DbList.vue +++ b/mayfly_go_web/src/views/ops/db/DbList.vue @@ -364,8 +364,6 @@ export default defineComponent({ tableCreateDialog: { title:'创建表', visible: false, - columns: [], - indexs: [], activeName: '1', data: { // 修改表时,传递修改数据 edit: false, diff --git a/mayfly_go_web/src/views/ops/db/SqlExec.vue b/mayfly_go_web/src/views/ops/db/SqlExec.vue index 5a197cab..0d21d860 100644 --- a/mayfly_go_web/src/views/ops/db/SqlExec.vue +++ b/mayfly_go_web/src/views/ops/db/SqlExec.vue @@ -21,7 +21,7 @@ {{ `${item.name} [${item.tagPath}]` }} - {{ + {{ `${item.host}:${item.port} ${item.type}` }} @@ -129,7 +129,9 @@
- +
+
+
+ @@ -339,6 +342,13 @@ import SqlExecBox from './component/SqlExecBox'; import { dateStrFormat } from '@/common/utils/date.ts'; import { useStore } from '@/store/index.ts'; import { tagApi } from '../tag/api.ts'; +import * as EditorWorker from 'monaco-editor/esm/vs/editor/editor.worker.js'; +import { language as sqlLanguage } from 'monaco-editor/esm/vs/basic-languages/mysql/mysql.js'; + +import * as monaco from "monaco-editor"; +import { editor, languages, Position} from 'monaco-editor'; +import ITextModel = editor.ITextModel; +import CompletionItem = languages.CompletionItem; export default defineComponent({ name: 'SqlExec', @@ -346,6 +356,7 @@ export default defineComponent({ setup() { const store = useStore(); const codeTextarea: any = ref(null); + const monacoTextarea: any = ref(null); const token = getSession('token'); let codemirror = null as any; const tableMap = new Map(); @@ -376,16 +387,16 @@ export default defineComponent({ // 点击执行按钮执行结果信息 execRes: { data: [], - tableColumn: [], + tableColumn: [] }, loading: false, nowTableName: '', //当前表格数据操作的数据库表名,用于双击编辑表内容使用 - selectionDatas: [], + selectionDatas: [] }, params: { pageNum: 1, pageSize: 100, - tagPath: null, + tagPath: null }, conditionDialog: { title: '', @@ -394,30 +405,19 @@ export default defineComponent({ dataTab: null, visible: false, condition: '=', - value: null, + value: null }, genSqlDialog: { visible: false, - sql: '', - }, - cmOptions: { - tabSize: 4, - mode: 'text/x-sql', - lineNumbers: true, - line: true, - indentWithTabs: true, - smartIndent: true, - matchBrackets: true, - theme: 'base16-light', - autofocus: true, - extraKeys: { Tab: 'autocomplete' }, // 自定义快捷键 - hintOptions: { - completeSingle: false, - // 自定义提示选项 - tables: {}, - }, - // more CodeMirror options... + sql: '' }, + monacoOptions: { + defaultSuggestions: [] as any[], // 默认的mysql提示 + customSuggestions: { + tableCache: [] as any[], // 表名提示 + columns: [] as any[], // 列名提示 + } + } }); const initCodemirror = () => { @@ -436,15 +436,222 @@ export default defineComponent({ }); }; - onMounted(() => { - initCodemirror(); +self.MonacoEnvironment = { + getWorker(_: string, label: string) { + return new EditorWorker(); + } +}; + +const initMonacoEditor = () => { + console.log('初始化编辑器') + // options参数参考 https://microsoft.github.io/monaco-editor/api/interfaces/monaco.editor.IStandaloneEditorConstructionOptions.html#language + let editor = monaco.editor.create(monacoTextarea.value, { + value: '// some comment', + language: 'sql', + theme: 'vs-dark' + }); + + // 参考 https://microsoft.github.io/monaco-editor/playground.html#extending-language-services-completion-provider-example + monaco.languages.registerCompletionItemProvider('sql', { + provideCompletionItems: (model: ITextModel, position: Position) : languages.ProviderResult => { + // const { lineNumber, column } = position + // // 光标前文本 + // const textBeforePointer = model.getValueInRange({ + // startLineNumber: lineNumber, + // startColumn: 0, + // endLineNumber: lineNumber, + // endColumn: column + // }) + // const textBeforePointerMulti = model.getValueInRange({ + // startLineNumber: 1, + // startColumn: 0, + // endLineNumber: lineNumber, + // endColumn: column + // }) + // // 光标后文本 + // const textAfterPointerMulti = model.getValueInRange({ + // startLineNumber: lineNumber, + // startColumn: column, + // endLineNumber: model.getLineCount(), + // endColumn: model.getLineMaxColumn(model.getLineCount()) + // }) + // // const nextTokens = textAfterPointer.trim().split(/\s+/) + // // const nextToken = nextTokens[0].toLowerCase() + // const tokens = textBeforePointer.trim().split(/\s+/) + // const lastToken = tokens[tokens.length - 1].toLowerCase() + // + // console.log(lastToken) + // console.log("光标前文本"+textBeforePointerMulti) + // console.log("光标后文本"+textAfterPointerMulti) + // + // // 表名联想 + // + // // 字段名联想 + // + let word = model.getWordUntilPosition(position); + let range = { + startLineNumber: position.lineNumber, + endLineNumber: position.lineNumber, + startColumn: word.startColumn, + endColumn: word.endColumn + }; + + let suggestions: CompletionItem[] = [] + sqlLanguage.keywords.forEach((item: any) => { + suggestions.push({ + label: item, + kind: monaco.languages.CompletionItemKind.Keyword, + insertText: item, + range + }); + }) + sqlLanguage.operators.forEach((item: any) => { + suggestions.push({ + label: item, + kind: monaco.languages.CompletionItemKind.Operator, + insertText: item, + range + }); + }) + sqlLanguage.builtinFunctions.forEach((item: any) => { + suggestions.push({ + label: item, + kind: monaco.languages.CompletionItemKind.Function, + insertText: item, + range + }); + }) + sqlLanguage.builtinVariables.forEach((item: any) => { + suggestions.push({ + label: item, + kind: monaco.languages.CompletionItemKind.Variable, + insertText: item, + range + }); + }) + + // 默认提示 + return { + suggestions: suggestions + }; + }, + }); + + // monaco.languages.registerCompletionItemProvider('sql', { + // provideCompletionItems: (model: ITextModel, position: Position) : languages.ProviderResult => provideCompletionItems(model, position) + // }) + +}; + + +const provideCompletionItems= async (model: editor.ITextModel, position: monaco.Position) => { + const { lineNumber, column } = position + // 光标前文本 + const textBeforePointer = model.getValueInRange({ + startLineNumber: lineNumber, + startColumn: 0, + endLineNumber: lineNumber, + endColumn: column + }) + const textBeforePointerMulti = model.getValueInRange({ + startLineNumber: 1, + startColumn: 0, + endLineNumber: lineNumber, + endColumn: column + }) + // 光标后文本 + const textAfterPointerMulti = model.getValueInRange({ + startLineNumber: lineNumber, + startColumn: column, + endLineNumber: model.getLineCount(), + endColumn: model.getLineMaxColumn(model.getLineCount()) + }) + // const nextTokens = textAfterPointer.trim().split(/\s+/) + // const nextToken = nextTokens[0].toLowerCase() + const tokens = textBeforePointer.trim().split(/\s+/) + const lastToken = tokens[tokens.length - 1].toLowerCase() + + console.log(lastToken) + console.log(textBeforePointerMulti) + console.log(textAfterPointerMulti) + + return { + suggestions: [{ + label:'test', + kind: 9, + insertText:'test', + documentation: 'test', + range: { + startLineNumber: 1, + startColumn: 1, + endLineNumber: 10, + endColumn: 10, + } + }] + } + + // if (lastToken.endsWith('.')) { + // // 去掉点后的字符串 + // const tokenNoDot = lastToken.slice(0, lastToken.length - 1) + // // if (this.dbSchema.find(db => db.dbName === tokenNoDot.replace(/^.*,/g, ''))) { + // // // <库名>.<表名>联想 + // // return { + // // suggestions: [...this.getTableSuggestByDbName(tokenNoDot.replace(/^.*,/g, ''))] + // // } + // // } else + // if (this.getTableNameAndTableAlia(textBeforePointerMulti.split(';')[textBeforePointerMulti.split(';').length - 1] + textAfterPointerMulti.split(';')[0])) { + // const tableInfoList = this.getTableNameAndTableAlia(textBeforePointerMulti.split(';')[textBeforePointerMulti.split(';').length - 1] + textAfterPointerMulti.split(';')[0]) + // const currentTable = tableInfoList.find(item => item.tableAlia === tokenNoDot.replace(/^.*,/g, '')) + // // <别名>.<字段>联想 + // if (currentTable && currentTable.tableName) { + // return { + // suggestions: await this.getTableColumnSuggestByTableAlia(currentTable.tableName) + // } + // } else { + // return { + // suggestions: [] + // } + // } + // } else { + // return { + // suggestions: [] + // } + // } + // // 库名联想 + // } else if (lastToken === 'from' || lastToken === 'join' || /(from|join)\s+.*?\s?,\s*$/.test(textBeforePointer.replace(/.*?\(/gm, '').toLowerCase())) { + // // const tables = this.getTableSuggest() + // const databases = this.getDataBaseSuggest() + // return { + // suggestions: databases + // } + // // 字段联想 + // } else if (['select', 'where', 'order by', 'group by', 'by', 'and', 'or', 'having', 'distinct', 'on'].includes(lastToken.replace(/.*?\(/g, '')) || (lastToken.endsWith('.') && !this.dbSchema.find(db => `${db.dbName}.` === lastToken)) || /(select|where|order by|group by|by|and|or|having|distinct|on)\s+.*?\s?,\s*$/.test(textBeforePointer.toLowerCase())) { + // return { + // suggestions: await this.getTableColumnSuggest() + // } + // // 自定义字段联想 + // } else if (this.customKeywords.toString().includes(lastToken)) { + // return { + // suggestions: this.getCustomSuggest(lastToken.startsWith('$')) + // } + // // 默认联想 + // } else { + // return { + // suggestions: [...this.getDataBaseSuggest(), ...this.getTableSuggest(), ...this.getKeywordSuggest()] + // } + // } +} + +onMounted(() => { + initCodemirror(); + initMonacoEditor(); + setHeight(); + // 监听浏览器窗口大小变化,更新对应组件高度 + window.onresize = () => + (() => { setHeight(); - // 监听浏览器窗口大小变化,更新对应组件高度 - window.onresize = () => - (() => { - setHeight(); - })(); - }); + })(); +}); /** * 设置codemirror高度和数据表高度 @@ -458,7 +665,7 @@ export default defineComponent({ /** * 项目及环境更改后的回调事件 */ - const changeTag = (projectId: any, envId: any) => { + const changeTag = () => { state.dbs = []; state.dbId = null; state.db = ''; @@ -727,12 +934,7 @@ export default defineComponent({ * 获取sql,如果有鼠标选中,则返回选中内容,否则返回输入框内所有内容 */ const getSql = () => { - // 没有选中的文本,则为全部文本 - let selectSql = codemirror.getSelection(); - if (!selectSql) { - selectSql = getCodermirrorValue(); - } - return selectSql; + return codemirror.getSelection() || codemirror.getValue(); }; /** @@ -769,6 +971,11 @@ export default defineComponent({ getSqlNames(); }; +const addTableSuggestions = (tables: any[]) => { + + +} + // 选择表事件 const changeTable = async (tableName: string, execSelectSql: boolean = true) => { if (tableName == '') { @@ -983,10 +1190,6 @@ export default defineComponent({ codemirror.setValue(value); }; - const getCodermirrorValue = () => { - codemirror.getValue(); - }; - /** * 获取用户保存的sql模板名称 */ @@ -1154,7 +1357,7 @@ export default defineComponent({ const primaryKeyColumnName = primaryKey.columnName; // 更新字段列信息 const updateColumn = await getColumn(state.nowTableName, column.rawColumnKey); - const sql = `UPDATE ${state.nowTableName} SET ${column.rawColumnKey} = ${wrapColumnValue(updateColumn, input.value)} + const sql = `UPDATE ${state.nowTableName} SET ${column.rawColumnKey} = ${wrapColumnValue(updateColumn, input.value)} WHERE ${primaryKeyColumnName} = ${wrapColumnValue(primaryKey, row[primaryKeyColumnName])}`; promptExeSql(sql, () => { row[property] = text; @@ -1273,6 +1476,7 @@ export default defineComponent({ ...toRefs(state), getTags, codeTextarea, + monacoTextarea, changeTag, changeTable, cellClick, diff --git a/mayfly_go_web/vite.config.ts b/mayfly_go_web/vite.config.ts index 4fa068ce..eaffab96 100644 --- a/mayfly_go_web/vite.config.ts +++ b/mayfly_go_web/vite.config.ts @@ -37,14 +37,7 @@ const viteConfig: UserConfig = { outDir: 'dist', minify: 'esbuild', sourcemap: false, - chunkSizeWarningLimit: 1500, - rollupOptions: { - output: { - entryFileNames: `assets/[name].${new Date().getTime()}.js`, - chunkFileNames: `assets/[name].${new Date().getTime()}.js`, - assetFileNames: `assets/[name].${new Date().getTime()}.[ext]`, - }, - }, + chunkSizeWarningLimit: 1500 }, define: { __VUE_I18N_LEGACY_API__: JSON.stringify(false), From a6d9a4b5ae0ded9ab79f8c4f41f11dd929729a5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=AE=97=E6=B4=8B?= Date: Sat, 29 Oct 2022 17:11:44 +0800 Subject: [PATCH 02/17] =?UTF-8?q?refactor:=201.=E4=BF=AE=E6=94=B9=E8=A1=A8?= =?UTF-8?q?=E5=90=8E=EF=BC=8C=E5=88=B7=E6=96=B0=E8=A1=A8=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=EF=BC=9B2.=E4=B8=BA=E4=BA=86=E6=96=B9=E4=BE=BFsqlmode=EF=BC=8C?= =?UTF-8?q?sql=E9=80=BB=E8=BE=91=E6=94=B9=E4=B8=BA=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E9=80=BB=E8=BE=91=203.=E4=BF=AE=E6=94=B9=E7=B4=A2=E5=BC=95sql?= =?UTF-8?q?=E6=8B=BC=E6=8E=A5bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/views/ops/db/CreateTable.vue | 5 +++- mayfly_go_web/src/views/ops/db/DbList.vue | 5 ++++ server/internal/db/application/mysql_meta.go | 26 ++++++++++++++++--- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/mayfly_go_web/src/views/ops/db/CreateTable.vue b/mayfly_go_web/src/views/ops/db/CreateTable.vue index 27b5b70b..c5819436 100644 --- a/mayfly_go_web/src/views/ops/db/CreateTable.vue +++ b/mayfly_go_web/src/views/ops/db/CreateTable.vue @@ -305,6 +305,7 @@ export default defineComponent({ db: props.db, runSuccessCallback: () => { proxy.$parent.openEditTable({ tableName: state.tableData.tableName }); + proxy.$parent.refreshTableInfo(); // cancel(); }, }); @@ -472,7 +473,9 @@ export default defineComponent({ } if(addIndexs.length > 0){ - sql +=',' + if(dropIndexNames.length > 0){ + sql +=',' + } addIndexs.forEach(a=>{ sql += ` ADD ${a.unique?'UNIQUE':''} INDEX ${a.indexName}(${a.columnNames.join(',')}) USING ${a.indexType} COMMENT '${a.indexComment}',`; }) diff --git a/mayfly_go_web/src/views/ops/db/DbList.vue b/mayfly_go_web/src/views/ops/db/DbList.vue index 6297f3f4..aedbf682 100644 --- a/mayfly_go_web/src/views/ops/db/DbList.vue +++ b/mayfly_go_web/src/views/ops/db/DbList.vue @@ -573,6 +573,10 @@ export default defineComponent({ state.tableInfoDialog.loading = false; } }; + + const refreshTableInfo = async () => { + state.tableInfoDialog.infos = await dbApi.tableInfos.request({ id: state.dbId, db: state.db }); + } const closeTableInfo = () => { state.showDumpInfo = false; @@ -712,6 +716,7 @@ export default defineComponent({ searchSqlExecLog, onShowRollbackSql, showTableInfo, + refreshTableInfo, closeTableInfo, showColumns, showTableIndex, diff --git a/server/internal/db/application/mysql_meta.go b/server/internal/db/application/mysql_meta.go index 9e5858f8..b6df585c 100644 --- a/server/internal/db/application/mysql_meta.go +++ b/server/internal/db/application/mysql_meta.go @@ -17,10 +17,10 @@ const ( WHERE table_schema = (SELECT database())` // mysql 索引信息 - MYSQL_INDEX_INFO = `SELECT index_name indexName, group_concat(column_name) columnName, index_type indexType, non_unique nonUnique, + MYSQL_INDEX_INFO = `SELECT INDEX_NAME indexName, COLUMN_NAME columnName, INDEX_TYPE indexType, NON_UNIQUE nonUnique, SEQ_IN_INDEX seqInIndex, INDEX_COMMENT indexComment FROM information_schema.STATISTICS - WHERE table_schema = (SELECT database()) AND table_name = '%s' GROUP by index_name` + WHERE table_schema = (SELECT database()) AND table_name = '%s' ORDER BY index_name asc , SEQ_IN_INDEX asc` // mysql 列信息元数据 MYSQL_COLUMN_MA = `SELECT table_name tableName, column_name columnName, column_type columnType, column_default columnDefault, @@ -73,7 +73,27 @@ func (mm *MysqlMetadata) GetTableInfos() []map[string]interface{} { func (mm *MysqlMetadata) GetTableIndex(tableName string) []map[string]interface{} { res, err := mm.di.innerSelect(fmt.Sprintf(MYSQL_INDEX_INFO, tableName)) biz.ErrIsNilAppendErr(err, "获取表索引信息失败: %s") - return res + + // 把查询结果以索引名分组,索引字段以逗号连接 + result := make([]map[string]interface{}, 0) + key := "" + i := 0 + for k, v := range res { + // 当前的索引名 + in := fmt.Sprintf("%v", v["indexName"]) + cl := fmt.Sprintf("%v", v["columnName"]) + + if key == in { + // 同索引字段以逗号连接 + cl1 := fmt.Sprintf("%v", result[i]["columnName"]) + result[i]["columnName"] = cl1 + "," + cl + } else { + i = k + key = in + result = append(result, v) + } + } + return result } // 获取建表ddl From 03291594b1f4bbb26e79fdeec940c478decb28c6 Mon Sep 17 00:00:00 2001 From: "meilin.huang" <954537473@qq.com> Date: Sat, 29 Oct 2022 20:08:15 +0800 Subject: [PATCH 03/17] =?UTF-8?q?feat:=20=E5=B0=8F=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E4=BC=98=E5=8C=96&=E5=89=8D=E7=AB=AF=E5=9F=BA=E4=BA=8Esetup?= =?UTF-8?q?=E8=AF=AD=E6=B3=95=E7=B3=96=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/jsonedit/index.vue | 213 +- mayfly_go_web/src/router/imports.ts | 2 +- .../src/views/home/{index.vue => Home.vue} | 205 +- .../views/login/component/AccountLogin.vue | 438 ++-- mayfly_go_web/src/views/login/index.vue | 53 +- .../views/ops/component/ProjectEnvSelect.vue | 100 - .../src/views/ops/component/TagSelect.vue | 95 +- .../src/views/ops/db/CreateTable.vue | 1004 ++++---- mayfly_go_web/src/views/ops/db/DbEdit.vue | 422 ++-- mayfly_go_web/src/views/ops/db/DbList.vue | 1007 ++++----- mayfly_go_web/src/views/ops/db/SqlExec.vue | 2010 ++++++++--------- mayfly_go_web/src/views/ops/db/TableEdit.vue | 105 +- .../views/ops/db/component/SqlExecDialog.vue | 229 +- .../src/views/ops/machine/FileManage.vue | 973 ++++---- .../src/views/ops/machine/MachineEdit.vue | 345 ++- .../src/views/ops/machine/MachineList.vue | 549 ++--- .../src/views/ops/machine/MachineRec.vue | 197 +- .../src/views/ops/machine/MachineStats.vue | 472 ++-- .../src/views/ops/machine/ProcessList.vue | 248 +- .../src/views/ops/machine/ScriptEdit.vue | 251 +- .../src/views/ops/machine/ServiceManage.vue | 531 ++--- .../src/views/ops/machine/SshTerminal.vue | 361 ++- .../src/views/ops/machine/SshTerminalPage.vue | 39 +- .../src/views/ops/mongo/MongoDataOp.vue | 709 +++--- .../src/views/ops/mongo/MongoEdit.vue | 240 +- .../src/views/ops/mongo/MongoList.vue | 514 ++--- .../src/views/ops/redis/DataOperation.vue | 691 +++--- .../src/views/ops/redis/HashValue.vue | 381 ++-- mayfly_go_web/src/views/ops/redis/Info.vue | 67 +- .../src/views/ops/redis/ListValue.vue | 290 ++- .../src/views/ops/redis/RedisEdit.vue | 350 ++- .../src/views/ops/redis/RedisList.vue | 390 ++-- .../src/views/ops/redis/SetValue.vue | 214 +- .../src/views/ops/redis/StringValue.vue | 255 ++- .../src/views/ops/redis/ValueDialog.vue | 88 - .../src/views/ops/tag/TagTreeList.vue | 369 ++- mayfly_go_web/src/views/ops/tag/TeamList.vue | 559 +++-- mayfly_go_web/src/views/personal/index.vue | 225 +- .../src/views/system/account/AccountEdit.vue | 193 +- .../src/views/system/account/AccountList.vue | 393 ++-- .../src/views/system/account/RoleEdit.vue | 273 ++- .../src/views/system/config/ConfigEdit.vue | 187 +- .../src/views/system/config/ConfigList.vue | 333 ++- .../views/system/resource/ResourceEdit.vue | 400 ++-- .../views/system/resource/ResourceList.vue | 473 ++-- .../src/views/system/role/ResourceEdit.vue | 195 +- .../src/views/system/role/RoleEdit.vue | 137 +- .../src/views/system/role/RoleList.vue | 401 ++-- .../src/views/system/role/ShowResource.vue | 134 +- .../src/views/system/syslog/SyslogList.vue | 113 +- server/internal/db/application/mysql_meta.go | 12 +- .../db/infrastructure/persistence/db.go | 2 +- .../infrastructure/persistence/machine.go | 2 +- .../infrastructure/persistence/mongo_repo.go | 2 +- .../infrastructure/persistence/redis_repo.go | 2 +- server/internal/sys/api/form/account.go | 5 +- server/internal/sys/api/vo/account.go | 3 +- server/internal/sys/domain/entity/account.go | 1 + server/internal/sys/router/account.go | 2 +- server/internal/tag/api/form/team.go | 6 + server/internal/tag/api/team.go | 39 +- server/internal/tag/api/vo/project.go | 10 - server/internal/tag/api/vo/team.go | 14 + server/internal/tag/application/team.go | 12 +- .../tag/domain/repository/team_member.go | 2 +- .../persistence/tag_tree_team.go | 2 +- .../infrastructure/persistence/team_member.go | 17 +- server/mayfly-go.sql | 1 + .../static/static/assets/401.1666839152545.js | 1 - ...666839152545.css => 401.1667044971054.css} | 0 .../static/static/assets/401.1667044971054.js | 1 + ...666839152545.png => 401.1667044971054.png} | Bin .../static/static/assets/404.1666839152545.js | 1 - ...666839152545.css => 404.1667044971054.css} | 0 .../static/static/assets/404.1667044971054.js | 1 + ...666839152545.png => 404.1667044971054.png} | Bin ....1666839152545.js => Api.1667044971054.js} | 2 +- .../static/assets/ConfigList.1666839152545.js | 1 - .../static/assets/ConfigList.1667044971054.js | 1 + .../assets/DataOperation.1666839152545.js | 1 - ...45.css => DataOperation.1667044971054.css} | 0 .../assets/DataOperation.1667044971054.js | 1 + .../static/assets/DbList.1666839152545.js | 7 - .../static/assets/DbList.1667044971054.js | 5 + ...1666839152545.js => Enum.1667044971054.js} | 0 .../static/assets/Home.1667044971054.css | 1 + .../static/assets/Home.1667044971054.js | 1 + ... JetBrainsMono-Regular.1667044971054.woff} | Bin ...2545.css => MongoDataOp.1667044971054.css} | 2 +- ...152545.js => MongoDataOp.1667044971054.js} | 185 +- .../static/assets/MongoList.1666839152545.js | 1 - .../static/assets/MongoList.1667044971054.js | 1 + ...52545.css => SqlExecBox.1667044971054.css} | 0 ...9152545.js => SqlExecBox.1667044971054.js} | 40 +- ...2545.css => SshTerminal.1667044971054.css} | 0 ...152545.js => SshTerminal.1667044971054.js} | 14 +- .../assets/SshTerminalPage.1666839152545.js | 1 - .../assets/SshTerminalPage.1667044971054.js | 1 + .../static/assets/SyslogList.1666839152545.js | 1 - .../static/assets/SyslogList.1667044971054.js | 1 + .../static/assets/TagSelect.1666839152545.js | 1 - .../static/assets/TagSelect.1667044971054.js | 1 + .../assets/TagTreeList.1666839152545.js | 1 - ...2545.css => TagTreeList.1667044971054.css} | 0 .../assets/TagTreeList.1667044971054.js | 1 + .../static/assets/TeamList.1666839152545.js | 1 - .../static/assets/TeamList.1667044971054.js | 1 + ...6668391525452.js => api.16670449710542.js} | 2 +- ...6668391525453.js => api.16670449710543.js} | 2 +- ...6668391525454.js => api.16670449710544.js} | 2 +- ...6668391525455.js => api.16670449710545.js} | 2 +- ...66839152545.js => assert.1667044971054.js} | 0 ...9152545.png => bg-login.1667044971054.png} | Bin ...52545.css => codemirror.1667044971054.css} | 0 ...9152545.js => codemirror.1667044971054.js} | 2 +- ...666839152545.js => enums.1667044971054.js} | 2 +- ...66839152545.js => format.1667044971054.js} | 0 .../static/assets/index.166683915254510.js | 1 - .../static/assets/index.16668391525452.js | 1 - .../static/assets/index.16668391525453.css | 1 - .../static/assets/index.16668391525453.js | 1 - .../static/assets/index.16668391525454.js | 1 - .../static/assets/index.16668391525455.js | 65 - .../static/assets/index.16668391525456.js | 1 - .../static/assets/index.16668391525457.js | 1 - .../static/assets/index.16668391525458.js | 1 - .../static/assets/index.16668391525459.js | 5 - ...6839152545.css => index.1667044971054.css} | 2 +- ...666839152545.js => index.1667044971054.js} | 28 +- ...391525457.css => index.16670449710542.css} | 0 .../static/assets/index.16670449710542.js | 1 + ...391525456.css => index.16670449710543.css} | 0 .../static/assets/index.16670449710543.js | 1 + ...391525452.css => index.16670449710544.css} | 2 +- .../static/assets/index.16670449710544.js | 65 + ...391525458.css => index.16670449710545.css} | 0 .../static/assets/index.16670449710545.js | 1 + ...391525455.css => index.16670449710546.css} | 0 .../static/assets/index.16670449710546.js | 1 + ...391525454.css => index.16670449710547.css} | 2 +- .../static/assets/index.16670449710547.js | 1 + .../static/assets/index.16670449710548.js | 5 + .../static/assets/index.16670449710549.js | 1 + ...svg => jsoneditor-icons.1667044971054.svg} | 0 ...66839152545.svg => logo.1667044971054.svg} | 0 ....1666839152545.js => rsa.1667044971054.js} | 2 +- server/static/static/index.html | 4 +- 147 files changed, 9089 insertions(+), 9951 deletions(-) rename mayfly_go_web/src/views/home/{index.vue => Home.vue} (66%) delete mode 100644 mayfly_go_web/src/views/ops/component/ProjectEnvSelect.vue delete mode 100644 mayfly_go_web/src/views/ops/redis/ValueDialog.vue create mode 100644 server/internal/tag/api/form/team.go delete mode 100644 server/internal/tag/api/vo/project.go create mode 100644 server/internal/tag/api/vo/team.go delete mode 100644 server/static/static/assets/401.1666839152545.js rename server/static/static/assets/{401.1666839152545.css => 401.1667044971054.css} (100%) create mode 100644 server/static/static/assets/401.1667044971054.js rename server/static/static/assets/{401.1666839152545.png => 401.1667044971054.png} (100%) delete mode 100644 server/static/static/assets/404.1666839152545.js rename server/static/static/assets/{404.1666839152545.css => 404.1667044971054.css} (100%) create mode 100644 server/static/static/assets/404.1667044971054.js rename server/static/static/assets/{404.1666839152545.png => 404.1667044971054.png} (100%) rename server/static/static/assets/{Api.1666839152545.js => Api.1667044971054.js} (82%) delete mode 100644 server/static/static/assets/ConfigList.1666839152545.js create mode 100644 server/static/static/assets/ConfigList.1667044971054.js delete mode 100644 server/static/static/assets/DataOperation.1666839152545.js rename server/static/static/assets/{DataOperation.1666839152545.css => DataOperation.1667044971054.css} (100%) create mode 100644 server/static/static/assets/DataOperation.1667044971054.js delete mode 100644 server/static/static/assets/DbList.1666839152545.js create mode 100644 server/static/static/assets/DbList.1667044971054.js rename server/static/static/assets/{Enum.1666839152545.js => Enum.1667044971054.js} (100%) create mode 100644 server/static/static/assets/Home.1667044971054.css create mode 100644 server/static/static/assets/Home.1667044971054.js rename server/static/static/assets/{JetBrainsMono-Regular.1666839152545.woff => JetBrainsMono-Regular.1667044971054.woff} (100%) rename server/static/static/assets/{MongoDataOp.1666839152545.css => MongoDataOp.1667044971054.css} (97%) rename server/static/static/assets/{MongoDataOp.1666839152545.js => MongoDataOp.1667044971054.js} (54%) delete mode 100644 server/static/static/assets/MongoList.1666839152545.js create mode 100644 server/static/static/assets/MongoList.1667044971054.js rename server/static/static/assets/{SqlExecBox.1666839152545.css => SqlExecBox.1667044971054.css} (100%) rename server/static/static/assets/{SqlExecBox.1666839152545.js => SqlExecBox.1667044971054.js} (64%) rename server/static/static/assets/{SshTerminal.1666839152545.css => SshTerminal.1667044971054.css} (100%) rename server/static/static/assets/{SshTerminal.1666839152545.js => SshTerminal.1667044971054.js} (66%) delete mode 100644 server/static/static/assets/SshTerminalPage.1666839152545.js create mode 100644 server/static/static/assets/SshTerminalPage.1667044971054.js delete mode 100644 server/static/static/assets/SyslogList.1666839152545.js create mode 100644 server/static/static/assets/SyslogList.1667044971054.js delete mode 100644 server/static/static/assets/TagSelect.1666839152545.js create mode 100644 server/static/static/assets/TagSelect.1667044971054.js delete mode 100644 server/static/static/assets/TagTreeList.1666839152545.js rename server/static/static/assets/{TagTreeList.1666839152545.css => TagTreeList.1667044971054.css} (100%) create mode 100644 server/static/static/assets/TagTreeList.1667044971054.js delete mode 100644 server/static/static/assets/TeamList.1666839152545.js create mode 100644 server/static/static/assets/TeamList.1667044971054.js rename server/static/static/assets/{api.16668391525452.js => api.16670449710542.js} (90%) rename server/static/static/assets/{api.16668391525453.js => api.16670449710543.js} (95%) rename server/static/static/assets/{api.16668391525454.js => api.16670449710544.js} (94%) rename server/static/static/assets/{api.16668391525455.js => api.16670449710545.js} (89%) rename server/static/static/assets/{assert.1666839152545.js => assert.1667044971054.js} (100%) rename server/static/static/assets/{bg-login.1666839152545.png => bg-login.1667044971054.png} (100%) rename server/static/static/assets/{codemirror.1666839152545.css => codemirror.1667044971054.css} (100%) rename server/static/static/assets/{codemirror.1666839152545.js => codemirror.1667044971054.js} (99%) rename server/static/static/assets/{enums.1666839152545.js => enums.1667044971054.js} (83%) rename server/static/static/assets/{format.1666839152545.js => format.1667044971054.js} (100%) delete mode 100644 server/static/static/assets/index.166683915254510.js delete mode 100644 server/static/static/assets/index.16668391525452.js delete mode 100644 server/static/static/assets/index.16668391525453.css delete mode 100644 server/static/static/assets/index.16668391525453.js delete mode 100644 server/static/static/assets/index.16668391525454.js delete mode 100644 server/static/static/assets/index.16668391525455.js delete mode 100644 server/static/static/assets/index.16668391525456.js delete mode 100644 server/static/static/assets/index.16668391525457.js delete mode 100644 server/static/static/assets/index.16668391525458.js delete mode 100644 server/static/static/assets/index.16668391525459.js rename server/static/static/assets/{index.1666839152545.css => index.1667044971054.css} (53%) rename server/static/static/assets/{index.1666839152545.js => index.1667044971054.js} (68%) rename server/static/static/assets/{index.16668391525457.css => index.16670449710542.css} (100%) create mode 100644 server/static/static/assets/index.16670449710542.js rename server/static/static/assets/{index.16668391525456.css => index.16670449710543.css} (100%) create mode 100644 server/static/static/assets/index.16670449710543.js rename server/static/static/assets/{index.16668391525452.css => index.16670449710544.css} (58%) create mode 100644 server/static/static/assets/index.16670449710544.js rename server/static/static/assets/{index.16668391525458.css => index.16670449710545.css} (100%) create mode 100644 server/static/static/assets/index.16670449710545.js rename server/static/static/assets/{index.16668391525455.css => index.16670449710546.css} (100%) create mode 100644 server/static/static/assets/index.16670449710546.js rename server/static/static/assets/{index.16668391525454.css => index.16670449710547.css} (99%) create mode 100644 server/static/static/assets/index.16670449710547.js create mode 100644 server/static/static/assets/index.16670449710548.js create mode 100644 server/static/static/assets/index.16670449710549.js rename server/static/static/assets/{jsoneditor-icons.1666839152545.svg => jsoneditor-icons.1667044971054.svg} (100%) rename server/static/static/assets/{logo.1666839152545.svg => logo.1667044971054.svg} (100%) rename server/static/static/assets/{rsa.1666839152545.js => rsa.1667044971054.js} (99%) diff --git a/mayfly_go_web/src/components/jsonedit/index.vue b/mayfly_go_web/src/components/jsonedit/index.vue index e48f2d89..100c96e8 100644 --- a/mayfly_go_web/src/components/jsonedit/index.vue +++ b/mayfly_go_web/src/components/jsonedit/index.vue @@ -4,126 +4,119 @@ - diff --git a/mayfly_go_web/src/views/ops/component/TagSelect.vue b/mayfly_go_web/src/views/ops/component/TagSelect.vue index 3e17c0a4..3c827276 100644 --- a/mayfly_go_web/src/views/ops/component/TagSelect.vue +++ b/mayfly_go_web/src/views/ops/component/TagSelect.vue @@ -1,21 +1,12 @@ - diff --git a/mayfly_go_web/src/views/ops/db/SqlExec.vue b/mayfly_go_web/src/views/ops/db/SqlExec.vue index 0d21d860..4b139073 100644 --- a/mayfly_go_web/src/views/ops/db/SqlExec.vue +++ b/mayfly_go_web/src/views/ops/db/SqlExec.vue @@ -5,51 +5,39 @@ - + - - + + {{ `${item.name} [${item.tagPath}]` }} {{ - `${item.host}:${item.port} ${item.type}` + `${item.host}:${item.port} ${item.type}` }} - - + + + - - + + :value="item.tableName"> @@ -71,33 +59,27 @@
- + + - + + - + + - + }" :action="getUploadSqlFileUrl()" :show-file-list="false" name="file" multiple + :limit="100"> @@ -105,23 +87,18 @@
- - + + {{ item }} - 保存 - 删除 + 保存 + + 删除 +
@@ -134,48 +111,24 @@
- + - 导出 + 导出 - - - + + +
@@ -186,7 +139,8 @@ - + + @@ -196,7 +150,8 @@ - + + @@ -205,67 +160,42 @@ - + - + - + - @@ -1520,15 +1438,19 @@ const addTableSuggestions = (tables: any[]) => { font-size: 8pt; font-weight: 600; border: 1px solid #ccc; + .CodeMirror { flex-grow: 1; z-index: 1; + .CodeMirror-code { line-height: 19px; } + font-family: 'JetBrainsMono'; } } + .el-tabs__header { padding: 0 10px; background-color: #fff; diff --git a/mayfly_go_web/src/views/ops/db/TableEdit.vue b/mayfly_go_web/src/views/ops/db/TableEdit.vue index 942e4033..6f22e3f5 100644 --- a/mayfly_go_web/src/views/ops/db/TableEdit.vue +++ b/mayfly_go_web/src/views/ops/db/TableEdit.vue @@ -2,67 +2,70 @@
- + +
- diff --git a/mayfly_go_web/src/views/ops/db/component/SqlExecDialog.vue b/mayfly_go_web/src/views/ops/db/component/SqlExecDialog.vue index eba48a83..4d5053e0 100644 --- a/mayfly_go_web/src/views/ops/db/component/SqlExecDialog.vue +++ b/mayfly_go_web/src/views/ops/db/component/SqlExecDialog.vue @@ -2,7 +2,8 @@
如需执行多条sql,需要在【数据库管理】配置连接参数:multiStatements=true - + - + + \ No newline at end of file diff --git a/mayfly_go_web/src/views/ops/machine/MachineEdit.vue b/mayfly_go_web/src/views/ops/machine/MachineEdit.vue index 0c39bbf0..1e0cdd07 100644 --- a/mayfly_go_web/src/views/ops/machine/MachineEdit.vue +++ b/mayfly_go_web/src/views/ops/machine/MachineEdit.vue @@ -1,6 +1,7 @@ + - - \ No newline at end of file diff --git a/mayfly_go_web/src/views/ops/machine/SshTerminalPage.vue b/mayfly_go_web/src/views/ops/machine/SshTerminalPage.vue index 750739e8..749d8db9 100644 --- a/mayfly_go_web/src/views/ops/machine/SshTerminalPage.vue +++ b/mayfly_go_web/src/views/ops/machine/SshTerminalPage.vue @@ -4,36 +4,27 @@
- diff --git a/mayfly_go_web/src/views/ops/mongo/MongoDataOp.vue b/mayfly_go_web/src/views/ops/mongo/MongoDataOp.vue index 50491a78..1cdcfcff 100644 --- a/mayfly_go_web/src/views/ops/mongo/MongoDataOp.vue +++ b/mayfly_go_web/src/views/ops/mongo/MongoDataOp.vue @@ -5,14 +5,8 @@ - + @@ -20,17 +14,20 @@ {{ item.name }} - {{ ` [${item.uri}]` }} + {{ ` + [${item.uri}]` + }} - + {{ item.Name }} {{ - ` [${formatByteSize(item.SizeOnDisk)}]` + ` [${formatByteSize(item.SizeOnDisk)}]` }} @@ -38,7 +35,8 @@ - + + @@ -47,19 +45,18 @@ - + - - + + + + - + @@ -69,17 +66,20 @@
- + - +
@@ -94,10 +94,12 @@ - + - + @@ -114,7 +116,8 @@ - + - + @@ -132,9 +136,9 @@
- diff --git a/mayfly_go_web/src/views/ops/mongo/MongoList.vue b/mayfly_go_web/src/views/ops/mongo/MongoList.vue index c8f4df31..882320ce 100644 --- a/mayfly_go_web/src/views/ops/mongo/MongoList.vue +++ b/mayfly_go_web/src/views/ops/mongo/MongoList.vue @@ -2,8 +2,10 @@
添加 - 编辑 - 删除 + 编辑 + + 删除 +
@@ -34,19 +36,15 @@ - + @@ -62,16 +60,20 @@ - + {{ databaseDialog.statsDialog.data.db }} @@ -120,7 +122,8 @@ - diff --git a/mayfly_go_web/src/views/ops/redis/DataOperation.vue b/mayfly_go_web/src/views/ops/redis/DataOperation.vue index fff81e6f..416fb991 100644 --- a/mayfly_go_web/src/views/ops/redis/DataOperation.vue +++ b/mayfly_go_web/src/views/ops/redis/DataOperation.vue @@ -6,37 +6,23 @@ - - + + + - - + + - + @@ -45,16 +31,12 @@ - + - + + @@ -63,9 +45,12 @@ - string - hash - set + string + hash + set @@ -91,8 +76,10 @@ @@ -100,55 +87,27 @@
- + - + - + - +
- diff --git a/mayfly_go_web/src/views/ops/redis/HashValue.vue b/mayfly_go_web/src/views/ops/redis/HashValue.vue index 92c7a447..98d6feba 100644 --- a/mayfly_go_web/src/views/ops/redis/HashValue.vue +++ b/mayfly_go_web/src/views/ops/redis/HashValue.vue @@ -14,14 +14,18 @@ - + - + + - - scan + + scan + 添加
@@ -37,13 +41,16 @@ @@ -56,196 +63,190 @@ - diff --git a/mayfly_go_web/src/views/ops/redis/RedisList.vue b/mayfly_go_web/src/views/ops/redis/RedisList.vue index 7ac6a83f..56454859 100644 --- a/mayfly_go_web/src/views/ops/redis/RedisList.vue +++ b/mayfly_go_web/src/views/ops/redis/RedisList.vue @@ -2,8 +2,10 @@
添加 - 编辑 - 删除 + 编辑 + + 删除 +
@@ -31,34 +33,27 @@ - + - + + 节点信息 @@ -66,44 +61,36 @@ @@ -120,13 +107,12 @@ @@ -135,189 +121,163 @@ - +
- diff --git a/mayfly_go_web/src/views/ops/redis/SetValue.vue b/mayfly_go_web/src/views/ops/redis/SetValue.vue index 104a0e11..dde9f1b3 100644 --- a/mayfly_go_web/src/views/ops/redis/SetValue.vue +++ b/mayfly_go_web/src/views/ops/redis/SetValue.vue @@ -15,12 +15,14 @@ @@ -33,119 +35,115 @@ - diff --git a/mayfly_go_web/src/views/personal/index.vue b/mayfly_go_web/src/views/personal/index.vue index 632bc133..dddb8d4f 100644 --- a/mayfly_go_web/src/views/personal/index.vue +++ b/mayfly_go_web/src/views/personal/index.vue @@ -12,8 +12,9 @@
- {{ currentTime }},{{ getUserInfos.username }},生活变的再糟糕,也不妨碍我变得更好! + {{ currentTime }},{{ + getUserInfos.username + }},生活变的再糟糕,也不妨碍我变得更好! @@ -35,7 +36,9 @@
上次登录时间:
-
{{ $filters.dateFormat(getUserInfos.lastLoginTime) }}
+
{{ + dateFormat(getUserInfos.lastLoginTime) + }}
@@ -54,7 +57,7 @@
@@ -72,19 +75,13 @@ - + @@ -112,13 +109,8 @@ - + @@ -181,122 +173,118 @@
- diff --git a/mayfly_go_web/src/views/system/account/AccountList.vue b/mayfly_go_web/src/views/system/account/AccountList.vue index e847fb46..c2be327c 100755 --- a/mayfly_go_web/src/views/system/account/AccountList.vue +++ b/mayfly_go_web/src/views/system/account/AccountList.vue @@ -2,21 +2,15 @@
添加 - 编辑 - 角色分配 - 删除 + 编辑 + 角色分配 + 删除
- +
@@ -27,9 +21,10 @@ + - + - diff --git a/mayfly_go_web/src/views/system/account/RoleEdit.vue b/mayfly_go_web/src/views/system/account/RoleEdit.vue index 92bb119f..9deaef6b 100755 --- a/mayfly_go_web/src/views/system/account/RoleEdit.vue +++ b/mayfly_go_web/src/views/system/account/RoleEdit.vue @@ -1,14 +1,11 @@ - + - diff --git a/mayfly_go_web/src/views/system/config/ConfigEdit.vue b/mayfly_go_web/src/views/system/config/ConfigEdit.vue index 80db29b8..28ba7d9f 100755 --- a/mayfly_go_web/src/views/system/config/ConfigEdit.vue +++ b/mayfly_go_web/src/views/system/config/ConfigEdit.vue @@ -1,6 +1,7 @@