From 82de276aaddde7eacc4c258ffae5c369ce8d3a10 Mon Sep 17 00:00:00 2001 From: wangjiahao <1522128093@qq.com> Date: Sat, 28 Feb 2026 16:02:08 +0800 Subject: [PATCH] feat(dashboard): The dashboard supports displaying real-time data --- backend/apps/chat/curd/chat.py | 24 +++++++++++++------ .../apps/dashboard/crud/dashboard_service.py | 9 +++---- .../dashboard/common/EmptyBackgroundSvg.vue | 1 - .../dashboard/components/sq-view/index.vue | 16 ++++++++++++- 4 files changed, 37 insertions(+), 13 deletions(-) diff --git a/backend/apps/chat/curd/chat.py b/backend/apps/chat/curd/chat.py index 39c9835d..1f8befdf 100644 --- a/backend/apps/chat/curd/chat.py +++ b/backend/apps/chat/curd/chat.py @@ -1,5 +1,5 @@ import datetime -from typing import List, Optional, Union +from typing import List, Optional, Union, Dict, Any import orjson import sqlparse @@ -18,7 +18,7 @@ from apps.system.crud.assistant import AssistantOutDs, AssistantOutDsFactory from apps.system.schemas.system_schema import AssistantOutDsSchema from common.core.deps import CurrentAssistant, SessionDep, CurrentUser, Trans from common.utils.data_format import DataFormat -from common.utils.utils import extract_nested_json +from common.utils.utils import extract_nested_json, SQLBotLogUtil def get_chat_record_by_id(session: SessionDep, record_id: int): @@ -243,14 +243,24 @@ def get_chart_data_with_user_live(session: SessionDep, current_user: CurrentUser return get_chart_data_ds(session,row.datasource, row.sql) def get_chart_data_ds(session: SessionDep,ds_id,sql): + json_result: Dict[str, Any] = {'status': 'success','data':[],'message':''} try: datasource = get_ds(session,ds_id) - result = exec_sql(ds=datasource,sql=sql, origin_column=False) - _data = DataFormat.convert_large_numbers_in_object_array(result.get('data')) - return _data - except Exception: + if datasource is None: + json_result['status'] = 'failed' + json_result['message'] = 'Datasource not found' + return json_result + else: + result = exec_sql(ds=datasource,sql=sql, origin_column=False) + _data = DataFormat.convert_large_numbers_in_object_array(result.get('data')) + json_result['data'] = _data + return json_result + except Exception as e: + SQLBotLogUtil.error(f"Function failed: {e}") + json_result['status'] = 'failed' + json_result['message'] = f"{e}" pass - return [] + return json_result def get_chat_chart_data(session: SessionDep, chat_record_id: int): stmt = select(ChatRecord.data).where(and_(ChatRecord.id == chat_record_id)) diff --git a/backend/apps/dashboard/crud/dashboard_service.py b/backend/apps/dashboard/crud/dashboard_service.py index c1440bf4..c9c83650 100644 --- a/backend/apps/dashboard/crud/dashboard_service.py +++ b/backend/apps/dashboard/crud/dashboard_service.py @@ -49,11 +49,12 @@ def load_resource(session: SessionDep, dashboard: QueryDashboard): result_dict = dict(result) canvas_view_obj = orjson.loads(result_dict['canvas_view_info']) - for item in canvas_view_obj.values(): # 直接遍历值 - # 检查必要字段是否存在 + for item in canvas_view_obj.values(): if all(key in item for key in ['datasource', 'sql']) and item['datasource'] is not None: - item['data']['data'] = get_chart_data_ds(session, item['datasource'], item['sql']) - + data_result = get_chart_data_ds(session, item['datasource'], item['sql']) + item['data']['data'] = data_result['data'] + item['status'] = data_result['status'] + item['message'] = data_result['message'] result_dict['canvas_view_info'] = orjson.dumps(canvas_view_obj) return result_dict diff --git a/frontend/src/views/dashboard/common/EmptyBackgroundSvg.vue b/frontend/src/views/dashboard/common/EmptyBackgroundSvg.vue index b5499e99..a2ea6f5d 100644 --- a/frontend/src/views/dashboard/common/EmptyBackgroundSvg.vue +++ b/frontend/src/views/dashboard/common/EmptyBackgroundSvg.vue @@ -32,7 +32,6 @@ defineProps({ } :deep(.ed-empty__description) { margin-top: 8px; - color: var(--N600, #646a73); text-align: center; font-size: 14px; diff --git a/frontend/src/views/dashboard/components/sq-view/index.vue b/frontend/src/views/dashboard/components/sq-view/index.vue index 22355d61..d7d176cf 100644 --- a/frontend/src/views/dashboard/components/sq-view/index.vue +++ b/frontend/src/views/dashboard/components/sq-view/index.vue @@ -156,8 +156,11 @@ defineExpose({
+
+ {{ viewInfo.message }} +