From 0d79e28ec964088080783bd6c7a3a0c3b49432ae Mon Sep 17 00:00:00 2001 From: wanglin2 <1013335014@qq.com> Date: Mon, 9 May 2022 14:24:11 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8A=82=E7=82=B9=E5=A4=87=E6=B3=A8=E6=94=AF?= =?UTF-8?q?=E6=8C=81markdown=E5=8F=8A=E5=AF=8C=E6=96=87=E6=9C=AC=E3=80=81?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=8D=E8=83=BD=E9=80=89=E4=B8=AD=E6=96=87?= =?UTF-8?q?=E5=AD=97=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- simple-mind-map/index.js | 10 ++- simple-mind-map/src/Drag.js | 2 + simple-mind-map/src/Event.js | 4 +- simple-mind-map/src/Node.js | 42 +++++++----- web/package.json | 1 + web/src/pages/Edit/components/Edit.vue | 11 ++++ web/src/pages/Edit/components/NodeNote.vue | 32 ++++++++- .../Edit/components/NodeNoteContentShow.vue | 66 +++++++++++++++++++ 9 files changed, 147 insertions(+), 23 deletions(-) create mode 100644 web/src/pages/Edit/components/NodeNoteContentShow.vue diff --git a/README.md b/README.md index d2907fb2..f1d16e25 100644 --- a/README.md +++ b/README.md @@ -105,7 +105,7 @@ const mindMap = new MindMap({ | textContentMargin | Number | 2 | 节点里各种文字信息的间距,如图标和文字的间距 | | | selectTranslateStep | Number | 3 | 多选节点时鼠标移动到边缘时的画布移动偏移量 | | | selectTranslateLimit | Number | 20 | 多选节点时鼠标移动距边缘多少距离时开始偏移 | | - +| customNoteContentShow(v0.1.6+) | Object | null | 自定义节点备注内容显示,Object类型,结构为:{show: (noteContent, left, top) => {// 你的显示节点备注逻辑 }, hide: () => {// 你的隐藏节点备注逻辑 }} | | ### 实例方法: diff --git a/simple-mind-map/index.js b/simple-mind-map/index.js index 8d163859..662bd270 100644 --- a/simple-mind-map/index.js +++ b/simple-mind-map/index.js @@ -40,7 +40,15 @@ const defaultOpt = { // 多选节点时鼠标移动到边缘时的画布移动偏移量 selectTranslateStep: 3, // 多选节点时鼠标移动距边缘多少距离时开始偏移 - selectTranslateLimit: 20 + selectTranslateLimit: 20, + // 自定义节点备注内容显示 + customNoteContentShow: null + /* + { + show(){}, + hide(){} + } + */ } /** diff --git a/simple-mind-map/src/Drag.js b/simple-mind-map/src/Drag.js index 2b48dd58..96ed44b4 100644 --- a/simple-mind-map/src/Drag.js +++ b/simple-mind-map/src/Drag.js @@ -74,6 +74,7 @@ class Drag extends Base { if (e.which !== 1 || node.isRoot) { return } + e.preventDefault() // 计算鼠标按下的位置距离节点左上角的距离 this.drawTransform = this.mindMap.draw.transform() let { @@ -98,6 +99,7 @@ class Drag extends Base { if (!this.isMousedown) { return } + e.preventDefault() let { x, y diff --git a/simple-mind-map/src/Event.js b/simple-mind-map/src/Event.js index a11197c3..f11b391b 100644 --- a/simple-mind-map/src/Event.js +++ b/simple-mind-map/src/Event.js @@ -111,7 +111,7 @@ class Event extends EventEmitter { * @Desc: 鼠标按下事件 */ onMousedown(e) { - e.preventDefault() + // e.preventDefault() // 鼠标左键 if (e.which === 1) { this.isLeftMousedown = true @@ -128,7 +128,7 @@ class Event extends EventEmitter { * @Desc: 鼠标移动事件 */ onMousemove(e) { - e.preventDefault() + // e.preventDefault() this.mousemovePos.x = e.clientX this.mousemovePos.y = e.clientY this.mousemoveOffset.x = e.clientX - this.mousedownPos.x diff --git a/simple-mind-map/src/Node.js b/simple-mind-map/src/Node.js index 0e3700f5..742e0023 100644 --- a/simple-mind-map/src/Node.js +++ b/simple-mind-map/src/Node.js @@ -445,27 +445,37 @@ class Node { this.style.iconNode(iconNode) node.add(iconNode) // 备注tooltip - if (!this.noteEl) { - this.noteEl = document.createElement('div') - this.noteEl.style.cssText = ` - position: absolute; - padding: 10px; - border-radius: 5px; - box-shadow: 0 2px 5px rgb(0 0 0 / 10%); - display: none; - background-color: #fff; - ` + if (!this.mindMap.opt.customNoteContentShow) { + if (!this.noteEl) { + this.noteEl = document.createElement('div') + this.noteEl.style.cssText = ` + position: absolute; + padding: 10px; + border-radius: 5px; + box-shadow: 0 2px 5px rgb(0 0 0 / 10%); + display: none; + background-color: #fff; + ` + document.body.appendChild(this.noteEl) + } + this.noteEl.innerText = this.nodeData.data.note } - this.noteEl.innerText = this.nodeData.data.note - document.body.appendChild(this.noteEl) node.on('mouseover', () => { let { left, top } = node.node.getBoundingClientRect() - this.noteEl.style.left = left + 'px' - this.noteEl.style.top = top + iconSize + 'px' - this.noteEl.style.display = 'block' + if (!this.mindMap.opt.customNoteContentShow) { + this.noteEl.style.left = left + 'px' + this.noteEl.style.top = top + iconSize + 'px' + this.noteEl.style.display = 'block' + } else { + this.mindMap.opt.customNoteContentShow.show(this.nodeData.data.note, left, top + iconSize) + } }) node.on('mouseout', () => { - this.noteEl.style.display = 'none' + if (!this.mindMap.opt.customNoteContentShow) { + this.noteEl.style.display = 'none' + } else { + this.mindMap.opt.customNoteContentShow.hide() + } }) return { node, diff --git a/web/package.json b/web/package.json index 54b893ec..60278536 100644 --- a/web/package.json +++ b/web/package.json @@ -8,6 +8,7 @@ "lint": "vue-cli-service lint" }, "dependencies": { + "@toast-ui/editor": "^3.1.5", "core-js": "^3.6.5", "element-ui": "^2.15.1", "vue": "^2.6.11", diff --git a/web/src/pages/Edit/components/Edit.vue b/web/src/pages/Edit/components/Edit.vue index ca3ff7d2..878b9283 100644 --- a/web/src/pages/Edit/components/Edit.vue +++ b/web/src/pages/Edit/components/Edit.vue @@ -10,6 +10,7 @@ + @@ -24,6 +25,7 @@ import Count from './Count' import NavigatorToolbar from './NavigatorToolbar' import ShortcutKey from './ShortcutKey' import Contextmenu from './Contextmenu' +import NodeNoteContentShow from './NodeNoteContentShow.vue' import { getData, storeData, storeConfig } from '@/api' /** @@ -43,6 +45,7 @@ export default { NavigatorToolbar, ShortcutKey, Contextmenu, + NodeNoteContentShow }, data() { return { @@ -173,6 +176,14 @@ export default { theme: theme.template, themeConfig: theme.config, viewData: view, + customNoteContentShow: { + show: (content, left, top) => { + this.$bus.$emit('showNoteContent', content, left, top); + }, + hide: () => { + this.$bus.$emit('hideNoteContent'); + } + } }) this.mindMap.keyCommand.addShortcut('Control+s', () => { this.manualSave() diff --git a/web/src/pages/Edit/components/NodeNote.vue b/web/src/pages/Edit/components/NodeNote.vue index a1cb0f0f..14372bf8 100644 --- a/web/src/pages/Edit/components/NodeNote.vue +++ b/web/src/pages/Edit/components/NodeNote.vue @@ -5,14 +5,15 @@ :visible.sync="dialogVisible" width="500" > - - -
换行请使用:Enter+Shift
+ --> +
+ 取 消 确 定 @@ -21,6 +22,9 @@ + +