From 740c898bb13a0263f224ecb87f680a25d3b3aa9f 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: Tue, 26 Mar 2024 12:08:20 +0800 Subject: [PATCH] =?UTF-8?q?Feat=EF=BC=9A=E5=AE=9E=E4=BE=8B=E5=8C=96?= =?UTF-8?q?=E5=8F=8AsetData=E6=96=B9=E6=B3=95=E6=94=AF=E6=8C=81=E4=BC=A0?= =?UTF-8?q?=E5=85=A5=E7=A9=BA=E7=9A=84data=EF=BC=8C=E7=94=BB=E5=B8=83?= =?UTF-8?q?=E7=A9=BA=E7=99=BD=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- simple-mind-map/index.js | 10 ++++++++-- simple-mind-map/src/core/command/Command.js | 2 ++ simple-mind-map/src/core/render/Render.js | 19 +++++++++++++++++-- simple-mind-map/src/plugins/RainbowLines.js | 1 + simple-mind-map/src/plugins/RichText.js | 1 + simple-mind-map/src/plugins/Search.js | 1 + 6 files changed, 30 insertions(+), 4 deletions(-) diff --git a/simple-mind-map/index.js b/simple-mind-map/index.js index 5c985183..48587f37 100644 --- a/simple-mind-map/index.js +++ b/simple-mind-map/index.js @@ -15,7 +15,12 @@ import { cssContent } from './src/constants/constant' import { SVG } from '@svgdotjs/svg.js' -import { simpleDeepClone, getType, getObjectChangedProps } from './src/utils' +import { + simpleDeepClone, + getType, + getObjectChangedProps, + isUndef +} from './src/utils' import defaultTheme, { checkIsNodeSizeIndependenceConfig } from './src/themes/default' @@ -94,7 +99,7 @@ class MindMap { // 初始渲染 this.render(this.opt.fit ? () => this.view.fit() : () => {}) setTimeout(() => { - this.command.addHistory() + if (this.opt.data) this.command.addHistory() }, 0) } @@ -111,6 +116,7 @@ class MindMap { // 预处理节点数据 handleData(data) { + if (isUndef(data) || Object.keys(data).length <= 0) return null data = simpleDeepClone(data || {}) // 根节点不能收起 if (data.data && !data.data.expand) { diff --git a/simple-mind-map/src/core/command/Command.js b/simple-mind-map/src/core/command/Command.js index be3bfd8e..5c51b4d8 100644 --- a/simple-mind-map/src/core/command/Command.js +++ b/simple-mind-map/src/core/command/Command.js @@ -95,6 +95,7 @@ class Command { this.history.length > 0 ? this.history[this.history.length - 1] : null const data = this.getCopyData() // 此次数据和上次一样则不重复添加 + if (lastData === data) return if (lastData && JSON.stringify(lastData) === JSON.stringify(data)) { return } @@ -158,6 +159,7 @@ class Command { // 获取渲染树数据副本 getCopyData() { + if (!this.mindMap.renderer.renderTree) return null return copyRenderTree({}, this.mindMap.renderer.renderTree, true) } diff --git a/simple-mind-map/src/core/render/Render.js b/simple-mind-map/src/core/render/Render.js index 19e00a51..1bf139c7 100644 --- a/simple-mind-map/src/core/render/Render.js +++ b/simple-mind-map/src/core/render/Render.js @@ -65,7 +65,7 @@ class Render { this.mindMap = opt.mindMap this.themeConfig = this.mindMap.themeConfig // 渲染树,操作过程中修改的都是这里的数据 - this.renderTree = merge({}, this.mindMap.opt.data || {}) + this.renderTree = this.mindMap.opt.data ? merge({}, this.mindMap.opt.data) : null // 是否重新渲染 this.reRender = false // 是否正在渲染中 @@ -117,7 +117,7 @@ class Render { // 重新设置思维导图数据 setData(data) { if (this.mindMap.richText) { - this.renderTree = this.mindMap.richText.handleSetData(data) + this.renderTree = data ? this.mindMap.richText.handleSetData(data) : null } else { this.renderTree = data } @@ -436,6 +436,12 @@ class Render { if (this.reRender) { this.clearActiveNodeList() } + // 如果没有节点数据 + if (!this.renderTree) { + this.isRendering = false + this.mindMap.emit('node_tree_render_end') + return + } // 计算布局 this.layout.doLayout(root => { // 删除本次渲染时不再需要的节点 @@ -480,6 +486,7 @@ class Render { // 给当前被收起来的节点数据添加文本复位标志 resetUnExpandNodeStyle() { + if (!this.renderTree) return walk(this.renderTree, null, node => { if (!node.data.expand) { walk(node, null, node2 => { @@ -969,6 +976,7 @@ class Render { }) } else { // 否则遍历整棵树 + if (!this.renderTree) return walk(this.renderTree, null, node => { const _hasCustomStyles = this._handleRemoveCustomStyles(node.data) if (_hasCustomStyles) hasCustomStyles = true @@ -1462,6 +1470,7 @@ class Render { // 展开所有 expandAllNode() { + if (!this.renderTree) return walk( this.renderTree, null, @@ -1480,6 +1489,7 @@ class Render { // 收起所有 unexpandAllNode() { + if (!this.renderTree) return walk( this.renderTree, null, @@ -1500,6 +1510,7 @@ class Render { // 展开到指定层级 expandToLevel(level) { + if (!this.renderTree) return walk( this.renderTree, null, @@ -1771,6 +1782,10 @@ class Render { // 展开到指定uid的节点 expandToNodeUid(uid, callback = () => {}) { + if (!this.renderTree) { + callback() + return + } let parentsList = [] const cache = {} bfsWalk(this.renderTree, (node, parent) => { diff --git a/simple-mind-map/src/plugins/RainbowLines.js b/simple-mind-map/src/plugins/RainbowLines.js index 7e426612..86205315 100644 --- a/simple-mind-map/src/plugins/RainbowLines.js +++ b/simple-mind-map/src/plugins/RainbowLines.js @@ -33,6 +33,7 @@ class RainbowLines { // 删除所有节点的连线颜色 removeNodeLineColor() { const tree = this.mindMap.renderer.renderTree + if (!tree) return walk( tree, null, diff --git a/simple-mind-map/src/plugins/RichText.js b/simple-mind-map/src/plugins/RichText.js index e05115f5..9fdd8e6f 100644 --- a/simple-mind-map/src/plugins/RichText.js +++ b/simple-mind-map/src/plugins/RichText.js @@ -641,6 +641,7 @@ class RichText { // 将所有节点转换成非富文本节点 transformAllNodesToNormalNode() { + if (!this.mindMap.renderer.renderTree) return walk( this.mindMap.renderer.renderTree, null, diff --git a/simple-mind-map/src/plugins/Search.js b/simple-mind-map/src/plugins/Search.js index 6c607ee6..0729b4b0 100644 --- a/simple-mind-map/src/plugins/Search.js +++ b/simple-mind-map/src/plugins/Search.js @@ -89,6 +89,7 @@ class Search { const tree = isOnlySearchCurrentRenderNodes ? this.mindMap.renderer.root : this.mindMap.renderer.renderTree + if (tree) return bfsWalk(tree, node => { let { richText, text } = isOnlySearchCurrentRenderNodes ? node.getData()