Feat:支持移动多个节点

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

View File

@ -741,57 +741,30 @@ 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) || insertTo(node, exist, dir = 'before') {
(node.layerIndex !== 1 && exist.layerIndex === 1) let nodeList = this.formatAppointNodes(node)
nodeList = nodeList.filter(item => {
return !item.isRoot
})
if (dir === 'after') {
nodeList.reverse()
}
nodeList.forEach(item => {
this.checkNodeLayerChange(item, exist)
// 移动节点 // 移动节点
let nodeParent = node.parent let nodeParent = item.parent
let nodeBorthers = nodeParent.children let nodeBorthers = nodeParent.children
let nodeIndex = nodeBorthers.findIndex(item => { let nodeIndex = nodeBorthers.findIndex(item2 => {
return item.uid === node.uid return item.uid === item2.uid
}) })
if (nodeIndex === -1) { if (nodeIndex === -1) {
return return
@ -802,20 +775,31 @@ class Render {
// 目标节点 // 目标节点
let existParent = exist.parent let existParent = exist.parent
let existBorthers = existParent.children let existBorthers = existParent.children
let existIndex = existBorthers.findIndex(item => { let existIndex = existBorthers.findIndex(item2 => {
return item.uid === exist.uid return item2.uid === exist.uid
}) })
if (existIndex === -1) { if (existIndex === -1) {
return return
} }
if (dir === 'after') {
existIndex++ existIndex++
existBorthers.splice(existIndex, 0, node)
existParent.nodeData.children.splice(existIndex, 0, node.nodeData)
this.mindMap.render(() => {
if (nodeLayerChanged) {
node.reRender()
} }
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()