Feature:1.支持配置插入节点时的初始文字;2.优化历史记录添加逻辑;3.节点插入和删除命令支持传入指定节点和初始节点数据
This commit is contained in:
parent
2b4ab4a322
commit
6efe4a3fd6
@ -68,7 +68,11 @@ const defaultOpt = {
|
|||||||
// 鼠标滚动的行为,如果customHandleMousewheel传了自定义函数,这个属性不生效
|
// 鼠标滚动的行为,如果customHandleMousewheel传了自定义函数,这个属性不生效
|
||||||
mousewheelAction: 'zoom',// zoom(放大缩小)、move(上下移动)
|
mousewheelAction: 'zoom',// zoom(放大缩小)、move(上下移动)
|
||||||
// 当mousewheelAction设为move时,可以通过该属性控制鼠标滚动一下视图移动的步长,单位px
|
// 当mousewheelAction设为move时,可以通过该属性控制鼠标滚动一下视图移动的步长,单位px
|
||||||
mousewheelMoveStep: 100
|
mousewheelMoveStep: 100,
|
||||||
|
// 默认插入的二级节点的文字
|
||||||
|
defaultInsertSecondLevelNodeText: '二级节点',
|
||||||
|
// 默认插入的二级以下节点的文字
|
||||||
|
defaultInsertBelowSecondLevelNodeText: '分支主题'
|
||||||
}
|
}
|
||||||
|
|
||||||
// 思维导图
|
// 思维导图
|
||||||
|
|||||||
@ -81,6 +81,8 @@ class Command {
|
|||||||
if (this.history.length > 0 && JSON.stringify(this.history[this.history.length - 1]) === JSON.stringify(data)) {
|
if (this.history.length > 0 && JSON.stringify(this.history[this.history.length - 1]) === JSON.stringify(data)) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
// 删除当前历史指针后面的数据
|
||||||
|
this.history = this.history.slice(0, this.activeHistoryIndex + 1)
|
||||||
this.history.push(simpleDeepClone(data))
|
this.history.push(simpleDeepClone(data))
|
||||||
this.activeHistoryIndex = this.history.length - 1
|
this.activeHistoryIndex = this.history.length - 1
|
||||||
this.mindMap.emit('data_change', data)
|
this.mindMap.emit('data_change', data)
|
||||||
|
|||||||
@ -353,17 +353,26 @@ class Render {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 规范指定节点数据
|
||||||
|
formatAppointNodes(appointNodes) {
|
||||||
|
if (!appointNodes) return []
|
||||||
|
return Array.isArray(appointNodes) ? appointNodes: [appointNodes]
|
||||||
|
}
|
||||||
|
|
||||||
// 插入同级节点,多个节点只会操作第一个节点
|
// 插入同级节点,多个节点只会操作第一个节点
|
||||||
|
|
||||||
insertNode(openEdit = true) {
|
insertNode(openEdit = true, appointNodes = [], appointData = null) {
|
||||||
if (this.activeNodeList.length <= 0) {
|
appointNodes = this.formatAppointNodes(appointNodes)
|
||||||
|
if (this.activeNodeList.length <= 0 && appointNodes.length <= 0) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
let first = this.activeNodeList[0]
|
let { defaultInsertSecondLevelNodeText, defaultInsertBelowSecondLevelNodeText } = this.mindMap.opt
|
||||||
|
let list = appointNodes.length > 0 ? appointNodes : this.activeNodeList
|
||||||
|
let first = list[0]
|
||||||
if (first.isRoot) {
|
if (first.isRoot) {
|
||||||
this.insertChildNode()
|
this.insertChildNode(openEdit, appointNodes, appointData)
|
||||||
} else {
|
} else {
|
||||||
let text = first.layerIndex === 1 ? '二级节点' : '分支主题'
|
let text = first.layerIndex === 1 ? defaultInsertSecondLevelNodeText : defaultInsertBelowSecondLevelNodeText
|
||||||
if (first.layerIndex === 1) {
|
if (first.layerIndex === 1) {
|
||||||
first.parent.initRender = true
|
first.parent.initRender = true
|
||||||
}
|
}
|
||||||
@ -372,7 +381,8 @@ class Render {
|
|||||||
inserting: openEdit,
|
inserting: openEdit,
|
||||||
data: {
|
data: {
|
||||||
text: text,
|
text: text,
|
||||||
expand: true
|
expand: true,
|
||||||
|
...(appointData || {})
|
||||||
},
|
},
|
||||||
children: []
|
children: []
|
||||||
})
|
})
|
||||||
@ -382,20 +392,24 @@ class Render {
|
|||||||
|
|
||||||
// 插入子节点
|
// 插入子节点
|
||||||
|
|
||||||
insertChildNode(openEdit = true) {
|
insertChildNode(openEdit = true, appointNodes = [], appointData = null) {
|
||||||
if (this.activeNodeList.length <= 0) {
|
appointNodes = this.formatAppointNodes(appointNodes)
|
||||||
|
if (this.activeNodeList.length <= 0 && appointNodes.length <= 0) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
this.activeNodeList.forEach(node => {
|
let { defaultInsertSecondLevelNodeText, defaultInsertBelowSecondLevelNodeText } = this.mindMap.opt
|
||||||
|
let list = appointNodes.length > 0 ? appointNodes : this.activeNodeList
|
||||||
|
list.forEach(node => {
|
||||||
if (!node.nodeData.children) {
|
if (!node.nodeData.children) {
|
||||||
node.nodeData.children = []
|
node.nodeData.children = []
|
||||||
}
|
}
|
||||||
let text = node.isRoot ? '二级节点' : '分支主题'
|
let text = node.isRoot ? defaultInsertSecondLevelNodeText : defaultInsertBelowSecondLevelNodeText
|
||||||
node.nodeData.children.push({
|
node.nodeData.children.push({
|
||||||
inserting: openEdit,
|
inserting: openEdit,
|
||||||
data: {
|
data: {
|
||||||
text: text,
|
text: text,
|
||||||
expand: true
|
expand: true,
|
||||||
|
...(appointData || {})
|
||||||
},
|
},
|
||||||
children: []
|
children: []
|
||||||
})
|
})
|
||||||
@ -548,11 +562,14 @@ class Render {
|
|||||||
|
|
||||||
// 移除节点
|
// 移除节点
|
||||||
|
|
||||||
removeNode() {
|
removeNode(appointNodes = []) {
|
||||||
if (this.activeNodeList.length <= 0) {
|
appointNodes = this.formatAppointNodes(appointNodes)
|
||||||
|
if (this.activeNodeList.length <= 0 && appointNodes.length <= 0) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
let root = this.activeNodeList.find((node) => {
|
let isAppointNodes = appointNodes.length > 0
|
||||||
|
let list = isAppointNodes ? appointNodes : this.activeNodeList
|
||||||
|
let root = list.find((node) => {
|
||||||
return node.isRoot
|
return node.isRoot
|
||||||
})
|
})
|
||||||
if (root) {
|
if (root) {
|
||||||
@ -563,8 +580,9 @@ class Render {
|
|||||||
root.children = []
|
root.children = []
|
||||||
root.nodeData.children = []
|
root.nodeData.children = []
|
||||||
} else {
|
} else {
|
||||||
for (let i = 0; i < this.activeNodeList.length; i++) {
|
for (let i = 0; i < list.length; i++) {
|
||||||
let node = this.activeNodeList[i]
|
let node = list[i]
|
||||||
|
if (isAppointNodes) list.splice(i, 1)
|
||||||
if (node.isGeneralization) {
|
if (node.isGeneralization) {
|
||||||
// 删除概要节点
|
// 删除概要节点
|
||||||
this.setNodeData(node.generalizationBelongNode, {
|
this.setNodeData(node.generalizationBelongNode, {
|
||||||
@ -580,8 +598,7 @@ class Render {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.activeNodeList = []
|
this.mindMap.emit('node_active', null, this.activeNodeList)
|
||||||
this.mindMap.emit('node_active', null, [])
|
|
||||||
this.mindMap.render()
|
this.mindMap.render()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user