fix(仪表板): 拖动资源改变上下位置(未做文件夹移动),页面提示资源名称已存在

This commit is contained in:
dataeaseShu 2024-11-12 17:47:42 +08:00
parent 30b70937d6
commit 5534b0a27a
2 changed files with 89 additions and 0 deletions

View File

@ -1,7 +1,10 @@
import { cloneDeep } from 'lodash-es'
const treeDraggble = (state, key, req, type) => {
let dragNodeParentId = ''
let dragNodeId = ''
let dragNodeIndex = 0
let rawData = []
const dfsTreeNode = (arr, parentId) => {
arr.forEach((element, index) => {
@ -26,6 +29,31 @@ const treeDraggble = (state, key, req, type) => {
})
}
const dfsTreeNodeSaveLevel = (arr, idArr) => {
arr.forEach(element => {
const index = idArr.findIndex(ele => {
return ele === element.id
})
if (index !== -1) {
idArr.splice(index, 1)
}
if (element.children?.length && idArr.length === 2) {
dfsTreeNodeSaveLevel(element.children, idArr)
}
})
}
const dfsTreeNodeDel = (arr, node) => {
arr.forEach((element, index) => {
if (element.id === node.id) {
arr.splice(index, 1)
}
if (element.children?.length) {
dfsTreeNodeDel(element.children, node)
}
})
}
const dfsTreeNodeReset = (arr, node) => {
arr.forEach(element => {
if (element.id === dragNodeParentId) {
@ -39,6 +67,7 @@ const treeDraggble = (state, key, req, type) => {
const handleDragStart = node => {
dragNodeId = node.data.id
rawData = cloneDeep(state[key])
dfsTreeNode(state[key], '0')
}
@ -55,6 +84,22 @@ const treeDraggble = (state, key, req, type) => {
action: 'move'
}
if (dropType !== 'inner') {
const idArr = [params.id, dropNode.data?.id]
dfsTreeNodeSaveLevel(rawData, idArr)
if (idArr.length === 0) {
dfsTreeNodeDel(state[key], draggingNode.data)
setTimeout(() => {
if (dragNodeParentId === '0') {
state[key].splice(dragNodeIndex, 0, draggingNode.data)
} else {
dfsTreeNodeReset(state[key], draggingNode.data)
}
}, 0)
return
}
}
if (dropType === 'inner') {
params.pid = dropNode.data?.id
} else {

View File

@ -1,9 +1,12 @@
import { dvNameCheck, moveResource } from '@/api/visualization/dataVisualization'
import { cloneDeep } from 'lodash-es'
const treeDraggbleChart = (state, key, type) => {
let dragNodeParentId = ''
let dragNodeId = ''
let dragNodeIndex = 0
let rawData = []
const dfsTreeNode = (arr, parentId) => {
arr.forEach((element, index) => {
if (element.id === dragNodeId) {
@ -16,6 +19,20 @@ const treeDraggbleChart = (state, key, type) => {
})
}
const dfsTreeNodeSaveLevel = (arr, idArr) => {
arr.forEach(element => {
const index = idArr.findIndex(ele => {
return ele === element.id
})
if (index !== -1) {
idArr.splice(index, 1)
}
if (element.children?.length && idArr.length === 2) {
dfsTreeNodeSaveLevel(element.children, idArr)
}
})
}
const dfsTreeNodeBack = (arr, parentId, params) => {
arr.forEach(element => {
if (element.id === params.id) {
@ -38,8 +55,20 @@ const treeDraggbleChart = (state, key, type) => {
})
}
const dfsTreeNodeDel = (arr, node) => {
arr.forEach((element, index) => {
if (element.id === node.id) {
arr.splice(index, 1)
}
if (element.children?.length) {
dfsTreeNodeDel(element.children, node)
}
})
}
const handleDragStart = node => {
dragNodeId = node.data.id
rawData = cloneDeep(state[key])
dfsTreeNode(state[key], '0')
}
@ -56,6 +85,21 @@ const treeDraggbleChart = (state, key, type) => {
opt: 'move',
type
}
if (dropType !== 'inner') {
const idArr = [params.id, dropNode.data?.id]
dfsTreeNodeSaveLevel(rawData, idArr)
if (idArr.length === 0) {
dfsTreeNodeDel(state[key], draggingNode.data)
setTimeout(() => {
if (dragNodeParentId === '0') {
state[key].splice(dragNodeIndex, 0, draggingNode.data)
} else {
dfsTreeNodeReset(state[key], draggingNode.data)
}
}, 0)
return
}
}
try {
await dvNameCheck(params)