From d6181591c5c57935359e8cb56cd2b034228a8207 Mon Sep 17 00:00:00 2001 From: wanglin2 <1013335014@qq.com> Date: Sat, 15 Jul 2023 15:26:57 +0800 Subject: [PATCH 01/10] =?UTF-8?q?Fix:=E4=BF=AE=E5=A4=8D=E5=8F=AA=E8=AF=BB?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F=E4=B8=8B=E5=8F=AF=E4=BB=A5=E7=BC=A9=E6=94=BE?= =?UTF-8?q?=E5=9B=BE=E7=89=87=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- simple-mind-map/src/plugins/NodeImgAdjust.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/simple-mind-map/src/plugins/NodeImgAdjust.js b/simple-mind-map/src/plugins/NodeImgAdjust.js index 5a6ab838..a9b9d947 100644 --- a/simple-mind-map/src/plugins/NodeImgAdjust.js +++ b/simple-mind-map/src/plugins/NodeImgAdjust.js @@ -47,7 +47,7 @@ class NodeImgAdjust { // 节点图片鼠标移动事件 onNodeImgMousemove(node, img) { // 如果当前正在拖动调整中那么直接返回 - if (this.isMousedown || this.isAdjusted) return + if (this.isMousedown || this.isAdjusted || this.mindMap.opt.readonly) return // 如果在当前节点内移动,以及自定义元素已经是显示状态,那么直接返回 if (this.node === node && this.isShowHandleEl) return // 更新当前节点信息 From b64c8f132bceb2c199765a5df88da5a3e96e205c Mon Sep 17 00:00:00 2001 From: wanglin2 <1013335014@qq.com> Date: Sat, 15 Jul 2023 17:29:26 +0800 Subject: [PATCH 02/10] =?UTF-8?q?Demo:=E4=BC=98=E5=8C=96=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?:=E4=BE=A7=E8=BE=B9=E6=A0=8F=E6=8C=89=E9=92=AE=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E6=94=B6=E8=B5=B7;=E4=BC=98=E5=8C=96=E5=B0=8F?= =?UTF-8?q?=E5=B1=8F=E9=80=82=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/assets/icon-font/iconfont.css | 22 +++++- web/src/assets/icon-font/iconfont.ttf | Bin 25172 -> 26060 bytes web/src/assets/icon-font/iconfont.woff | Bin 15876 -> 16432 bytes web/src/assets/icon-font/iconfont.woff2 | Bin 13616 -> 14076 bytes web/src/lang/en_us.js | 5 +- web/src/lang/zh_cn.js | 5 +- web/src/pages/Edit/components/Count.vue | 6 ++ web/src/pages/Edit/components/MouseAction.vue | 1 + .../Edit/components/NavigatorToolbar.vue | 67 ++++++++++++++---- .../pages/Edit/components/SidebarTrigger.vue | 49 ++++++++++++- web/src/pages/Edit/components/Toolbar.vue | 13 ++++ 11 files changed, 143 insertions(+), 25 deletions(-) diff --git a/web/src/assets/icon-font/iconfont.css b/web/src/assets/icon-font/iconfont.css index 3deb5479..d216721f 100644 --- a/web/src/assets/icon-font/iconfont.css +++ b/web/src/assets/icon-font/iconfont.css @@ -1,8 +1,8 @@ @font-face { font-family: "iconfont"; /* Project id 2479351 */ - src: url('iconfont.woff2?t=1689210173189') format('woff2'), - url('iconfont.woff?t=1689210173189') format('woff'), - url('iconfont.ttf?t=1689210173189') format('truetype'); + src: url('iconfont.woff2?t=1689407546912') format('woff2'), + url('iconfont.woff?t=1689407546912') format('woff'), + url('iconfont.ttf?t=1689407546912') format('truetype'); } .iconfont { @@ -13,6 +13,22 @@ -moz-osx-font-smoothing: grayscale; } +.iconjiantouyou:before { + content: "\e62d"; +} + +.iconbianji1:before { + content: "\e60a"; +} + +.icondaohang1:before { + content: "\e632"; +} + +.iconyanjing:before { + content: "\e8bf"; +} + .iconwangzhan:before { content: "\e628"; } diff --git a/web/src/assets/icon-font/iconfont.ttf b/web/src/assets/icon-font/iconfont.ttf index b3ed3c3e2c6146c4e9cd50f0a4803bf82a929bcb..9c801c08bc7ae1fd46538040cbd0d152164cb538 100644 GIT binary patch delta 2689 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 Rm&)nQ&#+SY1q0)~D2_HL^5Fmg delta 15462 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 diff --git a/web/src/assets/icon-font/iconfont.woff2 b/web/src/assets/icon-font/iconfont.woff2 index 0323b32b905cd2d204841aba51242f5846b20845..1d170d95b528f4434aee31ac126cc9cec24d0292 100644 GIT binary patch literal 14076 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 literal 13616 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 diff --git a/web/src/pages/Edit/components/MouseAction.vue b/web/src/pages/Edit/components/MouseAction.vue index f8e1012c..34ffb5ba 100644 --- a/web/src/pages/Edit/components/MouseAction.vue +++ b/web/src/pages/Edit/components/MouseAction.vue @@ -74,6 +74,7 @@ export default { .btn { cursor: pointer; + font-size: 18px; } } diff --git a/web/src/pages/Edit/components/NavigatorToolbar.vue b/web/src/pages/Edit/components/NavigatorToolbar.vue index e724b6d4..f513b19c 100644 --- a/web/src/pages/Edit/components/NavigatorToolbar.vue +++ b/web/src/pages/Edit/components/NavigatorToolbar.vue @@ -19,25 +19,51 @@

- {{ - $t('navigatorToolbar.openMiniMap') - }} + +
+
- - -
-
- + --> + +
+
+
+ +
@@ -79,16 +105,15 @@ export default { openMiniMap: false } }, - mounted() { - this.toggleMiniMap(this.openMiniMap) - }, methods: { - readonlyChange(value) { - this.mindMap.setMode(value ? 'readonly' : 'edit') + readonlyChange() { + this.isReadonly = !this.isReadonly + this.mindMap.setMode(this.isReadonly ? 'readonly' : 'edit') }, - toggleMiniMap(show) { - this.$bus.$emit('toggle_mini_map', show) + toggleMiniMap() { + this.openMiniMap = !this.openMiniMap + this.$bus.$emit('toggle_mini_map', this.openMiniMap) }, onLangChange(lang) { @@ -124,6 +149,18 @@ export default { color: #303133; text-decoration: none; } + + .btn { + cursor: pointer; + font-size: 18px; + } + } +} + +@media screen and (max-width: 502px) { + .navigatorContainer { + left: 20px; + overflow-x: auto; } } diff --git a/web/src/pages/Edit/components/SidebarTrigger.vue b/web/src/pages/Edit/components/SidebarTrigger.vue index e2676f73..fcc82a92 100644 --- a/web/src/pages/Edit/components/SidebarTrigger.vue +++ b/web/src/pages/Edit/components/SidebarTrigger.vue @@ -2,8 +2,11 @@
+
+ +
.sidebarTriggerContainer { position: fixed; - right: 0px; + right: -60px; margin-top: 110px; transition: all 0.3s; top: 50%; transform: translateY(-50%); &.show { + right: 0; + } + + &.hasActive { right: 305px; } + .toggleShowBtn { + position: absolute; + left: -6px; + width: 35px; + height: 60px; + background: #409eff; + top: 50%; + transform: translateY(-50%); + cursor: pointer; + transition: left .1s linear; + z-index: 0; + border-top-left-radius: 10px; + border-bottom-left-radius: 10px; + display: flex; + align-items: center; + padding-left: 4px; + + &.hide { + left: -8px; + + span { + transform: rotateZ(180deg); + } + } + + &:hover { + left: -18px; + } + + span { + color: #fff; + transition: all 0.1s; + } + } + .trigger { + position: relative; width: 60px; border-color: #eee; background-color: #fff; diff --git a/web/src/pages/Edit/components/Toolbar.vue b/web/src/pages/Edit/components/Toolbar.vue index 305c41e5..37cb1968 100644 --- a/web/src/pages/Edit/components/Toolbar.vue +++ b/web/src/pages/Edit/components/Toolbar.vue @@ -520,4 +520,17 @@ export default { } } } + +@media screen and (max-width: 1040px) { + + .toolbarContainer { + .toolbar { + left: 20px; + right: 20px; + transform: translateX(0); + width: auto; + max-width: none; + } + } +} From 08b971cd9aaa310e08d47704d39c61bd537668be Mon Sep 17 00:00:00 2001 From: wanglin2 <1013335014@qq.com> Date: Sun, 16 Jul 2023 22:20:09 +0800 Subject: [PATCH 03/10] =?UTF-8?q?Demo:=E4=BC=98=E5=8C=96=E5=A4=A7=E7=BA=B2?= =?UTF-8?q?=E7=BC=96=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/pages/Edit/components/Outline.vue | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/web/src/pages/Edit/components/Outline.vue b/web/src/pages/Edit/components/Outline.vue index 158371e7..06dff15b 100644 --- a/web/src/pages/Edit/components/Outline.vue +++ b/web/src/pages/Edit/components/Outline.vue @@ -46,7 +46,7 @@ export default { data: [], defaultProps: { label(data) { - return data.data.text.replaceAll(/\n/g, '
') + return data.data.richText ? data.data.text : data.data.text.replaceAll(/\n/g, '
') } }, notHandleDataChange: false, @@ -77,11 +77,16 @@ export default { }, methods: { onBlur(e, node) { - if (this.isCreateNode) { - this.isCreateNode = false - return + // if (this.isCreateNode) { + // this.isCreateNode = false + // return + // } + const richText = node.data.data.richText + if (richText) { + node.data._node.setText(e.target.innerHTML, true) + } else { + node.data._node.setText(e.target.innerText) } - node.data._node.setText(e.target.innerText) }, getKey() { From a161661c6bf8d00547490a9bff3eaf708b425692 Mon Sep 17 00:00:00 2001 From: wanglin2 <1013335014@qq.com> Date: Mon, 17 Jul 2023 09:07:58 +0800 Subject: [PATCH 04/10] =?UTF-8?q?=E5=88=A0=E9=99=A4=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E8=BF=87=E6=B8=A1=E5=8A=A8=E7=94=BB=E6=95=88=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- simple-mind-map/package.json | 2 +- .../src/constants/defaultOptions.js | 4 ---- simple-mind-map/src/core/render/Render.js | 15 +------------- simple-mind-map/src/core/render/node/Node.js | 20 ++----------------- web/src/pages/Doc/en/constructor/index.md | 4 ++-- web/src/pages/Doc/en/constructor/index.vue | 4 ++-- web/src/pages/Doc/zh/constructor/index.md | 4 ++-- web/src/pages/Doc/zh/constructor/index.vue | 4 ++-- 8 files changed, 12 insertions(+), 45 deletions(-) diff --git a/simple-mind-map/package.json b/simple-mind-map/package.json index 8939adc3..18640db9 100644 --- a/simple-mind-map/package.json +++ b/simple-mind-map/package.json @@ -1,6 +1,6 @@ { "name": "simple-mind-map", - "version": "0.6.6", + "version": "0.6.7", "description": "一个简单的web在线思维导图", "authors": [ { diff --git a/simple-mind-map/src/constants/defaultOptions.js b/simple-mind-map/src/constants/defaultOptions.js index 26abae16..a89f448d 100644 --- a/simple-mind-map/src/constants/defaultOptions.js +++ b/simple-mind-map/src/constants/defaultOptions.js @@ -79,10 +79,6 @@ export const defaultOpt = { }, // 是否只有当鼠标在画布内才响应快捷键事件 enableShortcutOnlyWhenMouseInSvg: true, - // 是否开启节点动画过渡 - enableNodeTransitionMove: true, - // 如果开启节点动画过渡,可以通过该属性设置过渡的时间,单位ms - nodeTransitionMoveDuration: 300, // 初始根节点的位置 initRootNodePosition: null, // 导出png、svg、pdf时的图形内边距 diff --git a/simple-mind-map/src/core/render/Render.js b/simple-mind-map/src/core/render/Render.js index 708b689f..6493a515 100644 --- a/simple-mind-map/src/core/render/Render.js +++ b/simple-mind-map/src/core/render/Render.js @@ -259,7 +259,6 @@ class Render { // 渲染 render(callback = () => {}, source) { - let t = Date.now() // 如果当前还没有渲染完毕,不再触发渲染 if (this.isRendering) { // 等待当前渲染完毕后再进行一次渲染 @@ -290,7 +289,7 @@ class Render { // 更新根节点 this.root = root // 渲染节点 - const onEnd = () => { + this.root.render(() => { this.isRendering = false this.mindMap.emit('node_tree_render_end') callback && callback() @@ -303,18 +302,6 @@ class Render { this.mindMap.command.addHistory() } } - } - let { enableNodeTransitionMove, nodeTransitionMoveDuration } = - this.mindMap.opt - this.root.render(() => { - let dur = Date.now() - t - if (enableNodeTransitionMove && dur <= nodeTransitionMoveDuration) { - setTimeout(() => { - onEnd() - }, nodeTransitionMoveDuration - dur); - } else { - onEnd() - } }) }) this.mindMap.emit('node_active', null, this.activeNodeList) diff --git a/simple-mind-map/src/core/render/node/Node.js b/simple-mind-map/src/core/render/node/Node.js index e0f36761..e9724f41 100644 --- a/simple-mind-map/src/core/render/node/Node.js +++ b/simple-mind-map/src/core/render/node/Node.js @@ -476,8 +476,6 @@ class Node { return } let { - enableNodeTransitionMove, - nodeTransitionMoveDuration, alwaysShowExpandBtn } = this.mindMap.opt if (alwaysShowExpandBtn) { @@ -503,13 +501,7 @@ class Node { let t = this.group.transform() // 如果节点位置没有变化,则返回 if (this.left === t.translateX && this.top === t.translateY) return - if (!isLayout && enableNodeTransitionMove) { - this.group - .animate(nodeTransitionMoveDuration) - .translate(this.left - t.translateX, this.top - t.translateY) - } else { - this.group.translate(this.left - t.translateX, this.top - t.translateY) - } + this.group.translate(this.left - t.translateX, this.top - t.translateY) } // 重新渲染节点,即重新创建节点内容、计算节点大小、计算节点内容布局、更新展开收起按钮,概要及位置 @@ -531,8 +523,6 @@ class Node { // 递归渲染 render(callback = () => {}) { - let { enableNodeTransitionMove, nodeTransitionMoveDuration } = - this.mindMap.opt // 节点 // 重新渲染连线 this.renderLine() @@ -580,13 +570,7 @@ class Node { }) ) } else { - if (enableNodeTransitionMove && !isLayout) { - setTimeout(() => { - callback() - }, nodeTransitionMoveDuration) - } else { - callback() - } + callback() } // 手动插入的节点立即获得焦点并且开启编辑模式 if (this.nodeData.inserting) { diff --git a/web/src/pages/Doc/en/constructor/index.md b/web/src/pages/Doc/en/constructor/index.md index aee2e43b..ca77b9fa 100644 --- a/web/src/pages/Doc/en/constructor/index.md +++ b/web/src/pages/Doc/en/constructor/index.md @@ -51,8 +51,8 @@ const mindMap = new MindMap({ | expandBtnStyle(v0.5.0+) | Object | { color: '#808080', fill: '#fff' } | Expand the color of the stow button | | | expandBtnIcon(v0.5.0+) | Object | { open: '', close: '' } | Customize the icon of the expand/collapse button, and you can transfer the svg string of the icon | | | enableShortcutOnlyWhenMouseInSvg(v0.5.1+) | Boolean | true | Only respond to shortcut key events when the mouse is inside the canvas | | -| enableNodeTransitionMove(v0.5.1+) | Boolean | true | Whether to enable node animation transition | | -| nodeTransitionMoveDuration(v0.5.1+) | Number | 300 | If node animation transition is enabled, the transition time can be set using this attribute, in milliseconds | | +| enableNodeTransitionMove(v0.5.1+)(v0.6.7+ is remove this feature) | Boolean | true | Whether to enable node animation transition | | +| nodeTransitionMoveDuration(v0.5.1+)(v0.6.7+ is remove this feature) | Number | 300 | If node animation transition is enabled, the transition time can be set using this attribute, in milliseconds | | | initRootNodePosition(v0.5.3+) | Array | null | The position of the initial root node can be passed as an array, default is `['center', 'center']`, Represents the root node at the center of the canvas, In addition to `center`, keywords can also be set to `left`, `top`, `right`, and `bottom`, In addition to passing keywords, each item in the array can also pass a number representing a specific pixel, Can pass a percentage string, such as `['40%', '60%']`, Represents a horizontal position at `40%` of the canvas width, and a vertical position at `60%` of the canvas height | | | exportPaddingX(v0.5.5+) | Number | 10 | Horizontal padding of graphics when exporting PNG, SVG, and PDF | | | exportPaddingY(v0.5.5+) | Number | 10 | Vertical padding of graphics when exporting PNG, SVG, and PDF | | diff --git a/web/src/pages/Doc/en/constructor/index.vue b/web/src/pages/Doc/en/constructor/index.vue index c824c0ef..f32936c4 100644 --- a/web/src/pages/Doc/en/constructor/index.vue +++ b/web/src/pages/Doc/en/constructor/index.vue @@ -218,14 +218,14 @@ -enableNodeTransitionMove(v0.5.1+) +enableNodeTransitionMove(v0.5.1+)(v0.6.7+ is remove this feature) Boolean true Whether to enable node animation transition -nodeTransitionMoveDuration(v0.5.1+) +nodeTransitionMoveDuration(v0.5.1+)(v0.6.7+ is remove this feature) Number 300 If node animation transition is enabled, the transition time can be set using this attribute, in milliseconds diff --git a/web/src/pages/Doc/zh/constructor/index.md b/web/src/pages/Doc/zh/constructor/index.md index 8d9e7b1b..c1775920 100644 --- a/web/src/pages/Doc/zh/constructor/index.md +++ b/web/src/pages/Doc/zh/constructor/index.md @@ -51,8 +51,8 @@ const mindMap = new MindMap({ | expandBtnStyle(v0.5.0+) | Object | { color: '#808080', fill: '#fff' } | 展开收起按钮的颜色 | | | expandBtnIcon(v0.5.0+) | Object | { open: '', close: '' } | 自定义展开收起按钮的图标,可以传图标的svg字符串 | | | enableShortcutOnlyWhenMouseInSvg(v0.5.1+) | Boolean | true | 是否只有当鼠标在画布内才响应快捷键事件 | | -| enableNodeTransitionMove(v0.5.1+) | Boolean | true | 是否开启节点动画过渡 | | -| nodeTransitionMoveDuration(v0.5.1+) | Number | 300 | 如果开启节点动画过渡,可以通过该属性设置过渡的时间,单位ms | | +| enableNodeTransitionMove(v0.5.1+)(v0.6.7+已去除该特性) | Boolean | true | 是否开启节点动画过渡 | | +| nodeTransitionMoveDuration(v0.5.1+)(v0.6.7+已去除该特性) | Number | 300 | 如果开启节点动画过渡,可以通过该属性设置过渡的时间,单位ms | | | initRootNodePosition(v0.5.3+) | Array | null | 初始根节点的位置,可传一个数组,默认为`['center', 'center']`,代表根节点处于画布中心位置,除了`center`,关键词还可以设置`left`、`top`、`right`、`bottom`,除了可以传关键词,数组的每项还可以传递一个数字,代表具体的像素,可以传递一个百分比字符串,比如`['40%', '60%']`,代表水平位置在画布宽度的`40%`的位置,垂直位置在画布高度的`60%`的位置 | | | exportPaddingX(v0.5.5+) | Number | 10 | 导出png、svg、pdf时的图形水平内边距 | | | exportPaddingY(v0.5.5+) | Number | 10 | 导出png、svg、pdf时的图形垂直内边距 | | diff --git a/web/src/pages/Doc/zh/constructor/index.vue b/web/src/pages/Doc/zh/constructor/index.vue index 47cd694f..dd36b5eb 100644 --- a/web/src/pages/Doc/zh/constructor/index.vue +++ b/web/src/pages/Doc/zh/constructor/index.vue @@ -218,14 +218,14 @@ -enableNodeTransitionMove(v0.5.1+) +enableNodeTransitionMove(v0.5.1+)(v0.6.7+已去除该特性) Boolean true 是否开启节点动画过渡 -nodeTransitionMoveDuration(v0.5.1+) +nodeTransitionMoveDuration(v0.5.1+)(v0.6.7+已去除该特性) Number 300 如果开启节点动画过渡,可以通过该属性设置过渡的时间,单位ms From 94230f8ec649d343f94e7b4a7617fc20c4d4c5f5 Mon Sep 17 00:00:00 2001 From: wanglin2 <1013335014@qq.com> Date: Mon, 17 Jul 2023 09:43:22 +0800 Subject: [PATCH 05/10] =?UTF-8?q?Fix=EF=BC=9A=E4=BF=AE=E5=A4=8D=E5=A4=A7?= =?UTF-8?q?=E7=BA=B2=E9=87=8C=E5=88=9B=E5=BB=BA=E6=96=B0=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E6=97=B6=E8=8A=82=E7=82=B9=E6=A0=B7=E5=BC=8F=E4=B8=A2=E5=A4=B1?= =?UTF-8?q?=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 | 6 ++++++ web/src/pages/Edit/components/Outline.vue | 9 +-------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/simple-mind-map/src/core/render/Render.js b/simple-mind-map/src/core/render/Render.js index 6493a515..3f0b0a4b 100644 --- a/simple-mind-map/src/core/render/Render.js +++ b/simple-mind-map/src/core/render/Render.js @@ -426,11 +426,14 @@ class Render { first.parent.destroy() } let index = this.getNodeIndex(first) + let isRichText = !!this.mindMap.richText first.parent.nodeData.children.splice(index + 1, 0, { inserting: openEdit, data: { text: text, expand: true, + richText: isRichText, + resetRichText: isRichText, ...(appointData || {}) }, children: [] @@ -455,11 +458,14 @@ class Render { node.nodeData.children = [] } let text = node.isRoot ? defaultInsertSecondLevelNodeText : defaultInsertBelowSecondLevelNodeText + let isRichText = !!this.mindMap.richText node.nodeData.children.push({ inserting: openEdit, data: { text: text, expand: true, + richText: isRichText, + resetRichText: isRichText, ...(appointData || {}) }, children: [] diff --git a/web/src/pages/Edit/components/Outline.vue b/web/src/pages/Edit/components/Outline.vue index 06dff15b..cf23a93b 100644 --- a/web/src/pages/Edit/components/Outline.vue +++ b/web/src/pages/Edit/components/Outline.vue @@ -49,8 +49,7 @@ export default { return data.data.richText ? data.data.text : data.data.text.replaceAll(/\n/g, '
') } }, - notHandleDataChange: false, - isCreateNode: false + notHandleDataChange: false } }, computed: { @@ -77,10 +76,6 @@ export default { }, methods: { onBlur(e, node) { - // if (this.isCreateNode) { - // this.isCreateNode = false - // return - // } const richText = node.data.data.richText if (richText) { node.data._node.setText(e.target.innerHTML, true) @@ -107,14 +102,12 @@ export default { // 插入兄弟节点 insertNode() { this.notHandleDataChange = false - this.isCreateNode = true this.mindMap.execCommand('INSERT_NODE', false) }, // 插入下级节点 insertChildNode() { this.notHandleDataChange = false - this.isCreateNode = true this.mindMap.execCommand('INSERT_CHILD_NODE', false) }, From adccef56995696553048383047d40cd90c7d6645 Mon Sep 17 00:00:00 2001 From: wanglin2 <1013335014@qq.com> Date: Mon, 17 Jul 2023 09:59:47 +0800 Subject: [PATCH 06/10] =?UTF-8?q?Feat=EF=BC=9A=E4=BF=AE=E6=94=B9=E8=8A=82?= =?UTF-8?q?=E7=82=B9uid=E7=9A=84=E5=88=9B=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- simple-mind-map/index.js | 5 +---- simple-mind-map/package-lock.json | 4 ++-- simple-mind-map/src/core/command/Command.js | 6 +++--- simple-mind-map/src/core/render/node/nodeGeneralization.js | 3 ++- simple-mind-map/src/layouts/Base.js | 3 ++- simple-mind-map/src/utils/index.js | 7 +++++++ 6 files changed, 17 insertions(+), 11 deletions(-) diff --git a/simple-mind-map/index.js b/simple-mind-map/index.js index 8cc6b91c..731edd37 100644 --- a/simple-mind-map/index.js +++ b/simple-mind-map/index.js @@ -32,9 +32,6 @@ class MindMap { this.svg = SVG().addTo(this.el).size(this.width, this.height) this.draw = this.svg.group() - // 节点id - this.uid = 1 - // 初始化主题 this.initTheme() @@ -238,7 +235,7 @@ class MindMap { // 获取思维导图数据,节点树、主题、布局等 getData(withConfig) { - let nodeData = this.command.removeDataUid(this.command.getCopyData()) + let nodeData = this.command.getCopyData() let data = {} if (withConfig) { data = { diff --git a/simple-mind-map/package-lock.json b/simple-mind-map/package-lock.json index 811a8646..29f719ea 100644 --- a/simple-mind-map/package-lock.json +++ b/simple-mind-map/package-lock.json @@ -1,11 +1,11 @@ { "name": "simple-mind-map", - "version": "0.6.0", + "version": "0.6.7", "lockfileVersion": 2, "requires": true, "packages": { "": { - "version": "0.6.0", + "version": "0.6.7", "license": "MIT", "dependencies": { "@svgdotjs/svg.js": "^3.0.16", diff --git a/simple-mind-map/src/core/command/Command.js b/simple-mind-map/src/core/command/Command.js index 2a5f3115..d8edde54 100644 --- a/simple-mind-map/src/core/command/Command.js +++ b/simple-mind-map/src/core/command/Command.js @@ -89,7 +89,7 @@ class Command { this.history.shift() } this.activeHistoryIndex = this.history.length - 1 - this.mindMap.emit('data_change', this.removeDataUid(data)) + this.mindMap.emit('data_change', data) this.mindMap.emit( 'back_forward', this.activeHistoryIndex, @@ -110,7 +110,7 @@ class Command { this.history.length ) let data = simpleDeepClone(this.history[this.activeHistoryIndex]) - this.mindMap.emit('data_change', this.removeDataUid(data)) + this.mindMap.emit('data_change', data) return data } } @@ -125,7 +125,7 @@ class Command { this.activeHistoryIndex += step this.mindMap.emit('back_forward', this.activeHistoryIndex, this.history.length) let data = simpleDeepClone(this.history[this.activeHistoryIndex]) - this.mindMap.emit('data_change', this.removeDataUid(data)) + this.mindMap.emit('data_change', data) return data } } diff --git a/simple-mind-map/src/core/render/node/nodeGeneralization.js b/simple-mind-map/src/core/render/node/nodeGeneralization.js index 2a2a585d..ba204186 100644 --- a/simple-mind-map/src/core/render/node/nodeGeneralization.js +++ b/simple-mind-map/src/core/render/node/nodeGeneralization.js @@ -1,4 +1,5 @@ import Node from './Node' +import { createUid } from '../../../utils/index' // 检查是否存在概要 function checkHasGeneralization () { @@ -18,7 +19,7 @@ function createGeneralizationNode () { data: { data: this.nodeData.data.generalization }, - uid: this.mindMap.uid++, + uid: createUid(), renderer: this.renderer, mindMap: this.mindMap, draw: this.draw, diff --git a/simple-mind-map/src/layouts/Base.js b/simple-mind-map/src/layouts/Base.js index ca27fcd4..b5188cba 100644 --- a/simple-mind-map/src/layouts/Base.js +++ b/simple-mind-map/src/layouts/Base.js @@ -1,6 +1,7 @@ import Node from '../core/render/node/Node' import { CONSTANTS, initRootNodePositionMap } from '../constants/constant' import Lru from '../utils/Lru' +import { createUid } from '../utils/index' // 布局基类 class Base { @@ -101,7 +102,7 @@ class Base { } } else { // 创建新节点 - let uid = this.mindMap.uid++ + let uid = createUid() newNode = new Node({ data, uid, diff --git a/simple-mind-map/src/utils/index.js b/simple-mind-map/src/utils/index.js index f84f7fd2..8dbe6f8d 100644 --- a/simple-mind-map/src/utils/index.js +++ b/simple-mind-map/src/utils/index.js @@ -1,3 +1,5 @@ +import { v4 as uuidv4 } from 'uuid' + // 深度优先遍历树 export const walk = ( root, @@ -424,3 +426,8 @@ export const getImageSize = src => { } }) } + +// 创建节点唯一的id +export const createUid = () => { + return uuidv4() +} \ No newline at end of file From b42cee7a2f642ec8f5739d4f66b872c43c3bfa47 Mon Sep 17 00:00:00 2001 From: wanglin2 <1013335014@qq.com> Date: Tue, 18 Jul 2023 08:35:40 +0800 Subject: [PATCH 07/10] =?UTF-8?q?Feat=EF=BC=9A=E6=94=AF=E6=8C=81=E6=A0=B9?= =?UTF-8?q?=E6=8D=AEid=E5=AE=9A=E4=BD=8D=E5=88=B0=E6=9F=90=E4=B8=AA?= =?UTF-8?q?=E8=8A=82=E7=82=B9=E3=80=81=E4=BC=98=E5=8C=96=E5=A4=A7=E7=BA=B2?= =?UTF-8?q?=E7=9A=84=E8=8A=82=E7=82=B9=E5=AE=9A=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- simple-mind-map/src/core/render/Render.js | 56 ++++++++++++++++++- simple-mind-map/src/layouts/Base.js | 2 +- .../src/plugins/KeyboardNavigation.js | 6 +- simple-mind-map/src/utils/index.js | 7 ++- web/src/pages/Edit/components/Outline.vue | 9 ++- 5 files changed, 67 insertions(+), 13 deletions(-) diff --git a/simple-mind-map/src/core/render/Render.js b/simple-mind-map/src/core/render/Render.js index 3f0b0a4b..0a23119e 100644 --- a/simple-mind-map/src/core/render/Render.js +++ b/simple-mind-map/src/core/render/Render.js @@ -7,7 +7,7 @@ import Timeline from '../../layouts/Timeline' import VerticalTimeline from '../../layouts/VerticalTimeline' import Fishbone from '../../layouts/Fishbone' import TextEdit from './TextEdit' -import { copyNodeTree, simpleDeepClone, walk } from '../../utils' +import { copyNodeTree, simpleDeepClone, walk, bfsWalk } from '../../utils' import { shapeList } from './node/Shape' import { lineStyleProps } from '../../themes/default' import { CONSTANTS } from '../../constants/constant' @@ -195,6 +195,9 @@ class Render { // 设置节点形状 this.setNodeShape = this.setNodeShape.bind(this) this.mindMap.command.add('SET_NODE_SHAPE', this.setNodeShape) + // 定位节点 + this.goTargetNode = this.goTargetNode.bind(this) + this.mindMap.command.add('GO_TARGET_NODE', this.goTargetNode) } // 注册快捷键 @@ -985,6 +988,19 @@ class Render { }) } + // 定位到指定节点 + goTargetNode(node) { + let uid = typeof node === 'string' ? node : node.nodeData.data.uid + if (!uid) return + this.expandToNodeUid(uid, () => { + let targetNode = this.findNodeByUid(uid) + if (targetNode) { + targetNode.active() + this.moveNodeToCenter(targetNode) + } + }) + } + // 更新节点数据 setNodeData(node, data) { Object.keys(data).forEach(key => { @@ -1021,6 +1037,44 @@ class Render { this.mindMap.view.translateY(offsetY) this.mindMap.view.setScale(1) } + + // 展开到指定uid的节点 + expandToNodeUid(uid, callback = () => {}) { + let parentsList = [] + const cache = {} + bfsWalk(this.renderTree, (node, parent) => { + if (node.data.uid === uid) { + parentsList = parent ? [...cache[parent.data.uid], parent] : [] + return 'stop' + } else { + cache[node.data.uid] = parent ? [...cache[parent.data.uid], parent]: [] + } + }) + let needRender = false + parentsList.forEach((node) => { + if (!node.data.expand) { + needRender = true + node.data.expand = true + } + }) + if (needRender) { + this.mindMap.render(callback) + } else { + callback() + } + } + + // 根据uid找到对应的节点实例 + findNodeByUid(uid) { + let res = null + walk(this.root, null, (node) => { + if (node.nodeData.data.uid === uid) { + res = node + return true + } + }) + return res + } } export default Render diff --git a/simple-mind-map/src/layouts/Base.js b/simple-mind-map/src/layouts/Base.js index b5188cba..f3876262 100644 --- a/simple-mind-map/src/layouts/Base.js +++ b/simple-mind-map/src/layouts/Base.js @@ -102,7 +102,7 @@ class Base { } } else { // 创建新节点 - let uid = createUid() + let uid = data.data.uid || createUid() newNode = new Node({ data, uid, diff --git a/simple-mind-map/src/plugins/KeyboardNavigation.js b/simple-mind-map/src/plugins/KeyboardNavigation.js index cdbf95f2..0a3f6098 100644 --- a/simple-mind-map/src/plugins/KeyboardNavigation.js +++ b/simple-mind-map/src/plugins/KeyboardNavigation.js @@ -28,8 +28,7 @@ class KeyboardNavigation { this.focus(dir) } else { let root = this.mindMap.renderer.root - this.mindMap.renderer.moveNodeToCenter(root) - root.active() + this.mindMap.execCommand('GO_TARGET_NODE', root) } } @@ -81,8 +80,7 @@ class KeyboardNavigation { // 找到了则让目标节点聚焦 if (targetNode) { - this.mindMap.renderer.moveNodeToCenter(targetNode) - targetNode.active() + this.mindMap.execCommand('GO_TARGET_NODE', targetNode) } } diff --git a/simple-mind-map/src/utils/index.js b/simple-mind-map/src/utils/index.js index 8dbe6f8d..462b1913 100644 --- a/simple-mind-map/src/utils/index.js +++ b/simple-mind-map/src/utils/index.js @@ -33,9 +33,11 @@ export const walk = ( // 广度优先遍历树 export const bfsWalk = (root, callback) => { - callback(root) let stack = [root] let isStop = false + if (callback(root, null) === 'stop') { + isStop = true + } while (stack.length) { if (isStop) { break @@ -43,8 +45,9 @@ export const bfsWalk = (root, callback) => { let cur = stack.shift() if (cur.children && cur.children.length) { cur.children.forEach(item => { + if (isStop) return stack.push(item) - if (callback(item) === 'stop') { + if (callback(item, cur) === 'stop') { isStop = true } }) diff --git a/web/src/pages/Edit/components/Outline.vue b/web/src/pages/Edit/components/Outline.vue index cf23a93b..e5cd2e84 100644 --- a/web/src/pages/Edit/components/Outline.vue +++ b/web/src/pages/Edit/components/Outline.vue @@ -112,12 +112,11 @@ export default { }, // 激活当前节点且移动当前节点到画布中间 - onClick(e, data) { + onClick(e, node) { this.notHandleDataChange = true - let node = data.data._node - if (node.nodeData.data.isActive) return - node.mindMap.renderer.moveNodeToCenter(node) - node.active() + let targetNode = node.data._node + if (targetNode && targetNode.nodeData.data.isActive) return + this.mindMap.execCommand('GO_TARGET_NODE', node.data.data.uid) }, } } From daf9888da43e5ece1ae4903b6fc02c99ec4cce1d Mon Sep 17 00:00:00 2001 From: wanglin2 <1013335014@qq.com> Date: Tue, 18 Jul 2023 08:44:44 +0800 Subject: [PATCH 08/10] =?UTF-8?q?Fix=EF=BC=9A=E4=BF=AE=E5=A4=8D=E8=8A=82?= =?UTF-8?q?=E7=82=B9=E6=94=B6=E8=B5=B7=E5=86=8D=E5=B1=95=E5=BC=80=E5=90=8E?= =?UTF-8?q?=E5=B1=95=E5=BC=80=E6=94=B6=E8=B5=B7=E6=8C=89=E9=92=AE=E5=8D=A0?= =?UTF-8?q?=E4=BD=8D=E5=85=83=E7=B4=A0=E4=B8=A2=E5=A4=B1=E7=9A=84=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/src/core/render/node/Node.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/simple-mind-map/src/core/render/node/Node.js b/simple-mind-map/src/core/render/node/Node.js index e9724f41..4dd66d84 100644 --- a/simple-mind-map/src/core/render/node/Node.js +++ b/simple-mind-map/src/core/render/node/Node.js @@ -365,8 +365,8 @@ class Node { this._unVisibleRectRegionNode.fill({ color: 'transparent' }) - this.group.add(this._unVisibleRectRegionNode) } + this.group.add(this._unVisibleRectRegionNode) this.renderer.layout.renderExpandBtnRect(this._unVisibleRectRegionNode, this.expandBtnSize, width, height, this) } } From 2bf146816bcfa5d635d4f7b64a1017faed9ef915 Mon Sep 17 00:00:00 2001 From: wanglin2 <1013335014@qq.com> Date: Tue, 18 Jul 2023 09:21:58 +0800 Subject: [PATCH 09/10] =?UTF-8?q?Doc=EF=BC=9Aupdate?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/pages/Doc/en/changelog/index.md | 10 ++++++++++ web/src/pages/Doc/en/changelog/index.vue | 5 +++++ web/src/pages/Doc/en/constructor/index.md | 1 + web/src/pages/Doc/en/constructor/index.vue | 5 +++++ web/src/pages/Doc/en/render/index.md | 20 +++++++++++++++++++- web/src/pages/Doc/en/render/index.vue | 21 +++++++++++++++++++++ web/src/pages/Doc/zh/changelog/index.md | 10 ++++++++++ web/src/pages/Doc/zh/changelog/index.vue | 5 +++++ web/src/pages/Doc/zh/constructor/index.md | 1 + web/src/pages/Doc/zh/constructor/index.vue | 5 +++++ web/src/pages/Doc/zh/course12/index.md | 3 +++ web/src/pages/Doc/zh/course12/index.vue | 3 +++ web/src/pages/Doc/zh/render/index.md | 20 +++++++++++++++++++- web/src/pages/Doc/zh/render/index.vue | 21 +++++++++++++++++++++ 14 files changed, 128 insertions(+), 2 deletions(-) diff --git a/web/src/pages/Doc/en/changelog/index.md b/web/src/pages/Doc/en/changelog/index.md index 3fe63f7d..509a39d9 100644 --- a/web/src/pages/Doc/en/changelog/index.md +++ b/web/src/pages/Doc/en/changelog/index.md @@ -1,5 +1,15 @@ # Changelog +## 0.6.7 + +Fix: 1.Fixed the issue of missing placeholder elements for the expand and collapse button after node collapse and expansion. 2.Fixed the issue of being able to scale images in read-only mode. + +New: 1.Support locating to a node based on node instance or node uid. 2.Modify the creation method of node uids and export data to add node uids. + +Remove: 1.Remove the node transition effect. + +Demo: 1.Add website homepage. 2.Fixed the issue of missing node styles when creating new nodes in the outline. 3.Fixed the issue of missing edited text after pressing Enter or Tab after editing nodes in the outline. 4.Optimize the node positioning of the outline, and the collapsed nodes will automatically expand. 5.The sidebar button supports folding. 6.Optimize small screen adaptation. + ## 0.6.6 New: 1.Support exporting to Xmind new version files. 2.Importing the new version of Xmind file supports importing images from nodes. 3.Add a vertical timeline structure. diff --git a/web/src/pages/Doc/en/changelog/index.vue b/web/src/pages/Doc/en/changelog/index.vue index a484fb0b..1ee49304 100644 --- a/web/src/pages/Doc/en/changelog/index.vue +++ b/web/src/pages/Doc/en/changelog/index.vue @@ -1,6 +1,11 @@ diff --git a/web/src/pages/Doc/zh/changelog/index.md b/web/src/pages/Doc/zh/changelog/index.md index 1318fbf1..72584967 100644 --- a/web/src/pages/Doc/zh/changelog/index.md +++ b/web/src/pages/Doc/zh/changelog/index.md @@ -1,5 +1,15 @@ # Changelog +## 0.6.7 + +修复:1.修复节点收起再展开后展开收起按钮占位元素丢失的问题。 2.修复只读模式下可以缩放图片的问题。 + +新增:1.支持根据节点实例或节点uid定位到某个节点。 2.修改节点uid的创建方式,导出数据添加节点的uid。 + +移除:1.移除节点过渡效果。 + +Demo:1.添加网站首页。 2.修复大纲里创建新节点时节点样式丢失的问题。 3.修复大纲里编辑节点后按回车或Tab键后编辑文本丢失的问题。 4.优化大纲的节点定位,被收起的节点会自动展开。 5.侧边栏按钮支持收起。 6.优化小屏适配。 + ## 0.6.6 新增:1.支持导出为Xmind新版文件。2.导入Xmind新版文件支持导入节点中的图片。 3.新增竖向时间轴结构。 diff --git a/web/src/pages/Doc/zh/changelog/index.vue b/web/src/pages/Doc/zh/changelog/index.vue index 3e43e1d5..071e4cab 100644 --- a/web/src/pages/Doc/zh/changelog/index.vue +++ b/web/src/pages/Doc/zh/changelog/index.vue @@ -1,6 +1,11 @@ From b71a80e383fdb0656e8858ebf5b1516346c7a9af Mon Sep 17 00:00:00 2001 From: wanglin2 <1013335014@qq.com> Date: Tue, 18 Jul 2023 09:29:19 +0800 Subject: [PATCH 10/10] =?UTF-8?q?=E6=89=93=E5=8C=850.6.7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.html | 2 +- web/src/pages/Doc/components/Header.vue | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index 4b55ffd1..45054831 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ -思绪思维导图
\ No newline at end of file +思绪思维导图
\ No newline at end of file diff --git a/web/src/pages/Doc/components/Header.vue b/web/src/pages/Doc/components/Header.vue index ccf58ed2..59bb265d 100644 --- a/web/src/pages/Doc/components/Header.vue +++ b/web/src/pages/Doc/components/Header.vue @@ -1,7 +1,7 @@