Skip to content

Commit 288cc34

Browse files
committed
refactor: update toolbar
1 parent f70e5d9 commit 288cc34

File tree

8 files changed

+125
-23
lines changed

8 files changed

+125
-23
lines changed
Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,48 @@
11
from fastapi import APIRouter, File, UploadFile, HTTPException
22

33
from apps.dashboard.crud.dashboard_service import list_resource, load_resource, \
4-
create_resource, create_canvas, validate_name,delete_resource,update_resource
4+
create_resource, create_canvas, validate_name, delete_resource, update_resource, update_canvas
55
from apps.dashboard.models.dashboard_model import CreateDashboard, BaseDashboard, QueryDashboard
66
from common.core.deps import SessionDep, CurrentUser
77

88
router = APIRouter(tags=["dashboard"], prefix="/dashboard")
99

10+
1011
@router.post("/list_resource")
11-
async def list_resource_api(session: SessionDep,dashboard: QueryDashboard):
12-
return list_resource(session=session,dashboard=dashboard)
12+
async def list_resource_api(session: SessionDep, dashboard: QueryDashboard):
13+
return list_resource(session=session, dashboard=dashboard)
14+
1315

1416
@router.post("/load_resource")
15-
async def load_resource_api(session: SessionDep,dashboard: QueryDashboard):
16-
return load_resource(session=session,dashboard=dashboard)
17+
async def load_resource_api(session: SessionDep, dashboard: QueryDashboard):
18+
return load_resource(session=session, dashboard=dashboard)
19+
1720

1821
@router.post("/create_resource", response_model=BaseDashboard)
1922
async def create_resource_api(session: SessionDep, user: CurrentUser, dashboard: CreateDashboard):
2023
return create_resource(session, user, dashboard)
2124

25+
2226
@router.post("/update_resource", response_model=BaseDashboard)
2327
async def update_resource_api(session: SessionDep, user: CurrentUser, dashboard: QueryDashboard):
2428
return update_resource(session=session, user=user, dashboard=dashboard)
29+
30+
2531
@router.delete("/delete_resource/{resource_id}")
26-
async def delete_resource_api(session: SessionDep,resource_id:str):
27-
return delete_resource(session,resource_id)
32+
async def delete_resource_api(session: SessionDep, resource_id: str):
33+
return delete_resource(session, resource_id)
34+
35+
2836
@router.post("/create_canvas", response_model=BaseDashboard)
2937
async def create_canvas_api(session: SessionDep, user: CurrentUser, dashboard: CreateDashboard):
3038
return create_canvas(session, user, dashboard)
3139

40+
3241
@router.post("/update_canvas", response_model=BaseDashboard)
3342
async def update_canvas_api(session: SessionDep, user: CurrentUser, dashboard: CreateDashboard):
34-
return
43+
return update_canvas(session, user, dashboard)
44+
3545

3646
@router.post("/check_name")
3747
async def check_name_api(session: SessionDep, dashboard: QueryDashboard):
38-
return validate_name(session,dashboard)
39-
40-
48+
return validate_name(session, dashboard)

backend/apps/dashboard/crud/dashboard_service.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,14 @@ def create_canvas(session: SessionDep, user: CurrentUser, dashboard: CreateDashb
6969

7070
def update_canvas(session: SessionDep, user: CurrentUser, dashboard: CreateDashboard):
7171
record = session.query(CoreDashboard).filter(CoreDashboard.id == dashboard.id).first()
72+
record.name = dashboard.name
73+
record.update_by = user.id
74+
record.update_time = int(time.time())
75+
record.component_data = dashboard.component_data
76+
record.canvas_style_data = dashboard.canvas_style_data
77+
session.add(record)
78+
session.commit()
79+
return record
7280

7381

7482
def validate_name(session: SessionDep, dashboard: QueryDashboard) -> bool:

frontend/src/i18n/zh-CN.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@
99
"back": "返回",
1010
"confirm": "确认",
1111
"cancel": "取消",
12-
"system_manage": "系统管理"
12+
"system_manage": "系统管理",
13+
"update_success": "更新",
14+
"save_success": "保存成功"
1315
},
1416
"dashboard": {
1517
"length_1_64_characters": "名称字段长度1-64个字符",

frontend/src/views/dashboard/common/ResourceTree.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ function createNewObject() {
178178
179179
// @ts-ignore
180180
const resourceEdit = resourceId => {
181-
181+
window.open(`#/canvas?resourceId=${resourceId}`, '_blank')
182182
}
183183
184184
// @ts-ignore
@@ -249,7 +249,7 @@ const operation = (opt: string, data: SQTreeNode) => {
249249
})
250250
} else if (opt === 'rename') {
251251
//@ts-ignore
252-
resourceGroupOptRef.value?.optInit({opt: 'rename',id: data.id,name:data.name})
252+
resourceGroupOptRef.value?.optInit({opt: 'rename', id: data.id, name: data.name})
253253
}
254254
}
255255

