From 8d24c2a4fa437cdb48a3624fd18f28c598c07d28 Mon Sep 17 00:00:00 2001 From: "meilin.huang" <954537473@qq.com> Date: Fri, 10 Jan 2025 12:05:00 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E6=95=B0=E6=8D=AE=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E4=BC=98=E5=8C=96=20&=20=E6=A0=87=E7=AD=BE=E6=A0=91?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=8F=8C=E5=87=BB=E5=B1=95=E5=BC=80=E8=8A=82?= =?UTF-8?q?=E7=82=B9=20&=20mysql=E6=94=AF=E6=8C=81with=E8=AF=AD=E5=8F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/assets/icon/db/sql.svg | 1 + .../src/components/monaco/MonacoEditorBox.ts | 19 ++- .../components/monaco/MonacoEditorDialog.vue | 4 +- frontend/src/views/ops/component/TagTree.vue | 22 ++- frontend/src/views/ops/db/SqlExec.vue | 10 +- frontend/src/views/ops/db/SyncTaskEdit.vue | 157 ++++++++---------- frontend/src/views/ops/db/SyncTaskList.vue | 5 +- server/internal/db/api/db_data_sync.go | 6 +- server/internal/db/api/vo/db_data_sync.go | 1 + .../internal/db/application/db_data_sync.go | 153 +++++++++-------- server/internal/db/application/db_sql_exec.go | 15 +- .../db/dbm/sqlparser/mysql/visitor.go | 9 + .../internal/db/dbm/sqlparser/sqlstmt/stmt.go | 4 + .../internal/db/domain/entity/db_data_sync.go | 2 +- server/pkg/cache/str_cache.go | 10 +- 15 files changed, 231 insertions(+), 187 deletions(-) create mode 100644 frontend/src/assets/icon/db/sql.svg diff --git a/frontend/src/assets/icon/db/sql.svg b/frontend/src/assets/icon/db/sql.svg new file mode 100644 index 00000000..2226c807 --- /dev/null +++ b/frontend/src/assets/icon/db/sql.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/components/monaco/MonacoEditorBox.ts b/frontend/src/components/monaco/MonacoEditorBox.ts index 7cfa3a7f..295cf192 100644 --- a/frontend/src/components/monaco/MonacoEditorBox.ts +++ b/frontend/src/components/monaco/MonacoEditorBox.ts @@ -1,6 +1,7 @@ import { VNode, h, render } from 'vue'; import MonacoEditorDialog from './MonacoEditorDialog.vue'; import * as monaco from 'monaco-editor'; +import { ElMessage } from 'element-plus'; export type MonacoEditorDialogProps = { content: string; @@ -53,7 +54,23 @@ const MonacoEditorBox = (props: MonacoEditorDialogProps): void => { console.log('close editor'); }, onConfirm: () => { - props.confirmFn && props.confirmFn(props.content); + let value = props.content; + if (props.language === 'json') { + let val; + try { + val = JSON.parse(value); + if (typeof val !== 'object') { + ElMessage.error('Invalid json'); + return; + } + } catch (e) { + ElMessage.error('Invalid json'); + return; + } + // 压缩json字符串 + value = JSON.stringify(val); + } + props.confirmFn && props.confirmFn(value); }, }); // 将虚拟dom渲染到 container dom 上 diff --git a/frontend/src/components/monaco/MonacoEditorDialog.vue b/frontend/src/components/monaco/MonacoEditorDialog.vue index 936b515b..9ce7fed6 100644 --- a/frontend/src/components/monaco/MonacoEditorDialog.vue +++ b/frontend/src/components/monaco/MonacoEditorDialog.vue @@ -76,11 +76,11 @@ const confirm = async () => { try { val = JSON.parse(value); if (typeof val !== 'object') { - ElMessage.error('请输入正确的json'); + ElMessage.error('Invalid json'); return; } } catch (e) { - ElMessage.error('请输入正确的json'); + ElMessage.error('Invalid json'); return; } diff --git a/frontend/src/views/ops/component/TagTree.vue b/frontend/src/views/ops/component/TagTree.vue index bae39738..0cd2ddd8 100644 --- a/frontend/src/views/ops/component/TagTree.vue +++ b/frontend/src/views/ops/component/TagTree.vue @@ -18,7 +18,12 @@ :default-expanded-keys="props.defaultExpandedKeys" >