From 7567c1eef287698f87df5c5c23c789de6664f0dc Mon Sep 17 00:00:00 2001 From: wangjiahao <1522128093@qq.com> Date: Thu, 5 Jun 2025 18:11:02 +0800 Subject: [PATCH] refactor: dashboard preview --- backend/apps/dashboard/api/dashboard_api.py | 5 +-- .../apps/dashboard/crud/dashboard_service.py | 4 +-- .../apps/dashboard/models/dashboard_model.py | 35 +++++++++++++++++-- backend/pyproject.toml | 2 +- frontend/src/api/dashboard.ts | 2 +- .../views/dashboard/common/ResourceTree.vue | 7 +++- 6 files changed, 45 insertions(+), 10 deletions(-) diff --git a/backend/apps/dashboard/api/dashboard_api.py b/backend/apps/dashboard/api/dashboard_api.py index 6f73f6c8..b0caaa3d 100644 --- a/backend/apps/dashboard/api/dashboard_api.py +++ b/backend/apps/dashboard/api/dashboard_api.py @@ -2,12 +2,13 @@ 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.models.dashboard_model import CreateDashboard +from apps.dashboard.models.dashboard_model import CreateDashboard, DashboardResponse from common.core.deps import SessionDep, CurrentUser +from typing import List router = APIRouter(tags=["dashboard"], prefix="/dashboard") -@router.get("/list") +@router.post("/list", response_model=List[DashboardResponse]) async def datasource_list(session: SessionDep): return get_dashboard_list(session=session) diff --git a/backend/apps/dashboard/crud/dashboard_service.py b/backend/apps/dashboard/crud/dashboard_service.py index abd43257..7fc4784b 100644 --- a/backend/apps/dashboard/crud/dashboard_service.py +++ b/backend/apps/dashboard/crud/dashboard_service.py @@ -1,9 +1,9 @@ -from select import select +from sqlalchemy import select from apps.dashboard.models.dashboard_model import CoreDashboard, CreateDashboard from common.core.deps import SessionDep, CurrentUser import uuid def get_dashboard_list(session: SessionDep): - statement = select(CoreDashboard).order_by(CoreDashboard.create_time.desc()) + statement = select(CoreDashboard) dashboard_list = session.exec(statement).fetchall() return dashboard_list diff --git a/backend/apps/dashboard/models/dashboard_model.py b/backend/apps/dashboard/models/dashboard_model.py index da2cd599..2b8764bf 100644 --- a/backend/apps/dashboard/models/dashboard_model.py +++ b/backend/apps/dashboard/models/dashboard_model.py @@ -1,12 +1,10 @@ from sqlmodel import SQLModel, Field from sqlalchemy import String, Column, Text, SmallInteger, BigInteger, Integer,DateTime +from typing import Optional from pydantic import BaseModel -from datetime import datetime - class CoreDashboard(SQLModel, table=True): __tablename__ = "core_dashboard" - id: str = Field( sa_column=Column(String(50), nullable=False, primary_key=True) ) @@ -124,6 +122,37 @@ class CoreDashboard(SQLModel, table=True): sa_column=Column(String(50), nullable=True) ) +class DashboardResponse(BaseModel): + id: Optional[str] = None + name: Optional[str] = None + pid: Optional[str] = None + workspace_id: Optional[str] = None + org_id: Optional[str] = None + level: Optional[int] = None + node_type: Optional[str] = None + type: Optional[str] = None + canvas_style_data: Optional[str] = None + component_data: Optional[str] = None + mobile_layout: Optional[int] = None + status: Optional[int] = None + self_watermark_status: Optional[int] = None + sort: Optional[int] = None + create_time: Optional[int] = None # 或者用 datetime 类型 + create_by: Optional[str] = None + update_time: Optional[int] = None # 或者用 datetime 类型 + update_by: Optional[str] = None + remark: Optional[str] = None + source: Optional[str] = None + delete_flag: Optional[int] = None + delete_time: Optional[int] = None + delete_by: Optional[str] = None + version: Optional[int] = None + content_id: Optional[str] = None + check_version: Optional[str] = None + + class Config: + orm_mode = True # 允许从 ORM 对象加载 + # dashboard create obj class CreateDashboard(BaseModel): id: str = '' diff --git a/backend/pyproject.toml b/backend/pyproject.toml index 9d4acbc1..535c219b 100644 --- a/backend/pyproject.toml +++ b/backend/pyproject.toml @@ -33,7 +33,7 @@ dependencies = [ "openpyxl (>=3.1.5,<4.0.0)", "psycopg2-binary (>=2.9.10,<3.0.0)", "oracledb (>=3.1.1,<4.0.0)", - "pyyaml (>=6.0.2,<7.0.0)" + "pyyaml (>=6.0.2,<7.0.0)", ] [[tool.uv.index]] url = "https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple" diff --git a/frontend/src/api/dashboard.ts b/frontend/src/api/dashboard.ts index 6ea2c07a..30bfcfef 100644 --- a/frontend/src/api/dashboard.ts +++ b/frontend/src/api/dashboard.ts @@ -1,7 +1,7 @@ import { request } from '@/utils/request' export const dashboardApi = { - list: () => request.get('/dashboard/list'), + list: (params: any) => request.post('/dashboard/list',params), 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), diff --git a/frontend/src/views/dashboard/common/ResourceTree.vue b/frontend/src/views/dashboard/common/ResourceTree.vue index 3756f27f..8bb22c93 100644 --- a/frontend/src/views/dashboard/common/ResourceTree.vue +++ b/frontend/src/views/dashboard/common/ResourceTree.vue @@ -16,6 +16,7 @@ import router from '@/router' import {dashboardStoreWithOut} from "@/stores/dashboard/dashboard.ts"; import HandleMore from "@/views/dashboard/common/HandleMore.vue"; import ResourceGroupOpt from "@/views/dashboard/common/ResourceGroupOpt.vue"; +import {dashboardApi} from "@/api/dashboard.ts"; const dashboardStore = dashboardStoreWithOut() const resourceGroupOptRef = ref(null) @@ -115,7 +116,11 @@ const nodeClick = (data: SQTreeNode, node: any) => { const getTree = async () => { state.originResourceTree = [] - afterTreeInit() + const params = {} + dashboardApi.list(params).then((res: SQTreeNode[]) => { + state.originResourceTree = res?.data || [] + afterTreeInit() + }) } // @ts-ignore const flattedTree = computed(() => {