Feat:支持移动多个节点

This commit is contained in:
wanglin2 2023-09-21 09:01:37 +08:00
parent 740e2e3410
commit 036f845968

View File

@ -741,81 +741,65 @@ class Render {
// 将节点移动到另一个节点的前面 // 将节点移动到另一个节点的前面
insertBefore(node, exist) { insertBefore(node, exist) {
if (node.isRoot) { this.insertTo(node, exist, 'before')
return
}
// 如果是二级节点变成了下级节点,或是下级节点变成了二级节点,节点样式需要更新
let nodeLayerChanged =
(node.layerIndex === 1 && exist.layerIndex !== 1) ||
(node.layerIndex !== 1 && exist.layerIndex === 1)
// 移动节点
let nodeParent = node.parent
let nodeBorthers = nodeParent.children
let nodeIndex = nodeBorthers.findIndex(item => {
return item.uid === node.uid
})
if (nodeIndex === -1) {
return
}
nodeBorthers.splice(nodeIndex, 1)
nodeParent.nodeData.children.splice(nodeIndex, 1)
// 目标节点
let existParent = exist.parent
let existBorthers = existParent.children
let existIndex = existBorthers.findIndex(item => {
return item.uid === exist.uid
})
if (existIndex === -1) {
return
}
existBorthers.splice(existIndex, 0, node)
existParent.nodeData.children.splice(existIndex, 0, node.nodeData)
this.mindMap.render(() => {
if (nodeLayerChanged) {
node.reRender()
}
})
} }
// 将节点移动到另一个节点的后面 // 将节点移动到另一个节点的后面
insertAfter(node, exist) { insertAfter(node, exist) {
if (node.isRoot) { this.insertTo(node, exist, 'after')
return }
}
// 如果是二级节点变成了下级节点,或是下级节点变成了二级节点,节点样式需要更新
let nodeLayerChanged =
(node.layerIndex === 1 && exist.layerIndex !== 1) ||
(node.layerIndex !== 1 && exist.layerIndex === 1)
// 移动节点
let nodeParent = node.parent
let nodeBorthers = nodeParent.children
let nodeIndex = nodeBorthers.findIndex(item => {
return item.uid === node.uid
})
if (nodeIndex === -1) {
return
}
nodeBorthers.splice(nodeIndex, 1)
nodeParent.nodeData.children.splice(nodeIndex, 1)
// 目标节点 // 将节点移动到另一个节点的前面或后面
let existParent = exist.parent insertTo(node, exist, dir = 'before') {
let existBorthers = existParent.children let nodeList = this.formatAppointNodes(node)
let existIndex = existBorthers.findIndex(item => { nodeList = nodeList.filter(item => {
return item.uid === exist.uid return !item.isRoot
}) })
if (existIndex === -1) { if (dir === 'after') {
return nodeList.reverse()
} }
existIndex++ nodeList.forEach(item => {
existBorthers.splice(existIndex, 0, node) this.checkNodeLayerChange(item, exist)
existParent.nodeData.children.splice(existIndex, 0, node.nodeData) // 移动节点
this.mindMap.render(() => { let nodeParent = item.parent
if (nodeLayerChanged) { let nodeBorthers = nodeParent.children
node.reRender() let nodeIndex = nodeBorthers.findIndex(item2 => {
return item.uid === item2.uid
})
if (nodeIndex === -1) {
return
} }
nodeBorthers.splice(nodeIndex, 1)
nodeParent.nodeData.children.splice(nodeIndex, 1)
// 目标节点
let existParent = exist.parent
let existBorthers = existParent.children
let existIndex = existBorthers.findIndex(item2 => {
return item2.uid === exist.uid
})
if (existIndex === -1) {
return
}
if (dir === 'after') {
existIndex++
}
existBorthers.splice(existIndex, 0, item)
existParent.nodeData.children.splice(existIndex, 0, item.nodeData)
}) })
this.mindMap.render()
}
// 如果是富文本模式,那么某些层级变化需要更新样式
checkNodeLayerChange(node, toNode) {
if (this.mindMap.richText) {
let nodeLayerChanged =
(node.layerIndex === 1 && toNode.layerIndex !== 1) ||
(node.layerIndex !== 1 && toNode.layerIndex === 1)
if (nodeLayerChanged) {
node.nodeData.data.resetRichText = true
}
}
} }
// 移除节点 // 移除节点
@ -927,14 +911,17 @@ class Render {
// 移动一个节点作为另一个节点的子节点 // 移动一个节点作为另一个节点的子节点
moveNodeTo(node, toNode) { moveNodeTo(node, toNode) {
if (node.isRoot) { let nodeList = this.formatAppointNodes(node)
return nodeList = nodeList.filter(item => {
} return !item.isRoot
// let copyData = copyNodeTree({}, node, false, true) })
this.removeActiveNode(node) nodeList.forEach(item => {
this.removeOneNode(node) this.checkNodeLayerChange(item, toNode)
this.removeActiveNode(item)
this.removeOneNode(item)
toNode.nodeData.children.push(item.nodeData)
})
this.mindMap.emit('node_active', null, [...this.activeNodeList]) this.mindMap.emit('node_active', null, [...this.activeNodeList])
toNode.nodeData.children.push(node.nodeData)
this.mindMap.render() this.mindMap.render()
if (toNode.isRoot) { if (toNode.isRoot) {
toNode.destroy() toNode.destroy()