From 42138d28423fdd2c97a2bf47ee0643d4b000a604 Mon Sep 17 00:00:00 2001 From: dataeaseShu Date: Thu, 3 Jul 2025 18:02:26 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E6=95=B0=E6=8D=AE=E6=BA=90):=20=E6=A0=B7?= =?UTF-8?q?=E5=BC=8F=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/eslint.config.cjs | 1 + .../src/assets/datasource/icon_PostgreSQL.png | Bin 0 -> 2750 bytes .../src/assets/datasource/icon_SQL_Server.png | Bin 0 -> 3243 bytes frontend/src/assets/datasource/icon_excel.png | Bin 0 -> 715 bytes frontend/src/assets/datasource/icon_mysql.png | Bin 0 -> 1371 bytes .../src/assets/datasource/icon_oracle.png | Bin 0 -> 400 bytes frontend/src/assets/svg/icon-key_outlined.svg | 4 + .../src/assets/svg/icon-maybe_outlined.svg | 3 + .../src/assets/svg/icon_chat_outlined.svg | 3 + .../src/assets/svg/icon_form_outlined.svg | 3 + .../src/assets/svg/icon_logout_outlined.svg | 4 + .../svg/icon_moments-categories_outlined.svg | 6 +- .../src/assets/svg/icon_right_outlined.svg | 3 + .../assets/svg/icon_translate_outlined.svg | 11 + frontend/src/components/layout/LayoutDsl.vue | 20 +- frontend/src/components/layout/Menu.vue | 2 +- frontend/src/components/layout/MenuItem.vue | 2 + frontend/src/components/layout/Person.vue | 275 ++++++++ frontend/src/components/layout/Workspace.vue | 195 +++++ frontend/src/router/index.ts | 6 +- frontend/src/views/ds/Card.vue | 257 +++++++ frontend/src/views/ds/DataTable.vue | 475 +++++++++++++ frontend/src/views/ds/Datasource.vue | 386 ++++++++++ frontend/src/views/ds/DatasourceForm.vue | 667 ++++++++++++++++++ frontend/src/views/ds/DatasourceList.vue | 109 +++ frontend/src/views/ds/DatasourceListSide.vue | 106 +++ frontend/src/views/ds/ParamsForm.vue | 66 ++ frontend/src/views/ds/TableList.vue | 4 +- frontend/src/views/ds/js/ds-type.ts | 14 + frontend/src/views/system/model/Card.vue | 4 +- frontend/src/views/system/model/Model.vue | 37 +- frontend/src/views/system/model/ModelForm.vue | 22 +- frontend/src/views/system/model/ModelList.vue | 15 +- .../src/views/system/model/ModelListSide.vue | 8 +- .../src/views/system/model/ParamsForm.vue | 4 +- 35 files changed, 2650 insertions(+), 62 deletions(-) create mode 100644 frontend/src/assets/datasource/icon_PostgreSQL.png create mode 100644 frontend/src/assets/datasource/icon_SQL_Server.png create mode 100644 frontend/src/assets/datasource/icon_excel.png create mode 100644 frontend/src/assets/datasource/icon_mysql.png create mode 100644 frontend/src/assets/datasource/icon_oracle.png create mode 100644 frontend/src/assets/svg/icon-key_outlined.svg create mode 100644 frontend/src/assets/svg/icon-maybe_outlined.svg create mode 100644 frontend/src/assets/svg/icon_chat_outlined.svg create mode 100644 frontend/src/assets/svg/icon_form_outlined.svg create mode 100644 frontend/src/assets/svg/icon_logout_outlined.svg create mode 100644 frontend/src/assets/svg/icon_right_outlined.svg create mode 100644 frontend/src/assets/svg/icon_translate_outlined.svg create mode 100644 frontend/src/components/layout/Person.vue create mode 100644 frontend/src/components/layout/Workspace.vue create mode 100644 frontend/src/views/ds/Card.vue create mode 100644 frontend/src/views/ds/DataTable.vue create mode 100644 frontend/src/views/ds/Datasource.vue create mode 100644 frontend/src/views/ds/DatasourceForm.vue create mode 100644 frontend/src/views/ds/DatasourceList.vue create mode 100644 frontend/src/views/ds/DatasourceListSide.vue create mode 100644 frontend/src/views/ds/ParamsForm.vue diff --git a/frontend/eslint.config.cjs b/frontend/eslint.config.cjs index 109373cb..9d87cc93 100644 --- a/frontend/eslint.config.cjs +++ b/frontend/eslint.config.cjs @@ -28,6 +28,7 @@ module.exports = typescriptEslint.config( 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off', 'vue/multi-word-component-names': 'off', 'vue/no-required-prop-with-default': 'off', + 'vue/no-v-html': 'off', '@typescript-eslint/no-explicit-any': 'off', '@typescript-eslint/ban-ts-comment': 'warn', diff --git a/frontend/src/assets/datasource/icon_PostgreSQL.png b/frontend/src/assets/datasource/icon_PostgreSQL.png new file mode 100644 index 0000000000000000000000000000000000000000..b120f82b70f2d6f10b640524003ceb6c6600f52a GIT binary patch literal 2750 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 literal 0 HcmV?d00001 diff --git a/frontend/src/assets/datasource/icon_mysql.png b/frontend/src/assets/datasource/icon_mysql.png new file mode 100644 index 0000000000000000000000000000000000000000..3a094258a2a52c6bf7275697ef508e4c286c589e GIT binary patch literal 1371 zcmV-h1*H0kP)}}eS+W9&)OZVUMk>eZz;FUso4{ije-7zb3|zM9;^*OX0*pV8^j;iZc0j=! z4{}3d=z~1n>BIj7W>3Vy zWmt4!0aMikPiSe;Wm}|geGFii4*u%HLXJ;Ior>0ojYRbK>x#NiW_Ioxy@( z%hR8a9VRG_h{LN?I%UAKw>J987`M_cNv^e_jWsL4872@vB@NO~r8Cb6G5BKw;wF z8H%(cq$WeU)Cts7KZ8nOQ?5O{u1b}7&Tis5S?#;5WAbdbBj5fqUPj8;!x~g6hXI~k z3RSc8tIbDx@?cOBOBs-Fwdg593s4UO)XIp}Edr|ZRPR;*Jpahd4oJ-9ZH~s+mZEv=mpW9da2k>2*{q2Y)hz%D_sy)qDv&wo_?VX@AJjVpg)Z zf)w%@K={G>fg7kC*tf=wq8`q}1~5tDHmX#g01LKIFfMH5AF&!KssdLC8Md4LK2-d+P+;49|mMJa3ZE@ z0LSB_vN;X8>gSFs=`@3>W8JG-=AH5xVAP?Gpk{Va^VAyG%S(Zp0jJbRW1wBDw6?+? zQ+iXt#|!-#j~Ug#Szu5}!LHK`>S{cro9TQ>TJ$@iG=zQLLjp4^b+Eb( zLk2u;)fzKeyk@Yd_#Bd9 z;F`hgz_@^c^8o|rWCNKgY2NN9OmE+o02{9V#xMfjiZ6}|})^K|udS?83{1OTt4oI?Nr literal 0 HcmV?d00001 diff --git a/frontend/src/assets/svg/icon-key_outlined.svg b/frontend/src/assets/svg/icon-key_outlined.svg new file mode 100644 index 00000000..1045f405 --- /dev/null +++ b/frontend/src/assets/svg/icon-key_outlined.svg @@ -0,0 +1,4 @@ + + + + diff --git a/frontend/src/assets/svg/icon-maybe_outlined.svg b/frontend/src/assets/svg/icon-maybe_outlined.svg new file mode 100644 index 00000000..5e8a31aa --- /dev/null +++ b/frontend/src/assets/svg/icon-maybe_outlined.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/assets/svg/icon_chat_outlined.svg b/frontend/src/assets/svg/icon_chat_outlined.svg new file mode 100644 index 00000000..8027cf8a --- /dev/null +++ b/frontend/src/assets/svg/icon_chat_outlined.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/assets/svg/icon_form_outlined.svg b/frontend/src/assets/svg/icon_form_outlined.svg new file mode 100644 index 00000000..644e0c22 --- /dev/null +++ b/frontend/src/assets/svg/icon_form_outlined.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/assets/svg/icon_logout_outlined.svg b/frontend/src/assets/svg/icon_logout_outlined.svg new file mode 100644 index 00000000..69d2c9d1 --- /dev/null +++ b/frontend/src/assets/svg/icon_logout_outlined.svg @@ -0,0 +1,4 @@ + + + + diff --git a/frontend/src/assets/svg/icon_moments-categories_outlined.svg b/frontend/src/assets/svg/icon_moments-categories_outlined.svg index a7226e4b..51a89af8 100644 --- a/frontend/src/assets/svg/icon_moments-categories_outlined.svg +++ b/frontend/src/assets/svg/icon_moments-categories_outlined.svg @@ -1,4 +1,4 @@ - - - + + + diff --git a/frontend/src/assets/svg/icon_right_outlined.svg b/frontend/src/assets/svg/icon_right_outlined.svg new file mode 100644 index 00000000..e166a0f7 --- /dev/null +++ b/frontend/src/assets/svg/icon_right_outlined.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/assets/svg/icon_translate_outlined.svg b/frontend/src/assets/svg/icon_translate_outlined.svg new file mode 100644 index 00000000..a7c7d59e --- /dev/null +++ b/frontend/src/assets/svg/icon_translate_outlined.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/frontend/src/components/layout/LayoutDsl.vue b/frontend/src/components/layout/LayoutDsl.vue index 5acfa145..aa4942fe 100644 --- a/frontend/src/components/layout/LayoutDsl.vue +++ b/frontend/src/components/layout/LayoutDsl.vue @@ -1,11 +1,12 @@
+
@@ -28,12 +30,8 @@ const handleFoldExpand = () => { {{ collapse ? '' : '返回工作空间' }}
- - - - - {{ collapse ? '' : '飞小致' }} - + + @@ -97,10 +95,6 @@ const handleFoldExpand = () => { display: flex; align-items: center; margin-top: 16px; - .default-avatar { - margin-right: 8px; - cursor: pointer; - } .fold { cursor: pointer; @@ -153,6 +147,10 @@ const handleFoldExpand = () => { box-shadow: 0px 2px 4px 0px #1f23291f; background-color: #fff; border-radius: 12px; + + &:has(.no-padding) { + padding: 0; + } } } } diff --git a/frontend/src/components/layout/Menu.vue b/frontend/src/components/layout/Menu.vue index 0cb63e40..327d3df7 100644 --- a/frontend/src/components/layout/Menu.vue +++ b/frontend/src/components/layout/Menu.vue @@ -33,7 +33,7 @@ const activeIndex = computed(() => { height: 40px; border-radius: 6px; &.is-active.is-active.is-active { - background-color: #1CBA901A; + background-color: #1cba901a; } } } diff --git a/frontend/src/components/layout/MenuItem.vue b/frontend/src/components/layout/MenuItem.vue index 506ce9e2..ea938bc1 100644 --- a/frontend/src/components/layout/MenuItem.vue +++ b/frontend/src/components/layout/MenuItem.vue @@ -3,9 +3,11 @@ import { h } from 'vue' import { ElMenuItem, ElSubMenu, ElIcon } from 'element-plus-secondary' import model from '@/assets/svg/icon_dataset_filled.svg' +import ds from '@/assets/svg/ds.svg' const iconMap = { icon_ai: model, + ds, } as { [key: string]: any } const titleWithIcon = (props: any) => { diff --git a/frontend/src/components/layout/Person.vue b/frontend/src/components/layout/Person.vue new file mode 100644 index 00000000..e7882fe4 --- /dev/null +++ b/frontend/src/components/layout/Person.vue @@ -0,0 +1,275 @@ + + + + + + + diff --git a/frontend/src/components/layout/Workspace.vue b/frontend/src/components/layout/Workspace.vue new file mode 100644 index 00000000..09320e5b --- /dev/null +++ b/frontend/src/components/layout/Workspace.vue @@ -0,0 +1,195 @@ + + + + + + + diff --git a/frontend/src/router/index.ts b/frontend/src/router/index.ts index 21579f32..1839cb34 100644 --- a/frontend/src/router/index.ts +++ b/frontend/src/router/index.ts @@ -5,7 +5,7 @@ import LayoutDsl from '@/components/layout/LayoutDsl.vue' import SinglePage from '@/components/layout/SinglePage.vue' import login from '@/views/login/index.vue' import chat from '@/views/chat/index.vue' -import ds from '@/views/ds/index.vue' +import Datasource from '@/views/ds/Datasource.vue' import DashboardEditor from '@/views/dashboard/editor/index.vue' import DashboardPreview from '@//views/dashboard/preview/SQPreviewSingle.vue' import Dashboard from '@/views/dashboard/index.vue' @@ -48,13 +48,13 @@ const router = createRouter({ }, { path: '/ds', - component: Layout, + component: LayoutDsl, redirect: '/ds/index', children: [ { path: 'index', name: 'ds', - component: ds, + component: Datasource, meta: { title: 'Data Connections', icon: 'ds' }, }, ], diff --git a/frontend/src/views/ds/Card.vue b/frontend/src/views/ds/Card.vue new file mode 100644 index 00000000..7ff12d16 --- /dev/null +++ b/frontend/src/views/ds/Card.vue @@ -0,0 +1,257 @@ + + + + + + + diff --git a/frontend/src/views/ds/DataTable.vue b/frontend/src/views/ds/DataTable.vue new file mode 100644 index 00000000..8fd03997 --- /dev/null +++ b/frontend/src/views/ds/DataTable.vue @@ -0,0 +1,475 @@ + + + + + diff --git a/frontend/src/views/ds/Datasource.vue b/frontend/src/views/ds/Datasource.vue new file mode 100644 index 00000000..efc34f1f --- /dev/null +++ b/frontend/src/views/ds/Datasource.vue @@ -0,0 +1,386 @@ + + + + + + + diff --git a/frontend/src/views/ds/DatasourceForm.vue b/frontend/src/views/ds/DatasourceForm.vue new file mode 100644 index 00000000..7e6b47d8 --- /dev/null +++ b/frontend/src/views/ds/DatasourceForm.vue @@ -0,0 +1,667 @@ + + + + + diff --git a/frontend/src/views/ds/DatasourceList.vue b/frontend/src/views/ds/DatasourceList.vue new file mode 100644 index 00000000..bcf9f256 --- /dev/null +++ b/frontend/src/views/ds/DatasourceList.vue @@ -0,0 +1,109 @@ + + + + + diff --git a/frontend/src/views/ds/DatasourceListSide.vue b/frontend/src/views/ds/DatasourceListSide.vue new file mode 100644 index 00000000..ece6f551 --- /dev/null +++ b/frontend/src/views/ds/DatasourceListSide.vue @@ -0,0 +1,106 @@ + + + + + diff --git a/frontend/src/views/ds/ParamsForm.vue b/frontend/src/views/ds/ParamsForm.vue new file mode 100644 index 00000000..b9898754 --- /dev/null +++ b/frontend/src/views/ds/ParamsForm.vue @@ -0,0 +1,66 @@ + + + + + diff --git a/frontend/src/views/ds/TableList.vue b/frontend/src/views/ds/TableList.vue index ae7af207..cc371f0a 100644 --- a/frontend/src/views/ds/TableList.vue +++ b/frontend/src/views/ds/TableList.vue @@ -105,7 +105,7 @@ @closed="closeTable" >
{{ t('ds.edit.table_comment_label') }}
- +
{{ t('common.cancel') }} {{ t('common.confirm') }} @@ -121,7 +121,7 @@ @closed="closeField" >
{{ t('ds.edit.field_comment_label') }}
- +
{{ t('common.cancel') }} {{ t('common.confirm') }} diff --git a/frontend/src/views/ds/js/ds-type.ts b/frontend/src/views/ds/js/ds-type.ts index 2fb2ed86..8a022be9 100644 --- a/frontend/src/views/ds/js/ds-type.ts +++ b/frontend/src/views/ds/js/ds-type.ts @@ -1,3 +1,9 @@ +import mysql_ds from '@/assets/datasource/icon_mysql.png' +import excel from '@/assets/datasource/icon_excel.png' +import oracle from '@/assets/datasource/icon_oracle.png' +import pg from '@/assets/datasource/icon_PostgreSQL.png' +import sqlServer from '@/assets/datasource/icon_SQL_Server.png' + export const dsType = [ { label: 'MySQL', value: 'mysql' }, { label: 'PostgreSQL', value: 'pg' }, @@ -6,4 +12,12 @@ export const dsType = [ { label: 'Excel/CSV', value: 'excel' }, ] +export const dsTypeWithImg = [ + { name: 'MySQL', type: 'mysql', img: mysql_ds }, + { name: 'PostgreSQL', type: 'pg', img: pg }, + { name: 'Microsoft SQL Server', type: 'sqlServer', img: sqlServer }, + { name: 'Oracle', type: 'oracle', img: oracle }, + { name: '本地 Excel/CSV', type: 'excel', img: excel }, +] + export const haveSchema = ['sqlServer', 'pg', 'oracle'] diff --git a/frontend/src/views/system/model/Card.vue b/frontend/src/views/system/model/Card.vue index 5ce7cd5d..b8ecc5ae 100644 --- a/frontend/src/views/system/model/Card.vue +++ b/frontend/src/views/system/model/Card.vue @@ -48,14 +48,14 @@ const handleDel = () => {
- +