diff --git a/core/core-backend/src/main/java/io/dataease/visualization/manage/CoreBusiManage.java b/core/core-backend/src/main/java/io/dataease/visualization/manage/CoreBusiManage.java new file mode 100644 index 0000000000..bd76a827a6 --- /dev/null +++ b/core/core-backend/src/main/java/io/dataease/visualization/manage/CoreBusiManage.java @@ -0,0 +1,42 @@ +package io.dataease.visualization.manage; + +import io.dataease.dataset.manage.DatasetGroupManage; +import io.dataease.datasource.manage.DataSourceManage; +import io.dataease.model.BusiNodeRequest; +import io.dataease.model.BusiNodeVO; +import jakarta.annotation.Resource; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Component("coreBusiManage") +public class CoreBusiManage { + + @Resource + private CoreVisualizationManage coreVisualizationManage; + + @Resource + private DataSourceManage dataSourceManage; + + @Resource + private DatasetGroupManage datasetGroupManage; + + public Map> interactiveTree(Map requestMap) { + Map> result = new HashMap<>(); + for (Map.Entry entry : requestMap.entrySet()) { + BusiNodeRequest busiNodeRequest = entry.getValue(); + String key = entry.getKey(); + if (StringUtils.equalsIgnoreCase(key, "datasource")) { + result.put(key, dataSourceManage.tree(busiNodeRequest)); + } else if (StringUtils.equalsIgnoreCase(key, "dataset")) { + result.put(key, datasetGroupManage.tree(busiNodeRequest)); + } else if (StringUtils.equalsAnyIgnoreCase(key, "dashboard", "dataV")) { + result.put(key, coreVisualizationManage.tree(busiNodeRequest)); + } + } + return result; + } +} diff --git a/core/core-backend/src/main/java/io/dataease/visualization/server/DataVisualizationServer.java b/core/core-backend/src/main/java/io/dataease/visualization/server/DataVisualizationServer.java index cda50020cd..9d4b4a2444 100644 --- a/core/core-backend/src/main/java/io/dataease/visualization/server/DataVisualizationServer.java +++ b/core/core-backend/src/main/java/io/dataease/visualization/server/DataVisualizationServer.java @@ -51,6 +51,7 @@ import io.dataease.visualization.dao.auto.entity.VisualizationWatermark; import io.dataease.visualization.dao.auto.mapper.DataVisualizationInfoMapper; import io.dataease.visualization.dao.auto.mapper.VisualizationWatermarkMapper; import io.dataease.visualization.dao.ext.mapper.ExtDataVisualizationMapper; +import io.dataease.visualization.manage.CoreBusiManage; import io.dataease.visualization.manage.CoreVisualizationManage; import io.dataease.visualization.utils.VisualizationUtils; import jakarta.annotation.Resource; @@ -128,6 +129,9 @@ public class DataVisualizationServer implements DataVisualizationApi { @Autowired private CoreDatasourceMapper coreDatasourceMapper; + @Resource + private CoreBusiManage coreBusiManage; + @Override public DataVisualizationVO findCopyResource(Long dvId, String busiFlag) { DataVisualizationVO result = findById(new DataVisualizationBaseRequest(dvId, busiFlag)); @@ -484,6 +488,11 @@ public class DataVisualizationServer implements DataVisualizationApi { return coreVisualizationManage.tree(request); } + @Override + public Map> interactiveTree(Map requestMap) { + return coreBusiManage.interactiveTree(requestMap); + } + @DeLog(id = "#p0.id", pid = "#p0.pid", ot = LogOT.MODIFY, stExp = "#p0.type") @Transactional @Override diff --git a/core/core-frontend/src/api/visualization/dataVisualization.ts b/core/core-frontend/src/api/visualization/dataVisualization.ts index 16ea48a45f..777b5cd0e4 100644 --- a/core/core-frontend/src/api/visualization/dataVisualization.ts +++ b/core/core-frontend/src/api/visualization/dataVisualization.ts @@ -41,6 +41,12 @@ export const queryTreeApi = async (data: BusiTreeRequest): Promise => }) } +export const queryBusiTreeApi = async (data): Promise => { + return request.post({ url: '/dataVisualization/interactiveTree', data }).then(res => { + return res?.data + }) +} + export const findDvType = async dvId => request.get({ url: `/dataVisualization/findDvType/${dvId}` }) diff --git a/core/core-frontend/src/store/modules/interactive.ts b/core/core-frontend/src/store/modules/interactive.ts index 43343ca89b..d14641a83e 100644 --- a/core/core-frontend/src/store/modules/interactive.ts +++ b/core/core-frontend/src/store/modules/interactive.ts @@ -1,6 +1,6 @@ import { defineStore } from 'pinia' import { store } from '@/store' -import { queryTreeApi } from '@/api/visualization/dataVisualization' +import { queryTreeApi, queryBusiTreeApi } from '@/api/visualization/dataVisualization' import { getDatasetTree } from '@/api/dataset' import { listDatasources } from '@/api/datasource' import type { BusiTreeRequest, BusiTreeNode } from '@/models/tree/TreeNode' @@ -47,7 +47,7 @@ export const interactiveStore = defineStore('interactive', { } }, actions: { - async setInteractive(param: BusiTreeRequest) { + async setInteractive(param: BusiTreeRequest, resParam?: object) { const flag = busiFlagMap.findIndex(item => item === param.busiFlag) if (!hasMenuAuth(flag) && !window.DataEaseBi && !appStore.getIsIframe) { const tempData: InnerInteractive = { @@ -66,8 +66,11 @@ export const interactiveStore = defineStore('interactive', { } return [] } - const method = apiMap[flag] - const res = await method(param) + let res = resParam + if (!resParam) { + const method = apiMap[flag] + res = await method(param) + } this.data[flag] = convertInteractive(res) if (flag === 0) { wsCache.set('panel-weight', convertLocalStorage(this.data[flag])) @@ -78,6 +81,10 @@ export const interactiveStore = defineStore('interactive', { return res }, async initInteractive(refresh?: boolean) { + if (refresh) { + await this.loadBusiInteractive() + return + } let index = 4 while (index--) { if (!this.data[index] || refresh) { @@ -88,6 +95,20 @@ export const interactiveStore = defineStore('interactive', { } } }, + async loadBusiInteractive() { + const param = {} + for (let i = 0; i < busiFlagMap.length; i++) { + const key = busiFlagMap[i] + if (window.DataEaseBi || appStore.getIsIframe || hasMenuAuth(i)) { + param[key] = { busiFlag: key } + } + } + const data = await queryBusiTreeApi(param) + for (const busiKey in data) { + const res = data[busiKey] + this.setInteractive(param[busiKey], res) + } + }, clear() { this.data = {} wsCache.set('panel-weight', {}) diff --git a/de-xpack b/de-xpack index 82b33709e2..9c5aa6bd7d 160000 --- a/de-xpack +++ b/de-xpack @@ -1 +1 @@ -Subproject commit 82b33709e27888f38ec4f2fd974efc405a0a9506 +Subproject commit 9c5aa6bd7d255286384f86b1a50ff153b041d929 diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/visualization/DataVisualizationApi.java b/sdk/api/api-base/src/main/java/io/dataease/api/visualization/DataVisualizationApi.java index a0528c9510..8b4644b13c 100644 --- a/sdk/api/api-base/src/main/java/io/dataease/api/visualization/DataVisualizationApi.java +++ b/sdk/api/api-base/src/main/java/io/dataease/api/visualization/DataVisualizationApi.java @@ -20,6 +20,7 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.util.List; +import java.util.Map; import static io.dataease.constant.AuthResourceEnum.PANEL; @@ -72,6 +73,10 @@ public interface DataVisualizationApi { @Operation(summary = "查询可视化资源树") List tree(@RequestBody BusiNodeRequest request); + @PostMapping("/interactiveTree") + @Operation(summary = "查询业务资源树") + Map> interactiveTree(@RequestBody Map requestMap); + @PostMapping("/move") @DePermit(value = {"#p0.id+':manage'", "#p0.pid+':manage'"}, busiFlag = "#p0.type") @Operation(summary = "移动可视化资源")