From 3306b7297615da7e4e9a025e0e31cabd0a7d7460 Mon Sep 17 00:00:00 2001 From: junjun Date: Mon, 9 Jun 2025 11:08:45 +0800 Subject: [PATCH] feat(datasource): datasource choose table --- backend/apps/datasource/api/datasource.py | 7 ++++- backend/apps/datasource/crud/datasource.py | 6 ++++ frontend/src/api/datasource.ts | 3 +- frontend/src/views/ds/TableList.vue | 35 ++++++++++++++++++---- frontend/src/views/ds/form.vue | 5 ++++ frontend/src/views/ds/index.vue | 21 ++++--------- 6 files changed, 53 insertions(+), 24 deletions(-) diff --git a/backend/apps/datasource/api/datasource.py b/backend/apps/datasource/api/datasource.py index bec379b5..b0921673 100644 --- a/backend/apps/datasource/api/datasource.py +++ b/backend/apps/datasource/api/datasource.py @@ -9,7 +9,7 @@ from fastapi import APIRouter, File, UploadFile, HTTPException from apps.db.engine import create_table, get_data_engine, insert_data from common.core.deps import SessionDep, CurrentUser from ..crud.datasource import get_datasource_list, check_status, create_ds, update_ds, delete_ds, getTables, getFields, \ - execSql, update_table_and_fields, getTablesByDs, chooseTables, preview, updateTable, updateField + execSql, update_table_and_fields, getTablesByDs, chooseTables, preview, updateTable, updateField, get_ds from ..crud.field import get_fields_by_table_id from ..crud.table import get_tables_by_ds_id from ..models.datasource import CoreDatasource, CreateDatasource, TableObj, CoreTable, CoreField @@ -23,6 +23,11 @@ async def datasource_list(session: SessionDep): return get_datasource_list(session=session) +@router.post("/get/{id}") +async def get_datasource(session: SessionDep, id: int): + return get_ds(session, id) + + @router.post("/check") async def check(session: SessionDep, ds: CoreDatasource): return check_status(session, ds) diff --git a/backend/apps/datasource/crud/datasource.py b/backend/apps/datasource/crud/datasource.py index 37d83a27..5982b6f0 100644 --- a/backend/apps/datasource/crud/datasource.py +++ b/backend/apps/datasource/crud/datasource.py @@ -24,6 +24,12 @@ def get_datasource_list(session: SessionDep): return datasource_list +def get_ds(session: SessionDep, id: int): + statement = select(CoreDatasource).where(CoreDatasource.id == id) + datasource = session.exec(statement).first() + return datasource + + def check_status(session: SessionDep, ds: CoreDatasource): conn = get_engine(ds) try: diff --git a/frontend/src/api/datasource.ts b/frontend/src/api/datasource.ts index 64c86355..151faeb9 100644 --- a/frontend/src/api/datasource.ts +++ b/frontend/src/api/datasource.ts @@ -16,5 +16,6 @@ export const datasourceApi = { edit: (data: any) => request.post('/datasource/editLocalComment', data), previewData: (id: Number, data: any) => request.post(`/datasource/previewData/${id}`, data), saveTable: (data: any) => request.post('/datasource/editTable', data), - saveField: (data: any) => request.post('/datasource/editField', data) + saveField: (data: any) => request.post('/datasource/editField', data), + getDs: (id: Number) => request.post(`/datasource/get/${id}`), } \ No newline at end of file diff --git a/frontend/src/views/ds/TableList.vue b/frontend/src/views/ds/TableList.vue index 56d1a889..da47849c 100644 --- a/frontend/src/views/ds/TableList.vue +++ b/frontend/src/views/ds/TableList.vue @@ -9,7 +9,10 @@
- Tables +
+ Tables + +
+ diff --git a/frontend/src/views/ds/form.vue b/frontend/src/views/ds/form.vue index a94a9f0e..000fa74e 100644 --- a/frontend/src/views/ds/form.vue +++ b/frontend/src/views/ds/form.vue @@ -149,6 +149,7 @@ >Preview ({ "X-SQLBOT-TOKEN": `Bearer ${token}` }); const dialogTitle = ref(""); const getUploadURL = import.meta.env.VITE_API_BASE_URL + '/datasource/uploadExcel' +const saveLoading = ref(false) const rules = reactive({ @@ -236,6 +238,7 @@ const close = () => { checkList.value = []; tableList.value = []; excelUploadSuccess.value = false; + saveLoading.value = false }; const open = (item: any, editTable: boolean = false) => { @@ -327,6 +330,7 @@ const save = async (formEl: FormInstance | undefined) => { if (!formEl) return; await formEl.validate((valid) => { if (valid) { + saveLoading.value = true const list = tableList.value .filter((ele: any) => { return checkList.value.includes(ele.tableName); @@ -348,6 +352,7 @@ const save = async (formEl: FormInstance | undefined) => { // save table and field datasourceApi.chooseTables(form.value.id, list).then(() => { close(); + emit("refresh"); }); } } else { diff --git a/frontend/src/views/ds/index.vue b/frontend/src/views/ds/index.vue index 5a2537f8..12eaa2f9 100644 --- a/frontend/src/views/ds/index.vue +++ b/frontend/src/views/ds/index.vue @@ -26,7 +26,7 @@
- +
@@ -40,7 +40,7 @@ import IconOpeAdd from '@/assets/svg/operate/ope-add.svg' import IconOpeEdit from '@/assets/svg/operate/ope-edit.svg' import IconOpeDelete from '@/assets/svg/operate/ope-delete.svg' -import {Search, List, CreditCard} from '@element-plus/icons-vue' +import {Search, List} from '@element-plus/icons-vue' import {ref, onMounted} from 'vue' import DsForm from './form.vue' import {datasourceApi} from '@/api/datasource' @@ -83,9 +83,9 @@ const editDs = (item: any) => { dsForm.value.open(item) } -const editTables = (item: any) => { - dsForm.value.open(item, true) -} +// const editTables = (item: any) => { +// dsForm.value.open(item, true) +// } const deleteDs = (item: any) => { ElMessageBox.confirm( @@ -108,17 +108,6 @@ const deleteDs = (item: any) => { } const getTables = (id: number, name: string) => { - // datasourceApi.getTables(id).then((res) => { - // console.log(res) - // }) - - // datasourceApi.getFields(id,'core_dataset_table').then((res) => { - // console.log(res) - // }) - - // datasourceApi.execSql(id,'select id,name,table_name from core_dataset_table limit 10').then((res) => { - // console.log(res) - // }) router.push(`/dsTable/${id}/${name}`) }