frontend/src/views/dashboard/editor/Toolbar.vue

Lines changed: 63 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ import {useI18n} from 'vue-i18n'
1111
import {snapshotStoreWithOut} from "@/stores/dashboard/snapshot.ts";
1212
import icon_undo_outlined from '@/assets/svg/icon_undo_outlined.svg'
1313
import icon_redo_outlined from '@/assets/svg/icon_redo_outlined.svg'
14+
import icon_left_outlined from '@/assets/svg/icon_left_outlined.svg'
15+
import {saveDashboardResource} from "@/views/dashboard/utils/canvasUtils.ts";
1416
1517
const {t} = useI18n()
1618
const dashboardStore = dashboardStoreWithOut()
@@ -43,6 +45,19 @@ const saveCanvasWithCheck = () => {
4345
}
4446
// @ts-ignore
4547
resourceGroupOptRef.value?.optInit(createParams)
48+
} else if (dashboardInfo.value.id) {
49+
const updateParams = {
50+
opt: 'updateLeaf',
51+
id: dashboardInfo.value.id,
52+
name: dashboardInfo.value.name,
53+
pid: dashboardInfo.value.pid
54+
}
55+
saveDashboardResource(updateParams, function () {
56+
ElMessage({
57+
type: 'success',
58+
message: t('common.save_success'),
59+
})
60+
})
4661
}
4762
}
4863
@@ -100,10 +115,28 @@ const redo = () => {
100115
}
101116
}
102117
118+
119+
const backToMain = () => {
120+
let url = '#/dashboard/index'
121+
if (dashboardInfo.value.id) {
122+
url = url + '?resourceId=' + dashboardInfo.value.id
123+
}
124+
if (!!history.state.back) {
125+
history.back()
126+
} else {
127+
window.open(url, '_self')
128+
}
129+
}
130+
103131
</script>
104132

