diff --git a/simple-mind-map/package.json b/simple-mind-map/package.json index 2d00def4..9f11febe 100644 --- a/simple-mind-map/package.json +++ b/simple-mind-map/package.json @@ -1,6 +1,6 @@ { "name": "simple-mind-map", - "version": "0.7.3", + "version": "0.7.3-fix.1", "description": "一个简单的web在线思维导图", "authors": [ { diff --git a/simple-mind-map/src/core/render/Render.js b/simple-mind-map/src/core/render/Render.js index d0fa7ea6..713c3066 100644 --- a/simple-mind-map/src/core/render/Render.js +++ b/simple-mind-map/src/core/render/Render.js @@ -512,7 +512,7 @@ class Render { uid: createUid(), ...(appointData || {}) }, - children: [...createUidForAppointNodes(appointChildren)] + children: [...createUidForAppointNodes(appointChildren, true)] } parent.nodeData.children.splice(index + 1, 0, newNodeData) }) @@ -558,7 +558,7 @@ class Render { const index = parent.nodeData.children.findIndex(item => { return item.data.uid === node.uid }) - const newNodeList = createUidForAppointNodes(simpleDeepClone(nodeList)) + const newNodeList = createUidForAppointNodes(simpleDeepClone(nodeList), true) parent.nodeData.children.splice( index + 1, 0, @@ -619,7 +619,7 @@ class Render { ...params, ...(appointData || {}) }, - children: [...createUidForAppointNodes(appointChildren)] + children: [...createUidForAppointNodes(appointChildren, true)] } node.nodeData.children.push(newNode) // 插入子节点时自动展开子节点 @@ -659,7 +659,7 @@ class Render { if (!node.nodeData.children) { node.nodeData.children = [] } - childList = createUidForAppointNodes(childList) + childList = createUidForAppointNodes(childList, true) node.nodeData.children.push(...childList) // 插入子节点时自动展开子节点 node.nodeData.data.expand = true @@ -1071,7 +1071,9 @@ class Render { this.activeNodeList.forEach(node => { node.nodeData.children.push( ...data.map(item => { - return simpleDeepClone(item) + const newData = simpleDeepClone(item) + createUidForAppointNodes([newData], true) + return newData }) ) }) diff --git a/simple-mind-map/src/utils/index.js b/simple-mind-map/src/utils/index.js index a882ffcd..7281dd93 100644 --- a/simple-mind-map/src/utils/index.js +++ b/simple-mind-map/src/utils/index.js @@ -167,11 +167,13 @@ export const copyNodeTree = ( tree, root, removeActiveState = false, - keepId = false + removeId = true ) => { tree.data = simpleDeepClone(root.nodeData ? root.nodeData.data : root.data) - // 重新创建节点uid,因为节点uid不能重复 - if (!keepId) { + // 移除节点uid + if (removeId) { + delete tree.data.uid + } else if (!tree.data.uid) {// 否则保留或生成 tree.data.uid = createUid() } if (removeActiveState) { @@ -180,7 +182,7 @@ export const copyNodeTree = ( tree.children = [] if (root.children && root.children.length > 0) { root.children.forEach((item, index) => { - tree.children[index] = copyNodeTree({}, item, removeActiveState, keepId) + tree.children[index] = copyNodeTree({}, item, removeActiveState, removeId) }) } else if ( root.nodeData && @@ -188,7 +190,7 @@ export const copyNodeTree = ( root.nodeData.children.length > 0 ) { root.nodeData.children.forEach((item, index) => { - tree.children[index] = copyNodeTree({}, item, removeActiveState, keepId) + tree.children[index] = copyNodeTree({}, item, removeActiveState, removeId) }) } return tree @@ -766,14 +768,15 @@ export const addDataToAppointNodes = (appointNodes, data = {}) => { return appointNodes } -// 给指定的节点列表树数据添加uid,如果不存在的话,会修改原数据 -export const createUidForAppointNodes = appointNodes => { +// 给指定的节点列表树数据添加uid,会修改原数据 +// createNewId默认为false,即如果节点不存在uid的话,会创建新的uid。如果传true,那么无论节点数据原来是否存在uid,都会创建新的uid +export const createUidForAppointNodes = (appointNodes, createNewId = false) => { const walk = list => { list.forEach(node => { if (!node.data) { node.data = {} } - if (isUndef(node.data.uid)) { + if (createNewId || isUndef(node.data.uid)) { node.data.uid = createUid() } if (node.children && node.children.length > 0) {