From a37fc3507bd445d42d9feb94226f116d1c8df29a Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Fri, 25 Jul 2025 21:47:27 +0800 Subject: [PATCH] fix: Assistant change ds by workspace --- backend/apps/datasource/api/datasource.py | 5 +++++ backend/apps/datasource/crud/datasource.py | 13 ++++++++----- frontend/src/api/embedded.ts | 1 + frontend/src/views/system/embedded/index.vue | 16 ++++++++++------ 4 files changed, 24 insertions(+), 11 deletions(-) diff --git a/backend/apps/datasource/api/datasource.py b/backend/apps/datasource/api/datasource.py index e8e417f9..7642c221 100644 --- a/backend/apps/datasource/api/datasource.py +++ b/backend/apps/datasource/api/datasource.py @@ -18,6 +18,11 @@ from ..models.datasource import CoreDatasource, CreateDatasource, TableObj, Core router = APIRouter(tags=["datasource"], prefix="/datasource") path = "/opt/sqlbot/data/excel" +@router.get("/ws/{oid}", include_in_schema=False) +async def query_by_oid(session: SessionDep, user: CurrentUser, oid: int) -> List[CoreDatasource]: + if not user.isAdmin: + raise Exception("no permission to execute") + return get_datasource_list(session=session, user=user, oid=oid) @router.get("/list") async def datasource_list(session: SessionDep, user: CurrentUser): diff --git a/backend/apps/datasource/crud/datasource.py b/backend/apps/datasource/crud/datasource.py index 72a8fe84..52381c6f 100644 --- a/backend/apps/datasource/crud/datasource.py +++ b/backend/apps/datasource/crud/datasource.py @@ -1,6 +1,6 @@ import datetime import json -from typing import List +from typing import List, Optional from fastapi import HTTPException from sqlalchemy import and_, text, cast, or_, func @@ -25,10 +25,13 @@ from ..models.datasource import CoreDatasource, CreateDatasource, CoreTable, Cor DatasourceConf, TableAndFields -def get_datasource_list(session: SessionDep, user: CurrentUser): - oid = user.oid if user.oid is not None else 1 - return session.query(CoreDatasource).filter(CoreDatasource.oid == oid).order_by( - func.convert_to(CoreDatasource.name, 'gbk')).all() +def get_datasource_list(session: SessionDep, user: CurrentUser, oid: Optional[int] = None) -> List[CoreDatasource]: + current_oid = user.oid if user.oid is not None else 1 + if user.isAdmin and oid: + current_oid = oid + return session.exec(select(CoreDatasource).where(CoreDatasource.oid == current_oid).order_by( + func.convert_to(CoreDatasource.name, 'gbk'))).all() + def get_ds(session: SessionDep, id: int): diff --git a/frontend/src/api/embedded.ts b/frontend/src/api/embedded.ts index fccad9d7..6002ca90 100644 --- a/frontend/src/api/embedded.ts +++ b/frontend/src/api/embedded.ts @@ -5,3 +5,4 @@ export const updateAssistant = (data: any) => request.put('/system/assistant', d export const saveAssistant = (data: any) => request.post('/system/assistant', data) export const getOne = (id: any) => request.get(`/system/assistant/${id}`) export const delOne = (id: any) => request.delete(`/system/assistant/${id}`) +export const dsApi = (id: any) => request.get(`/datasource/ws/${id}`) diff --git a/frontend/src/views/system/embedded/index.vue b/frontend/src/views/system/embedded/index.vue index 69a5ae78..49e714dd 100644 --- a/frontend/src/views/system/embedded/index.vue +++ b/frontend/src/views/system/embedded/index.vue @@ -14,8 +14,7 @@ import icon_copy_outlined from '@/assets/embedded/icon_copy_outlined.svg' import Card from './Card.vue' import { workspaceList } from '@/api/workspace' import DsCard from './DsCard.vue' -import { datasourceApi } from '@/api/datasource' -import { getList, updateAssistant, saveAssistant, delOne } from '@/api/embedded' +import { getList, updateAssistant, saveAssistant, delOne, dsApi } from '@/api/embedded' import { useI18n } from 'vue-i18n' import { cloneDeep } from 'lodash-es' @@ -49,7 +48,7 @@ const currentEmbedded = reactive(cloneDeep(defaultEmbedded)) const isCreate = ref(false) const defaultForm = { - oid: '', + oid: 1, private_list: [] as any, } const dsForm = reactive(cloneDeep(defaultForm)) @@ -107,9 +106,13 @@ const handleAddEmbedded = (val: any) => { handleAdvancedEmbedded(null) } } - +const wsChanged = (val: any) => { + dsForm.private_list = [] + dsForm.oid = val + getDsList() +} const getDsList = () => { - datasourceApi.list().then((res: any) => { + dsApi(dsForm.oid).then((res: any) => { dsListOptions.value = res || [] if (!currentEmbedded.id) { dsForm.private_list = dsListOptions.value.map((ele) => ele.id) @@ -119,10 +122,10 @@ const getDsList = () => { const handleBaseEmbedded = (row: any) => { advancedApplication.value = false initWorkspace() - getDsList() if (row) { Object.assign(dsForm, JSON.parse(row.configuration)) } + getDsList() ruleConfigvVisible.value = true dialogTitle.value = row?.id ? t('embedded.edit_basic_applications') @@ -697,6 +700,7 @@ const saveHandler = () => { :placeholder=" $t('datasource.please_enter') + $t('common.empty') + $t('user.workspace') " + @change="wsChanged" >