From 7bd467a3300b9709e6fa07b789b1dea567e445d9 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, 25 Jan 2024 13:52:23 +0800 Subject: [PATCH] =?UTF-8?q?Fix=EF=BC=9A=E4=BF=AE=E5=A4=8D=E5=88=87?= =?UTF-8?q?=E6=8D=A2=E4=B8=BB=E9=A2=98=E6=97=B6=EF=BC=8C=E8=A2=AB=E6=94=B6?= =?UTF-8?q?=E8=B5=B7=E7=9A=84=E8=8A=82=E7=82=B9=E6=A0=B7=E5=BC=8F=E6=B2=A1?= =?UTF-8?q?=E6=9C=89=E5=8F=98=E5=8C=96=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/Render.js | 16 ++++++++++++++++ .../src/core/render/node/nodeCreateContents.js | 3 +++ simple-mind-map/src/layouts/Base.js | 17 +++++++++++++---- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/simple-mind-map/src/core/render/Render.js b/simple-mind-map/src/core/render/Render.js index 01266d3f..c297d9bd 100644 --- a/simple-mind-map/src/core/render/Render.js +++ b/simple-mind-map/src/core/render/Render.js @@ -397,6 +397,10 @@ class Render { // 渲染 render(callback = () => {}, source) { + // 切换主题时,被收起的节点需要添加样式复位的标注 + if (source === CONSTANTS.CHANGE_THEME) { + this.resetUnExpandNodeStyle() + } // 如果当前还没有渲染完毕,不再触发渲染 if (this.isRendering) { // 等待当前渲染完毕后再进行一次渲染 @@ -455,6 +459,18 @@ class Render { this.emitNodeActiveEvent() } + // 给当前被收起来的节点数据添加文本复位标志 + resetUnExpandNodeStyle() { + walk(this.renderTree, null, node => { + if (!node.data.expand) { + walk(node, null, node2 => { + node2.data.resetRichText = true + }) + return true + } + }) + } + // 清除当前所有激活节点,并会触发事件 clearActiveNode() { if (this.activeNodeList.length <= 0) { diff --git a/simple-mind-map/src/core/render/node/nodeCreateContents.js b/simple-mind-map/src/core/render/node/nodeCreateContents.js index d4e83153..81a07606 100644 --- a/simple-mind-map/src/core/render/node/nodeCreateContents.js +++ b/simple-mind-map/src/core/render/node/nodeCreateContents.js @@ -186,6 +186,9 @@ function createTextNode() { if (this.getData('richText')) { return this.createRichTextNode() } + if (this.getData('resetRichText')) { + delete this.nodeData.data.resetRichText + } let g = new G() let fontSize = this.getStyle('fontSize', false) let lineHeight = this.getStyle('lineHeight', false) diff --git a/simple-mind-map/src/layouts/Base.js b/simple-mind-map/src/layouts/Base.js index 7bdfe90d..f06b0549 100644 --- a/simple-mind-map/src/layouts/Base.js +++ b/simple-mind-map/src/layouts/Base.js @@ -85,8 +85,12 @@ class Base { newNode.layerIndex = layerIndex this.cacheNode(data._node.uid, newNode) this.checkIsLayoutChangeRerenderExpandBtnPlaceholderRect(newNode) - // 主题或主题配置改变了需要重新计算节点大小和布局 - if (this.checkIsNeedResizeSources() || isLayerTypeChange) { + // 主题或主题配置改变了、节点层级改变了,需要重新渲染节点文本等情况需要重新计算节点大小和布局 + if ( + this.checkIsNeedResizeSources() || + isLayerTypeChange || + newNode.getData('resetRichText') + ) { newNode.getSize() newNode.needLayout = true } @@ -113,9 +117,14 @@ class Base { data._node = newNode // 主题或主题配置改变了需要重新计算节点大小和布局 const isResizeSource = this.checkIsNeedResizeSources() - // 节点数据改变了需要重新计算节点大小和布局 + // 主题或主题配置改变了、节点层级改变了,需要重新渲染节点文本,节点数据改变了等情况需要重新计算节点大小和布局 const isNodeDataChange = lastData !== JSON.stringify(data.data) - if (isResizeSource || isNodeDataChange || isLayerTypeChange) { + if ( + isResizeSource || + isNodeDataChange || + isLayerTypeChange || + newNode.getData('resetRichText') + ) { newNode.getSize() newNode.needLayout = true }