From 2c6b8294f41035c8e4e936b0983ef78fd8e3c64e Mon Sep 17 00:00:00 2001 From: wanglin2 <1013335014@qq.com> Date: Sun, 8 Oct 2023 09:10:14 +0800 Subject: [PATCH] =?UTF-8?q?Fix=EF=BC=9A=E4=BF=AE=E5=A4=8D=E5=A4=9A?= =?UTF-8?q?=E6=AC=A1=E7=B2=98=E8=B4=B4=E8=8A=82=E7=82=B9=E6=97=B6=E7=94=B1?= =?UTF-8?q?=E4=BA=8E=E8=8A=82=E7=82=B9uid=E9=87=8D=E5=A4=8D=E9=80=A0?= =?UTF-8?q?=E6=88=90=E7=9A=84=E6=B8=B2=E6=9F=93=E5=BC=82=E5=B8=B8=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- simple-mind-map/package.json | 2 +- simple-mind-map/src/core/render/Render.js | 12 +++++++----- simple-mind-map/src/utils/index.js | 19 +++++++++++-------- 3 files changed, 19 insertions(+), 14 deletions(-) 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) {