From 288cc34e2c745596a28a84b287169b8b3ecd1a90 Mon Sep 17 00:00:00 2001 From: wangjiahao <1522128093@qq.com> Date: Wed, 11 Jun 2025 10:32:12 +0800 Subject: [PATCH] refactor: update toolbar --- backend/apps/dashboard/api/dashboard_api.py | 30 +++++--- .../apps/dashboard/crud/dashboard_service.py | 8 +++ frontend/src/i18n/zh-CN.json | 4 +- .../views/dashboard/common/ResourceTree.vue | 4 +- .../src/views/dashboard/editor/Toolbar.vue | 68 +++++++++++++++++-- frontend/src/views/dashboard/editor/index.vue | 9 ++- .../views/dashboard/preview/SQPreviewShow.vue | 4 +- .../src/views/dashboard/utils/canvasUtils.ts | 21 +++++- 8 files changed, 125 insertions(+), 23 deletions(-) diff --git a/backend/apps/dashboard/api/dashboard_api.py b/backend/apps/dashboard/api/dashboard_api.py index 4ed81b25..6ea7a416 100644 --- a/backend/apps/dashboard/api/dashboard_api.py +++ b/backend/apps/dashboard/api/dashboard_api.py @@ -1,40 +1,48 @@ from fastapi import APIRouter, File, UploadFile, HTTPException from apps.dashboard.crud.dashboard_service import list_resource, load_resource, \ - create_resource, create_canvas, validate_name,delete_resource,update_resource + create_resource, create_canvas, validate_name, delete_resource, update_resource, update_canvas from apps.dashboard.models.dashboard_model import CreateDashboard, BaseDashboard, QueryDashboard from common.core.deps import SessionDep, CurrentUser router = APIRouter(tags=["dashboard"], prefix="/dashboard") + @router.post("/list_resource") -async def list_resource_api(session: SessionDep,dashboard: QueryDashboard): - return list_resource(session=session,dashboard=dashboard) +async def list_resource_api(session: SessionDep, dashboard: QueryDashboard): + return list_resource(session=session, dashboard=dashboard) + @router.post("/load_resource") -async def load_resource_api(session: SessionDep,dashboard: QueryDashboard): - return load_resource(session=session,dashboard=dashboard) +async def load_resource_api(session: SessionDep, dashboard: QueryDashboard): + return load_resource(session=session, dashboard=dashboard) + @router.post("/create_resource", response_model=BaseDashboard) async def create_resource_api(session: SessionDep, user: CurrentUser, dashboard: CreateDashboard): return create_resource(session, user, dashboard) + @router.post("/update_resource", response_model=BaseDashboard) async def update_resource_api(session: SessionDep, user: CurrentUser, dashboard: QueryDashboard): return update_resource(session=session, user=user, dashboard=dashboard) + + @router.delete("/delete_resource/{resource_id}") -async def delete_resource_api(session: SessionDep,resource_id:str): - return delete_resource(session,resource_id) +async def delete_resource_api(session: SessionDep, resource_id: str): + return delete_resource(session, resource_id) + + @router.post("/create_canvas", response_model=BaseDashboard) async def create_canvas_api(session: SessionDep, user: CurrentUser, dashboard: CreateDashboard): return create_canvas(session, user, dashboard) + @router.post("/update_canvas", response_model=BaseDashboard) async def update_canvas_api(session: SessionDep, user: CurrentUser, dashboard: CreateDashboard): - return + return update_canvas(session, user, dashboard) + @router.post("/check_name") async def check_name_api(session: SessionDep, dashboard: QueryDashboard): - return validate_name(session,dashboard) - - + return validate_name(session, dashboard) diff --git a/backend/apps/dashboard/crud/dashboard_service.py b/backend/apps/dashboard/crud/dashboard_service.py index 41e762c0..83064acd 100644 --- a/backend/apps/dashboard/crud/dashboard_service.py +++ b/backend/apps/dashboard/crud/dashboard_service.py @@ -69,6 +69,14 @@ def create_canvas(session: SessionDep, user: CurrentUser, dashboard: CreateDashb def update_canvas(session: SessionDep, user: CurrentUser, dashboard: CreateDashboard): record = session.query(CoreDashboard).filter(CoreDashboard.id == dashboard.id).first() + record.name = dashboard.name + record.update_by = user.id + record.update_time = int(time.time()) + record.component_data = dashboard.component_data + record.canvas_style_data = dashboard.canvas_style_data + session.add(record) + session.commit() + return record def validate_name(session: SessionDep, dashboard: QueryDashboard) -> bool: diff --git a/frontend/src/i18n/zh-CN.json b/frontend/src/i18n/zh-CN.json index 7311c089..cde18d59 100644 --- a/frontend/src/i18n/zh-CN.json +++ b/frontend/src/i18n/zh-CN.json @@ -9,7 +9,9 @@ "back": "返回", "confirm": "确认", "cancel": "取消", - "system_manage": "系统管理" + "system_manage": "系统管理", + "update_success": "更新", + "save_success": "保存成功" }, "dashboard": { "length_1_64_characters": "名称字段长度1-64个字符", diff --git a/frontend/src/views/dashboard/common/ResourceTree.vue b/frontend/src/views/dashboard/common/ResourceTree.vue index baede223..9278c54f 100644 --- a/frontend/src/views/dashboard/common/ResourceTree.vue +++ b/frontend/src/views/dashboard/common/ResourceTree.vue @@ -178,7 +178,7 @@ function createNewObject() { // @ts-ignore const resourceEdit = resourceId => { - + window.open(`#/canvas?resourceId=${resourceId}`, '_blank') } // @ts-ignore @@ -249,7 +249,7 @@ const operation = (opt: string, data: SQTreeNode) => { }) } else if (opt === 'rename') { //@ts-ignore - resourceGroupOptRef.value?.optInit({opt: 'rename',id: data.id,name:data.name}) + resourceGroupOptRef.value?.optInit({opt: 'rename', id: data.id, name: data.name}) } } diff --git a/frontend/src/views/dashboard/editor/Toolbar.vue b/frontend/src/views/dashboard/editor/Toolbar.vue index bb26aa4f..7742266b 100644 --- a/frontend/src/views/dashboard/editor/Toolbar.vue +++ b/frontend/src/views/dashboard/editor/Toolbar.vue @@ -11,6 +11,8 @@ import {useI18n} from 'vue-i18n' import {snapshotStoreWithOut} from "@/stores/dashboard/snapshot.ts"; import icon_undo_outlined from '@/assets/svg/icon_undo_outlined.svg' import icon_redo_outlined from '@/assets/svg/icon_redo_outlined.svg' +import icon_left_outlined from '@/assets/svg/icon_left_outlined.svg' +import {saveDashboardResource} from "@/views/dashboard/utils/canvasUtils.ts"; const {t} = useI18n() const dashboardStore = dashboardStoreWithOut() @@ -43,6 +45,19 @@ const saveCanvasWithCheck = () => { } // @ts-ignore resourceGroupOptRef.value?.optInit(createParams) + } else if (dashboardInfo.value.id) { + const updateParams = { + opt: 'updateLeaf', + id: dashboardInfo.value.id, + name: dashboardInfo.value.name, + pid: dashboardInfo.value.pid + } + saveDashboardResource(updateParams, function () { + ElMessage({ + type: 'success', + message: t('common.save_success'), + }) + }) } } @@ -100,10 +115,28 @@ const redo = () => { } } + +const backToMain = () => { + let url = '#/dashboard/index' + if (dashboardInfo.value.id) { + url = url + '?resourceId=' + dashboardInfo.value.id + } + if (!!history.state.back) { + history.back() + } else { + window.open(url, '_self') + } +} +