From 5c663b4299d83b5d100d44b281464d702c771a14 Mon Sep 17 00:00:00 2001 From: wangjiahao <1522128093@qq.com> Date: Mon, 9 Jun 2025 11:41:51 +0800 Subject: [PATCH] refactor: dashboard preview --- backend/apps/dashboard/api/dashboard_api.py | 17 ++++++++-- .../apps/dashboard/crud/dashboard_service.py | 29 +++++++++++++++-- frontend/src/api/dashboard.ts | 5 ++- .../src/views/dashboard/editor/Toolbar.vue | 24 ++++++++++++-- frontend/src/views/dashboard/editor/index.vue | 32 +++---------------- 5 files changed, 73 insertions(+), 34 deletions(-) diff --git a/backend/apps/dashboard/api/dashboard_api.py b/backend/apps/dashboard/api/dashboard_api.py index a984f2c4..a8a92744 100644 --- a/backend/apps/dashboard/api/dashboard_api.py +++ b/backend/apps/dashboard/api/dashboard_api.py @@ -1,7 +1,8 @@ from fastapi import APIRouter, File, UploadFile, HTTPException -from apps.dashboard.crud.dashboard_service import get_dashboard_list, preview_with_id,create_dashboard +from apps.dashboard.crud.dashboard_service import get_dashboard_list, preview_with_id, \ + create_resource, create_canvas from apps.dashboard.models.dashboard_model import CreateDashboard from common.core.deps import SessionDep, CurrentUser @@ -17,4 +18,16 @@ async def preview_dashboard(session: SessionDep,id:str): @router.post("/add", response_model=CreateDashboard) async def add(session: SessionDep, user: CurrentUser, dashboard: CreateDashboard): - return create_dashboard(session, user, dashboard) + return create_resource(session, user, dashboard) + +@router.post("/update", response_model=CreateDashboard) +async def update(session: SessionDep, user: CurrentUser, dashboard: CreateDashboard): + return create_resource(session, user, dashboard) + +@router.post("/add_dashboard", response_model=CreateDashboard) +async def add_dashboard(session: SessionDep, user: CurrentUser, dashboard: CreateDashboard): + return create_canvas(session, user, dashboard) + +@router.post("/update_dashboard", response_model=CreateDashboard) +async def update(session: SessionDep, user: CurrentUser, dashboard: CreateDashboard): + return \ No newline at end of file diff --git a/backend/apps/dashboard/crud/dashboard_service.py b/backend/apps/dashboard/crud/dashboard_service.py index ac7d2800..a4c398bc 100644 --- a/backend/apps/dashboard/crud/dashboard_service.py +++ b/backend/apps/dashboard/crud/dashboard_service.py @@ -3,6 +3,7 @@ from apps.dashboard.models.dashboard_model import CoreDashboard, CreateDashboard from common.core.deps import SessionDep, CurrentUser from sqlmodel import text import uuid +import datetime def get_dashboard_list(session: SessionDep): sql = text("SELECT id, name, type,node_type, pid, create_time FROM core_dashboard") for row in session.exec(sql).mappings(): @@ -11,14 +12,38 @@ def get_dashboard_list(session: SessionDep): def preview_with_id(session: SessionDep, dashboard_id: str): return session.query(CoreDashboard).filter(CoreDashboard.id == id).first() - -def create_dashboard(session: SessionDep, user: CurrentUser, dashboard: CreateDashboard): +def get_create_base_info(user: CurrentUser, dashboard: CreateDashboard): new_id = uuid.uuid4().hex record = CoreDashboard(**dashboard.model_dump()) record.id = new_id record.create_by = user.id + return record + +def create_resource(session: SessionDep, user: CurrentUser, dashboard: CreateDashboard): + record = get_create_base_info(user, dashboard) session.add(record) session.flush() session.refresh(record) session.commit() return record + + + +def update_resource(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 = datetime.datetime.now() + session.add(record) + session.commit() + +def create_canvas(session: SessionDep, user: CurrentUser, dashboard: CreateDashboard): + record = get_create_base_info(user, dashboard) + record.node_type = dashboard.node_type + record.component_data = dashboard.component_data + record.canvas_style_data = dashboard.canvas_style_data + session.add(record) + session.flush() + +def update_canvas(session: SessionDep, user: CurrentUser, dashboard: CreateDashboard): + record = session.query(CoreDashboard).filter(CoreDashboard.id == dashboard.id).first() \ No newline at end of file diff --git a/frontend/src/api/dashboard.ts b/frontend/src/api/dashboard.ts index 30bfcfef..04242a30 100644 --- a/frontend/src/api/dashboard.ts +++ b/frontend/src/api/dashboard.ts @@ -5,5 +5,8 @@ export const dashboardApi = { getDashboardInfo: (params:any) => request.post(`/dashboard/get_dashboard/${params.id}`,params), sqNameCheck: (data: any) => request.post('/dashboard/name_check',data), moveResource: (data: any) => request.post('/dashboard/move',data), - addResource: (data: any) => request.post('/dashboard/add',data) + addResource: (data: any) => request.post('/dashboard/add',data), + updateResource: (data: any) => request.post('/dashboard/update',data), + saveCanvas: (data: any) => request.post('/dashboard/save_canvas',data), + updateCanvas: (data: any) => request.post('/dashboard/update_canvas',data) } \ No newline at end of file diff --git a/frontend/src/views/dashboard/editor/Toolbar.vue b/frontend/src/views/dashboard/editor/Toolbar.vue index aca51957..6c18f3e1 100644 --- a/frontend/src/views/dashboard/editor/Toolbar.vue +++ b/frontend/src/views/dashboard/editor/Toolbar.vue @@ -6,14 +6,19 @@ import ComponentButtonLabel from "@/views/dashboard/components/button-label/Comp import dvTab from '@/assets/svg/dv-tab.svg' import dvText from '@/assets/svg/dv-text.svg' import dvView from '@/assets/svg/dv-view.svg' - +import ResourceGroupOpt from "@/views/dashboard/common/ResourceGroupOpt.vue"; +import {ref} from 'vue' const dashboardStore = dashboardStoreWithOut() const {dashboardInfo} = storeToRefs(dashboardStore) const emits = defineEmits(['addComponent']) - +const resourceGroupOptRef = ref(null) const openViewDialog = () => { // do addComponent } + +const saveCanvasWithCheck = () =>{ + +} @@ -57,12 +71,18 @@ const openViewDialog = () => { align-items: center; background: #050e21; padding-left: 8px; + .core-toolbar { display: flex; position: absolute; left: 50%; transform: translateX(-50%); } + .right-toolbar { + display: flex; + position: absolute; + right: 12px; + } } \ No newline at end of file diff --git a/frontend/src/views/dashboard/editor/index.vue b/frontend/src/views/dashboard/editor/index.vue index 60e12e3b..94504ea7 100644 --- a/frontend/src/views/dashboard/editor/index.vue +++ b/frontend/src/views/dashboard/editor/index.vue @@ -5,6 +5,11 @@ import DashboardEditor from "@/views/dashboard/editor/DashboardEditor.vue"; import {findNewComponentFromList} from "@/views/dashboard/components/component-list.ts"; import {guid} from "@/utils/canvas.ts"; import cloneDeep from 'lodash/cloneDeep'; +import {storeToRefs} from "pinia"; +import {dashboardStoreWithOut} from "@/stores/dashboard/dashboard.ts"; + +const dashboardStore = dashboardStoreWithOut() +const {componentData} = storeToRefs(dashboardStore) const dashboardEditorRef = ref(null); @@ -24,33 +29,6 @@ const addComponent = (componentType: string) => { } } -const componentData = ref([ - { - id: 4, - x: 1, - y: 1, - sizeX: 20, - sizeY: 10, - _dragId: 0 - }, - { - id: 10, - x: 2, - y: 1, - sizeX: 20, - sizeY: 10, - _dragId: 1 - }, - { - id: 7, - x: 1, - y: 2, - sizeX: 20, - sizeY: 10, - _dragId: 2 - } -]) -