From 2c8b96582ab46c6eca6f880dc40d27e751ac9460 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=A1=97=E8=A7=92=E5=B0=8F=E6=9E=97?= <1013335014@qq.com> Date: Thu, 15 Aug 2024 15:19:26 +0800 Subject: [PATCH] =?UTF-8?q?Feat=EF=BC=9A1.=E4=BC=98=E5=8C=96=E6=A6=82?= =?UTF-8?q?=E8=A6=81=E6=B8=B2=E6=9F=93=EF=BC=8C=E5=87=8F=E5=B0=91=E4=B8=8D?= =?UTF-8?q?=E5=BF=85=E8=A6=81=E7=9A=84=E9=87=8D=E6=96=B0=E6=B8=B2=E6=9F=93?= =?UTF-8?q?=EF=BC=9B2.=E4=BF=AE=E5=A4=8D=E5=90=8C=E6=97=B6=E9=80=89?= =?UTF-8?q?=E4=B8=AD=E6=A6=82=E8=A6=81=E8=8A=82=E7=82=B9=E5=92=8C=E5=85=B6?= =?UTF-8?q?=E6=89=80=E5=B1=9E=E8=8A=82=E7=82=B9=EF=BC=8C=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E8=8A=82=E7=82=B9=E6=A0=B7=E5=BC=8F=E5=90=8E=E6=A6=82=E8=A6=81?= =?UTF-8?q?=E8=8A=82=E7=82=B9=E4=BC=9A=E5=A4=B1=E5=8E=BB=E6=BF=80=E6=B4=BB?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- simple-mind-map/src/core/render/node/Node.js | 3 +- simple-mind-map/src/layouts/Base.js | 33 ++++++++++++++++++-- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/simple-mind-map/src/core/render/node/Node.js b/simple-mind-map/src/core/render/node/Node.js index f584d307..93ff9ca3 100644 --- a/simple-mind-map/src/core/render/node/Node.js +++ b/simple-mind-map/src/core/render/node/Node.js @@ -239,7 +239,8 @@ class Node { getSize() { this.customLeft = this.getData('customLeft') || undefined this.customTop = this.getData('customTop') || undefined - this.updateGeneralization() + // 这里不要更新概要,不然即使概要没修改,每次也会重新渲染 + // this.updateGeneralization() this.createNodeData() let { width, height } = this.getNodeRect() // 判断节点尺寸是否有变化 diff --git a/simple-mind-map/src/layouts/Base.js b/simple-mind-map/src/layouts/Base.js index 312b1f02..b7731b0e 100644 --- a/simple-mind-map/src/layouts/Base.js +++ b/simple-mind-map/src/layouts/Base.js @@ -122,7 +122,10 @@ class Base { // 判断编号是否改变 let isNumberChange = false if (hasNumberPlugin) { - isNumberChange = this.mindMap.numbers.updateNumber(newNode, newNumberStr) + isNumberChange = this.mindMap.numbers.updateNumber( + newNode, + newNumberStr + ) } // 主题或主题配置改变了、节点层级改变了,需要重新渲染节点文本等情况需要重新计算节点大小和布局 if ( @@ -134,6 +137,7 @@ class Base { newNode.getSize() newNode.needLayout = true } + this.checkGetGeneralizationChange(newNode) } else if ( (this.lru.has(uid) || this.renderer.lastNodeCache[uid]) && !this.renderer.reRender @@ -167,7 +171,10 @@ class Base { // 判断编号是否改变 let isNumberChange = false if (hasNumberPlugin) { - isNumberChange = this.mindMap.numbers.updateNumber(newNode, newNumberStr) + isNumberChange = this.mindMap.numbers.updateNumber( + newNode, + newNumberStr + ) } if ( isResizeSource || @@ -179,6 +186,7 @@ class Base { newNode.getSize() newNode.needLayout = true } + this.checkGetGeneralizationChange(newNode) } else { // 创建新节点 const newUid = uid || createUid() @@ -219,6 +227,27 @@ class Base { return newNode } + // 检查概要节点是否需要更新 + checkGetGeneralizationChange(node) { + const generalizationList = node.getData('generalization') + if ( + generalizationList && + node._generalizationList && + node._generalizationList.length > 0 + ) { + node._generalizationList.forEach((item, index) => { + const gNode = item.generalizationNode + const oldData = gNode.getData() + const newData = generalizationList[index] + if (newData && JSON.stringify(oldData) !== JSON.stringify(newData)) { + gNode.nodeData.data = newData + gNode.getSize() + gNode.needLayout = true + } + }) + } + } + // 格式化节点位置 formatPosition(value, size, nodeSize) { if (typeof value === 'number') {