From 4c7dafe94ef909e1db97c7c9fcbef394837aae76 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: Wed, 13 Mar 2024 15:10:17 +0800 Subject: [PATCH 01/24] Doc: update --- README.md | 6 +++- web/src/assets/avatar/皇登攀.jpg | Bin 0 -> 22708 bytes web/src/pages/Doc/en/introduction/index.md | 4 +++ web/src/pages/Doc/en/introduction/index.vue | 36 +++++++++++--------- web/src/pages/Doc/zh/introduction/index.md | 4 +++ web/src/pages/Doc/zh/introduction/index.vue | 36 +++++++++++--------- 6 files changed, 53 insertions(+), 33 deletions(-) create mode 100644 web/src/assets/avatar/皇登攀.jpg diff --git a/README.md b/README.md index 8d6efe03..1d963d11 100644 --- a/README.md +++ b/README.md @@ -88,7 +88,7 @@ const mindMap = new MindMap({ [MIT](./LICENSE) -保留`mind-map`版权声明的情况下可随意商用。 +保留`mind-map`版权声明的情况下可随意商用。如果你不想保留可以联系作者。 # 微信交流群 @@ -298,4 +298,8 @@ const mindMap = new MindMap({ pluvet + + + 皇登攀 +

diff --git a/web/src/assets/avatar/皇登攀.jpg b/web/src/assets/avatar/皇登攀.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5132666a368454af1409f6686c94a8327dd8c7bb GIT binary patch literal 22708 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

pluvet

+
+ +

皇登攀

+
\ No newline at end of file diff --git a/web/src/pages/Doc/en/introduction/index.vue b/web/src/pages/Doc/en/introduction/index.vue index 77552ca6..d76202ca 100644 --- a/web/src/pages/Doc/en/introduction/index.vue +++ b/web/src/pages/Doc/en/introduction/index.vue @@ -8,17 +8,17 @@

Features

    -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • jsonpngsvgpdfmarkdownxmind, support import from jsonxmindmarkdown
  • -
  • -
  • -
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • jsonpngsvgpdfmarkdownxmind, support import from jsonxmindmarkdown
  • +
  • +
  • +

Features that will not be implemented:

@@ -34,16 +34,16 @@ frameworks such as Vue and React, or without a framework.

This is an online mind map built using the simple-mind-map library and based on Vue2.x and ElementUI. Features include:

    -
  • +
  • images, icons, hyperlinks, notes, tags, and summaries
  • -
  • +
  • outline, theme selection, and structure selection
  • -
  • +
  • storage by default, but it also supports creating, opening, and editing local files on the computer directly
  • -
  • +
  • and organizing layout
  • -
  • +
  • between edit and read-only modes, zooming in and out, and switching to full screen, support mini map
@@ -281,6 +281,10 @@ full screen, support mini map

pluvet

+
+ +

皇登攀

+
diff --git a/web/src/pages/Doc/zh/introduction/index.md b/web/src/pages/Doc/zh/introduction/index.md index e8d3e586..b07ace27 100644 --- a/web/src/pages/Doc/zh/introduction/index.md +++ b/web/src/pages/Doc/zh/introduction/index.md @@ -320,4 +320,8 @@

pluvet

+
+ +

皇登攀

+
\ No newline at end of file diff --git a/web/src/pages/Doc/zh/introduction/index.vue b/web/src/pages/Doc/zh/introduction/index.vue index 3966ccc0..9489322a 100644 --- a/web/src/pages/Doc/zh/introduction/index.vue +++ b/web/src/pages/Doc/zh/introduction/index.vue @@ -8,17 +8,17 @@

特性

    -
  • -
  • -
  • -
  • -
  • -
  • -
  • -
  • jsonpngsvgpdfmarkdownxmind,支持从jsonxmindmarkdown导入
  • -
  • -
  • -
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • jsonpngsvgpdfmarkdownxmind,支持从jsonxmindmarkdown导入
  • +
  • +
  • +

不会实现的特性:

@@ -32,11 +32,11 @@

2.web

使用simple-mind-map库,基于vue2.xElementUI搭建的在线思维导图。特性:

    -
  • -
  • -
  • -
  • -
  • +
  • +
  • +
  • +
  • +

提供文档页面服务。

3.dist

@@ -275,6 +275,10 @@

pluvet

+
+ +

皇登攀

+
From 1085473463b60369aed21b7993e7c26c7d6368f7 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: Wed, 13 Mar 2024 15:17:35 +0800 Subject: [PATCH 02/24] =?UTF-8?q?Feat=EF=BC=9A=E6=94=AF=E6=8C=81insert?= =?UTF-8?q?=E9=94=AE=E6=8F=92=E5=85=A5=E4=B8=8B=E7=BA=A7=E8=8A=82=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- simple-mind-map/src/core/render/Render.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/simple-mind-map/src/core/render/Render.js b/simple-mind-map/src/core/render/Render.js index a91681ac..19e00a51 100644 --- a/simple-mind-map/src/core/render/Render.js +++ b/simple-mind-map/src/core/render/Render.js @@ -290,6 +290,10 @@ class Render { this.mindMap.keyCommand.addShortcut('Tab', () => { this.mindMap.execCommand('INSERT_CHILD_NODE') }) + // 插入下级节点 + this.mindMap.keyCommand.addShortcut('Insert', () => { + this.mindMap.execCommand('INSERT_CHILD_NODE') + }) // 插入同级节点 this.mindMap.keyCommand.addShortcut('Enter', () => { this.mindMap.execCommand('INSERT_NODE') From 2f91ea7199b17f04818713cf1cc30710d6a0cc96 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: Wed, 13 Mar 2024 15:31:50 +0800 Subject: [PATCH 03/24] =?UTF-8?q?Feat=EF=BC=9A=E5=A2=9E=E5=8A=A0beforeShor?= =?UTF-8?q?tcutRun=E5=AE=9E=E4=BE=8B=E5=8C=96=E9=80=89=E9=A1=B9=E7=94=A8?= =?UTF-8?q?=E4=BA=8E=E6=8B=A6=E6=88=AA=E5=BF=AB=E6=8D=B7=E9=94=AE=E6=93=8D?= =?UTF-8?q?=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- simple-mind-map/src/constants/defaultOptions.js | 5 ++++- simple-mind-map/src/core/command/KeyCommand.js | 7 ++++++- web/src/pages/Edit/components/Edit.vue | 7 +++++++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/simple-mind-map/src/constants/defaultOptions.js b/simple-mind-map/src/constants/defaultOptions.js index e192b262..da96e73f 100644 --- a/simple-mind-map/src/constants/defaultOptions.js +++ b/simple-mind-map/src/constants/defaultOptions.js @@ -288,5 +288,8 @@ export const defaultOpt = { data: 1.当type=createOrUpdate时,代表被创建或被更新的节点数据,即将同步到其他客户端,所以你可以修改该数据;2.当type=delete时,代表被删除的节点数据 } */ - beforeCooperateUpdate: null + beforeCooperateUpdate: null, + // 快捷键操作即将执行前的生命周期函数,返回true可以阻止操作执行 + // 函数接收两个参数:key(快捷键)、activeNodeList(当前激活的节点列表) + beforeShortcutRun: null } diff --git a/simple-mind-map/src/core/command/KeyCommand.js b/simple-mind-map/src/core/command/KeyCommand.js index 8474e84b..95e4440d 100644 --- a/simple-mind-map/src/core/command/KeyCommand.js +++ b/simple-mind-map/src/core/command/KeyCommand.js @@ -67,9 +67,10 @@ export default class KeyCommand { // 按键事件 onKeydown(e) { + const { enableShortcutOnlyWhenMouseInSvg, beforeShortcutRun } = this.mindMap.opt if ( this.isPause || - (this.mindMap.opt.enableShortcutOnlyWhenMouseInSvg && !this.isInSvg) + (enableShortcutOnlyWhenMouseInSvg && !this.isInSvg) ) { return } @@ -80,6 +81,10 @@ export default class KeyCommand { e.stopPropagation() e.preventDefault() } + if (typeof beforeShortcutRun === 'function') { + const isStop = beforeShortcutRun(key, [...this.mindMap.renderer.activeNodeList]) + if (isStop) return + } this.shortcutMap[key].forEach(fn => { fn() }) diff --git a/web/src/pages/Edit/components/Edit.vue b/web/src/pages/Edit/components/Edit.vue index 89a3abef..70d49932 100644 --- a/web/src/pages/Edit/components/Edit.vue +++ b/web/src/pages/Edit/components/Edit.vue @@ -349,6 +349,13 @@ export default { break } } + // beforeShortcutRun: (key, activeNodeList) => { + // console.log(key, activeNodeList) + // // 阻止删除快捷键行为 + // if (key === 'Backspace') { + // return true + // } + // } // handleNodePasteImg: img => { // console.log(img) // return new Promise(resolve => { From b3d16a60b8ae56e8cfefa8067067ca105a57dcd9 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, 21 Mar 2024 09:29:08 +0800 Subject: [PATCH 04/24] Doc: update --- README.md | 4 + web/src/assets/avatar/风格.jpg | Bin 0 -> 36070 bytes web/src/pages/Doc/en/introduction/index.md | 4 + web/src/pages/Doc/en/introduction/index.vue | 4 + web/src/pages/Doc/zh/introduction/index.md | 4 + web/src/pages/Doc/zh/introduction/index.vue | 4 + web/src/pages/Edit/components/Edit.vue | 173 +++++++++++++++++++- 7 files changed, 189 insertions(+), 4 deletions(-) create mode 100644 web/src/assets/avatar/风格.jpg diff --git a/README.md b/README.md index 1d963d11..8be3104f 100644 --- a/README.md +++ b/README.md @@ -302,4 +302,8 @@ const mindMap = new MindMap({ 皇登攀 + + + 风格 +

diff --git a/web/src/assets/avatar/风格.jpg b/web/src/assets/avatar/风格.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5536343f95132ed45a0d0083f91bcdcd3f29bb91 GIT binary patch literal 36070 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 f$Ssm^jOe2fX&I_ZAK?cWhOsC

皇登攀

+
+ +

风格

+
\ No newline at end of file diff --git a/web/src/pages/Doc/en/introduction/index.vue b/web/src/pages/Doc/en/introduction/index.vue index d76202ca..d88a68d6 100644 --- a/web/src/pages/Doc/en/introduction/index.vue +++ b/web/src/pages/Doc/en/introduction/index.vue @@ -285,6 +285,10 @@ full screen, support mini map

皇登攀

+
+ +

风格

+
diff --git a/web/src/pages/Doc/zh/introduction/index.md b/web/src/pages/Doc/zh/introduction/index.md index b07ace27..e774e18b 100644 --- a/web/src/pages/Doc/zh/introduction/index.md +++ b/web/src/pages/Doc/zh/introduction/index.md @@ -324,4 +324,8 @@

皇登攀

+
+ +

风格

+
\ No newline at end of file diff --git a/web/src/pages/Doc/zh/introduction/index.vue b/web/src/pages/Doc/zh/introduction/index.vue index 9489322a..de93c78c 100644 --- a/web/src/pages/Doc/zh/introduction/index.vue +++ b/web/src/pages/Doc/zh/introduction/index.vue @@ -279,6 +279,10 @@

皇登攀

+
+ +

风格

+
diff --git a/web/src/pages/Edit/components/Edit.vue b/web/src/pages/Edit/components/Edit.vue index 70d49932..7f8605b1 100644 --- a/web/src/pages/Edit/components/Edit.vue +++ b/web/src/pages/Edit/components/Edit.vue @@ -46,7 +46,7 @@ import Painter from 'simple-mind-map/src/plugins/Painter.js' import ScrollbarPlugin from 'simple-mind-map/src/plugins/Scrollbar.js' import Formula from 'simple-mind-map/src/plugins/Formula.js' // 协同编辑插件 -// import Cooperate from 'simple-mind-map/src/plugins/Cooperate.js' +import Cooperate from 'simple-mind-map/src/plugins/Cooperate.js' // 手绘风格插件,该插件为付费插件,详情请查看开发文档 // import HandDrawnLikeStyle from 'simple-mind-map-plugin-handdrawnlikestyle' import OutlineSidebar from './OutlineSidebar' @@ -82,6 +82,7 @@ import handleClipboardText from '@/utils/handleClipboardText' import Scrollbar from './Scrollbar.vue' import exampleData from 'simple-mind-map/example/exampleData' import FormulaSidebar from './FormulaSidebar.vue' +import { isSameObject } from 'simple-mind-map/src/utils'; // 注册插件 MindMap.usePlugin(MiniMap) @@ -98,7 +99,11 @@ MindMap.usePlugin(MiniMap) .usePlugin(SearchPlugin) .usePlugin(Painter) .usePlugin(Formula) -// .usePlugin(Cooperate) // 协同插件 +.usePlugin(Cooperate) // 协同插件 + +const request = (data) => { + console.log(data) +} // 注册自定义主题 customThemeList.forEach(item => { @@ -305,7 +310,7 @@ export default { this.mindMap = new MindMap({ el: this.$refs.mindMapContainer, data: root, - fit: false, + fit: true, layout: layout, theme: theme.template, themeConfig: theme.config, @@ -348,6 +353,150 @@ export default { default: break } + }, + onlyOneEnableActiveNodeOnCooperate: true, + beforeCooperateUpdate: ({ type, list, data }) => { + const { title, userINumber } = this.$route.meta + // 所有节点数据 + const allData = data + // 创建或更新节点 + if (type === 'createOrUpdate') { + // 获取节点的父节点的uid + const getParentUid = uid => { + let res = null + Object.keys(allData).forEach(item => { + if (allData[item].children.includes(uid)) { + res = allData[item].data + } + }) + return res ? res.uid : '' + } + // 找出新创建的 + const crateList = list + .filter(({ oldData }) => { + return !oldData + }) + .map(({ uid }) => { + return uid + }) + // 遍历所有创建或更新的节点列表 + list.forEach(({ uid, data, oldData }) => { + // 更新版本号 + if (data.data.version === undefined) { + data.data.version = 0 + } + const newVersion = data.data.version + 1 + data.data.version = newVersion + const targetNode = this.mindMap.renderer.findNodeByUid(uid) + if (targetNode) { + targetNode.setData({ + version: newVersion + }) + } + // 调接口 + if (!oldData) { + // 新增节点 + request({ + url: `/addOneNode/${title}/${userINumber}`, + method: 'post', + data: { + parentNodeId: getParentUid(uid), + newNodeContent: JSON.stringify(data.data) + } + }) + } else { + // 更新节点 + const oldChildrenLength = oldData.children.length + const newChildrenLength = data.children.length + if (oldChildrenLength !== newChildrenLength) { + if (newChildrenLength > oldChildrenLength) { + const moveList = data.children.filter(item => { + return ( + !oldData.children.includes(item) && + !crateList.includes(item) + ) + }) + moveList.forEach(item => { + request({ + url: `/changeNodeParentNode/${title}/${userINumber}`, + method: 'post', + data: { + movedNodeId: item, + newParentNodeId: uid + } + }) + }) + } + } else { + if (!isSameObject(data.data, oldData.data)) { + // 关联线 + const associativeLineTargets = + data.data.associativeLineTargets || [] + const oldDataAssociativeLineTargets = + oldData.data.associativeLineTargets || [] + const newTargets = [] + const deleteTargets = [] + associativeLineTargets.forEach(item => { + if (!oldDataAssociativeLineTargets.includes(item)) { + newTargets.push(item) + } + }) + oldDataAssociativeLineTargets.forEach(item => { + if (!associativeLineTargets.includes(item)) { + deleteTargets.push(item) + } + }) + // 添加关联线 + if (newTargets.length > 0) { + newTargets.forEach(item => { + request({ + url: `/addAssociationLine/${title}/${userINumber}`, + method: 'post', + data: { + startNodeId: uid, + endNodeId: item + } + }) + }) + } else if (deleteTargets.length > 0) { + // 删除关联线 + deleteTargets.forEach(item => { + request({ + url: `/deleteAssociationLine/${title}/${userINumber}`, + method: 'post', + data: { + startNodeId: uid, + endNodeId: item + } + }) + }) + } else { + // 更新节点自身内容 + request({ + url: `/updateOneNodeContent/${title}/${userINumber}`, + method: 'post', + data: { + mindMapName: title, + nodeId: uid, + jsonContent: JSON.stringify(data.data) + } + }) + } + } + } + } + }) + } else if (type === 'delete') { + // 删除 + const res = this.getTopIdList(list) + request({ + url: `/deleteNodeList/${title}/${userINumber}`, + method: 'post', + data: { + idList: res + } + }) + } } // beforeShortcutRun: (key, activeNodeList) => { // console.log(key, activeNodeList) @@ -478,6 +627,22 @@ export default { // }, 5000) }, + // 获取被删除节点的顶层节点的uid列表 + getTopIdList(list) { + const res = [] + list.forEach((item) => { + const hasParent = list.find((item2) => { + return item2.data.children.includes(item.uid) + }) + if (!hasParent) { + res.push(item) + } + }) + return res.map((item) => { + return item.uid + }) + }, + // url中是否存在要打开的文件 hasFileURL() { const fileURL = this.$route.query.fileURL @@ -710,7 +875,7 @@ export default { if (this.mindMap.cooperate && this.$route.query.userName) { this.mindMap.cooperate.setProvider(null, { roomName: 'demo-room', - signalingList: ['ws://10.16.83.11:4444'] + signalingList: ['ws://10.16.83.118:4444'] }) this.mindMap.cooperate.setUserInfo({ id: Math.random(), From a12e72117e6d9e66fa090d6d92814d7d8e896c88 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: Fri, 22 Mar 2024 08:58:15 +0800 Subject: [PATCH 05/24] Doc: update --- README.md | 10 +++++----- web/src/pages/Doc/en/introduction/index.md | 4 ++++ web/src/pages/Doc/en/introduction/index.vue | 4 ++++ web/src/pages/Doc/zh/introduction/index.md | 4 ++++ web/src/pages/Doc/zh/introduction/index.vue | 4 ++++ 5 files changed, 21 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 8be3104f..9ab63dbe 100644 --- a/README.md +++ b/README.md @@ -86,9 +86,7 @@ const mindMap = new MindMap({ # License -[MIT](./LICENSE) - -保留`mind-map`版权声明的情况下可随意商用。如果你不想保留可以联系作者。 +[MIT](./LICENSE)。保留`mind-map`版权声明的情况下可随意商用。 # 微信交流群 @@ -104,8 +102,6 @@ const mindMap = new MindMap({ 开源不易,如果本项目有帮助到你的话,可以考虑请作者喝杯咖啡~ -> 厚椰乳一盒 + 纯牛奶半盒 + 冰块 + 咖啡液 = 生椰拿铁 yyds - > 推荐使用支付宝,微信获取不到头像。转账请备注【思维导图】。

@@ -306,4 +302,8 @@ const mindMap = new MindMap({ 风格 + + + SR +

diff --git a/web/src/pages/Doc/en/introduction/index.md b/web/src/pages/Doc/en/introduction/index.md index a43abaa5..7b9220b1 100644 --- a/web/src/pages/Doc/en/introduction/index.md +++ b/web/src/pages/Doc/en/introduction/index.md @@ -335,4 +335,8 @@ Open source is not easy. If this project is helpful to you, you can invite the a

风格

+
+ +

SR

+
\ No newline at end of file diff --git a/web/src/pages/Doc/en/introduction/index.vue b/web/src/pages/Doc/en/introduction/index.vue index d88a68d6..b21a7c2b 100644 --- a/web/src/pages/Doc/en/introduction/index.vue +++ b/web/src/pages/Doc/en/introduction/index.vue @@ -289,6 +289,10 @@ full screen, support mini map

风格

+
+ +

SR

+
diff --git a/web/src/pages/Doc/zh/introduction/index.md b/web/src/pages/Doc/zh/introduction/index.md index e774e18b..8f5cde4d 100644 --- a/web/src/pages/Doc/zh/introduction/index.md +++ b/web/src/pages/Doc/zh/introduction/index.md @@ -328,4 +328,8 @@

风格

+
+ +

SR

+
\ No newline at end of file diff --git a/web/src/pages/Doc/zh/introduction/index.vue b/web/src/pages/Doc/zh/introduction/index.vue index de93c78c..7adc16a9 100644 --- a/web/src/pages/Doc/zh/introduction/index.vue +++ b/web/src/pages/Doc/zh/introduction/index.vue @@ -283,6 +283,10 @@

风格

+
+ +

SR

+
From 2e5d17de160476879bba60dce6c2d253baf94a7e 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: Fri, 22 Mar 2024 09:03:00 +0800 Subject: [PATCH 06/24] update --- web/src/pages/Edit/components/Edit.vue | 171 +------------------------ 1 file changed, 3 insertions(+), 168 deletions(-) diff --git a/web/src/pages/Edit/components/Edit.vue b/web/src/pages/Edit/components/Edit.vue index 7f8605b1..0fae330d 100644 --- a/web/src/pages/Edit/components/Edit.vue +++ b/web/src/pages/Edit/components/Edit.vue @@ -46,7 +46,7 @@ import Painter from 'simple-mind-map/src/plugins/Painter.js' import ScrollbarPlugin from 'simple-mind-map/src/plugins/Scrollbar.js' import Formula from 'simple-mind-map/src/plugins/Formula.js' // 协同编辑插件 -import Cooperate from 'simple-mind-map/src/plugins/Cooperate.js' +// import Cooperate from 'simple-mind-map/src/plugins/Cooperate.js' // 手绘风格插件,该插件为付费插件,详情请查看开发文档 // import HandDrawnLikeStyle from 'simple-mind-map-plugin-handdrawnlikestyle' import OutlineSidebar from './OutlineSidebar' @@ -82,7 +82,6 @@ import handleClipboardText from '@/utils/handleClipboardText' import Scrollbar from './Scrollbar.vue' import exampleData from 'simple-mind-map/example/exampleData' import FormulaSidebar from './FormulaSidebar.vue' -import { isSameObject } from 'simple-mind-map/src/utils'; // 注册插件 MindMap.usePlugin(MiniMap) @@ -99,11 +98,7 @@ MindMap.usePlugin(MiniMap) .usePlugin(SearchPlugin) .usePlugin(Painter) .usePlugin(Formula) -.usePlugin(Cooperate) // 协同插件 - -const request = (data) => { - console.log(data) -} +// .usePlugin(Cooperate) // 协同插件 // 注册自定义主题 customThemeList.forEach(item => { @@ -310,7 +305,7 @@ export default { this.mindMap = new MindMap({ el: this.$refs.mindMapContainer, data: root, - fit: true, + fit: false, layout: layout, theme: theme.template, themeConfig: theme.config, @@ -353,150 +348,6 @@ export default { default: break } - }, - onlyOneEnableActiveNodeOnCooperate: true, - beforeCooperateUpdate: ({ type, list, data }) => { - const { title, userINumber } = this.$route.meta - // 所有节点数据 - const allData = data - // 创建或更新节点 - if (type === 'createOrUpdate') { - // 获取节点的父节点的uid - const getParentUid = uid => { - let res = null - Object.keys(allData).forEach(item => { - if (allData[item].children.includes(uid)) { - res = allData[item].data - } - }) - return res ? res.uid : '' - } - // 找出新创建的 - const crateList = list - .filter(({ oldData }) => { - return !oldData - }) - .map(({ uid }) => { - return uid - }) - // 遍历所有创建或更新的节点列表 - list.forEach(({ uid, data, oldData }) => { - // 更新版本号 - if (data.data.version === undefined) { - data.data.version = 0 - } - const newVersion = data.data.version + 1 - data.data.version = newVersion - const targetNode = this.mindMap.renderer.findNodeByUid(uid) - if (targetNode) { - targetNode.setData({ - version: newVersion - }) - } - // 调接口 - if (!oldData) { - // 新增节点 - request({ - url: `/addOneNode/${title}/${userINumber}`, - method: 'post', - data: { - parentNodeId: getParentUid(uid), - newNodeContent: JSON.stringify(data.data) - } - }) - } else { - // 更新节点 - const oldChildrenLength = oldData.children.length - const newChildrenLength = data.children.length - if (oldChildrenLength !== newChildrenLength) { - if (newChildrenLength > oldChildrenLength) { - const moveList = data.children.filter(item => { - return ( - !oldData.children.includes(item) && - !crateList.includes(item) - ) - }) - moveList.forEach(item => { - request({ - url: `/changeNodeParentNode/${title}/${userINumber}`, - method: 'post', - data: { - movedNodeId: item, - newParentNodeId: uid - } - }) - }) - } - } else { - if (!isSameObject(data.data, oldData.data)) { - // 关联线 - const associativeLineTargets = - data.data.associativeLineTargets || [] - const oldDataAssociativeLineTargets = - oldData.data.associativeLineTargets || [] - const newTargets = [] - const deleteTargets = [] - associativeLineTargets.forEach(item => { - if (!oldDataAssociativeLineTargets.includes(item)) { - newTargets.push(item) - } - }) - oldDataAssociativeLineTargets.forEach(item => { - if (!associativeLineTargets.includes(item)) { - deleteTargets.push(item) - } - }) - // 添加关联线 - if (newTargets.length > 0) { - newTargets.forEach(item => { - request({ - url: `/addAssociationLine/${title}/${userINumber}`, - method: 'post', - data: { - startNodeId: uid, - endNodeId: item - } - }) - }) - } else if (deleteTargets.length > 0) { - // 删除关联线 - deleteTargets.forEach(item => { - request({ - url: `/deleteAssociationLine/${title}/${userINumber}`, - method: 'post', - data: { - startNodeId: uid, - endNodeId: item - } - }) - }) - } else { - // 更新节点自身内容 - request({ - url: `/updateOneNodeContent/${title}/${userINumber}`, - method: 'post', - data: { - mindMapName: title, - nodeId: uid, - jsonContent: JSON.stringify(data.data) - } - }) - } - } - } - } - }) - } else if (type === 'delete') { - // 删除 - const res = this.getTopIdList(list) - request({ - url: `/deleteNodeList/${title}/${userINumber}`, - method: 'post', - data: { - idList: res - } - }) - } } // beforeShortcutRun: (key, activeNodeList) => { // console.log(key, activeNodeList) @@ -627,22 +478,6 @@ export default { // }, 5000) }, - // 获取被删除节点的顶层节点的uid列表 - getTopIdList(list) { - const res = [] - list.forEach((item) => { - const hasParent = list.find((item2) => { - return item2.data.children.includes(item.uid) - }) - if (!hasParent) { - res.push(item) - } - }) - return res.map((item) => { - return item.uid - }) - }, - // url中是否存在要打开的文件 hasFileURL() { const fileURL = this.$route.query.fileURL From bc6bf2f8f98beb2bb1adeb009c2b83cd72e42468 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: Fri, 22 Mar 2024 09:30:37 +0800 Subject: [PATCH 07/24] =?UTF-8?q?Feat=EF=BC=9A=E6=80=9D=E7=BB=B4=E5=AF=BC?= =?UTF-8?q?=E5=9B=BE=E5=AE=9E=E4=BE=8B=E5=A2=9E=E5=8A=A0=E5=A2=9E=E9=87=8F?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=94=BB=E5=B8=83=E6=95=B0=E6=8D=AE=E7=9A=84?= =?UTF-8?q?=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- simple-mind-map/index.js | 7 +++++++ simple-mind-map/src/plugins/Cooperate.js | 4 +--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/simple-mind-map/index.js b/simple-mind-map/index.js index 4e8ea9b0..5c985183 100644 --- a/simple-mind-map/index.js +++ b/simple-mind-map/index.js @@ -316,6 +316,13 @@ class MindMap { this.command.exec(...args) } + // 更新画布数据,如果新的数据是在当前画布节点数据基础上增删改查后形成的,那么可以使用该方法来更新画布数据 + updateData(data) { + this.renderer.setData(data) + this.render() + this.command.addHistory() + } + // 动态设置思维导图数据,纯节点数据 setData(data) { data = this.handleData(data) diff --git a/simple-mind-map/src/plugins/Cooperate.js b/simple-mind-map/src/plugins/Cooperate.js index 2f304d1d..ca09a2bf 100644 --- a/simple-mind-map/src/plugins/Cooperate.js +++ b/simple-mind-map/src/plugins/Cooperate.js @@ -120,9 +120,7 @@ class Cooperate { const res = transformObjectToTreeData(data) if (!res) return // 更新思维导图画布 - this.mindMap.renderer.setData(res) - this.mindMap.render() - this.mindMap.command.addHistory() + this.mindMap.updateData(res) } // 当前思维导图改变后的处理,触发同步 From c87c169dabbe7f21e3d6ab3ff2388c2c3212bf58 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: Mon, 25 Mar 2024 15:03:38 +0800 Subject: [PATCH 08/24] =?UTF-8?q?Feat=EF=BC=9A=E6=96=B0=E5=A2=9E=E5=BD=A9?= =?UTF-8?q?=E8=99=B9=E7=BA=BF=E6=9D=A1=E6=8F=92=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- simple-mind-map/full.js | 2 + .../src/constants/defaultOptions.js | 18 +++- simple-mind-map/src/core/render/node/Node.js | 8 ++ simple-mind-map/src/plugins/RainbowLines.js | 88 +++++++++++++++++++ 4 files changed, 115 insertions(+), 1 deletion(-) create mode 100644 simple-mind-map/src/plugins/RainbowLines.js diff --git a/simple-mind-map/full.js b/simple-mind-map/full.js index 51e1761d..e2f7a165 100644 --- a/simple-mind-map/full.js +++ b/simple-mind-map/full.js @@ -15,6 +15,7 @@ import Search from './src/plugins/Search.js' import Painter from './src/plugins/Painter.js' import Scrollbar from './src/plugins/Scrollbar.js' import Formula from './src/plugins/Formula.js' +import RainbowLines from './src/plugins/RainbowLines.js' import xmind from './src/parse/xmind.js' import markdown from './src/parse/markdown.js' import icons from './src/svg/icons.js' @@ -46,5 +47,6 @@ MindMap.usePlugin(MiniMap) .usePlugin(Painter) .usePlugin(Scrollbar) .usePlugin(Formula) + .usePlugin(RainbowLines) export default MindMap diff --git a/simple-mind-map/src/constants/defaultOptions.js b/simple-mind-map/src/constants/defaultOptions.js index da96e73f..fa1f8549 100644 --- a/simple-mind-map/src/constants/defaultOptions.js +++ b/simple-mind-map/src/constants/defaultOptions.js @@ -291,5 +291,21 @@ export const defaultOpt = { beforeCooperateUpdate: null, // 快捷键操作即将执行前的生命周期函数,返回true可以阻止操作执行 // 函数接收两个参数:key(快捷键)、activeNodeList(当前激活的节点列表) - beforeShortcutRun: null + beforeShortcutRun: null, + // 彩虹线条配置,需要先注册RainbowLines插件 + rainbowLinesConfig: { + open: false,// 是否开启彩虹线条 + colorsList: []// 自定义彩虹线条的颜色列表,如果不设置,会使用默认颜色列表 + /* + [ + 'rgb(255, 213, 73)', + 'rgb(255, 136, 126)', + 'rgb(107, 225, 141)', + 'rgb(151, 171, 255)', + 'rgb(129, 220, 242)', + 'rgb(255, 163, 125)', + 'rgb(152, 132, 234)' + ] + */ + } } diff --git a/simple-mind-map/src/core/render/node/Node.js b/simple-mind-map/src/core/render/node/Node.js index 5333aad9..09166261 100644 --- a/simple-mind-map/src/core/render/node/Node.js +++ b/simple-mind-map/src/core/render/node/Node.js @@ -916,6 +916,7 @@ class Node { childNode.getStyle('lineWidth', true) const color = childNode.getSelfInhertStyle('lineColor') || + this.getRainbowLineColor(childNode) || childNode.getStyle('lineColor', true) const dasharray = childNode.getSelfInhertStyle('lineDasharray') || @@ -932,6 +933,13 @@ class Node { ) } + // 获取彩虹线条颜色 + getRainbowLineColor(node) { + return this.mindMap.rainbowLines + ? this.mindMap.rainbowLines.getNodeColor(node) + : '' + } + // 移除连线 removeLine() { this._lines.forEach(line => { diff --git a/simple-mind-map/src/plugins/RainbowLines.js b/simple-mind-map/src/plugins/RainbowLines.js new file mode 100644 index 00000000..7e426612 --- /dev/null +++ b/simple-mind-map/src/plugins/RainbowLines.js @@ -0,0 +1,88 @@ +import { walk, getNodeDataIndex } from '../utils/index' + +const defaultColorsList = [ + 'rgb(255, 213, 73)', + 'rgb(255, 136, 126)', + 'rgb(107, 225, 141)', + 'rgb(151, 171, 255)', + 'rgb(129, 220, 242)', + 'rgb(255, 163, 125)', + 'rgb(152, 132, 234)' +] + +// 彩虹线条插件 +class RainbowLines { + constructor({ mindMap }) { + this.mindMap = mindMap + } + + // 更新彩虹线条配置 + updateRainLinesConfig(config = {}) { + const newConfig = this.mindMap.opt.rainbowLinesConfig || {} + newConfig.open = !!config.open + newConfig.colorsList = Array.isArray(config.colorsList) + ? config.colorsList + : [] + // 如果开启彩虹线条,那么先移除所有节点的自定义连线颜色配置 + if (this.mindMap.opt.rainbowLinesConfig.open) { + this.removeNodeLineColor() + } + this.mindMap.render() + } + + // 删除所有节点的连线颜色 + removeNodeLineColor() { + const tree = this.mindMap.renderer.renderTree + walk( + tree, + null, + cur => { + delete cur.data.lineColor + }, + null, + true + ) + this.mindMap.command.addHistory() + } + + // 获取一个节点的第二层级的祖先节点 + getSecondLayerAncestor(node) { + if (node.layerIndex === 1) { + return node + } else { + let res = null + let parent = node.parent + while (parent) { + if (parent.layerIndex === 1) { + return parent + } + parent = parent.parent + } + return res + } + } + + // 获取颜色列表 + getColorsList() { + const { rainbowLinesConfig } = this.mindMap.opt + return rainbowLinesConfig && + Array.isArray(rainbowLinesConfig.colorsList) && + rainbowLinesConfig.colorsList.length > 0 + ? rainbowLinesConfig.colorsList + : [...defaultColorsList] + } + + // 获取一个节点的彩虹线条颜色 + getNodeColor(node) { + const { rainbowLinesConfig } = this.mindMap.opt + if (!rainbowLinesConfig || !rainbowLinesConfig.open) return '' + const ancestor = this.getSecondLayerAncestor(node) + const index = getNodeDataIndex(ancestor) + const colorsList = this.getColorsList() + return colorsList[index % colorsList.length] + } +} + +RainbowLines.instanceName = 'rainbowLines' + +export default RainbowLines From 4614a87bdd87292c0054945aad338913d94b81ef 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: Mon, 25 Mar 2024 15:03:53 +0800 Subject: [PATCH 09/24] =?UTF-8?q?Demo=EF=BC=9A=E6=94=AF=E6=8C=81=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E5=BD=A9=E8=99=B9=E7=BA=BF=E6=9D=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/config/constant.js | 81 +++++++++++- web/src/config/zh.js | 4 +- web/src/lang/en_us.js | 4 +- web/src/lang/zh_cn.js | 4 +- web/src/pages/Edit/components/BaseStyle.vue | 137 +++++++++++++++++++- web/src/pages/Edit/components/Edit.vue | 2 + 6 files changed, 225 insertions(+), 7 deletions(-) diff --git a/web/src/config/constant.js b/web/src/config/constant.js index fa9e22e1..d47d5c48 100644 --- a/web/src/config/constant.js +++ b/web/src/config/constant.js @@ -57,7 +57,7 @@ export const themeMap = { dark4: require('../assets/img/themes/dark4.jpg'), cactus: require('../assets/img/themes/cactus.jpg'), classic6: require('../assets/img/themes/classic6.jpg'), - classic7: require('../assets/img/themes/classic7.jpg'), + classic7: require('../assets/img/themes/classic7.jpg') } // 公式列表 @@ -111,3 +111,82 @@ export const supportRootLineKeepSameInCurveLayouts = [ 'logicalStructure', 'mindMap' ] + +// 彩虹线条配置 +export const rainbowLinesOptions = [ + { + value: 'close' + }, + { + value: 'colors1', + list: [ + 'rgb(255, 213, 73)', + 'rgb(255, 136, 126)', + 'rgb(107, 225, 141)', + 'rgb(151, 171, 255)', + 'rgb(129, 220, 242)', + 'rgb(255, 163, 125)', + 'rgb(152, 132, 234)' + ] + }, + { + value: 'colors2', + list: [ + 'rgb(248, 93, 93)', + 'rgb(255, 151, 84)', + 'rgb(255, 214, 69)', + 'rgb(73, 205, 140)', + 'rgb(64, 192, 255)', + 'rgb(84, 110, 214)', + 'rgb(164, 93, 220)' + ] + }, + { + value: 'colors3', + list: [ + 'rgb(140, 240, 231)', + 'rgb(74, 210, 255)', + 'rgb(65, 168, 243)', + 'rgb(49, 128, 205)', + 'rgb(188, 226, 132)', + 'rgb(113, 215, 123)', + 'rgb(120, 191, 109)' + ] + }, + { + value: 'colors4', + list: [ + 'rgb(169, 98, 99)', + 'rgb(245, 125, 123)', + 'rgb(254, 183, 168)', + 'rgb(251, 218, 171)', + 'rgb(138, 163, 181)', + 'rgb(131, 127, 161)', + 'rgb(84, 83, 140)' + ] + }, + { + value: 'colors5', + list: [ + 'rgb(255, 229, 142)', + 'rgb(254, 158, 41)', + 'rgb(248, 119, 44)', + 'rgb(232, 82, 80)', + 'rgb(182, 66, 98)', + 'rgb(99, 54, 99)', + 'rgb(65, 40, 82)' + ] + }, + { + value: 'colors6', + list: [ + 'rgb(171, 227, 209)', + 'rgb(107, 201, 196)', + 'rgb(55, 170, 169)', + 'rgb(18, 135, 131)', + 'rgb(74, 139, 166)', + 'rgb(75, 105, 150)', + 'rgb(57, 75, 133)' + ] + } +] diff --git a/web/src/config/zh.js b/web/src/config/zh.js index c9ce9177..9daaef15 100644 --- a/web/src/config/zh.js +++ b/web/src/config/zh.js @@ -425,7 +425,7 @@ export const shortcutKeyList = [ icon: 'icondodeparent', name: '上移一个层级', value: 'Shift + Tab' - }, + } ] } ] @@ -582,4 +582,4 @@ export const downTypeList = [ icon: 'iconTXT', desc: '纯文本文件' } -] +] \ No newline at end of file diff --git a/web/src/lang/en_us.js b/web/src/lang/en_us.js index 28b40d6c..7f48c5dc 100644 --- a/web/src/lang/en_us.js +++ b/web/src/lang/en_us.js @@ -62,7 +62,9 @@ export default { isUseHandDrawnLikeStyle: 'Is use hand drawn like style', rootLineStartPos: 'Root line start pos', center: 'Center', - right: 'Right' + right: 'Right', + rainbowLines: 'Rainbow lines', + notUseRainbowLines: 'Not use rainbow lines' }, color: { moreColor: 'More color' diff --git a/web/src/lang/zh_cn.js b/web/src/lang/zh_cn.js index fa7458c6..09ca7cad 100644 --- a/web/src/lang/zh_cn.js +++ b/web/src/lang/zh_cn.js @@ -62,7 +62,9 @@ export default { isUseHandDrawnLikeStyle: '是否开启手绘风格', rootLineStartPos: '根节点连线起始位置', center: '中心', - right: '右侧' + right: '右侧', + rainbowLines: '彩虹线条', + notUseRainbowLines: '不使用彩虹线条' }, color: { moreColor: '更多颜色' diff --git a/web/src/pages/Edit/components/BaseStyle.vue b/web/src/pages/Edit/components/BaseStyle.vue index 3fc5be0c..25265f29 100644 --- a/web/src/pages/Edit/components/BaseStyle.vue +++ b/web/src/pages/Edit/components/BaseStyle.vue @@ -273,6 +273,50 @@ > + +
{{ $t('baseStyle.rainbowLines') }}
+
+
+ +
+
+
+ +
+ {{ + $t('baseStyle.notUseRainbowLines') + }} +
+
+
+
+ +
+ {{ $t('baseStyle.notUseRainbowLines') }} +
+
+
+
{{ $t('baseStyle.lineOfOutline') }}
@@ -914,7 +958,8 @@ import { supportLineStyleLayoutsMap, supportLineRadiusLayouts, supportNodeUseLineStyleLayouts, - supportRootLineKeepSameInCurveLayouts + supportRootLineKeepSameInCurveLayouts, + rainbowLinesOptions } from '@/config/constant' /** @@ -940,6 +985,7 @@ export default { }, data() { return { + rainbowLinesOptions, lineWidthList, fontSizeList, activeTab: 'color', @@ -994,6 +1040,8 @@ export default { fontSize: 1 } }, + rainbowLinesPopoverVisible: false, + curRainbowLineColorList: null, updateWatermarkTimer: null, enableNodeRichText: true, localConfigs: { @@ -1069,6 +1117,7 @@ export default { this.initStyle() this.initConfig() this.initWatermark() + this.initRainbowLines() this.currentLayout = this.mindMap.getLayout() } else { this.$refs.sidebar.show = false @@ -1180,6 +1229,16 @@ export default { this.watermarkConfig.textStyle = { ...config.textStyle } }, + // 初始化彩虹线条配置 + initRainbowLines() { + const config = this.mindMap.getConfig('rainbowLinesConfig') || {} + this.curRainbowLineColorList = config.open + ? this.mindMap.rainbowLines + ? this.mindMap.rainbowLines.getColorsList() + : null + : null + }, + /** * @Author: 王林 * @Date: 2021-07-03 22:27:32 @@ -1245,6 +1304,29 @@ export default { }, 300) }, + // 更新彩虹线条配置 + updateRainbowLinesConfig(item) { + this.rainbowLinesPopoverVisible = false + this.curRainbowLineColorList = item.list || null + this.data.config = this.data.config || {} + let newConfig = null + if (item.list) { + newConfig = { + open: true, + colorsList: item.list + } + } else { + newConfig = { + open: false + } + } + this.data.config.rainbowLinesConfig = newConfig + this.mindMap.rainbowLines.updateRainLinesConfig(newConfig) + storeConfig({ + config: this.data.config + }) + }, + // 设置margin updateMargin(type, value) { this.style[type] = value @@ -1303,7 +1385,8 @@ export default { .row { .rowItem { - .name { + .name, + .curRainbowLine { color: hsla(0, 0%, 100%, 0.6); } } @@ -1365,6 +1448,17 @@ export default { border-radius: 4px; cursor: pointer; } + + .curRainbowLine { + height: 24px; + border: 1px solid #dcdfe6; + font-size: 12px; + width: 240px; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + } } .styleBtn { @@ -1437,4 +1531,43 @@ export default { } } } + +.rainbowLinesOptionsBox { + width: 200px; + + &.isDark { + .optionItem { + color: hsla(0, 0%, 100%, 0.6); + + &:hover { + background-color: hsla(0, 0%, 100%, 0.05); + } + } + } + + .optionItem { + width: 100%; + height: 30px; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + + &:hover { + background-color: #f5f7fa; + } + } +} + +.colorsBar { + display: flex; + width: 100%; + height: 100%; + align-items: center; + + .colorItem { + flex: 1; + height: 15px; + } +} diff --git a/web/src/pages/Edit/components/Edit.vue b/web/src/pages/Edit/components/Edit.vue index 0fae330d..205b8208 100644 --- a/web/src/pages/Edit/components/Edit.vue +++ b/web/src/pages/Edit/components/Edit.vue @@ -45,6 +45,7 @@ import SearchPlugin from 'simple-mind-map/src/plugins/Search.js' import Painter from 'simple-mind-map/src/plugins/Painter.js' import ScrollbarPlugin from 'simple-mind-map/src/plugins/Scrollbar.js' import Formula from 'simple-mind-map/src/plugins/Formula.js' +import RainbowLines from 'simple-mind-map/src/plugins/RainbowLines.js' // 协同编辑插件 // import Cooperate from 'simple-mind-map/src/plugins/Cooperate.js' // 手绘风格插件,该插件为付费插件,详情请查看开发文档 @@ -98,6 +99,7 @@ MindMap.usePlugin(MiniMap) .usePlugin(SearchPlugin) .usePlugin(Painter) .usePlugin(Formula) + .usePlugin(RainbowLines) // .usePlugin(Cooperate) // 协同插件 // 注册自定义主题 From 8b68b1fc4849a21180ac2dfa2978155bcb83aee2 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: Mon, 25 Mar 2024 15:13:28 +0800 Subject: [PATCH 10/24] =?UTF-8?q?Feat=EF=BC=9A=E8=8A=82=E7=82=B9=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=E5=9B=BE=E6=A0=87=E6=B7=BB=E5=8A=A0=E9=BC=A0=E6=A0=87?= =?UTF-8?q?=E7=A7=BB=E5=85=A5=E5=92=8C=E7=A7=BB=E5=87=BA=E4=BA=8B=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- simple-mind-map/src/core/render/node/nodeCreateContents.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/simple-mind-map/src/core/render/node/nodeCreateContents.js b/simple-mind-map/src/core/render/node/nodeCreateContents.js index 81a07606..56855947 100644 --- a/simple-mind-map/src/core/render/node/nodeCreateContents.js +++ b/simple-mind-map/src/core/render/node/nodeCreateContents.js @@ -94,6 +94,12 @@ function createIconNode() { node.on('click', e => { this.mindMap.emit('node_icon_click', this, item, e) }) + node.on('mouseenter', e => { + this.mindMap.emit('node_icon_mouseenter', this, item, e) + }) + node.on('mouseleave', e => { + this.mindMap.emit('node_icon_mouseleave', this, item, e) + }) return { node, width: iconSize, From 3b4195acc57919858adde7be6a8205856018746a 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: Mon, 25 Mar 2024 15:38:19 +0800 Subject: [PATCH 11/24] =?UTF-8?q?Feat=EF=BC=9A=E8=8A=82=E7=82=B9=E5=AE=9E?= =?UTF-8?q?=E4=BE=8B=E6=96=B0=E5=A2=9EgetAncestorNodes=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E7=94=A8=E4=BA=8E=E8=8E=B7=E5=8F=96=E7=A5=96=E5=85=88=E8=8A=82?= =?UTF-8?q?=E7=82=B9=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- simple-mind-map/src/core/render/node/Node.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/simple-mind-map/src/core/render/node/Node.js b/simple-mind-map/src/core/render/node/Node.js index 09166261..80863b74 100644 --- a/simple-mind-map/src/core/render/node/Node.js +++ b/simple-mind-map/src/core/render/node/Node.js @@ -1047,6 +1047,17 @@ class Node { return copyNodeTree({}, this, removeActiveState, removeId) } + // 获取祖先节点列表 + getAncestorNodes() { + const list = [] + let parent = this.parent + while (parent) { + list.unshift(parent) + parent = parent.parent + } + return list + } + // 是否存在自定义样式 hasCustomStyle() { return this.style.hasCustomStyle() From 7c6b67e8fbba8b3606511861b1d1408014c8838d 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: Mon, 25 Mar 2024 18:08:59 +0800 Subject: [PATCH 12/24] =?UTF-8?q?Feat=EF=BC=9A=E5=8D=8F=E5=90=8C=E7=BC=96?= =?UTF-8?q?=E8=BE=91=E6=97=B6=E7=9A=84=E4=BA=BA=E5=91=98=E5=A4=B4=E5=83=8F?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=BC=A0=E6=A0=87=E4=BA=8B=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- simple-mind-map/src/core/render/node/nodeCooperate.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/simple-mind-map/src/core/render/node/nodeCooperate.js b/simple-mind-map/src/core/render/node/nodeCooperate.js index f2ab9c8d..72aa6e88 100644 --- a/simple-mind-map/src/core/render/node/nodeCooperate.js +++ b/simple-mind-map/src/core/render/node/nodeCooperate.js @@ -67,6 +67,15 @@ function updateUserListNode() { } else { node = this.createTextAvatar(item) } + node.on('click', (e) => { + this.mindMap.emit('node_cooperate_avatar_click', item, this, node, e) + }) + node.on('mouseenter', (e) => { + this.mindMap.emit('node_cooperate_avatar_mouseenter', item, this, node, e) + }) + node.on('mouseleave', (e) => { + this.mindMap.emit('node_cooperate_avatar_mouseleave', item, this, node, e) + }) node.x(index * avatarSize).cy(-avatarSize / 2) this._userListGroup.add(node) }) From 3243e366b082f99b75bd4921078f2cc02d65c88d 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 10:43:26 +0800 Subject: [PATCH 13/24] Doc: update --- README.md | 4 + simple-mind-map/package.json | 2 +- .../core/render/node/nodeCreateContents.js | 6 +- web/src/assets/avatar/逆水行舟.jpg | Bin 0 -> 65371 bytes web/src/pages/Doc/catalogList.js | 3 +- web/src/pages/Doc/en/changelog/index.md | 30 +++ web/src/pages/Doc/en/changelog/index.vue | 21 ++ web/src/pages/Doc/en/constructor/index.md | 15 +- web/src/pages/Doc/en/constructor/index.vue | 46 +++- web/src/pages/Doc/en/introduction/index.md | 4 + web/src/pages/Doc/en/introduction/index.vue | 4 + web/src/pages/Doc/en/node/index.md | 6 + web/src/pages/Doc/en/node/index.vue | 5 + web/src/pages/Doc/en/rainbowLines/index.md | 56 ++++ web/src/pages/Doc/en/rainbowLines/index.vue | 52 ++++ web/src/pages/Doc/routerList.js | 3 + web/src/pages/Doc/zh/changelog/index.md | 30 +++ web/src/pages/Doc/zh/changelog/index.vue | 21 ++ web/src/pages/Doc/zh/constructor/index.md | 16 +- web/src/pages/Doc/zh/constructor/index.vue | 44 ++- web/src/pages/Doc/zh/course26/index.md | 255 ++++++++++++++++++ web/src/pages/Doc/zh/course26/index.vue | 223 +++++++++++++++ web/src/pages/Doc/zh/introduction/index.md | 4 + web/src/pages/Doc/zh/introduction/index.vue | 4 + web/src/pages/Doc/zh/node/index.md | 6 + web/src/pages/Doc/zh/node/index.vue | 5 + web/src/pages/Doc/zh/rainbowLines/index.md | 56 ++++ web/src/pages/Doc/zh/rainbowLines/index.vue | 52 ++++ 28 files changed, 964 insertions(+), 9 deletions(-) create mode 100644 web/src/assets/avatar/逆水行舟.jpg create mode 100644 web/src/pages/Doc/en/rainbowLines/index.md create mode 100644 web/src/pages/Doc/en/rainbowLines/index.vue create mode 100644 web/src/pages/Doc/zh/course26/index.md create mode 100644 web/src/pages/Doc/zh/course26/index.vue create mode 100644 web/src/pages/Doc/zh/rainbowLines/index.md create mode 100644 web/src/pages/Doc/zh/rainbowLines/index.vue diff --git a/README.md b/README.md index 9ab63dbe..873f64c9 100644 --- a/README.md +++ b/README.md @@ -306,4 +306,8 @@ const mindMap = new MindMap({ SR + + + 逆水行舟 +

diff --git a/simple-mind-map/package.json b/simple-mind-map/package.json index 00fc8d09..5794e6ac 100644 --- a/simple-mind-map/package.json +++ b/simple-mind-map/package.json @@ -1,6 +1,6 @@ { "name": "simple-mind-map", - "version": "0.9.8", + "version": "0.9.9", "description": "一个简单的web在线思维导图", "authors": [ { diff --git a/simple-mind-map/src/core/render/node/nodeCreateContents.js b/simple-mind-map/src/core/render/node/nodeCreateContents.js index 56855947..8fe5f3c7 100644 --- a/simple-mind-map/src/core/render/node/nodeCreateContents.js +++ b/simple-mind-map/src/core/render/node/nodeCreateContents.js @@ -92,13 +92,13 @@ function createIconNode() { } node.size(iconSize, iconSize) node.on('click', e => { - this.mindMap.emit('node_icon_click', this, item, e) + this.mindMap.emit('node_icon_click', this, item, e, node) }) node.on('mouseenter', e => { - this.mindMap.emit('node_icon_mouseenter', this, item, e) + this.mindMap.emit('node_icon_mouseenter', this, item, e, node) }) node.on('mouseleave', e => { - this.mindMap.emit('node_icon_mouseleave', this, item, e) + this.mindMap.emit('node_icon_mouseleave', this, item, e, node) }) return { node, diff --git a/web/src/assets/avatar/逆水行舟.jpg b/web/src/assets/avatar/逆水行舟.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e8ad08daad62a9d5bb6a0daa484b5748f2ca16b5 GIT binary patch literal 65371 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μ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 OO?$0a`m(aWC;txt$kCku literal 0 HcmV?d00001 diff --git a/web/src/pages/Doc/catalogList.js b/web/src/pages/Doc/catalogList.js index e3b24d5d..0c244d17 100644 --- a/web/src/pages/Doc/catalogList.js +++ b/web/src/pages/Doc/catalogList.js @@ -11,7 +11,7 @@ let langList = [ } ] let StartList = ['introduction', 'start', 'deploy', 'client', 'translate', 'changelog'] -let CourseList = new Array(25).fill(0).map((_, index) => { +let CourseList = new Array(26).fill(0).map((_, index) => { return 'course' + (index + 1) }) let APIList = [ @@ -38,6 +38,7 @@ let APIList = [ 'scrollbar', 'formula', 'cooperate', + 'rainbowLines', 'handDrawnLikeStyle', 'xmind', 'markdown', diff --git a/web/src/pages/Doc/en/changelog/index.md b/web/src/pages/Doc/en/changelog/index.md index f7ab214f..c359db7f 100644 --- a/web/src/pages/Doc/en/changelog/index.md +++ b/web/src/pages/Doc/en/changelog/index.md @@ -1,5 +1,35 @@ # Changelog +## 0.9.9 + +New: + +> 1.Support inserting child nodes with the insert key; +> +> 2.Add the beforeShortcutRun instantiation option to intercept shortcut key operations; +> +> 3.The method of incrementally updating canvas data by adding root instances, updateData; +> +> 4.Add a rainbow line plugin; +> +> 5.Add mouse in and out events to icons in nodes; +> +> 6.Add the getAncestorNodes method to the node instance to obtain the list of ancestor nodes; +> +> 7.Adding mouse events to personnel avatars during collaborative editing; + +Demo: + +> 1.Support configuration of rainbow lines; + +Client: + +> 1.Double click the file to open the application without opening the workbench page; +> +> 2.Fix the issue of multiple editing windows opening when repeatedly opening the same file; +> +> 3.Prompt for modifying and deleting files being edited; + ## 0.9.8 Fix: diff --git a/web/src/pages/Doc/en/changelog/index.vue b/web/src/pages/Doc/en/changelog/index.vue index d1372116..954c91a3 100644 --- a/web/src/pages/Doc/en/changelog/index.vue +++ b/web/src/pages/Doc/en/changelog/index.vue @@ -1,6 +1,27 @@ diff --git a/web/src/pages/Doc/en/node/index.md b/web/src/pages/Doc/en/node/index.md index c2a9f911..e388a0d3 100644 --- a/web/src/pages/Doc/en/node/index.md +++ b/web/src/pages/Doc/en/node/index.md @@ -56,6 +56,12 @@ Whether the node is currently being dragged ## Methods +### getAncestorNodes() + +> v0.9.9+ + +Obtain a list of ancestor node instances. + ### highlight() > v0.9.8+ diff --git a/web/src/pages/Doc/en/node/index.vue b/web/src/pages/Doc/en/node/index.vue index ad61c2ec..3c534942 100644 --- a/web/src/pages/Doc/en/node/index.vue +++ b/web/src/pages/Doc/en/node/index.vue @@ -31,6 +31,11 @@

Whether the node is currently being dragged

Methods

+

getAncestorNodes()

+
+

v0.9.9+

+
+

Obtain a list of ancestor node instances.

highlight()

v0.9.8+

diff --git a/web/src/pages/Doc/en/rainbowLines/index.md b/web/src/pages/Doc/en/rainbowLines/index.md new file mode 100644 index 00000000..c9c5d0cb --- /dev/null +++ b/web/src/pages/Doc/en/rainbowLines/index.md @@ -0,0 +1,56 @@ +# RainbowLines plugin + +> v0.9.9+ + +This plugin is used to implement rainbow lines. + +Enabling rainbow lines and custom colors can be set through the instantiation option 'rainbowLinesConfig'. + +The default color list is as follows: + +``` +[ + 'rgb(255, 213, 73)', + 'rgb(255, 136, 126)', + 'rgb(107, 225, 141)', + 'rgb(151, 171, 255)', + 'rgb(129, 220, 242)', + 'rgb(255, 163, 125)', + 'rgb(152, 132, 234)' +] +``` + +## Register + +```js +import MindMap from 'simple-mind-map' +import RainbowLines from 'simple-mind-map/src/plugins/RainbowLines.js' +MindMap.usePlugin(RainbowLines) +``` + +After registration and instantiation of `MindMap`, the instance can be obtained through `mindMap.rainbowLines`. + +## Method + +### updateRainLinesConfig(config = {}) + +If you want to modify the rainbow lines after setting them through the instantiation option 'rainbowLinesConfig', you can use this method, option `config` is same with `rainbowLinesConfig`。 + +```js +{ + open: false,// Is turn on rainbow lines + colorsList: []// Customize the color list for rainbow lines. If not set, the default color list will be used +} +``` + +### getColorsList() + +Get a list of currently used rainbow line colors. + +### getNodeColor(node) + +Retrieve the rainbow line color corresponding to the specified node instance. + +### getSecondLayerAncestor(node) + +Retrieve the second level ancestor node instance of a node instance. \ No newline at end of file diff --git a/web/src/pages/Doc/en/rainbowLines/index.vue b/web/src/pages/Doc/en/rainbowLines/index.vue new file mode 100644 index 00000000..1bfe0b3a --- /dev/null +++ b/web/src/pages/Doc/en/rainbowLines/index.vue @@ -0,0 +1,52 @@ + + + + + \ No newline at end of file diff --git a/web/src/pages/Doc/routerList.js b/web/src/pages/Doc/routerList.js index c726acfe..74bf8993 100644 --- a/web/src/pages/Doc/routerList.js +++ b/web/src/pages/Doc/routerList.js @@ -32,6 +32,7 @@ export default [ { path: 'course23', title: '如何渲染滚动条' }, { path: 'course24', title: '如何开发一个插件' }, { path: 'course25', title: '关于概要' }, + { path: 'course26', title: '如何实现AI生成节点内容' }, { path: 'doExport', title: 'Export 插件' }, { path: 'drag', title: 'Drag插件' }, { path: 'introduction', title: '简介' }, @@ -60,6 +61,7 @@ export default [ { path: 'scrollbar', title: 'Scrollbar插件' }, { path: 'formula', title: 'Formula插件' }, { path: 'cooperate', title: 'Cooperate插件' }, + { path: 'rainbowLines', title: 'RainbowLines插件' }, { path: 'handDrawnLikeStyle', title: 'HandDrawnLikeStyle收费插件' }, { path: 'help1', title: '概要/关联线' }, { path: 'help2', title: '客户端' }, @@ -102,6 +104,7 @@ export default [ { path: 'scrollbar', title: 'Scrollbar plugin' }, { path: 'formula', title: 'Formula plugin' }, { path: 'cooperate', title: 'Cooperate plugin' }, + { path: 'rainbowLines', title: 'RainbowLines plugin' }, { path: 'handDrawnLikeStyle', title: 'HandDrawnLikeStyle chargeable plugin' }, { path: 'client', title: 'Client' } ] diff --git a/web/src/pages/Doc/zh/changelog/index.md b/web/src/pages/Doc/zh/changelog/index.md index 4d6cb5c5..5438ce89 100644 --- a/web/src/pages/Doc/zh/changelog/index.md +++ b/web/src/pages/Doc/zh/changelog/index.md @@ -1,5 +1,35 @@ # Changelog +## 0.9.9 + +新增: + +> 1.支持insert键插入下级节点; +> +> 2.增加beforeShortcutRun实例化选项用于拦截快捷键操作; +> +> 3.根实例增加增量更新画布数据的方法updateData; +> +> 4.新增彩虹线条插件; +> +> 5.节点中的图标添加鼠标移入和移出事件; +> +> 6.节点实例新增getAncestorNodes方法用于获取祖先节点列表; +> +> 7.协同编辑时的人员头像增加鼠标事件; + +Demo: + +> 1.支持配置彩虹线条; + +客户端: + +> 1.双击文件打开应用时不打开工作台页面; +> +> 2.修复重复打开同一个文件会打开多个编辑窗口的问题; +> +> 3.修改删除正在编辑的文件的提示; + ## 0.9.8 修复: diff --git a/web/src/pages/Doc/zh/changelog/index.vue b/web/src/pages/Doc/zh/changelog/index.vue index 34b1bf0c..38240597 100644 --- a/web/src/pages/Doc/zh/changelog/index.vue +++ b/web/src/pages/Doc/zh/changelog/index.vue @@ -1,6 +1,27 @@