105133
<template>
106134
<div class="toolbar-main">
135+
<el-icon class="custom-el-icon back-icon" @click="backToMain()">
136+
<Icon name="icon_left_outlined">
137+
<icon_left_outlined class="toolbar-hover-icon toolbar-icon"/>
138+
</Icon>
139+
</el-icon>
107140
<div class="left-area">
108141
<span id="canvas-name" class="name-area" @dblclick="editCanvasName">
109142
{{ dashboardInfo.name }}
@@ -169,12 +202,12 @@ const redo = () => {
169202
Save
170203
</el-button>
171204
</div>
172-
<Teleport v-if="nameEdit" :to="'#canvas-name'">
205+
<Teleport v-if="nameEdit" :to="'#canvas-name'">
173206
<input
174-
@change="onDvNameChange"
175-
ref="nameInput"
176-
v-model="inputName"
177-
@blur="closeEditCanvasName"
207+
@change="onDvNameChange"
208+
ref="nameInput"
209+
v-model="inputName"
210+
@blur="closeEditCanvasName"
178211
/>
179212
</Teleport>
180213
<ResourceGroupOpt @finish="groupOptFinish " ref="resourceGroupOptRef"></ResourceGroupOpt>
@@ -205,6 +238,7 @@ const redo = () => {
205238
width: 300px;
206239
overflow: hidden;
207240
cursor: pointer;
241+
color: #fff;
208242
209243
input {
210244
position: absolute;
@@ -245,4 +279,28 @@ const redo = () => {
245279
}
246280
}
247281
282+
.toolbar-icon {
283+
width: 20px;
284+
height: 20px;
285+
color: #fff;
286+
}
287+
288+
289+
.toolbar-hover-icon {
290+
cursor: pointer;
291+
font-size: 18px !important;
292+
width: 26px !important;
293+
height: 26px !important;
294+
color: rgba(255, 255, 255, 1);
295+
border-radius: 4px;
296+
297+
&:hover {
298+
background: rgba(235, 235, 235, 0.1);
299+
}
300+
301+
&:active {
302+
background: transparent;
303+
}
304+
}
305+
248306
</style>

frontend/src/views/dashboard/editor/index.vue

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,13 @@ import cloneDeep from 'lodash/cloneDeep';
88
import {storeToRefs} from "pinia";
99
import {dashboardStoreWithOut} from "@/stores/dashboard/dashboard.ts";
1010
import router from '@/router'
11+
import {dashboardApi} from "@/api/dashboard.ts";
12+
import {initCanvasData} from "@/views/dashboard/utils/canvasUtils.ts";
1113
1214
const dashboardStore = dashboardStoreWithOut()
1315
const {componentData} = storeToRefs(dashboardStore)
1416
15-
17+
const dataInitState = ref(false)
1618
const state = reactive({
1719
routerPid: null,
1820
resourceId: null,
@@ -45,6 +47,11 @@ onMounted(() => {
4547
state.routerPid = router.currentRoute.value.query.pid
4648
if (state.opt === 'create') {
4749
dashboardStore.updateDashboardInfo({dataState: 'prepare', name: 'New Dashboard', pid: state.routerPid})
50+
} else if (state.resourceId) {
51+
dataInitState.value = false
52+
initCanvasData({id: state.resourceId}, function () {
53+
dataInitState.value = true
54+
})
4855
}
4956
})
5057

frontend/src/views/dashboard/preview/SQPreviewShow.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<script setup lang="ts">
22
import icon_add_outlined from '@/assets/svg/icon_add_outlined.svg'
33
import {reactive, ref, toRefs, onBeforeMount, computed} from 'vue'
4-
import {initCanvasData} from '@/views/dashboard/utils/canvasUtils'
4+
import {initCanvasData, load_resource_prepare} from '@/views/dashboard/utils/canvasUtils'
55
import {Icon} from '@/components/icon-custom'
66
import ResourceTree from "@/views/dashboard/common/ResourceTree.vue";
77
import SQPreview from "@/views/dashboard/preview/SQPreview.vue";
@@ -62,7 +62,7 @@ function createNew() {
6262
const loadCanvasData = (params: any) => {
6363
dataInitState.value = false
6464
//@ts-ignore
65-
initCanvasData({id:params.id}, function ({dashboardInfo, canvasDataResult, canvasStyleResult, canvasViewInfoPreview}) {
65+
load_resource_prepare({id:params.id}, function ({dashboardInfo, canvasDataResult, canvasStyleResult, canvasViewInfoPreview}) {
6666
state.canvasDataPreview = canvasDataResult
6767
state.canvasStylePreview = canvasStyleResult
6868
state.canvasViewInfoPreview = canvasViewInfoPreview

frontend/src/views/dashboard/utils/canvasUtils.ts

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ const dashboardStore = dashboardStoreWithOut()
66
const {componentData, canvasStyleData} = storeToRefs(dashboardStore)
77

88
const workspace_id = 'default' // temp
9-
export const initCanvasData = (params: any, callBack: Function) => {
9+
export const load_resource_prepare = (params: any, callBack: Function) => {
1010
dashboardApi.load_resource(params).then((canvasInfo: any) => {
1111
const dashboardInfo = {
1212
id: canvasInfo.id,
@@ -28,6 +28,16 @@ export const initCanvasData = (params: any, callBack: Function) => {
2828
})
2929
}
3030

31+
export const initCanvasData = (params: any, callBack: Function) => {
32+
load_resource_prepare(params, function (result: any) {
33+
dashboardStore.setDashboardInfo(result.dashboardInfo)
34+
dashboardStore.setCanvasStyleData(result.canvasStyleResult)
35+
dashboardStore.setComponentData(result.canvasDataResult)
36+
dashboardStore.setCanvasViewInfo(result.canvasViewInfoPreview)
37+
callBack()
38+
})
39+
}
40+
3141
export const saveDashboardResource = (params: any, callBack: Function) => {
3242
params['workspace_id'] = workspace_id
3343
dashboardApi.check_name(params).then((resCheck: any) => {
@@ -50,6 +60,15 @@ export const saveDashboardResource = (params: any, callBack: Function) => {
5060
dashboardApi.update_resource(params).then((res: any) => {
5161
callBack(res)
5262
})
63+
}else if (params.opt === 'updateLeaf') {
64+
const reqeustParams = {
65+
...params,
66+
component_data: JSON.stringify(componentData.value),
67+
canvas_style_data: JSON.stringify(canvasStyleData.value)
68+
}
69+
dashboardApi.update_canvas(reqeustParams).then(() => {
70+
callBack()
71+
})
5372
}
5473
} else {
5574
ElMessage({

0 commit comments

Comments
 (0)