mirror of
https://gh-proxy.org/https://github.com/klinsmaya/SQLBot.git
synced 2026-11-08 01:06:59 +08:00
refactor: new resource
This commit is contained in:
@@ -1,16 +1,17 @@
|
||||
from xmlrpc.client import Boolean
|
||||
|
||||
from fastapi import APIRouter, File, UploadFile, HTTPException
|
||||
|
||||
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,BaseDashboard
|
||||
create_resource, create_canvas, validate_name
|
||||
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")
|
||||
async def datasource_list(session: SessionDep):
|
||||
return get_dashboard_list(session=session)
|
||||
async def datasource_list(session: SessionDep,dashboard: QueryDashboard):
|
||||
return get_dashboard_list(session=session,dashboard=dashboard)
|
||||
|
||||
@router.get("/preview_dashboard/{id}")
|
||||
async def preview_dashboard(session: SessionDep,id:str):
|
||||
@@ -30,4 +31,9 @@ async def add_canvas(session: SessionDep, user: CurrentUser, dashboard: CreateDa
|
||||
|
||||
@router.post("/update_canvas", response_model=BaseDashboard)
|
||||
async def update(session: SessionDep, user: CurrentUser, dashboard: CreateDashboard):
|
||||
return
|
||||
return
|
||||
|
||||
@router.post("/check_name")
|
||||
async def check_name(session: SessionDep, dashboard: QueryDashboard):
|
||||
return validate_name(session,dashboard)
|
||||
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
from sqlalchemy import select
|
||||
from apps.dashboard.models.dashboard_model import CoreDashboard, CreateDashboard
|
||||
from sqlalchemy import select, and_, text
|
||||
from apps.dashboard.models.dashboard_model import CoreDashboard, CreateDashboard, QueryDashboard
|
||||
from common.core.deps import SessionDep, CurrentUser
|
||||
from sqlmodel import text
|
||||
import uuid
|
||||
import datetime
|
||||
def get_dashboard_list(session: SessionDep):
|
||||
def get_dashboard_list(session: SessionDep,dashboard: QueryDashboard):
|
||||
sql = text("SELECT id, name, type,node_type, pid, create_time FROM core_dashboard")
|
||||
for row in session.exec(sql).mappings():
|
||||
yield CoreDashboard(**row)
|
||||
@@ -45,4 +44,36 @@ def create_canvas(session: SessionDep, user: CurrentUser, dashboard: CreateDashb
|
||||
return record
|
||||
|
||||
def update_canvas(session: SessionDep, user: CurrentUser, dashboard: CreateDashboard):
|
||||
record = session.query(CoreDashboard).filter(CoreDashboard.id == dashboard.id).first()
|
||||
record = session.query(CoreDashboard).filter(CoreDashboard.id == dashboard.id).first()
|
||||
|
||||
|
||||
def validate_name( session: SessionDep, dashboard: QueryDashboard) -> bool:
|
||||
if not dashboard.workspace_id:
|
||||
raise ValueError("workspace_id is required")
|
||||
if not dashboard.pid:
|
||||
raise ValueError("pid is required")
|
||||
if not dashboard.opt:
|
||||
raise ValueError("opt is required")
|
||||
|
||||
if dashboard.opt in ('newLeaf', 'newFolder'):
|
||||
query = session.query(CoreDashboard).filter(
|
||||
and_(
|
||||
CoreDashboard.workspace_id == dashboard.workspace_id,
|
||||
CoreDashboard.pid == dashboard.pid,
|
||||
CoreDashboard.name == dashboard.name
|
||||
)
|
||||
)
|
||||
elif dashboard.opt in ('updateLeaf', 'updateFolder'):
|
||||
if not dashboard.id:
|
||||
raise ValueError("id is required for update operation")
|
||||
query = session.query(CoreDashboard).filter(
|
||||
and_(
|
||||
CoreDashboard.workspace_id == dashboard.workspace_id,
|
||||
CoreDashboard.pid == dashboard.pid,
|
||||
CoreDashboard.name == dashboard.name,
|
||||
CoreDashboard.id != dashboard.id
|
||||
)
|
||||
)
|
||||
else:
|
||||
raise ValueError(f"Invalid opt value: {dashboard.opt}")
|
||||
return not session.query(query.exists()).scalar()
|
||||
@@ -141,9 +141,12 @@ class BaseDashboard(BaseModel):
|
||||
node_type: str = ''
|
||||
create_by: int = 0
|
||||
|
||||
class QueryDashboard(BaseDashboard):
|
||||
opt: str = ''
|
||||
|
||||
|
||||
# dashboard create obj
|
||||
class CreateDashboard(BaseDashboard):
|
||||
class CreateDashboard(QueryDashboard):
|
||||
canvas_style_data: str =''
|
||||
component_data: str = ''
|
||||
description: str = ''
|
||||
|
||||
@@ -8,5 +8,6 @@ export const dashboardApi = {
|
||||
addResource: (data: any) => request.post('/dashboard/add',data),
|
||||
updateResource: (data: any) => request.post('/dashboard/update',data),
|
||||
saveCanvas: (data: any) => request.post('/dashboard/add_canvas',data),
|
||||
updateCanvas: (data: any) => request.post('/dashboard/update_',data)
|
||||
updateCanvas: (data: any) => request.post('/dashboard/update_',data),
|
||||
check_name: (data: any) => request.post('/dashboard/check_name',data)
|
||||
}
|
||||
@@ -51,13 +51,11 @@ const optInit = (params: any) => {
|
||||
resourceDialogShow.value = true
|
||||
// @ts-ignore
|
||||
resourceForm.name = params.name || getResourceNewName(params.opt)
|
||||
resourceForm.pid = params.pid || 'root'
|
||||
}
|
||||
|
||||
const resourceDialogShow = ref(false)
|
||||
const loading = ref(false)
|
||||
const pid = ref()
|
||||
const id = ref()
|
||||
const opt = ref('')
|
||||
const resourceForm = reactive({
|
||||
pid: '',
|
||||
pName: '',
|
||||
@@ -101,11 +99,6 @@ const resetForm = () => {
|
||||
resourceDialogShow.value = false
|
||||
}
|
||||
|
||||
const editeInit = (param: SQTreeNode) => {
|
||||
pid.value = param['pid']
|
||||
id.value = param.id
|
||||
}
|
||||
|
||||
const propsTree = {
|
||||
label: 'name',
|
||||
children: 'children',
|
||||
@@ -114,7 +107,7 @@ const propsTree = {
|
||||
}
|
||||
|
||||
const showPid = computed(() => {
|
||||
return ['newLeaf'].includes(opt.value) && state.parentSelect
|
||||
return state.opt && ['newLeaf'].includes(state.opt) && state.parentSelect
|
||||
})
|
||||
|
||||
const saveResource = () => {
|
||||
@@ -122,6 +115,7 @@ const saveResource = () => {
|
||||
nodeType: state.nodeType,
|
||||
name: resourceForm.name,
|
||||
opt: state.opt,
|
||||
pid: resourceForm.pid,
|
||||
type: 'dashboard'
|
||||
}
|
||||
saveDashboardResource(params, function (rsp:any) {
|
||||
@@ -147,8 +141,7 @@ const filterMethod = (value: any) => {
|
||||
}
|
||||
|
||||
defineExpose({
|
||||
optInit,
|
||||
editeInit
|
||||
optInit
|
||||
})
|
||||
|
||||
</script>
|
||||
|
||||
@@ -205,7 +205,7 @@ onMounted(() => {
|
||||
|
||||
// @ts-ignore
|
||||
const addOperation = (params: any) => {
|
||||
if (params.cmd === 'newLeaf') {
|
||||
if (params.opt === 'newLeaf') {
|
||||
const newCanvasUrl = '#/canvas?opt=create' + (params?.id ? `&pid=${params?.id}` : '')
|
||||
window.open(newCanvasUrl, '_blank')
|
||||
} else {
|
||||
@@ -232,7 +232,7 @@ defineExpose({
|
||||
<el-icon
|
||||
class="custom-icon btn"
|
||||
style="margin-right: 10px"
|
||||
@click="addOperation({cmd:'newFolder',type:'folder'} )"
|
||||
@click="addOperation({opt:'newFolder',type:'folder',pid:'root'} )"
|
||||
>
|
||||
<Icon name="dv-new-folder">
|
||||
<newFolder class="svg-icon"/>
|
||||
@@ -243,7 +243,7 @@ defineExpose({
|
||||
<el-icon
|
||||
class="custom-icon btn"
|
||||
style="margin-right: 10px"
|
||||
@click="addOperation({cmd:'newLeaf',type:'dashboard'} )"
|
||||
@click="addOperation({opt:'newLeaf',type:'dashboard'} )"
|
||||
>
|
||||
<Icon name="dv-new-folder">
|
||||
<icon_fileAdd_outlined class="svg-icon"/>
|
||||
@@ -303,7 +303,7 @@ defineExpose({
|
||||
v-on:click.stop
|
||||
v-if="!data.leaf"
|
||||
class="hover-icon"
|
||||
@click="addOperation({cmd:'newLeaf',type:'dashboard',id:data.id} )"
|
||||
@click="addOperation({opt:'newLeaf',type:'dashboard',id:data.id} )"
|
||||
>
|
||||
<Icon><icon_add_outlined class="svg-icon"/></Icon>
|
||||
</el-icon>
|
||||
@@ -315,14 +315,14 @@ defineExpose({
|
||||
>
|
||||
<Icon><icon_edit_outlined class="svg-icon"/></Icon>
|
||||
</el-icon>
|
||||
<!-- <HandleMore-->
|
||||
<!-- @handle-command=" (cmd:string) => addOperation({cmd})-->
|
||||
<!-- "-->
|
||||
<!-- :menu-list="resourceTypeList"-->
|
||||
<!-- :icon-name="icon_add_outlined"-->
|
||||
<!-- placement="bottom-start"-->
|
||||
<!-- v-if="!data.leaf"-->
|
||||
<!-- ></HandleMore>-->
|
||||
<!-- <HandleMore-->
|
||||
<!-- @handle-command=" (opt:string) => addOperation({opt})-->
|
||||
<!-- "-->
|
||||
<!-- :menu-list="resourceTypeList"-->
|
||||
<!-- :icon-name="icon_add_outlined"-->
|
||||
<!-- placement="bottom-start"-->
|
||||
<!-- v-if="!data.leaf"-->
|
||||
<!-- ></HandleMore>-->
|
||||
</div>
|
||||
</span>
|
||||
</template>
|
||||
|
||||
@@ -40,7 +40,7 @@ const props = defineProps({
|
||||
|
||||
const groupOptFinish = (result: any) => {
|
||||
let url = window.location.href
|
||||
url = url.replace(/(#\/[^?]*)(?:\?[^#]*)?/, `$1?dvId=${result.id}`)
|
||||
url = url.replace(/(#\/[^?]*)(?:\?[^#]*)?/, `$1?resourceId=${result.resourceId}`)
|
||||
window.history.replaceState( { path: url }, '', url )
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
import {dashboardApi} from "@/api/dashboard.ts";
|
||||
import {dashboardStoreWithOut} from "@/stores/dashboard/dashboard.ts";
|
||||
import {storeToRefs} from "pinia";
|
||||
const dashboardStore = dashboardStoreWithOut()
|
||||
const {componentData,canvasStyle} = storeToRefs(dashboardStore)
|
||||
|
||||
const dashboardStore = dashboardStoreWithOut()
|
||||
const {componentData, canvasStyle} = storeToRefs(dashboardStore)
|
||||
|
||||
const workspace_id = 'default' // temp
|
||||
export const initCanvasData = (params: any, callBack: Function) => {
|
||||
dashboardApi.getDashboardInfo(params).then((res: any) => {
|
||||
const canvasInfo = res.data;
|
||||
@@ -28,20 +30,24 @@ export const initCanvasData = (params: any, callBack: Function) => {
|
||||
}
|
||||
|
||||
export const saveDashboardResource = (params: any, callBack: Function) => {
|
||||
if(params.opt === 'newLeaf'){// create canvas
|
||||
const reqeustParams = {
|
||||
...params,
|
||||
component_data:JSON.stringify(componentData.value),
|
||||
canvas_style_data:JSON.stringify(canvasStyle.value)
|
||||
params['workspace_id'] = workspace_id
|
||||
dashboardApi.check_name(params).then((res: any) => {
|
||||
if (!res) {
|
||||
if (params.opt === 'newLeaf') {// create canvas
|
||||
const reqeustParams = {
|
||||
...params,
|
||||
component_data: JSON.stringify(componentData.value),
|
||||
canvas_style_data: JSON.stringify(canvasStyle.value)
|
||||
}
|
||||
dashboardApi.saveCanvas(reqeustParams).then((res: any) => {
|
||||
dashboardStore.updateDashboardInfo({id: res.id, dataState: 'ready'})
|
||||
callBack(res)
|
||||
})
|
||||
} else if (params.opt === 'newFolder') {
|
||||
dashboardApi.addResource(params).then((res: any) => {
|
||||
callBack(res)
|
||||
})
|
||||
}
|
||||
}
|
||||
dashboardApi.saveCanvas(reqeustParams).then((res: any) => {
|
||||
dashboardStore.updateDashboardInfo({id:res.id,dataState:'ready'})
|
||||
callBack(res)
|
||||
})
|
||||
}else if(params.opt === 'newFolder'){
|
||||
dashboardApi.addResource(params).then((res: any) => {
|
||||
callBack(res)
|
||||
})
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user