13
0
forked from github/dataease

fix: 修复资源文件夹可以移动到其自身的子文件夹造成移动后文件夹不显示问题

This commit is contained in:
wangjiahao 2024-01-28 19:16:31 +08:00
parent 3dcb2d1663
commit 096de8a3d1
4 changed files with 36 additions and 20 deletions
core
core-backend/src/main/java/io/dataease/visualization/server
core-frontend/src

View File

@ -91,13 +91,12 @@ public class DataVisualizationServer implements DataVisualizationApi {
@Resource @Resource
private VisualizationWatermarkMapper watermarkMapper; private VisualizationWatermarkMapper watermarkMapper;
@DeLog(id = "#p0", ot = LogOT.READ, stExp = "#p1")
@Override @Override
public DataVisualizationVO findCopyResource(Long dvId, String busiFlag) { public DataVisualizationVO findCopyResource(Long dvId, String busiFlag) {
DataVisualizationVO result = findById(dvId, busiFlag); DataVisualizationVO result = findById(dvId, busiFlag);
if(result !=null && result.getPid() == -1){ if (result != null && result.getPid() == -1) {
return result; return result;
}else{ } else {
return null; return null;
} }
} }
@ -136,6 +135,11 @@ public class DataVisualizationServer implements DataVisualizationApi {
} else { } else {
visualizationInfo.setSelfWatermarkStatus(0); visualizationInfo.setSelfWatermarkStatus(0);
} }
if (DataVisualizationConstants.RESOURCE_OPT_TYPE.COPY.equals(request.getOptType())) {
// 复制更新 新建权限插入
visualizationInfoMapper.deleteById(request.getId());
visualizationInfo.setNodeType(DataVisualizationConstants.NODE_TYPE.LEAF);
}
Long newDvId = coreVisualizationManage.innerSave(visualizationInfo); Long newDvId = coreVisualizationManage.innerSave(visualizationInfo);
request.setId(newDvId); request.setId(newDvId);
//保存视图信 //保存视图信
@ -158,24 +162,19 @@ public class DataVisualizationServer implements DataVisualizationApi {
} else { } else {
visualizationInfo.setSelfWatermarkStatus(0); visualizationInfo.setSelfWatermarkStatus(0);
} }
if (DataVisualizationConstants.RESOURCE_OPT_TYPE.COPY.equals(request.getOptType())) {
// 复制更新 新建权限插入 // 检查当前节点的pid是否一致如果不一致 需要调用move 接口(预存 可能会出现pid =-1的情况)
visualizationInfoMapper.deleteById(dvId); if (request.getPid() != -1) {
visualizationInfo.setNodeType(DataVisualizationConstants.NODE_TYPE.LEAF); QueryWrapper<DataVisualizationInfo> queryWrapper = new QueryWrapper<>();
coreVisualizationManage.innerSave(visualizationInfo); queryWrapper.eq("pid", request.getPid());
} else { queryWrapper.eq("id", dvId);
// 检查当前节点的pid是否一致如果不一致 需要调用move 接口(预存 可能会出现pid =-1的情况) if (!visualizationInfoMapper.exists(queryWrapper)) {
if (request.getPid() != -1) { request.setMoveFromUpdate(true);
QueryWrapper<DataVisualizationInfo> queryWrapper = new QueryWrapper<>(); coreVisualizationManage.move(request);
queryWrapper.eq("pid", request.getPid());
queryWrapper.eq("id", dvId);
if (!visualizationInfoMapper.exists(queryWrapper)) {
request.setMoveFromUpdate(true);
coreVisualizationManage.move(request);
}
} }
coreVisualizationManage.innerEdit(visualizationInfo);
} }
coreVisualizationManage.innerEdit(visualizationInfo);
//保存视图信 //保存视图信
chartDataManage.saveChartViewFromVisualization(request.getComponentData(), dvId, request.getCanvasViewInfo()); chartDataManage.saveChartViewFromVisualization(request.getComponentData(), dvId, request.getCanvasViewInfo());
} }

View File

@ -175,7 +175,7 @@ export function canvasSave(callBack) {
watermarkInfo: null watermarkInfo: null
} }
const method = dvInfo.value.id ? updateCanvas : saveCanvas const method = dvInfo.value.id && dvInfo.value.optType !== 'copy' ? updateCanvas : saveCanvas
method(canvasInfo).then(res => { method(canvasInfo).then(res => {
dvMainStore.updateDvInfoId(res.data) dvMainStore.updateDvInfoId(res.data)
snapshotStore.resetStyleChangeTimes() snapshotStore.resetStyleChangeTimes()

View File

@ -1,3 +1,5 @@
import { BusiTreeNode } from '@/models/tree/TreeNode'
export function deepCopy(target) { export function deepCopy(target) {
if (target === null || target === undefined) { if (target === null || target === undefined) {
return target return target
@ -80,3 +82,14 @@ export const getQueryString = (name: string) => {
export const isLarkPlatform = () => { export const isLarkPlatform = () => {
return !!getQueryString('state') && !!getQueryString('code') return !!getQueryString('state') && !!getQueryString('code')
} }
export function cutTargetTree(tree: BusiTreeNode[], targetId: string | number) {
tree.forEach((node, index) => {
if (node.id === targetId) {
tree.splice(index, 1)
return
} else if (node.children) {
cutTargetTree(node.children, targetId)
}
})
}

View File

@ -13,6 +13,7 @@ import {
saveCanvas saveCanvas
} from '@/api/visualization/dataVisualization' } from '@/api/visualization/dataVisualization'
import { ElMessage } from 'element-plus-secondary' import { ElMessage } from 'element-plus-secondary'
import { cutTargetTree } from '@/utils/utils'
const props = defineProps({ const props = defineProps({
curCanvasType: { curCanvasType: {
type: String, type: String,
@ -154,6 +155,9 @@ const optInit = (type, data: BusiTreeNode, exec, parentSelect = false) => {
state.tData[0].name = curCanvasType.value === 'dataV' ? '数据大屏' : '仪表板' state.tData[0].name = curCanvasType.value === 'dataV' ? '数据大屏' : '仪表板'
} }
tData = [...state.tData] tData = [...state.tData]
if ('move' === exec) {
cutTargetTree(state.tData, data.id)
}
if (['newLeaf', 'newFolder'].includes(exec)) { if (['newLeaf', 'newFolder'].includes(exec)) {
resourceForm.pid = data.id as string resourceForm.pid = data.id as string
pid.value = data.id pid.value = data.id