diff --git a/backend/apps/api.py b/backend/apps/api.py index e11cd90b..f23205fe 100644 --- a/backend/apps/api.py +++ b/backend/apps/api.py @@ -4,6 +4,7 @@ from apps.system.api import login, user, aimodel from apps.settings.api import terminology from apps.datasource.api import datasource from apps.chat.api import chat +from apps.dashboard.api import dashboard_api api_router = APIRouter() @@ -13,5 +14,6 @@ api_router.include_router(aimodel.router) api_router.include_router(terminology.router) api_router.include_router(datasource.router) api_router.include_router(chat.router) +api_router.include_router(dashboard_api.router) diff --git a/backend/apps/dashboard/api/dashboard_api.py b/backend/apps/dashboard/api/dashboard_api.py index 57c1fc0f..6f73f6c8 100644 --- a/backend/apps/dashboard/api/dashboard_api.py +++ b/backend/apps/dashboard/api/dashboard_api.py @@ -1,11 +1,9 @@ -import hashlib -import os -import uuid -from typing import List + from fastapi import APIRouter, File, UploadFile, HTTPException -from apps.dashboard.crud.dashboard_service import get_dashboard_list, preview_with_id -from common.core.deps import SessionDep +from apps.dashboard.crud.dashboard_service import get_dashboard_list, preview_with_id,create_dashboard +from apps.dashboard.models.dashboard_model import CreateDashboard +from common.core.deps import SessionDep, CurrentUser router = APIRouter(tags=["dashboard"], prefix="/dashboard") @@ -15,4 +13,8 @@ async def datasource_list(session: SessionDep): @router.get("/preview_dashboard/{id}") async def preview_dashboard(session: SessionDep,id:str): - return preview_with_id(session=session,dashboard_id=id) \ No newline at end of file + return preview_with_id(session=session,dashboard_id=id) + +@router.post("/add", response_model=CreateDashboard) +async def add(session: SessionDep, user: CurrentUser, dashboard: CreateDashboard): + return create_dashboard(session, user, dashboard) diff --git a/backend/apps/dashboard/crud/dashboard_service.py b/backend/apps/dashboard/crud/dashboard_service.py index 278600ea..abd43257 100644 --- a/backend/apps/dashboard/crud/dashboard_service.py +++ b/backend/apps/dashboard/crud/dashboard_service.py @@ -1,13 +1,23 @@ from select import select - -from apps.dashboard.models.dashboard_model import CoreDashboard -from common.core.deps import SessionDep - - +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()) dashboard_list = session.exec(statement).fetchall() return dashboard_list def preview_with_id(session: SessionDep, dashboard_id: str): - return session.query(CoreDashboard).filter(CoreDashboard.id == id).first() \ No newline at end of file + return session.query(CoreDashboard).filter(CoreDashboard.id == id).first() + + +def create_dashboard(session: SessionDep, user: CurrentUser, dashboard: CreateDashboard): + new_id = uuid.uuid4().hex + record = CoreDashboard(**dashboard.model_dump()) + record.id = new_id + record.create_by = user.id + session.add(record) + session.flush() + session.refresh(record) + session.commit() + return record diff --git a/backend/apps/dashboard/models/dashboard_model.py b/backend/apps/dashboard/models/dashboard_model.py index 183f728b..da2cd599 100644 --- a/backend/apps/dashboard/models/dashboard_model.py +++ b/backend/apps/dashboard/models/dashboard_model.py @@ -1,5 +1,7 @@ from sqlmodel import SQLModel, Field -from sqlalchemy import String, Column, Text, SmallInteger, BigInteger, Integer +from sqlalchemy import String, Column, Text, SmallInteger, BigInteger, Integer,DateTime +from pydantic import BaseModel +from datetime import datetime class CoreDashboard(SQLModel, table=True): @@ -121,3 +123,18 @@ class CoreDashboard(SQLModel, table=True): max_length=50, sa_column=Column(String(50), nullable=True) ) + +# dashboard create obj +class CreateDashboard(BaseModel): + id: str = '' + name: str = '' + pid: str = '' + workspace_id: str = '' + org_id: str = '' + description: str = '' + type: str = '' + node_type: str = '' + canvas_style_data: str ='' + component_data: str = '' + configuration: str = '' + create_by: int = 0 \ No newline at end of file diff --git a/frontend/components.d.ts b/frontend/components.d.ts index be1c720b..4e313e22 100644 --- a/frontend/components.d.ts +++ b/frontend/components.d.ts @@ -21,6 +21,7 @@ declare module '@vue/runtime-core' { ElDropdown: typeof import('element-plus-secondary/es')['ElDropdown'] ElDropdownItem: typeof import('element-plus-secondary/es')['ElDropdownItem'] ElDropdownMenu: typeof import('element-plus-secondary/es')['ElDropdownMenu'] + ElEmpty: typeof import('element-plus-secondary/es')['ElEmpty'] ElFooter: typeof import('element-plus-secondary/es')['ElFooter'] ElForm: typeof import('element-plus-secondary/es')['ElForm'] ElFormItem: typeof import('element-plus-secondary/es')['ElFormItem'] @@ -32,6 +33,7 @@ declare module '@vue/runtime-core' { ElMenuItem: typeof import('element-plus-secondary/es')['ElMenuItem'] ElOption: typeof import('element-plus-secondary/es')['ElOption'] ElPagination: typeof import('element-plus-secondary/es')['ElPagination'] + ElPopover: typeof import('element-plus-secondary/es')['ElPopover'] ElRadio: typeof import('element-plus-secondary/es')['ElRadio'] ElRadioGroup: typeof import('element-plus-secondary/es')['ElRadioGroup'] ElRow: typeof import('element-plus-secondary/es')['ElRow'] @@ -46,6 +48,8 @@ declare module '@vue/runtime-core' { ElTabPane: typeof import('element-plus-secondary/es')['ElTabPane'] ElTabs: typeof import('element-plus-secondary/es')['ElTabs'] ElTooltip: typeof import('element-plus-secondary/es')['ElTooltip'] + ElTree: typeof import('element-plus-secondary/es')['ElTree'] + ElTreeSelect: typeof import('element-plus-secondary/es')['ElTreeSelect'] ElUpload: typeof import('element-plus-secondary/es')['ElUpload'] Icon: typeof import('./src/components/icon-custom/src/Icon.vue')['default'] Layout: typeof import('./src/components/layout/index.vue')['default'] diff --git a/frontend/src/api/dashboard.ts b/frontend/src/api/dashboard.ts index a861821d..6ea2c07a 100644 --- a/frontend/src/api/dashboard.ts +++ b/frontend/src/api/dashboard.ts @@ -5,4 +5,5 @@ 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) } \ No newline at end of file diff --git a/frontend/src/assets/img/error.png b/frontend/src/assets/img/error.png new file mode 100644 index 00000000..41c5464d Binary files /dev/null and b/frontend/src/assets/img/error.png differ diff --git a/frontend/src/assets/img/none.png b/frontend/src/assets/img/none.png new file mode 100644 index 00000000..358dfdd8 Binary files /dev/null and b/frontend/src/assets/img/none.png differ diff --git a/frontend/src/assets/img/nothing-input.png b/frontend/src/assets/img/nothing-input.png new file mode 100644 index 00000000..7b1fa548 Binary files /dev/null and b/frontend/src/assets/img/nothing-input.png differ diff --git a/frontend/src/assets/img/nothing-none.png b/frontend/src/assets/img/nothing-none.png new file mode 100644 index 00000000..d686a36b Binary files /dev/null and b/frontend/src/assets/img/nothing-none.png differ diff --git a/frontend/src/assets/img/nothing-select.png b/frontend/src/assets/img/nothing-select.png new file mode 100644 index 00000000..90e62512 Binary files /dev/null and b/frontend/src/assets/img/nothing-select.png differ diff --git a/frontend/src/assets/img/nothing-table.png b/frontend/src/assets/img/nothing-table.png new file mode 100644 index 00000000..700664ed Binary files /dev/null and b/frontend/src/assets/img/nothing-table.png differ diff --git a/frontend/src/assets/img/nothing-tree.png b/frontend/src/assets/img/nothing-tree.png new file mode 100644 index 00000000..6eb9b2ba Binary files /dev/null and b/frontend/src/assets/img/nothing-tree.png differ diff --git a/frontend/src/assets/svg/dashboard-info.svg b/frontend/src/assets/svg/dashboard-info.svg new file mode 100644 index 00000000..ba5b1330 --- /dev/null +++ b/frontend/src/assets/svg/dashboard-info.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/frontend/src/assets/svg/icon_edit_outlined.svg b/frontend/src/assets/svg/icon_edit_outlined.svg new file mode 100644 index 00000000..817c15c2 --- /dev/null +++ b/frontend/src/assets/svg/icon_edit_outlined.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/assets/svg/icon_file-add_outlined.svg b/frontend/src/assets/svg/icon_file-add_outlined.svg new file mode 100644 index 00000000..669ede90 --- /dev/null +++ b/frontend/src/assets/svg/icon_file-add_outlined.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/frontend/src/assets/svg/icon_more_outlined.svg b/frontend/src/assets/svg/icon_more_outlined.svg new file mode 100644 index 00000000..f6fec929 --- /dev/null +++ b/frontend/src/assets/svg/icon_more_outlined.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/assets/svg/icon_operation-analysis_outlined.svg b/frontend/src/assets/svg/icon_operation-analysis_outlined.svg new file mode 100644 index 00000000..6a792ff4 --- /dev/null +++ b/frontend/src/assets/svg/icon_operation-analysis_outlined.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/frontend/src/assets/svg/icon_pc_outlined.svg b/frontend/src/assets/svg/icon_pc_outlined.svg new file mode 100644 index 00000000..b5ce9a28 --- /dev/null +++ b/frontend/src/assets/svg/icon_pc_outlined.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/assets/svg/icon_search-outline_outlined.svg b/frontend/src/assets/svg/icon_search-outline_outlined.svg new file mode 100644 index 00000000..67bf6003 --- /dev/null +++ b/frontend/src/assets/svg/icon_search-outline_outlined.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/assets/svg/new-folder.svg b/frontend/src/assets/svg/new-folder.svg new file mode 100644 index 00000000..ebe4f9a9 --- /dev/null +++ b/frontend/src/assets/svg/new-folder.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/frontend/src/views/dashboard/common/ResourceGroupOpt.vue b/frontend/src/views/dashboard/common/ResourceGroupOpt.vue new file mode 100644 index 00000000..072e6e4c --- /dev/null +++ b/frontend/src/views/dashboard/common/ResourceGroupOpt.vue @@ -0,0 +1,248 @@ + + + + + diff --git a/frontend/src/views/dashboard/common/ResourceTree.vue b/frontend/src/views/dashboard/common/ResourceTree.vue index 1c1317c0..6df47504 100644 --- a/frontend/src/views/dashboard/common/ResourceTree.vue +++ b/frontend/src/views/dashboard/common/ResourceTree.vue @@ -1,22 +1,24 @@ + \ No newline at end of file + + diff --git a/frontend/src/views/dashboard/preview/SQPreviewHead.vue b/frontend/src/views/dashboard/preview/SQPreviewHead.vue index 08eddf12..875fdb16 100644 --- a/frontend/src/views/dashboard/preview/SQPreviewHead.vue +++ b/frontend/src/views/dashboard/preview/SQPreviewHead.vue @@ -1,5 +1,5 @@