From efebe3f0944e6a4876b20f1572d3e299ed9014f6 Mon Sep 17 00:00:00 2001 From: wanglin25 Date: Sat, 19 Jun 2021 14:04:05 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 +- README.md | 37 +- docs/assets/swdt.jpg | Bin 0 -> 259691 bytes docs/web思维导图实现的技术点分析.md | 93 +++ .../mind-map => simple-mind-map}/.DS_Store | Bin .../example/exampleData.js | 0 .../mind-map => simple-mind-map}/index.js | 357 ++++---- simple-mind-map/package.json | 11 + .../src/Command.js | 2 +- .../mind-map => simple-mind-map}/src/Event.js | 296 +++---- .../src/KeyCommand.js | 0 .../mind-map => simple-mind-map}/src/Node.js | 776 +++++++++--------- .../src/Render.js | 429 ++++------ .../mind-map => simple-mind-map}/src/Style.js | 0 simple-mind-map/src/TextEdit.js | 117 +++ .../mind-map => simple-mind-map}/src/View.js | 172 ++-- .../src/layouts/Base.js | 14 +- simple-mind-map/src/layouts/BubbleChart.js | 186 +++++ .../src/layouts/CatalogOrganization.js | 270 ++++++ simple-mind-map/src/layouts/Fishbone.js | 376 +++++++++ .../src/layouts/LogicalStructure.js | 8 +- simple-mind-map/src/layouts/MindMap.js | 195 +++++ .../src/layouts/OrganizationStructure.js | 183 +++++ simple-mind-map/src/layouts/Structure.js | 11 + .../src/svg/btns.js | 0 .../src/themes/blueSky.js | 0 .../src/themes/brainImpairedPink.js | 0 .../src/themes/classic.js | 0 .../src/themes/classic2.js | 0 .../src/themes/classic3.js | 0 .../src/themes/dark.js | 0 .../src/themes/default.js | 0 .../src/themes/earthYellow.js | 0 .../src/themes/freshGreen.js | 0 .../src/themes/freshRed.js | 0 .../src/themes/index.js | 0 .../src/themes/romanticPurple.js | 0 .../src/utils/index.js | 266 +++--- .../src/utils/keyMap.js | 0 src/package/.DS_Store | Bin 6148 -> 0 bytes src/pages/Index/Index.vue | 13 - src/store.js | 68 -- .DS_Store => web/.DS_Store | Bin babel.config.js => web/babel.config.js | 0 package.json => web/package.json | 2 - {public => web/public}/index.html | 2 - {src => web/src}/.DS_Store | Bin {src => web/src}/App.vue | 0 {src => web/src}/assets/.DS_Store | Bin {src => web/src}/assets/icon-font/.DS_Store | Bin {src => web/src}/assets/icon-font/demo.css | 0 .../src}/assets/icon-font/demo_index.html | 0 .../src}/assets/icon-font/iconfont.css | 0 {src => web/src}/assets/icon-font/iconfont.js | 0 .../src}/assets/icon-font/iconfont.json | 0 .../src}/assets/icon-font/iconfont.ttf | Bin .../src}/assets/icon-font/iconfont.woff | Bin .../src}/assets/icon-font/iconfont.woff2 | Bin .../src}/components/ImgUpload/index.vue | 20 +- .../src}/components/ImgUpload/style.less | 0 {src => web/src}/config/index.js | 0 {src => web/src}/main.js | 0 {src => web/src}/pages/Edit/Index.vue | 0 .../src}/pages/Edit/components/BaseStyle.vue | 0 .../src}/pages/Edit/components/Color.vue | 0 .../src}/pages/Edit/components/Edit.vue | 62 +- .../src}/pages/Edit/components/NodeIcon.vue | 0 .../src}/pages/Edit/components/NodeImage.vue | 0 .../src}/pages/Edit/components/Outline.vue | 0 .../src}/pages/Edit/components/Sidebar.vue | 0 .../src}/pages/Edit/components/Style.vue | 0 .../src}/pages/Edit/components/Toolbar.vue | 0 {src => web/src}/router.js | 5 +- web/src/store.js | 46 ++ {src => web/src}/utils/index.js | 0 vue.config.js => web/vue.config.js | 0 76 files changed, 2675 insertions(+), 1344 deletions(-) create mode 100644 docs/assets/swdt.jpg create mode 100644 docs/web思维导图实现的技术点分析.md rename {src/package/mind-map => simple-mind-map}/.DS_Store (100%) rename {src/package/mind-map => simple-mind-map}/example/exampleData.js (100%) rename {src/package/mind-map => simple-mind-map}/index.js (90%) create mode 100644 simple-mind-map/package.json rename {src/package/mind-map => simple-mind-map}/src/Command.js (96%) rename {src/package/mind-map => simple-mind-map}/src/Event.js (96%) rename {src/package/mind-map => simple-mind-map}/src/KeyCommand.js (100%) rename {src/package/mind-map => simple-mind-map}/src/Node.js (90%) rename {src/package/mind-map => simple-mind-map}/src/Render.js (56%) rename {src/package/mind-map => simple-mind-map}/src/Style.js (100%) create mode 100644 simple-mind-map/src/TextEdit.js rename {src/package/mind-map => simple-mind-map}/src/View.js (96%) rename {src/package/mind-map => simple-mind-map}/src/layouts/Base.js (86%) create mode 100644 simple-mind-map/src/layouts/BubbleChart.js create mode 100644 simple-mind-map/src/layouts/CatalogOrganization.js create mode 100644 simple-mind-map/src/layouts/Fishbone.js rename {src/package/mind-map => simple-mind-map}/src/layouts/LogicalStructure.js (97%) create mode 100644 simple-mind-map/src/layouts/MindMap.js create mode 100644 simple-mind-map/src/layouts/OrganizationStructure.js create mode 100644 simple-mind-map/src/layouts/Structure.js rename {src/package/mind-map => simple-mind-map}/src/svg/btns.js (100%) rename {src/package/mind-map => simple-mind-map}/src/themes/blueSky.js (100%) rename {src/package/mind-map => simple-mind-map}/src/themes/brainImpairedPink.js (100%) rename {src/package/mind-map => simple-mind-map}/src/themes/classic.js (100%) rename {src/package/mind-map => simple-mind-map}/src/themes/classic2.js (100%) rename {src/package/mind-map => simple-mind-map}/src/themes/classic3.js (100%) rename {src/package/mind-map => simple-mind-map}/src/themes/dark.js (100%) rename {src/package/mind-map => simple-mind-map}/src/themes/default.js (100%) rename {src/package/mind-map => simple-mind-map}/src/themes/earthYellow.js (100%) rename {src/package/mind-map => simple-mind-map}/src/themes/freshGreen.js (100%) rename {src/package/mind-map => simple-mind-map}/src/themes/freshRed.js (100%) rename {src/package/mind-map => simple-mind-map}/src/themes/index.js (100%) rename {src/package/mind-map => simple-mind-map}/src/themes/romanticPurple.js (100%) rename src/package/mind-map/src/Utils.js => simple-mind-map/src/utils/index.js (96%) rename {src/package/mind-map => simple-mind-map}/src/utils/keyMap.js (100%) delete mode 100644 src/package/.DS_Store delete mode 100644 src/pages/Index/Index.vue delete mode 100644 src/store.js rename .DS_Store => web/.DS_Store (100%) rename babel.config.js => web/babel.config.js (100%) rename package.json => web/package.json (94%) rename {public => web/public}/index.html (79%) rename {src => web/src}/.DS_Store (100%) rename {src => web/src}/App.vue (100%) rename {src => web/src}/assets/.DS_Store (100%) rename {src => web/src}/assets/icon-font/.DS_Store (100%) rename {src => web/src}/assets/icon-font/demo.css (100%) rename {src => web/src}/assets/icon-font/demo_index.html (100%) rename {src => web/src}/assets/icon-font/iconfont.css (100%) rename {src => web/src}/assets/icon-font/iconfont.js (100%) rename {src => web/src}/assets/icon-font/iconfont.json (100%) rename {src => web/src}/assets/icon-font/iconfont.ttf (100%) rename {src => web/src}/assets/icon-font/iconfont.woff (100%) rename {src => web/src}/assets/icon-font/iconfont.woff2 (100%) rename {src => web/src}/components/ImgUpload/index.vue (84%) rename {src => web/src}/components/ImgUpload/style.less (100%) rename {src => web/src}/config/index.js (100%) rename {src => web/src}/main.js (100%) rename {src => web/src}/pages/Edit/Index.vue (100%) rename {src => web/src}/pages/Edit/components/BaseStyle.vue (100%) rename {src => web/src}/pages/Edit/components/Color.vue (100%) rename {src => web/src}/pages/Edit/components/Edit.vue (55%) rename {src => web/src}/pages/Edit/components/NodeIcon.vue (100%) rename {src => web/src}/pages/Edit/components/NodeImage.vue (100%) rename {src => web/src}/pages/Edit/components/Outline.vue (100%) rename {src => web/src}/pages/Edit/components/Sidebar.vue (100%) rename {src => web/src}/pages/Edit/components/Style.vue (100%) rename {src => web/src}/pages/Edit/components/Toolbar.vue (100%) rename {src => web/src}/router.js (56%) create mode 100644 web/src/store.js rename {src => web/src}/utils/index.js (100%) rename vue.config.js => web/vue.config.js (100%) diff --git a/.gitignore b/.gitignore index 05223c9f..25c8fdba 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ node_modules -oss.js +package-lock.json \ No newline at end of file diff --git a/README.md b/README.md index f5c09125..a201eff4 100644 --- a/README.md +++ b/README.md @@ -1 +1,36 @@ -开发中... \ No newline at end of file +# web思维导图的简单实现 + +开发中... + +## 目录介绍 + +1.simple-mind-map + +思维导图工具包。 + +2.web + +使用`simple-mind-map`工具包搭建的在线思维导图。 + +## 开发 + +本地开发 + +```bash +git clone https://github.com/wanglin2/mind-map.git +cd simple-mind-map +npm i +npm link +cd .. +cd web +npm i +npm link simple-mind-map +npm run serve +``` + +打包 + +```bash +cd web +npm run build +``` \ No newline at end of file diff --git a/docs/assets/swdt.jpg b/docs/assets/swdt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1b97cafed20318959b07496c5ec2439a32ebd99c GIT binary patch literal 259691 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

)D*c_e%g74qvTof0{b)^D?7V)}%;i2|wpQ~?wB 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� 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 I>i^#a0OMYGC;$Ke literal 0 HcmV?d00001 diff --git a/docs/web思维导图实现的技术点分析.md b/docs/web思维导图实现的技术点分析.md new file mode 100644 index 00000000..63890a62 --- /dev/null +++ b/docs/web思维导图实现的技术点分析.md @@ -0,0 +1,93 @@ +![](./assets/swdt.jpg) + +# 简介 + +思维导图是一种常见的表达发散性思维的有效工具,市面上有非常多的工具可以用来画思维导图,百度一下,整页都是广告可供选择,此外也有一些可以用来帮助快速实现的`JavaScript`类库,如:[jsMind](https://github.com/hizzgdev/jsmind)、[KityMinder](https://github.com/fex-team/kityminder)。 + +本文会介绍如何从头实现一个简易的思维导图。 + + + +# 技术选型 + +这种图形类的绘制一般有两种选择,`svg`与`canvas`,因为思维导图主要是节点与线的连接,使用与`html`比较接近的`svg`比较好操作,`svg`类库也有挺多,在试用了[svgjs](https://svgjs.dev/docs/3.0/)和[snap](http://snapsvg.io/)后,有些需求在`snap`里没有找到对应的方法,所以最终选择了`svgjs`,视图库使用的是`vue2.x`全家桶。 + + + +# 数据结构 + +这里主要指每个节点的数据结构,大概需要包含是否是根节点、节点层级、节点内容(包括文本、图片、图标等固定格式)、节点展开状态、子节点、父节点等等,此外还包括该节点的特定样式,用来覆盖主题的默认样式: + +```js + +``` + +每次操作都会修改这份配置数据,然后整体刷新,有点数据驱动的意思,好处很明显,只用维护数据就行了,不用陷入对视图的操作。 + + + +# 逻辑结构图 + +思维导图常见的有几种变种,我们先看最基础的【逻辑结构图】如何布局,其他的可以在末尾小节查看。 + + + +## 节点定位 + + + +## 节点连线 + + + +# 支持图片、图标 + + + +# 展开收缩 + + + +# 文字编辑 + +# 拖动、放大缩小 + +# 主题 + +# 节点样式编辑 + +# 快捷键 + +快捷键就是监听了到特定的按键来执行特定的操作,包含单个按键和组合键,我们可以使用一个对象来保存快捷键和对应的命令,`key`代表按键,`value`代表要执行的命令,比如: + +```js +const shortcutKeys = { + 'enter': 'addSiblingNode', + 'ctrl+b': 'bold' +} +``` + +包含两种类型,单个按键、以`+`拼接的组合键,接下来只要监听`keydown`事件来检查即可,首先要说明的是组合键一般指的是`ctrl`、`alt`、`shift` + + + +# 实现过渡效果 + +# 回退 + +# 导入导出、其他格式 + +https://github.com/canvg/canvg + +https://github.com/fex-team/kityminder/tree/dev/src/protocol + +https://github.com/fex-team/kityminder/tree/dev/native-support + +json、freemind、xmind + +png、svg + +# 其他几种变种结构 + +逻辑结构图、鱼骨图、思维导图、组织结构图、目录组织图 + diff --git a/src/package/mind-map/.DS_Store b/simple-mind-map/.DS_Store similarity index 100% rename from src/package/mind-map/.DS_Store rename to simple-mind-map/.DS_Store diff --git a/src/package/mind-map/example/exampleData.js b/simple-mind-map/example/exampleData.js similarity index 100% rename from src/package/mind-map/example/exampleData.js rename to simple-mind-map/example/exampleData.js diff --git a/src/package/mind-map/index.js b/simple-mind-map/index.js similarity index 90% rename from src/package/mind-map/index.js rename to simple-mind-map/index.js index 90fc234c..c774c823 100644 --- a/src/package/mind-map/index.js +++ b/simple-mind-map/index.js @@ -1,174 +1,185 @@ -import View from './src/View' -import Event from './src/Event' -import Render from './src/Render' -import merge from 'deepmerge' -import theme from './src/themes' -import Style from './src/Style' -import KeyCommand from './src/KeyCommand' -import Command from './src/Command'; -import { SVG } from '@svgdotjs/svg.js' - -const defaultOpt = { - // 布局 - layout: 'logicalStructure', - // 放大缩小的增量比例,即step = scaleRatio * width|height - scaleRatio: 0.1, - // 主题 - theme: 'default',// 内置主题:default(默认主题) - // 主题配置,会和所选择的主题进行合并 - themeConfig: {} -} - -/** - * javascript comment - * @Author: 王林25 - * @Date: 2021-04-06 11:18:47 - * @Desc: 思维导图 - */ -class MindMap { - /** - * javascript comment - * @Author: 王林25 - * @Date: 2021-04-06 11:19:01 - * @Desc: 构造函数 - */ - constructor(opt = {}) { - this.opt = merge(defaultOpt, opt) - // 容器元素 - this.el = this.opt.el - let { - width, - height - } = this.el.getBoundingClientRect() - // 画布宽高 - this.width = width - this.height = height - // 画笔 - this.draw = SVG().addTo(this.el).size(width, height) - // 节点id - this.uid = 0 - - // 主题 - this.initTheme() - - // 事件类 - this.event = new Event({ - mindMap: this - }) - - // 按键类 - this.keyCommand = new KeyCommand({ - mindMap: this - }) - - // 命令类 - this.command = new Command({ - mindMap: this - }) - - // 渲染类 - this.renderer = new Render({ - mindMap: this - }) - - // 视图操作类 - this.view = new View({ - mindMap: this, - draw: this.draw - }) - - this.render() - setTimeout(() => { - this.command.addHistory() - }, 0); - } - - /** - * @Author: 王林 - * @Date: 2021-04-24 13:25:50 - * @Desc: 监听事件 - */ - on(event, fn) { - this.event.on(event, fn) - } - - /** - * @Author: 王林 - * @Date: 2021-04-24 13:51:35 - * @Desc: 触发事件 - */ - emit(event, ...args) { - this.event.emit(event, ...args) - } - - /** - * @Author: 王林 - * @Date: 2021-04-24 13:53:54 - * @Desc: 解绑事件 - */ - off(event, fn) { - this.event.off(event, fn) - } - - /** - * @Author: 王林 - * @Date: 2021-05-05 13:32:43 - * @Desc: 设置主题 - */ - initTheme() { - this.themeConfig = merge(this.opt.theme && theme[this.opt.theme] ? theme[this.opt.theme] : theme.default, this.opt.themeConfig) - Style.setBackgroundStyle(this.el, this.themeConfig) - } - - /** - * @Author: 王林 - * @Date: 2021-05-05 13:52:08 - * @Desc: 设置主题 - */ - setTheme(theme) { - this.opt.theme = theme - this.render() - } - - /** - * @Author: 王林 - * @Date: 2021-05-05 13:50:17 - * @Desc: 设置主题配置 - */ - setThemeConfig(config) { - this.opt.themeConfig = config - this.render() - } - - /** - * @Author: 王林 - * @Date: 2021-05-05 14:01:29 - * @Desc: 获取某个主题配置值 - */ - getThemeConfig(prop) { - return prop === undefined ? this.themeConfig : this.themeConfig[prop] - } - - /** - * javascript comment - * @Author: 王林25 - * @Date: 2021-04-06 18:47:29 - * @Desc: 渲染节点 - */ - render() { - this.draw.clear() - this.initTheme() - this.renderer.render() - } - - /** - * @Author: 王林 - * @Date: 2021-05-04 13:01:00 - * @Desc: 执行命令 - */ - execCommand(...args) { - this.command.exec(...args) - } -} - +import View from './src/View' +import Event from './src/Event' +import Render from './src/Render' +import merge from 'deepmerge' +import theme from './src/themes' +import Style from './src/Style' +import KeyCommand from './src/KeyCommand' +import Command from './src/Command'; +import { + SVG +} from '@svgdotjs/svg.js' + +// 默认选项 +const defaultOpt = { + // 布局 + layout: 'logicalStructure', + // 主题 + theme: 'default', // 内置主题:default(默认主题) + // 主题配置,会和所选择的主题进行合并 + themeConfig: {}, + // 放大缩小的增量比例,即step = scaleRatio * width|height + scaleRatio: 0.1 +} + +/** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-06 11:18:47 + * @Desc: 思维导图 + */ +class MindMap { + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-06 11:19:01 + * @Desc: 构造函数 + */ + constructor(opt = {}) { + // 合并选项 + this.opt = merge(defaultOpt, opt) + + // 容器元素 + this.el = this.opt.el + let { + width, + height + } = this.el.getBoundingClientRect() + + // 画布宽高 + this.width = width + this.height = height + + // 画笔 + this.draw = SVG().addTo(this.el).size(width, height) + + // 节点id + this.uid = 0 + + // 初始化主题 + this.initTheme() + + // 事件类 + this.event = new Event({ + mindMap: this + }) + + // 按键类 + this.keyCommand = new KeyCommand({ + mindMap: this + }) + + // 命令类 + this.command = new Command({ + mindMap: this + }) + + // 渲染类 + this.renderer = new Render({ + mindMap: this + }) + + // 视图操作类 + this.view = new View({ + mindMap: this, + draw: this.draw + }) + + // 初始渲染 + this.renderer.render() + setTimeout(() => { + this.command.addHistory() + }, 0); + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-06 18:47:29 + * @Desc: 渲染 + */ + render() { + this.draw.clear() + this.initTheme() + this.renderer.render() + } + + /** + * @Author: 王林 + * @Date: 2021-04-24 13:25:50 + * @Desc: 监听事件 + */ + on(event, fn) { + this.event.on(event, fn) + } + + /** + * @Author: 王林 + * @Date: 2021-04-24 13:51:35 + * @Desc: 触发事件 + */ + emit(event, ...args) { + this.event.emit(event, ...args) + } + + /** + * @Author: 王林 + * @Date: 2021-04-24 13:53:54 + * @Desc: 解绑事件 + */ + off(event, fn) { + this.event.off(event, fn) + } + + /** + * @Author: 王林 + * @Date: 2021-05-05 13:32:43 + * @Desc: 设置主题 + */ + initTheme() { + // 合并主题配置 + this.themeConfig = merge(this.opt.theme && theme[this.opt.theme] ? theme[this.opt.theme] : theme.default, this.opt.themeConfig) + // 设置背景样式 + Style.setBackgroundStyle(this.el, this.themeConfig) + } + + /** + * @Author: 王林 + * @Date: 2021-05-05 13:52:08 + * @Desc: 设置主题 + */ + setTheme(theme) { + this.opt.theme = theme + this.render() + } + + /** + * @Author: 王林 + * @Date: 2021-05-05 13:50:17 + * @Desc: 设置主题配置 + */ + setThemeConfig(config) { + this.opt.themeConfig = config + this.render() + } + + /** + * @Author: 王林 + * @Date: 2021-05-05 14:01:29 + * @Desc: 获取某个主题配置值 + */ + getThemeConfig(prop) { + return prop === undefined ? this.themeConfig : this.themeConfig[prop] + } + + /** + * @Author: 王林 + * @Date: 2021-05-04 13:01:00 + * @Desc: 执行命令 + */ + execCommand(...args) { + this.command.exec(...args) + } +} + export default MindMap \ No newline at end of file diff --git a/simple-mind-map/package.json b/simple-mind-map/package.json new file mode 100644 index 00000000..f645920c --- /dev/null +++ b/simple-mind-map/package.json @@ -0,0 +1,11 @@ +{ + "name": "simple-mind-map", + "version": "0.1.0", + "private": true, + "scripts": {}, + "dependencies": { + "@svgdotjs/svg.js": "^3.0.16", + "deepmerge": "^1.5.2", + "eventemitter3": "^4.0.7" + } +} diff --git a/src/package/mind-map/src/Command.js b/simple-mind-map/src/Command.js similarity index 96% rename from src/package/mind-map/src/Command.js rename to simple-mind-map/src/Command.js index aa023b0c..bec96595 100644 --- a/src/package/mind-map/src/Command.js +++ b/simple-mind-map/src/Command.js @@ -1,4 +1,4 @@ -import { copyRenderTree, simpleDeepClone } from './Utils'; +import { copyRenderTree, simpleDeepClone } from './utils'; /** * @Author: 王林 diff --git a/src/package/mind-map/src/Event.js b/simple-mind-map/src/Event.js similarity index 96% rename from src/package/mind-map/src/Event.js rename to simple-mind-map/src/Event.js index dab2c563..3f3ae06b 100644 --- a/src/package/mind-map/src/Event.js +++ b/simple-mind-map/src/Event.js @@ -1,149 +1,149 @@ -import EventEmitter from 'eventemitter3' - -/** - * javascript comment - * @Author: 王林25 - * @Date: 2021-04-07 14:53:09 - * @Desc: 事件类 - */ -class Event extends EventEmitter { - /** - * javascript comment - * @Author: 王林25 - * @Date: 2021-04-07 14:53:25 - * @Desc: 构造函数 - */ - constructor(opt = {}) { - super() - this.opt = opt - this.mindMap = opt.mindMap - this.isMousedown = false - this.mousedownPos = { - x: 0, - y: 0 - } - this.mousemovePos = { - x: 0, - y: 0 - } - this.mousemoveOffset = { - x: 0, - y: 0 - } - this.bindFn() - this.bind() - } - - /** - * javascript comment - * @Author: 王林25 - * @Date: 2021-04-07 15:52:24 - * @Desc: 绑定函数上下文 - */ - bindFn() { - this.onDrawClick = this.onDrawClick.bind(this) - this.onMousedown = this.onMousedown.bind(this) - this.onMousemove = this.onMousemove.bind(this) - this.onMouseup = this.onMouseup.bind(this) - this.onMousewheel = this.onMousewheel.bind(this) - } - - /** - * javascript comment - * @Author: 王林25 - * @Date: 2021-04-07 14:53:43 - * @Desc: 绑定事件 - */ - bind() { - this.mindMap.draw.on('click', this.onDrawClick) - this.mindMap.el.addEventListener('mousedown', this.onMousedown) - window.addEventListener('mousemove', this.onMousemove) - window.addEventListener('mouseup', this.onMouseup) - this.mindMap.el.addEventListener('mousewheel', this.onMousewheel) - } - - /** - * javascript comment - * @Author: 王林25 - * @Date: 2021-04-07 15:40:51 - * @Desc: 解绑事件 - */ - unbind() { - this.mindMap.el.removeEventListener('mousedown', this.onMousedown) - window.removeEventListener('mousemove', this.onMousemove) - window.removeEventListener('mouseup', this.onMouseup) - this.mindMap.el.removeEventListener('mousewheel', this.onMousewheel) - } - - /** - * @Author: 王林 - * @Date: 2021-04-24 13:19:39 - * @Desc: 画布的单击事件 - */ - onDrawClick(e) { - this.emit('draw_click', e) - } - - /** - * javascript comment - * @Author: 王林25 - * @Date: 2021-04-07 15:17:35 - * @Desc: 鼠标按下事件 - */ - onMousedown(e) { - e.preventDefault() - this.isMousedown = true - this.mousedownPos.x = e.clientX - this.mousedownPos.y = e.clientY - this.emit('mousedown', e, this) - } - - /** - * javascript comment - * @Author: 王林25 - * @Date: 2021-04-07 15:18:32 - * @Desc: 鼠标移动事件 - */ - onMousemove(e) { - e.preventDefault() - this.mousemovePos.x = e.clientX - this.mousemovePos.y = e.clientY - this.mousemoveOffset.x = e.clientX - this.mousedownPos.x - this.mousemoveOffset.y = e.clientY - this.mousedownPos.y - this.emit('mousemove', e, this) - if (this.isMousedown) { - this.emit('drag', e, this) - } - } - - /** - * javascript comment - * @Author: 王林25 - * @Date: 2021-04-07 15:18:57 - * @Desc: 鼠标松开事件 - */ - onMouseup(e) { - this.isMousedown = false - this.emit('mouseup', e, this) - } - - /** - * javascript comment - * @Author: 王林25 - * @Date: 2021-04-07 15:46:27 - * @Desc: 鼠标滚动 - */ - onMousewheel(e) { - e.stopPropagation() - e.preventDefault() - let dir - if (e.wheelDeltaY > 0) { - dir = 'up' - } else { - dir = 'down' - } - this.emit('mousewheel', e, dir, this) - } -} - +import EventEmitter from 'eventemitter3' + +/** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-07 14:53:09 + * @Desc: 事件类 + */ +class Event extends EventEmitter { + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-07 14:53:25 + * @Desc: 构造函数 + */ + constructor(opt = {}) { + super() + this.opt = opt + this.mindMap = opt.mindMap + this.isMousedown = false + this.mousedownPos = { + x: 0, + y: 0 + } + this.mousemovePos = { + x: 0, + y: 0 + } + this.mousemoveOffset = { + x: 0, + y: 0 + } + this.bindFn() + this.bind() + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-07 15:52:24 + * @Desc: 绑定函数上下文 + */ + bindFn() { + this.onDrawClick = this.onDrawClick.bind(this) + this.onMousedown = this.onMousedown.bind(this) + this.onMousemove = this.onMousemove.bind(this) + this.onMouseup = this.onMouseup.bind(this) + this.onMousewheel = this.onMousewheel.bind(this) + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-07 14:53:43 + * @Desc: 绑定事件 + */ + bind() { + this.mindMap.draw.on('click', this.onDrawClick) + this.mindMap.el.addEventListener('mousedown', this.onMousedown) + window.addEventListener('mousemove', this.onMousemove) + window.addEventListener('mouseup', this.onMouseup) + this.mindMap.el.addEventListener('mousewheel', this.onMousewheel) + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-07 15:40:51 + * @Desc: 解绑事件 + */ + unbind() { + this.mindMap.el.removeEventListener('mousedown', this.onMousedown) + window.removeEventListener('mousemove', this.onMousemove) + window.removeEventListener('mouseup', this.onMouseup) + this.mindMap.el.removeEventListener('mousewheel', this.onMousewheel) + } + + /** + * @Author: 王林 + * @Date: 2021-04-24 13:19:39 + * @Desc: 画布的单击事件 + */ + onDrawClick(e) { + this.emit('draw_click', e) + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-07 15:17:35 + * @Desc: 鼠标按下事件 + */ + onMousedown(e) { + e.preventDefault() + this.isMousedown = true + this.mousedownPos.x = e.clientX + this.mousedownPos.y = e.clientY + this.emit('mousedown', e, this) + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-07 15:18:32 + * @Desc: 鼠标移动事件 + */ + onMousemove(e) { + e.preventDefault() + this.mousemovePos.x = e.clientX + this.mousemovePos.y = e.clientY + this.mousemoveOffset.x = e.clientX - this.mousedownPos.x + this.mousemoveOffset.y = e.clientY - this.mousedownPos.y + this.emit('mousemove', e, this) + if (this.isMousedown) { + this.emit('drag', e, this) + } + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-07 15:18:57 + * @Desc: 鼠标松开事件 + */ + onMouseup(e) { + this.isMousedown = false + this.emit('mouseup', e, this) + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-07 15:46:27 + * @Desc: 鼠标滚动 + */ + onMousewheel(e) { + e.stopPropagation() + e.preventDefault() + let dir + if (e.wheelDeltaY > 0) { + dir = 'up' + } else { + dir = 'down' + } + this.emit('mousewheel', e, dir, this) + } +} + export default Event \ No newline at end of file diff --git a/src/package/mind-map/src/KeyCommand.js b/simple-mind-map/src/KeyCommand.js similarity index 100% rename from src/package/mind-map/src/KeyCommand.js rename to simple-mind-map/src/KeyCommand.js diff --git a/src/package/mind-map/src/Node.js b/simple-mind-map/src/Node.js similarity index 90% rename from src/package/mind-map/src/Node.js rename to simple-mind-map/src/Node.js index 38f1bedd..15c8d263 100644 --- a/src/package/mind-map/src/Node.js +++ b/simple-mind-map/src/Node.js @@ -1,397 +1,381 @@ -import Style from './Style'; -import { - resizeImgSize -} from './Utils' -import { - Image, - Text, - SVG, - Circle, - Element -} from '@svgdotjs/svg.js' -import btnsSvg from './svg/btns'; - -/** - * javascript comment - * @Author: 王林25 - * @Date: 2021-04-06 11:26:00 - * @Desc: 节点类 - */ -class Node { - /** - * javascript comment - * @Author: 王林25 - * @Date: 2021-04-06 11:26:17 - * @Desc: 构造函数 - */ - constructor(opt = {}) { - // 原始数据 - this.originData = opt.originData - // 原始数据里的数据部分 - this.data = opt.data - // id - this.uid = opt.uid - // 控制实例 - this.mindMap = opt.mindMap - // 渲染实例 - this.renderer = opt.renderer - // 主题配置 - this.themeConfig = this.mindMap.themeConfig - // 样式实例 - this.style = new Style(this, this.themeConfig) - // 渲染器 - this.draw = opt.draw || null - // 是否是根节点 - this.isRoot = opt.isRoot === undefined ? false : opt.isRoot - // 是否激活 - this.isActive = opt.isActive === undefined ? false : opt.isActive - // 是否展开 - this.expand = opt.expand === undefined ? true : opt.expand - // 节点层级 - this.layerIndex = opt.layerIndex === undefined ? 0 : opt.layerIndex - // 节点宽 - this.width = opt.width || 0 - // 节点高 - this.height = opt.height || 0 - // left - this.left = opt.left || 0 - // top - this.top = opt.top || 0 - // 父节点 - this.parent = opt.parent || null - // 子节点 - this.children = opt.children || [] - // 全部子节点所占的高度之和 - this.childrenAreaHeight = opt.childrenAreaHeight || 0 - // 文本节点 - this.textNode = null - // 其他数据 - Object.keys(opt.data).forEach((key) => { - this[key] = opt.data[key] - }) - } - - /** - * javascript comment - * @Author: 王林25 - * @Date: 2021-04-06 15:55:04 - * @Desc: 添加子节点 - */ - addChildren(node) { - this.children.push(node) - } - - /** - * javascript comment - * @Author: 王林25 - * @Date: 2021-04-09 09:46:23 - * @Desc: 刷新节点的宽高 - */ - refreshSize() { - let { - width, - height - } = this.getNodeRect() - this.width = width - this.height = height - } - - /** - * javascript comment - * @Author: 王林25 - * @Date: 2021-04-06 14:52:17 - * @Desc: 计算节点尺寸信息 - */ - getNodeRect() { - let width = this.themeConfig.paddingX * 2 - let height = this.themeConfig.paddingY * 2 - let maxWidth = 0 - if (this.img) { - let img = this.createImgNode() - if (img.width > maxWidth) { - maxWidth = img.width - } - height += img.height - } - if (this.icon && this.text) { - let icon = this.createIconNode() - let text = this.createTextNode() - if (icon.width + text.width > maxWidth) { - maxWidth = icon.width + text.width - } - height += Math.max(text.height, icon.height) - } else if (this.text) { - let text = this.createTextNode() - if (text.width > maxWidth) { - maxWidth = text.width - } - height += text.height - } else if (this.icon) { - let icon = this.createIconNode() - if (icon.width > maxWidth) { - maxWidth = icon.width - } - height += icon.height - } - return { - width: width + maxWidth, - height - } - } - - /** - * javascript comment - * @Author: 王林25 - * @Date: 2021-04-09 14:06:17 - * @Desc: 创建图片节点 - */ - createImgNode() { - if (!this.img) { - return - } - let imgSize = this.getImgShowSize() - return { - node: new Image().load(this.img).size(...imgSize), - width: imgSize[0], - height: imgSize[1] - } - } - - /** - * javascript comment - * @Author: 王林25 - * @Date: 2021-04-09 14:08:56 - * @Desc: 创建文本节点 - */ - createTextNode() { - if (!this.text) { - return - } - let node = this.draw.text(this.text) - this.style.text(node) - let { - width, - height - } = node.bbox() - let cloneNode = node.clone() - node.remove() - return { - node: cloneNode, - width, - height - } - } - - /** - * javascript comment - * @Author: 王林25 - * @Date: 2021-04-09 14:10:48 - * @Desc: 创建icon节点 - */ - createIconNode() { - if (!this.icon) { - return - } - let node = SVG('').size(this.themeConfig.iconSize, this.themeConfig.iconSize) - return { - node, - width: this.themeConfig.iconSize, - height: this.themeConfig.iconSize - } - } - - /** - * javascript comment - * @Author: 王林25 - * @Date: 2021-04-09 11:10:11 - * @Desc: 创建内容节点 - */ - createNode() { - let { - left, - top, - width, - height - } = this - let paddingY = this.themeConfig.paddingY - // 创建组 - let group = this.draw.group() - // 节点矩形 - let _rectNode = group.rect(width, height).x(left).y(top) - this.style.rect(_rectNode) - // 内容节点 - let imgNode = this.createImgNode() - let iconNode = this.createIconNode() - let textNode = this.createTextNode() - let imgHeight = imgNode ? imgNode.height : 0 - // 图片 - if (imgNode) { - group.add(imgNode.node) - imgNode.node.cx(left + width / 2).y(top + paddingY) - } - // icon - if (iconNode) { - group.add(iconNode.node) - iconNode.node.x(left + width / 2).y(top + paddingY + imgHeight + (textNode && textNode.height > iconNode.height ? (textNode.height - iconNode.height) / 2 : 0)).dx(textNode ? -textNode.width / 2 - iconNode.width / 2 : 0) - } - // 文字 - if (textNode) { - this.textNode = textNode - group.add(textNode.node) - textNode.node.cx(left + width / 2).y(top + paddingY + imgHeight).dx(iconNode ? iconNode.width / 2 : 0) - } - // 单击事件 - group.click((e) => { - e.stopPropagation() - if (this.isActive) { - return; - } - this.mindMap.emit('before_node_active', this, this.renderer.activeNodeList) - this.renderer.clearActive() - this.isActive = true - this.mindMap.execCommand('UPDATE_NODE_DATA', this, { - isActive: this.isActive - }) - this.renderer.activeNodeList.push(this) - this.mindMap.render() - this.mindMap.emit('node_active', this, this.renderer.activeNodeList) - }) - // 双击事件 - group.dblclick(() => { - this.showTextEditBox() - }) - return group - } - - /** - * @Author: 王林 - * @Date: 2021-04-13 22:15:56 - * @Desc: 显示文本编辑框 - */ - showTextEditBox() { - if (!this.text) { - return; - } - this.renderer.showEditTextBox(this, this.textNode.node.node.getBoundingClientRect()) - } - - /** - * javascript comment - * @Author: 王林25 - * @Date: 2021-04-07 13:55:58 - * @Desc: 渲染 - */ - render() { - // 连线 - this.drawLine() - // 按钮 - this.drawBtn() - // 节点 - this.draw.add(this.createNode()) - // 子节点 - if (this.children && this.children.length && this.expand) { - this.children.forEach((child) => { - child.render() - }) - } - } - - /** - * @Author: 王林 - * @Date: 2021-04-10 22:01:53 - * @Desc: 连线 - */ - drawLine() { - if (!this.expand) { - return; - } - let lines = this.renderer.layout.drawLine(this) - lines.forEach((line) => { - this.style.line(line) - }) - } - - /** - * @Author: 王林 - * @Date: 2021-04-11 19:47:01 - * @Desc: 展开收缩按钮 - */ - drawBtn() { - if (this.children.length <= 0 || this.isRoot) { - return; - } - let g = this.draw.group() - let iconSvg - if (this.expand) { - iconSvg = btnsSvg.close - } else { - iconSvg = btnsSvg.open - } - let node = SVG(iconSvg).size(20, 20) - let fillNode = new Circle().size(20) - this.renderer.layout.drawIcon(this, [node, fillNode]) - node.dx(0).dy(-10) - fillNode.dx(0).dy(-10) - this.style.iconBtn(node, fillNode) - g.mouseover(() => { - g.css({ cursor: 'pointer' }) - }) - g.mouseout(() => { - g.css({ cursor: 'auto' }) - }) - g.click(() => { - this.expand = !this.expand - // 需要反映到实际数据上 - this.mindMap.execCommand('UPDATE_NODE_DATA', this, { - expand: this.expand - }) - this.mindMap.render() - this.mindMap.emit('expand_btn_click', this) - }) - g.add(fillNode) - g.add(node) - } - - /** - * javascript comment - * @Author: 王林25 - * @Date: 2021-04-09 10:12:51 - * @Desc: 获取图片显示宽高 - */ - getImgShowSize() { - return resizeImgSize(this.imgWidth, this.imgHeight, this.themeConfig.imgMaxWidth, this.themeConfig.imgMaxHeight) - } - - /** - * @Author: 王林 - * @Date: 2021-05-04 21:48:49 - * @Desc: 获取某个样式 - */ - getStyle(prop, root, isActive) { - let v = this.style.merge(prop, root, isActive) - return v === undefined ? '' : v - } - - /** - * @Author: 王林 - * @Date: 2021-05-04 22:18:07 - * @Desc: 修改某个样式 - */ - setStyle(prop, value, isActive) { - if (isActive) { - this.mindMap.execCommand('UPDATE_NODE_DATA', this, { - activeStyle: { - ...(this.data.activeStyle || {}), - [prop]: value - } - }) - } else { - this.mindMap.execCommand('UPDATE_NODE_DATA', this, { - [prop]: value - }) - } - this.mindMap.render() - } -} - +import Style from './Style' +import { + resizeImgSize +} from './utils' +import { + Image, + Text, + SVG, + Circle, + Element +} from '@svgdotjs/svg.js' +import btnsSvg from './svg/btns' + +/** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-06 11:26:00 + * @Desc: 节点类 + */ +class Node { + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-06 11:26:17 + * @Desc: 构造函数 + */ + constructor(opt = {}) { + // 节点数据 + this.data = opt.data || {} + // id + this.uid = opt.uid + // 控制实例 + this.mindMap = opt.mindMap + // 渲染实例 + this.renderer = opt.renderer + // 渲染器 + this.draw = opt.draw || null + // 主题配置 + this.themeConfig = this.mindMap.themeConfig + // 样式实例 + this.style = new Style(this, this.themeConfig) + // 是否是根节点 + this.isRoot = opt.isRoot === undefined ? false : opt.isRoot + // 是否激活 + this.isActive = opt.isActive === undefined ? false : opt.isActive + // 是否展开 + this.expand = opt.expand === undefined ? true : opt.expand + // 节点层级 + this.layerIndex = opt.layerIndex === undefined ? 0 : opt.layerIndex + // 节点宽 + this.width = opt.width || 0 + // 节点高 + this.height = opt.height || 0 + // left + this.left = opt.left || 0 + // top + this.top = opt.top || 0 + // 父节点 + this.parent = opt.parent || null + // 子节点 + this.children = opt.children || [] + // 文本节点 + this.textNode = null + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-06 15:55:04 + * @Desc: 添加子节点 + */ + addChildren(node) { + this.children.push(node) + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-09 09:46:23 + * @Desc: 刷新节点的宽高 + */ + refreshSize() { + let { + width, + height + } = this.getNodeRect() + this.width = width + this.height = height + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-06 14:52:17 + * @Desc: 计算节点尺寸信息 + */ + getNodeRect() { + let width = this.themeConfig.paddingX * 2 + let height = this.themeConfig.paddingY * 2 + let maxWidth = 0 + if (this.img) { + let img = this.createImgNode() + if (img.width > maxWidth) { + maxWidth = img.width + } + height += img.height + } + if (this.icon && this.text) { + let icon = this.createIconNode() + let text = this.createTextNode() + if (icon.width + text.width > maxWidth) { + maxWidth = icon.width + text.width + } + height += Math.max(text.height, icon.height) + } else if (this.text) { + let text = this.createTextNode() + if (text.width > maxWidth) { + maxWidth = text.width + } + height += text.height + } else if (this.icon) { + let icon = this.createIconNode() + if (icon.width > maxWidth) { + maxWidth = icon.width + } + height += icon.height + } + return { + width: width + maxWidth, + height + } + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-09 14:06:17 + * @Desc: 创建图片节点 + */ + createImgNode() { + if (!this.img) { + return + } + let imgSize = this.getImgShowSize() + return { + node: new Image().load(this.img).size(...imgSize), + width: imgSize[0], + height: imgSize[1] + } + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-09 14:08:56 + * @Desc: 创建文本节点 + */ + createTextNode() { + if (!this.text) { + return + } + let node = this.draw.text(this.text) + this.style.text(node) + let { + width, + height + } = node.bbox() + let cloneNode = node.clone() + node.remove() + return { + node: cloneNode, + width, + height + } + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-09 14:10:48 + * @Desc: 创建icon节点 + */ + createIconNode() { + if (!this.icon) { + return + } + let node = SVG('').size(this.themeConfig.iconSize, this.themeConfig.iconSize) + return { + node, + width: this.themeConfig.iconSize, + height: this.themeConfig.iconSize + } + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-09 11:10:11 + * @Desc: 创建内容节点 + */ + createNode() { + let { + left, + top, + width, + height + } = this + let paddingY = this.themeConfig.paddingY + // 创建组 + let group = this.draw.group() + // 节点矩形 + let _rectNode = group.rect(width, height).x(left).y(top) + this.style.rect(_rectNode) + // 内容节点 + let imgNode = this.createImgNode() + let iconNode = this.createIconNode() + let textNode = this.createTextNode() + let imgHeight = imgNode ? imgNode.height : 0 + // 图片 + if (imgNode) { + group.add(imgNode.node) + imgNode.node.cx(left + width / 2).y(top + paddingY) + } + // icon + if (iconNode) { + group.add(iconNode.node) + iconNode.node.x(left + width / 2).y(top + paddingY + imgHeight + (textNode && textNode.height > iconNode.height ? (textNode.height - iconNode.height) / 2 : 0)).dx(textNode ? -textNode.width / 2 - iconNode.width / 2 : 0) + } + // 文字 + if (textNode) { + this.textNode = textNode + group.add(textNode.node) + textNode.node.cx(left + width / 2).y(top + paddingY + imgHeight).dx(iconNode ? iconNode.width / 2 : 0) + } + // 单击事件 + group.click((e) => { + e.stopPropagation() + if (this.isActive) { + return; + } + this.mindMap.emit('before_node_active', this, this.renderer.activeNodeList) + this.renderer.clearActive() + this.isActive = true + this.mindMap.execCommand('UPDATE_NODE_DATA', this, { + isActive: this.isActive + }) + this.renderer.activeNodeList.push(this) + this.mindMap.render() + this.mindMap.emit('node_active', this, this.renderer.activeNodeList) + }) + // 双击事件 + group.dblclick(() => { + this.mindMap.emit('node_dblclick', this) + }) + return group + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-07 13:55:58 + * @Desc: 渲染 + */ + render() { + // 连线 + this.drawLine() + // 按钮 + this.drawBtn() + // 节点 + this.draw.add(this.createNode()) + // 子节点 + if (this.children && this.children.length && this.expand) { + this.children.forEach((child) => { + child.render() + }) + } + } + + /** + * @Author: 王林 + * @Date: 2021-04-10 22:01:53 + * @Desc: 连线 + */ + drawLine() { + if (!this.expand) { + return; + } + let lines = this.renderer.layout.drawLine(this) + lines.forEach((line) => { + this.style.line(line) + }) + } + + /** + * @Author: 王林 + * @Date: 2021-04-11 19:47:01 + * @Desc: 展开收缩按钮 + */ + drawBtn() { + if (this.children.length <= 0 || this.isRoot) { + return; + } + let g = this.draw.group() + let iconSvg + if (this.expand) { + iconSvg = btnsSvg.close + } else { + iconSvg = btnsSvg.open + } + let node = SVG(iconSvg).size(20, 20) + let fillNode = new Circle().size(20) + this.renderer.layout.drawIcon(this, [node, fillNode]) + node.dx(0).dy(-10) + fillNode.dx(0).dy(-10) + this.style.iconBtn(node, fillNode) + g.mouseover(() => { + g.css({ + cursor: 'pointer' + }) + }) + g.mouseout(() => { + g.css({ + cursor: 'auto' + }) + }) + g.click(() => { + this.expand = !this.expand + // 需要反映到实际数据上 + this.mindMap.execCommand('UPDATE_NODE_DATA', this, { + expand: this.expand + }) + this.mindMap.render() + this.mindMap.emit('expand_btn_click', this) + }) + g.add(fillNode) + g.add(node) + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-09 10:12:51 + * @Desc: 获取图片显示宽高 + */ + getImgShowSize() { + return resizeImgSize(this.imgWidth, this.imgHeight, this.themeConfig.imgMaxWidth, this.themeConfig.imgMaxHeight) + } + + /** + * @Author: 王林 + * @Date: 2021-05-04 21:48:49 + * @Desc: 获取某个样式 + */ + getStyle(prop, root, isActive) { + let v = this.style.merge(prop, root, isActive) + return v === undefined ? '' : v + } + + /** + * @Author: 王林 + * @Date: 2021-05-04 22:18:07 + * @Desc: 修改某个样式 + */ + setStyle(prop, value, isActive) { + if (isActive) { + this.mindMap.execCommand('UPDATE_NODE_DATA', this, { + activeStyle: { + ...(this.data.activeStyle || {}), + [prop]: value + } + }) + } else { + this.mindMap.execCommand('UPDATE_NODE_DATA', this, { + [prop]: value + }) + } + this.mindMap.render() + } +} + export default Node \ No newline at end of file diff --git a/src/package/mind-map/src/Render.js b/simple-mind-map/src/Render.js similarity index 56% rename from src/package/mind-map/src/Render.js rename to simple-mind-map/src/Render.js index afd75d57..c27eeb2b 100644 --- a/src/package/mind-map/src/Render.js +++ b/simple-mind-map/src/Render.js @@ -1,256 +1,175 @@ -import merge from 'deepmerge' -import LogicalStructure from './layouts/LogicalStructure' -import { getStrWithBrFromHtml } from './Utils' - -// 布局列表 -const layouts = { - logicalStructure: LogicalStructure -} - -/** - * javascript comment - * @Author: 王林25 - * @Date: 2021-04-08 16:25:07 - * @Desc: 渲染 - */ -class Render { - /** - * javascript comment - * @Author: 王林25 - * @Date: 2021-04-08 16:25:32 - * @Desc: 构造函数 - */ - constructor(opt = {}) { - this.opt = opt - this.mindMap = opt.mindMap - this.themeConfig = this.mindMap.themeConfig - this.draw = this.mindMap.draw - // 渲染树,操作过程中修改的都是这里的数据 - this.renderTree = merge({}, this.mindMap.opt.data || {}) - // 当前激活的节点列表 - this.activeNodeList = [] - // 根节点 - this.root = null - // 文本编辑框 - this.textEditNode = null - // 文本编辑框是否显示 - this.showTextEdit = false - // 布局 - this.layout = new (layouts[this.mindMap.opt.layout] ? layouts[this.mindMap.opt.layout] : layouts.logicalStructure)({ - mindMap: this.mindMap, - renderer: this, - renderTree: this.renderTree, - themeConfig: this.mindMap.themeConfig, - draw: this.mindMap.draw - }) - // 绑定事件 - this.bindEvent() - // 注册命令 - this.registerCommands() - } - - /** - * @Author: 王林 - * @Date: 2021-04-24 13:27:04 - * @Desc: 事件 - */ - bindEvent() { - this.mindMap.on('draw_click', () => { - // 隐藏文本编辑框 - this.hideEditTextBox() - // 清除激活状态 - if (this.activeNodeList.length > 0) { - this.clearActive() - this.mindMap.render() - this.mindMap.emit('node_active', null, []) - } - }) - this.mindMap.on('expand_btn_click', () => { - this.hideEditTextBox() - }) - this.mindMap.on('before_node_active', () => { - this.hideEditTextBox() - }) - this.mindMap.keyCommand.addShortcut('Enter', () => { - this.hideEditTextBox() - }) - } - - /** - * @Author: 王林 - * @Date: 2021-05-04 13:19:06 - * @Desc: 注册命令 - */ - registerCommands() { - this.insertNode = this.insertNode.bind(this) - this.mindMap.command.add('INSERT_NODE', this.insertNode) - this.insertChildNode = this.insertChildNode.bind(this) - this.mindMap.command.add('INSERT_CHILD_NODE', this.insertChildNode) - this.removeNode = this.removeNode.bind(this) - this.mindMap.command.add('REMOVE_NODE', this.removeNode) - this.updateNodeData = this.updateNodeData.bind(this) - this.mindMap.command.add('UPDATE_NODE_DATA', this.updateNodeData) - } - - /** - * javascript comment - * @Author: 王林25 - * @Date: 2021-04-08 16:27:55 - * @Desc: 渲染 - */ - render() { - this.root = this.layout.doLayout() - this.root.render() - } - - /** - * @Author: 王林 - * @Date: 2021-04-12 22:45:01 - * @Desc: 清楚当前激活的节点 - */ - clearActive() { - this.activeNodeList.forEach((item) => { - this.mindMap.execCommand('UPDATE_NODE_DATA', item, { - isActive: false - }) - }) - this.activeNodeList = [] - } - - /** - * @Author: 王林 - * @Date: 2021-05-04 13:46:08 - * @Desc: 获取节点在同级里的索引位置 - */ - getNodeIndex(node) { - return node.parent ? node.parent.children.findIndex((item) => { - return item === node - }) : 0 - } - - /** - * @Author: 王林 - * @Date: 2021-05-04 13:19:54 - * @Desc: 插入同级节点 - */ - insertNode() { - if (this.activeNodeList.length <= 0) { - return; - } - let first = this.activeNodeList[0] - if (first.isRoot) { - this.insertChildNode() - } else { - let index = this.getNodeIndex(first) - first.parent.originData.children.splice(index + 1, 0, { - "data": { - "text": "分支主题", - "expand": true - }, - "children": [] - }) - this.mindMap.render() - } - } - - /** - * @Author: 王林 - * @Date: 2021-05-04 13:31:02 - * @Desc: 插入子节点 - */ - insertChildNode() { - if (this.activeNodeList.length <= 0) { - return; - } - let first = this.activeNodeList[0] - first.originData.children.push({ - "data": { - "text": "分支主题", - "expand": true - }, - "children": [] - }) - this.mindMap.render() - } - - /** - * @Author: 王林 - * @Date: 2021-05-04 13:40:39 - * @Desc: 移除节点 - */ - removeNode() { - if (this.activeNodeList.length <= 0) { - return; - } - this.activeNodeList.forEach((item) => { - if (item.isRoot) { - item.children = [] - item.originData.children = [] - } else { - let index = this.getNodeIndex(item) - item.parent.children.splice(index, 1) - item.parent.originData.children.splice(index, 1) - } - }) - this.clearActive() - this.mindMap.render() - } - - /** - * @Author: 王林 - * @Date: 2021-05-04 14:19:48 - * @Desc: 更新节点数据 - */ - updateNodeData(node, data) { - Object.keys(data).forEach((key) => { - node.data[key] = data[key] - }) - } - - /** - * @Author: 王林 - * @Date: 2021-04-13 22:13:02 - * @Desc: 显示文本编辑框 - */ - showEditTextBox(node, rect) { - if (!this.textEditNode) { - this.textEditNode = document.createElement('div') - this.textEditNode.style.cssText = `position:fixed;box-sizing: border-box;background-color:#fff;box-shadow: 0 0 20px rgba(0,0,0,.5);padding: 3px 5px;margin-left: -5px;margin-top: -3px;outline: none;` - this.textEditNode.setAttribute('contenteditable', true) - document.body.appendChild(this.textEditNode) - } - node.style.domText(this.textEditNode) - this.textEditNode.innerHTML = node.data.text.split(/\n/img).join('
') - this.textEditNode.style.minWidth = rect.width + 10 + 'px' - this.textEditNode.style.minHeight = rect.height + 6 + 'px' - this.textEditNode.style.left = rect.left + 'px' - this.textEditNode.style.top = rect.top + 'px' - this.textEditNode.style.display = 'block' - this.showTextEdit = true - } - - /** - * @Author: 王林 - * @Date: 2021-04-24 13:48:16 - * @Desc: 隐藏文本编辑框 - */ - hideEditTextBox() { - if (!this.showTextEdit) { - return - } - this.activeNodeList.forEach((node) => { - let str = getStrWithBrFromHtml(this.textEditNode.innerHTML) - node.data.text = str - this.mindMap.render() - }) - this.mindMap.emit('hide_text_edit', this.textEditNode, this.activeNodeList) - this.textEditNode.style.display = 'none' - this.textEditNode.innerHTML = '' - this.textEditNode.style.fontFamily = 'inherit' - this.textEditNode.style.fontSize = 'inherit' - this.textEditNode.style.fontWeight = 'normal' - this.showTextEdit = false - } -} - +import merge from 'deepmerge' +import LogicalStructure from './layouts/LogicalStructure' +import TextEdit from './TextEdit' + +// 布局列表 +const layouts = { + // 思维导图 + logicalStructure: LogicalStructure +} + +/** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-08 16:25:07 + * @Desc: 渲染 + */ +class Render { + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-08 16:25:32 + * @Desc: 构造函数 + */ + constructor(opt = {}) { + this.opt = opt + this.mindMap = opt.mindMap + this.themeConfig = this.mindMap.themeConfig + this.draw = this.mindMap.draw + // 渲染树,操作过程中修改的都是这里的数据 + this.renderTree = merge({}, this.mindMap.opt.data || {}) + // 当前激活的节点列表 + this.activeNodeList = [] + // 根节点 + this.root = null + // 文本编辑框 + this.textEdit = new TextEdit(this) + // 布局 + this.layout = new(layouts[this.mindMap.opt.layout] ? layouts[this.mindMap.opt.layout] : layouts.logicalStructure)(this) + // 注册命令 + this.registerCommands() + } + + /** + * @Author: 王林 + * @Date: 2021-05-04 13:19:06 + * @Desc: 注册命令 + */ + registerCommands() { + this.insertNode = this.insertNode.bind(this) + this.mindMap.command.add('INSERT_NODE', this.insertNode) + this.insertChildNode = this.insertChildNode.bind(this) + this.mindMap.command.add('INSERT_CHILD_NODE', this.insertChildNode) + this.removeNode = this.removeNode.bind(this) + this.mindMap.command.add('REMOVE_NODE', this.removeNode) + this.updateNodeData = this.updateNodeData.bind(this) + this.mindMap.command.add('UPDATE_NODE_DATA', this.updateNodeData) + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-08 16:27:55 + * @Desc: 渲染 + */ + render() { + this.root = this.layout.doLayout() + this.root.render() + } + + /** + * @Author: 王林 + * @Date: 2021-04-12 22:45:01 + * @Desc: 清楚当前激活的节点 + */ + clearActive() { + this.activeNodeList.forEach((item) => { + this.mindMap.execCommand('UPDATE_NODE_DATA', item, { + isActive: false + }) + }) + this.activeNodeList = [] + } + + /** + * @Author: 王林 + * @Date: 2021-05-04 13:46:08 + * @Desc: 获取节点在同级里的索引位置 + */ + getNodeIndex(node) { + return node.parent ? node.parent.children.findIndex((item) => { + return item === node + }) : 0 + } + + /** + * @Author: 王林 + * @Date: 2021-05-04 13:19:54 + * @Desc: 插入同级节点 + */ + insertNode() { + if (this.activeNodeList.length <= 0) { + return; + } + let first = this.activeNodeList[0] + if (first.isRoot) { + this.insertChildNode() + } else { + let index = this.getNodeIndex(first) + first.parent.originData.children.splice(index + 1, 0, { + "data": { + "text": "分支主题", + "expand": true + }, + "children": [] + }) + this.mindMap.render() + } + } + + /** + * @Author: 王林 + * @Date: 2021-05-04 13:31:02 + * @Desc: 插入子节点 + */ + insertChildNode() { + if (this.activeNodeList.length <= 0) { + return; + } + let first = this.activeNodeList[0] + first.originData.children.push({ + "data": { + "text": "分支主题", + "expand": true + }, + "children": [] + }) + this.mindMap.render() + } + + /** + * @Author: 王林 + * @Date: 2021-05-04 13:40:39 + * @Desc: 移除节点 + */ + removeNode() { + if (this.activeNodeList.length <= 0) { + return; + } + this.activeNodeList.forEach((item) => { + if (item.isRoot) { + item.children = [] + item.originData.children = [] + } else { + let index = this.getNodeIndex(item) + item.parent.children.splice(index, 1) + item.parent.originData.children.splice(index, 1) + } + }) + this.clearActive() + this.mindMap.render() + } + + /** + * @Author: 王林 + * @Date: 2021-05-04 14:19:48 + * @Desc: 更新节点数据 + */ + updateNodeData(node, data) { + Object.keys(data).forEach((key) => { + node.data[key] = data[key] + }) + } +} + export default Render \ No newline at end of file diff --git a/src/package/mind-map/src/Style.js b/simple-mind-map/src/Style.js similarity index 100% rename from src/package/mind-map/src/Style.js rename to simple-mind-map/src/Style.js diff --git a/simple-mind-map/src/TextEdit.js b/simple-mind-map/src/TextEdit.js new file mode 100644 index 00000000..3472eff0 --- /dev/null +++ b/simple-mind-map/src/TextEdit.js @@ -0,0 +1,117 @@ +import { + getStrWithBrFromHtml +} from './utils' + +/** + * javascript comment + * @Author: 王林25 + * @Date: 2021-06-19 11:11:28 + * @Desc: 节点文字编辑类 + */ +export default class TextEdit { + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-06-19 11:22:57 + * @Desc: 构造函数 + */ + constructor(renderer) { + this.mindMap = renderer.mindMap + // 文本编辑框 + this.textEditNode = null + // 文本编辑框是否显示 + this.showTextEdit = false + this.bindEvent() + } + + /** + * @Author: 王林 + * @Date: 2021-04-24 13:27:04 + * @Desc: 事件 + */ + bindEvent() { + this.show = this.show.bind(this) + // 节点双击事件 + this.mindMap.on('node_dblclick', this.show) + // 点击事件 + this.mindMap.on('draw_click', () => { + // 隐藏文本编辑框 + this.hideEditTextBox() + // 清除激活状态 + if (this.activeNodeList.length > 0) { + this.clearActive() + this.mindMap.render() + this.mindMap.emit('node_active', null, []) + } + }) + // 展开收缩按钮点击事件 + this.mindMap.on('expand_btn_click', () => { + this.hideEditTextBox() + }) + // 节点激活前事件 + this.mindMap.on('before_node_active', () => { + this.hideEditTextBox() + }) + // 注册回车快捷键 + this.mindMap.keyCommand.addShortcut('Enter', () => { + this.hideEditTextBox() + }) + } + + /** + * @Author: 王林 + * @Date: 2021-04-13 22:15:56 + * @Desc: 显示文本编辑框 + */ + show(node) { + if (!node.text) { + return; + } + this.showEditTextBox(this, this.textNode.node.node.getBoundingClientRect()) + } + + /** + * @Author: 王林 + * @Date: 2021-04-13 22:13:02 + * @Desc: 显示文本编辑框 + */ + showEditTextBox(node, rect) { + if (!this.textEditNode) { + this.textEditNode = document.createElement('div') + this.textEditNode.style.cssText = `position:fixed;box-sizing: border-box;background-color:#fff;box-shadow: 0 0 20px rgba(0,0,0,.5);padding: 3px 5px;margin-left: -5px;margin-top: -3px;outline: none;` + this.textEditNode.setAttribute('contenteditable', true) + document.body.appendChild(this.textEditNode) + } + node.style.domText(this.textEditNode) + this.textEditNode.innerHTML = node.data.text.split(/\n/img).join('
') + this.textEditNode.style.minWidth = rect.width + 10 + 'px' + this.textEditNode.style.minHeight = rect.height + 6 + 'px' + this.textEditNode.style.left = rect.left + 'px' + this.textEditNode.style.top = rect.top + 'px' + this.textEditNode.style.display = 'block' + this.showTextEdit = true + } + + /** + * @Author: 王林 + * @Date: 2021-04-24 13:48:16 + * @Desc: 隐藏文本编辑框 + */ + hideEditTextBox() { + if (!this.showTextEdit) { + return + } + this.activeNodeList.forEach((node) => { + let str = getStrWithBrFromHtml(this.textEditNode.innerHTML) + node.data.text = str + this.mindMap.render() + }) + this.mindMap.emit('hide_text_edit', this.textEditNode, this.activeNodeList) + this.textEditNode.style.display = 'none' + this.textEditNode.innerHTML = '' + this.textEditNode.style.fontFamily = 'inherit' + this.textEditNode.style.fontSize = 'inherit' + this.textEditNode.style.fontWeight = 'normal' + this.showTextEdit = false + } +} \ No newline at end of file diff --git a/src/package/mind-map/src/View.js b/simple-mind-map/src/View.js similarity index 96% rename from src/package/mind-map/src/View.js rename to simple-mind-map/src/View.js index 981fe615..713a2d4c 100644 --- a/src/package/mind-map/src/View.js +++ b/simple-mind-map/src/View.js @@ -1,87 +1,87 @@ -import merge from 'deepmerge' - -/** - * javascript comment - * @Author: 王林25 - * @Date: 2021-04-07 14:45:24 - * @Desc: 视图操作类 - */ -class View { - /** - * javascript comment - * @Author: 王林25 - * @Date: 2021-04-07 14:45:40 - * @Desc: 构造函数 - */ - constructor(opt = {}) { - this.opt = opt - this.mindMap = this.opt.mindMap - this.viewBox = { - x: 0, - y: 0, - width: this.mindMap.width, - height: this.mindMap.height - } - this.cacheViewBox = { - x: 0, - y: 0, - width: this.mindMap.width, - height: this.mindMap.height - } - this.scale = 1 - this.bind() - } - - /** - * javascript comment - * @Author: 王林25 - * @Date: 2021-04-07 15:38:51 - * @Desc: 绑定 - */ - bind() { - // 拖动视图 - this.mindMap.event.on('mousedown', () => { - this.cacheViewBox = merge({}, this.viewBox) - }) - this.mindMap.event.on('drag', (e, event) => { - // 视图放大缩小后拖动的距离也要相应变化 - this.viewBox.x = this.cacheViewBox.x - event.mousemoveOffset.x * this.scale - this.viewBox.y = this.cacheViewBox.y - event.mousemoveOffset.y * this.scale - this.setViewBox() - }) - // 放大缩小视图 - this.mindMap.event.on('mousewheel', (e, dir) => { - let stepWidth = this.viewBox.width * this.mindMap.opt.scaleRatio - let stepHeight = this.viewBox.height * this.mindMap.opt.scaleRatio - // 放大 - if (dir === 'down') { - this.scale += this.mindMap.opt.scaleRatio - this.viewBox.width += stepWidth - this.viewBox.height += stepHeight - } else { // 缩小 - this.scale -= this.mindMap.opt.scaleRatio - this.viewBox.width -= stepWidth - this.viewBox.height -= stepHeight - } - this.setViewBox() - }) - } - - /** - * javascript comment - * @Author: 王林25 - * @Date: 2021-04-07 15:43:26 - * @Desc: 设置视图 - */ - setViewBox() { - let { - x, - y, - width, - height - } = this.viewBox - this.opt.draw.viewbox(x, y, width, height) - } -} - +import merge from 'deepmerge' + +/** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-07 14:45:24 + * @Desc: 视图操作类 + */ +class View { + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-07 14:45:40 + * @Desc: 构造函数 + */ + constructor(opt = {}) { + this.opt = opt + this.mindMap = this.opt.mindMap + this.viewBox = { + x: 0, + y: 0, + width: this.mindMap.width, + height: this.mindMap.height + } + this.cacheViewBox = { + x: 0, + y: 0, + width: this.mindMap.width, + height: this.mindMap.height + } + this.scale = 1 + this.bind() + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-07 15:38:51 + * @Desc: 绑定 + */ + bind() { + // 拖动视图 + this.mindMap.event.on('mousedown', () => { + this.cacheViewBox = merge({}, this.viewBox) + }) + this.mindMap.event.on('drag', (e, event) => { + // 视图放大缩小后拖动的距离也要相应变化 + this.viewBox.x = this.cacheViewBox.x - event.mousemoveOffset.x * this.scale + this.viewBox.y = this.cacheViewBox.y - event.mousemoveOffset.y * this.scale + this.setViewBox() + }) + // 放大缩小视图 + this.mindMap.event.on('mousewheel', (e, dir) => { + let stepWidth = this.viewBox.width * this.mindMap.opt.scaleRatio + let stepHeight = this.viewBox.height * this.mindMap.opt.scaleRatio + // 放大 + if (dir === 'down') { + this.scale += this.mindMap.opt.scaleRatio + this.viewBox.width += stepWidth + this.viewBox.height += stepHeight + } else { // 缩小 + this.scale -= this.mindMap.opt.scaleRatio + this.viewBox.width -= stepWidth + this.viewBox.height -= stepHeight + } + this.setViewBox() + }) + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-07 15:43:26 + * @Desc: 设置视图 + */ + setViewBox() { + let { + x, + y, + width, + height + } = this.viewBox + this.opt.draw.viewbox(x, y, width, height) + } +} + export default View \ No newline at end of file diff --git a/src/package/mind-map/src/layouts/Base.js b/simple-mind-map/src/layouts/Base.js similarity index 86% rename from src/package/mind-map/src/layouts/Base.js rename to simple-mind-map/src/layouts/Base.js index f5324fdd..17965b64 100644 --- a/src/package/mind-map/src/layouts/Base.js +++ b/simple-mind-map/src/layouts/Base.js @@ -9,17 +9,17 @@ class Base { * @Date: 2021-04-12 22:25:16 * @Desc: 构造函数 */ - constructor(opt) { - // 控制实例 - this.mindMap = opt.mindMap + constructor(renderer) { // 渲染实例 - this.renderer = opt.renderer + this.renderer = renderer + // 控制实例 + this.mindMap = renderer.mindMap // 渲染树 - this.renderTree = opt.renderTree + this.renderTree = renderer.renderTree // 主题配置 - this.themeConfig = opt.themeConfig + this.themeConfig = this.mindMap.themeConfig // 绘图对象 - this.draw = opt.draw + this.draw = this.mindMap.draw // 根节点 this.root = null } diff --git a/simple-mind-map/src/layouts/BubbleChart.js b/simple-mind-map/src/layouts/BubbleChart.js new file mode 100644 index 00000000..84f73fe9 --- /dev/null +++ b/simple-mind-map/src/layouts/BubbleChart.js @@ -0,0 +1,186 @@ +import { + walk +} from '../Utils' +import Node from '../Node' +import merge from 'deepmerge' + +/** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-08 16:25:07 + * @Desc: 鱼骨图 + */ +class Render { + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-08 16:25:32 + * @Desc: 构造函数 + */ + constructor(opt = {}) { + this.opt = opt + this.mindMap = opt.mindMap + this.draw = this.mindMap.draw + // 渲染树 + this.renderTree = merge({}, this.mindMap.opt.data || {}) + // 根节点 + this.root = null + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-08 16:27:55 + * @Desc: 渲染 + */ + render() { + this.computed() + this.root.render() + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-06 14:04:20 + * @Desc: 计算位置数据 + */ + computed() { + // 计算节点的width、height + this.computedBaseValue() + // 计算节点的left、top + this.computedLeftTopValue() + // 调整节点top + // this.adjustTopValue() + // 调整节点left + // this.adjustLeftValue() + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-08 09:49:32 + * @Desc: 计算节点的width、height + */ + computedBaseValue() { + walk(this.renderTree, null, (node, parent, isRoot, index, layerIndex) => { + // 设置width、height + let { + children, + ...props + } = node + let newNode = new Node({ + ...props, + mindMap: this.mindMap, + draw: this.draw, + layerIndex + }) + // 计算节点的宽高 + newNode.refreshSize() + // 计算节点的top + if (isRoot) { + newNode.isRoot = true + newNode.left = this.mindMap.width / 2 + newNode.top = this.mindMap.height / 2 + this.root = newNode + } else { + newNode.parent = parent._node + parent._node.addChildren(newNode) + } + node._node = newNode + }, (node) => { + // 遍历完子节点返回时 + }, true) + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-08 09:59:25 + * @Desc: 计算节点的left、top + */ + computedLeftTopValue() { + let margin = Math.max(this.mindMap.opt.marginX, this.mindMap.opt.marginY) + walk(this.root, null, (node) => { + if (node.children && node.children.length) { + let rad = (360 / node.children.length) * (Math.PI / 180) + let totalRad = 0 + node.children.forEach((item) => { + let r = node.width / 2 + margin + item.width / 2 + item.left = node.left + r * Math.cos(totalRad) + item.top = node.top + r * Math.sin(totalRad) + totalRad += rad + }) + } + }, null, true) + // return + walk(this.root, null, null, (node) => { + if (node.children && node.children.length) { + let minLeft = Infinity, + minTop = Infinity, + maxRight = -Infinity, + maxBottom = -Infinity + node.children.concat([node]).forEach((item) => { + if ((item.left - item.width / 2) < minLeft) { + minLeft = item.left - item.width / 2 + } + if ((item.top - item.width / 2) < minTop) { + minTop = item.top - item.width / 2 + } + if ((item.left + item.width / 2) > maxRight) { + maxRight = item.left + item.width / 2 + } + if ((item.top + item.width / 2) < maxBottom) { + maxBottom = item.top + item.width / 2 + } + }) + let width = Math.max(maxRight - minLeft, maxBottom - minTop) + let difference = width - node.width + this.update(node, difference) + } + }, true) + } + + update(node, difference) { + if (node.parent) { + // console.log(node.text, difference) + let rad = (360 / node.parent.children.length) * (Math.PI / 180) + let totalRad = 0 + node.parent.children.forEach((item) => { + if (item === node) { + item.left += difference * Math.cos(totalRad) + item.top += difference * Math.sin(totalRad) + if (node.children && node.children.length) { + // this.updateChildren(node) + } + } + totalRad += rad + }) + + this.update(node.parent, difference) + } + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-07 11:25:52 + * @Desc: 更新子节点 + */ + updateChildren(node, difference) { + let margin = Math.max(this.mindMap.opt.marginX, this.mindMap.opt.marginY) + walk(node, null, (node) => { + if (node.children && node.children.length) { + let rad = (360 / node.children.length) * (Math.PI / 180) + let totalRad = 0 + node.children.forEach((item) => { + let r = node.width / 2 + margin + item.width / 2 + item.left = node.left + r * Math.cos(totalRad) + item.top = node.top + r * Math.sin(totalRad) + totalRad += rad + }) + } + }, null, true) + } +} + +export default Render \ No newline at end of file diff --git a/simple-mind-map/src/layouts/CatalogOrganization.js b/simple-mind-map/src/layouts/CatalogOrganization.js new file mode 100644 index 00000000..909aad42 --- /dev/null +++ b/simple-mind-map/src/layouts/CatalogOrganization.js @@ -0,0 +1,270 @@ +import { + walk +} from '../Utils' +import Node from '../Node' +import merge from 'deepmerge' + +/** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-08 16:25:07 + * @Desc: 目录组织图 + * 思路:第一轮只计算节点的宽高,以及某个节点的所有子节点所占的高度之和,以及该节点里所有子节点中宽度最宽是多少、第二轮计算节点的left和top,需要区分二级节点和其他节点,二级节点top相同,一行依次从做向右排开,其他节点的left相同,一列从上往下依次排开 + */ +class Render { + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-08 16:25:32 + * @Desc: 构造函数 + */ + constructor(opt = {}) { + this.opt = opt + this.mindMap = opt.mindMap + this.draw = this.mindMap.draw + // 渲染树 + this.renderTree = merge({}, this.mindMap.opt.data || {}) + // 根节点 + this.root = null + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-08 16:27:55 + * @Desc: 渲染 + */ + render() { + this.computed() + this.root.render() + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-06 14:04:20 + * @Desc: 计算位置数据 + */ + computed() { + // 计算节点的width、height + this.computedBaseValue() + // 计算节点的left、top + this.computedLeftTopValue() + // 调整节点top + this.adjustTopValue() + // 调整节点left + this.adjustLeftValue() + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-08 09:49:32 + * @Desc: 计算节点的width、height + */ + computedBaseValue() { + walk(this.renderTree, null, (node, parent, isRoot, index) => { + // 设置width、height + let { + children, + ...props + } = node + let newNode = new Node({ + ...props, + mindMap: this.mindMap, + draw: this.draw + }) + // 计算节点的宽高 + newNode.refreshSize() + // 计算节点的top + if (isRoot) { + newNode.isRoot = true + newNode.left = (this.mindMap.width - newNode.width) / 2 + newNode.top = (this.mindMap.height - newNode.height) / 2 + this.root = newNode + } else { + newNode.parent = parent._node + parent._node.addChildren(newNode) + } + node._node = newNode + }, (node) => { + // 遍历完子节点返回时 + // 计算节点的areaHeight,也就是子节点所占的高度之和,包括外边距 + let len = node._node.children.length + if (node._node.isRoot) { + node._node.childrenAreaWidth = len ? node._node.children.reduce((h, cur) => { + return h + cur.width + }, 0) + (len + 1) * this.mindMap.opt.marginX : 0 + } + node._node.childrenAreaHeight = len ? node._node.children.reduce((h, cur) => { + return h + cur.height + }, 0) + (len + 1) * this.mindMap.opt.marginY : 0 + }, true) + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-08 09:59:25 + * @Desc: 计算节点的left、top + */ + computedLeftTopValue() { + walk(this.root, null, (node) => { + if (node.children && node.children.length) { + if (node.isRoot) { + let left = node.left + node.width / 2 - node.childrenAreaWidth / 2 + let totalLeft = left + this.mindMap.opt.marginX + node.children.forEach((cur) => { + // left + cur.left = totalLeft + totalLeft += cur.width + this.mindMap.opt.marginX + // top + cur.top = node.top + node.height + this.mindMap.opt.marginY + }) + } else { + let totalTop = node.top + node.height + this.mindMap.opt.marginY + node.children.forEach((cur) => { + cur.left = node.left + node.width / 5 + this.mindMap.opt.marginX + cur.top = totalTop + totalTop += cur.height + this.mindMap.opt.marginY + }) + } + } + }, null, true) + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-12 17:07:29 + * @Desc: 调整节点left + */ + adjustLeftValue() { + walk(this.root, null, (node) => { + if (node.parent && node.parent.isRoot) { + let childrenAreaWidth = this.getNodeWidth(node) + let difference = childrenAreaWidth - node.width + if (difference > 0) { + this.updateBrothersLeftValue(node, difference / 2) + } + } + }, null, true) + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-12 18:55:03 + * @Desc: 计算节点的宽度,包括子节点 + */ + getNodeWidth(node) { + let widthArr = [] + let loop = (node, width) => { + if (node.children.length) { + width += node.width / 5 + this.mindMap.opt.marginX + node.children.forEach((item) => { + loop(item, width) + }) + } else { + width += node.width + widthArr.push(width) + } + } + loop(node, 0) + return Math.max(...widthArr) + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-12 18:21:46 + * @Desc: 调整兄弟节点的left + */ + updateBrothersLeftValue(node, addWidth) { + if (node.parent) { + let childrenList = node.parent.children + let index = childrenList.findIndex((item) => { + return item === node + }) + childrenList.forEach((item, _index) => { + let _offset = 0 + if (_index > index) { + _offset = addWidth + } else { + _offset = -addWidth + } + item.left += _offset + // 同步更新子节点的位置 + if (item.children && item.children.length) { + this.updateChildren(item.children, 'left', _offset) + } + }) + // 更新父节点的位置 + this.updateBrothersLeftValue(node.parent, addWidth) + } + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-08 10:04:05 + * @Desc: 调整节点top,该节点之后的节点都往下进行偏移 + */ + adjustTopValue() { + let marginY = this.mindMap.opt.marginY + walk(this.root, null, (node) => { + if (!node.isRoot && !node.parent.isRoot) { + // 判断子节点的areaHeight是否大于该节点自身,大于则需要调整位置 + if (node.children && node.children.length > 0) { + let difference = node.childrenAreaHeight - marginY + this.updateBrothersTopValue(node, difference) + } + } + }, null, true) + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-07 14:26:03 + * @Desc: 更新兄弟节点的top + */ + updateBrothersTopValue(node, addHeight) { + if (node.parent && !node.parent.isRoot) { + let childrenList = node.parent.children + let index = childrenList.findIndex((item) => { + return item === node + }) + childrenList.forEach((item, _index) => { + let _offset = 0 + if (_index > index) { + _offset = addHeight + } + item.top += _offset + // 同步更新子节点的位置 + if (item.children && item.children.length) { + this.updateChildren(item.children, 'top', _offset) + } + }) + // 更新父节点的位置 + this.updateBrothersTopValue(node.parent, addHeight) + } + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-07 11:25:52 + * @Desc: 更新子节点属性 + */ + updateChildren(children, prop, offset) { + children.forEach((item) => { + item[prop] += offset + if (item.children && item.children.length) { + this.updateChildren(item.children, prop, offset) + } + }) + } +} + +export default Render \ No newline at end of file diff --git a/simple-mind-map/src/layouts/Fishbone.js b/simple-mind-map/src/layouts/Fishbone.js new file mode 100644 index 00000000..b42c644b --- /dev/null +++ b/simple-mind-map/src/layouts/Fishbone.js @@ -0,0 +1,376 @@ +import { + walk +} from '../Utils' +import Node from '../Node' +import merge from 'deepmerge' + +/** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-08 16:25:07 + * @Desc: 鱼骨图 + */ +class Render { + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-08 16:25:32 + * @Desc: 构造函数 + */ + constructor(opt = {}) { + this.opt = opt + this.mindMap = opt.mindMap + this.draw = this.mindMap.draw + // 渲染树 + this.renderTree = merge({}, this.mindMap.opt.data || {}) + // 根节点 + this.root = null + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-08 16:27:55 + * @Desc: 渲染 + */ + render() { + this.computed() + this.root.render() + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-06 14:04:20 + * @Desc: 计算位置数据 + */ + computed() { + // 计算节点的width、height + this.computedBaseValue() + // 计算节点的left、top + this.computedLeftTopValue() + // 调整节点top + // this.adjustTopValue() + // 调整节点left + // this.adjustLeftValue() + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-08 09:49:32 + * @Desc: 计算节点的width、height + */ + computedBaseValue() { + walk(this.renderTree, null, (node, parent, isRoot, index, layerIndex) => { + // 生长方向 + let dir = '' + if (isRoot) { + dir = '' + } else if (parent._node.isRoot) { + dir = index % 2 === 0 ? 'up' : 'down' + } else { + dir = parent._node.dir + } + // 设置width、height + let { + children, + ...props + } = node + let newNode = new Node({ + ...props, + mindMap: this.mindMap, + draw: this.draw, + dir, + layerIndex + }) + // 计算节点的宽高 + newNode.refreshSize() + // 计算节点的top + if (isRoot) { + newNode.isRoot = true + newNode.left = (this.mindMap.width - newNode.width) / 2 + newNode.top = (this.mindMap.height - newNode.height) / 2 + this.root = newNode + } else { + newNode.parent = parent._node + parent._node.addChildren(newNode) + } + node._node = newNode + }, (node) => { + // 遍历完子节点返回时 + let len = node._node.children.length + node._node.childrenAreaHeight = len ? node._node.children.reduce((h, cur) => { + return h + cur.height + }, 0) + (len + 1) * this.mindMap.opt.marginY : 0 + }, true) + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-08 09:59:25 + * @Desc: 计算节点的left、top + */ + computedLeftTopValue() { + walk(this.root, null, (node) => { + // 二级节点 + if (node.isRoot && node.children && node.children.length) { + let totalLeft = node.left + node.width + this.mindMap.opt.marginX + node.children.forEach((item) => { + item.left = totalLeft + item.top = node.top + node.height / 2 - this.mindMap.opt.marginY - item.height + totalLeft += item.width + this.mindMap.opt.marginX + this.computedThirdLevelLeftTopValue(item) + }) + } + }, null, true) + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-13 09:33:04 + * @Desc: 计算三级节点 + */ + computedThirdLevelLeftTopValue(node) { + if (node.children && node.children.length > 0) { + let totalLeft = node.left + let totalTop = node.top - this.mindMap.opt.marginY + node.children.forEach((item) => { + let h = node.height + this.mindMap.opt.marginY + let w = h / Math.tan(70) + item.left = totalLeft + w + totalLeft += w + item.top = totalTop - item.height + totalTop -= this.mindMap.opt.marginY + item.height + this.computedThirdAfterLevelLeftTopValue(item) + }) + } + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-13 09:55:54 + * @Desc: 计算三级以后的节点 + */ + computedThirdAfterLevelLeftTopValue(root) { + let marginY = this.mindMap.opt.marginY + let marginX = this.mindMap.opt.marginX + // 计算left、top + walk(root, null, (node) => { + if (node.children && node.children.length) { + let totalTop = node.top + node.height + marginY + node.children.forEach((cur) => { + cur.left = node.left + node.width / 5 + marginX + cur.top = totalTop + totalTop += cur.height + marginY + }) + } + }, null, true) + // 调整top + const updateBrothersTopValue = (node, addHeight) => { + if (node.parent) { + let childrenList = node.parent.children + let index = childrenList.findIndex((item) => { + return item === node + }) + childrenList.forEach((item, _index) => { + let _offset = 0 + if (_index > index) { + _offset = addHeight + } + item.top += _offset + // 同步更新子节点的位置 + if (item.children && item.children.length) { + this.updateChildren(item.children, 'top', _offset) + } + }) + // 更新父节点的位置 + updateBrothersTopValue(node.parent, addHeight) + } + } + walk(root, null, (node) => { + // 判断子节点的areaHeight是否大于该节点自身,大于则需要调整位置 + if (node.children && node.children.length > 0) { + let difference = node.childrenAreaHeight - marginY + updateBrothersTopValue(node, difference) + } + }, null, true) + // 调整left + const updateBrothersLeftValue = (node, w, h) => { + if (node.parent && node.parent.layerIndex > 0) { + let childrenList = node.parent.children + let index = childrenList.findIndex((item) => { + return item === node + }) + childrenList.forEach((item, _index) => { + let _w = 0 + let _h = 0 + if (_index >= index) { + _w = w + _h = -h + } + console.log(item.text, _w, _h) + item.left += _w + item.top += _h + // 同步更新子节点的位置 + if (item.children && item.children.length) { + this.updateChildren(item.children, 'left', _w) + this.updateChildren(item.children, 'left', _h) + } + }) + // 更新父节点的位置 + updateBrothersLeftValue(node.parent, w, h) + } + } + walk(root, null, (node) => { + if (node.layerIndex > 1) { + let h = node.childrenAreaHeight - marginY + if (h > 0) { + let w = h / Math.tan(70) + console.log(node.text, w, h) + // let childrenAreaWidth = getNodeWidth(node) + // let differenceX = childrenAreaWidth - node.width + // updateBrothersLeftValue(node, w, h) + } + } + }, null, true) + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-12 17:07:29 + * @Desc: 调整节点left + */ + adjustLeftValue() { + walk(this.root, null, (node) => { + if (node.parent && node.parent.isRoot) { + let childrenAreaWidth = this.getNodeWidth(node) + let difference = childrenAreaWidth - node.width + if (difference > 0) { + this.updateBrothersLeftValue(node, difference / 2) + } + } + }, null, true) + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-12 18:55:03 + * @Desc: 计算节点的宽度,包括子节点 + */ + getNodeWidth(node) { + let widthArr = [] + let loop = (node, width) => { + if (node.children.length) { + width += node.width / 5 + this.mindMap.opt.marginX + node.children.forEach((item) => { + loop(item, width) + }) + } else { + width += node.width + widthArr.push(width) + } + } + loop(node, 0) + return Math.max(...widthArr) + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-12 18:21:46 + * @Desc: 调整兄弟节点的left + */ + updateBrothersLeftValue(node, addWidth) { + if (node.parent) { + let childrenList = node.parent.children + let index = childrenList.findIndex((item) => { + return item === node + }) + childrenList.forEach((item, _index) => { + let _offset = 0 + if (_index > index) { + _offset = addWidth + } else { + _offset = -addWidth + } + item.left += _offset + // 同步更新子节点的位置 + if (item.children && item.children.length) { + this.updateChildren(item.children, 'left', _offset) + } + }) + // 更新父节点的位置 + this.updateBrothersLeftValue(node.parent, addWidth) + } + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-08 10:04:05 + * @Desc: 调整节点top,该节点之后的节点都往下进行偏移 + */ + adjustTopValue() { + let marginY = this.mindMap.opt.marginY + walk(this.root, null, (node) => { + if (!node.isRoot && !node.parent.isRoot) { + // 判断子节点的areaHeight是否大于该节点自身,大于则需要调整位置 + if (node.children && node.children.length > 0) { + let difference = node.childrenAreaHeight - marginY + this.updateBrothersTopValue(node, difference) + } + } + }, null, true) + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-07 14:26:03 + * @Desc: 更新兄弟节点的top + */ + updateBrothersTopValue(node, addHeight) { + if (node.parent && !node.parent.isRoot) { + let childrenList = node.parent.children + let index = childrenList.findIndex((item) => { + return item === node + }) + childrenList.forEach((item, _index) => { + let _offset = 0 + if (_index > index) { + _offset = addHeight + } + item.top += _offset + // 同步更新子节点的位置 + if (item.children && item.children.length) { + this.updateChildren(item.children, 'top', _offset) + } + }) + // 更新父节点的位置 + this.updateBrothersTopValue(node.parent, addHeight) + } + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-07 11:25:52 + * @Desc: 更新子节点属性 + */ + updateChildren(children, prop, offset) { + children.forEach((item) => { + item[prop] += offset + if (item.children && item.children.length) { + this.updateChildren(item.children, prop, offset) + } + }) + } +} + +export default Render \ No newline at end of file diff --git a/src/package/mind-map/src/layouts/LogicalStructure.js b/simple-mind-map/src/layouts/LogicalStructure.js similarity index 97% rename from src/package/mind-map/src/layouts/LogicalStructure.js rename to simple-mind-map/src/layouts/LogicalStructure.js index 3c41ec35..40905e61 100644 --- a/src/package/mind-map/src/layouts/LogicalStructure.js +++ b/simple-mind-map/src/layouts/LogicalStructure.js @@ -1,7 +1,7 @@ import Base from './Base'; import { walk -} from '../Utils' +} from '../utils' import Node from '../Node' /** @@ -45,14 +45,10 @@ class LogicalStructure extends Base { computedBaseValue() { walk(this.renderTree, null, (node, parent, isRoot, layerIndex) => { // 遍历子节点前设置left、width、height - if (!node.data) { - node.data = {} - } // 创建节点 let newNode = new Node({ uid: this.mindMap.uid++, - originData: node, - data: node.data, + data: node, renderer: this.renderer, mindMap: this.mindMap, draw: this.draw, diff --git a/simple-mind-map/src/layouts/MindMap.js b/simple-mind-map/src/layouts/MindMap.js new file mode 100644 index 00000000..cba93d07 --- /dev/null +++ b/simple-mind-map/src/layouts/MindMap.js @@ -0,0 +1,195 @@ +import { + walk +} from '../Utils' +import Node from '../Node' +import merge from 'deepmerge' + +/** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-08 16:25:07 + * @Desc: 思维导图 + * 思路:在逻辑结构图的基础上增加一个变量来记录生长方向,向左还是向右,同时在计算left的时候根据方向来计算、调整top时只考虑同方向的节点即可 + */ +class Render { + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-08 16:25:32 + * @Desc: 构造函数 + */ + constructor(opt = {}) { + this.opt = opt + this.mindMap = opt.mindMap + this.draw = this.mindMap.draw + // 渲染树 + this.renderTree = merge({}, this.mindMap.opt.data || {}) + // 根节点 + this.root = null + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-08 16:27:55 + * @Desc: 渲染 + */ + render() { + this.computed() + this.root.render() + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-06 14:04:20 + * @Desc: 计算位置数据 + */ + computed() { + // 计算节点的left、width、height + this.computedBaseValue() + // 计算节点的top + this.computedTopValue() + // 调整节点top + this.adjustTopValue() + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-08 09:49:32 + * @Desc: 计算节点的left、width、height + */ + computedBaseValue() { + walk(this.renderTree, null, (node, parent, isRoot, index) => { + // 生长方向 + let dir = '' + if (isRoot) { + dir = '' + } else if (parent._node.isRoot) { + dir = index % 2 === 0 ? 'right' : 'left' + } else { + dir = parent._node.dir + } + // 设置left、width、height + let { + children, + ...props + } = node + let newNode = new Node({ + ...props, + mindMap: this.mindMap, + draw: this.draw, + dir + }) + // 计算节点的宽高 + newNode.refreshSize() + // 计算节点的left + if (isRoot) { + newNode.isRoot = true + newNode.left = (this.mindMap.width - newNode.width) / 2 + newNode.top = (this.mindMap.height - newNode.height) / 2 + this.root = newNode + } else { + newNode.left = dir === 'right' ? parent._node.left + parent._node.width + this.mindMap.opt.marginX : parent._node.left - this.mindMap.opt.marginX - newNode.width + newNode.parent = parent._node + parent._node.addChildren(newNode) + } + node._node = newNode + }, (node) => { + // 返回时计算节点的areaHeight,也就是子节点所占的高度之和,包括外边距 + let len = node._node.children.length + node._node.childrenAreaHeight = len ? node._node.children.reduce((h, cur) => { + return h + cur.height + }, 0) + (len + 1) * this.mindMap.opt.marginY : 0 + }, true) + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-08 09:59:25 + * @Desc: 计算节点的top + */ + computedTopValue() { + walk(this.root, null, (node) => { + if (node.children && node.children.length) { + // 第一个子节点的top值 = 该节点中心的top值 - 子节点的高度之和的一半 + let top = node.top + node.height / 2 - node.childrenAreaHeight / 2 + let totalTop = top + this.mindMap.opt.marginY + node.children.forEach((cur) => { + cur.top = totalTop + totalTop += cur.height + this.mindMap.opt.marginY + }) + } + }, null, true) + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-08 10:04:05 + * @Desc: 调整节点top + */ + adjustTopValue() { + let margin = this.mindMap.opt.marginY * 2 + walk(this.root, null, (node) => { + // 判断子节点所占的高度之和是否大于该节点自身,大于则需要调整位置 + let difference = node.childrenAreaHeight - margin - node.height + if (difference > 0) { + this.updateBrothers(node, difference / 2) + } + }, null, true) + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-07 14:26:03 + * @Desc: 更新兄弟节点的top + */ + updateBrothers(node, addHeight) { + if (node.parent) { + let childrenList = node.parent.children.filter((item) => { + return item.dir === node.dir + }) + let index = childrenList.findIndex((item) => { + return item === node + }) + childrenList.forEach((item, _index) => { + let _offset = 0 + if (_index < index) { + _offset = -addHeight + } else if (_index > index) { + _offset = addHeight + } + item.top += _offset + // 同步更新子节点的位置 + if (item.children && item.children.length) { + this.updateChildren(item.children, 'top', _offset) + } + }) + // 更新父节点的位置 + this.updateBrothers(node.parent, addHeight) + } + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-07 11:25:52 + * @Desc: 更新子节点属性 + */ + updateChildren(children, prop, offset) { + children.forEach((item) => { + item[prop] += offset + if (item.children && item.children.length) { + this.updateChildren(item.children, prop, offset) + } + }) + } + + +} + +export default Render \ No newline at end of file diff --git a/simple-mind-map/src/layouts/OrganizationStructure.js b/simple-mind-map/src/layouts/OrganizationStructure.js new file mode 100644 index 00000000..7b329b7c --- /dev/null +++ b/simple-mind-map/src/layouts/OrganizationStructure.js @@ -0,0 +1,183 @@ +import { + walk +} from '../Utils' +import Node from '../Node' +import merge from 'deepmerge' + +/** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-08 16:25:07 + * @Desc: 组织结构图 + * 思路:和逻辑结构图基本一样,只是方向变成向下生长,所以先计算节点的top,后计算节点的left、最后调整节点的left即可 + */ +class Render { + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-08 16:25:32 + * @Desc: 构造函数 + */ + constructor(opt = {}) { + this.opt = opt + this.mindMap = opt.mindMap + this.draw = this.mindMap.draw + // 渲染树 + this.renderTree = merge({}, this.mindMap.opt.data || {}) + // 根节点 + this.root = null + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-08 16:27:55 + * @Desc: 渲染 + */ + render() { + this.computed() + this.root.render() + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-06 14:04:20 + * @Desc: 计算位置数据 + */ + computed() { + // 计算节点的top、width、height + this.computedBaseValue() + // 计算节点的left + this.computedLeftValue() + // 调整节点left + this.adjustLeftValue() + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-08 09:49:32 + * @Desc: 计算节点的top、width、height + */ + computedBaseValue() { + walk(this.renderTree, null, (node, parent, isRoot, index) => { + // 设置top、width、height + let { + children, + ...props + } = node + let newNode = new Node({ + ...props, + mindMap: this.mindMap, + draw: this.draw + }) + // 计算节点的宽高 + newNode.refreshSize() + // 计算节点的top + if (isRoot) { + newNode.isRoot = true + newNode.left = (this.mindMap.width - newNode.width) / 2 + newNode.top = (this.mindMap.height - newNode.height) / 2 + this.root = newNode + } else { + newNode.top = parent._node.top + parent._node.height + this.mindMap.opt.marginY + newNode.parent = parent._node + parent._node.addChildren(newNode) + } + node._node = newNode + }, (node) => { + // 返回时计算节点的areaWidth,也就是子节点所占的宽度之和,包括外边距 + let len = node._node.children.length + node._node.childrenAreaWidth = len ? node._node.children.reduce((h, cur) => { + return h + cur.width + }, 0) + (len + 1) * this.mindMap.opt.marginX : 0 + }, true) + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-08 09:59:25 + * @Desc: 计算节点的left + */ + computedLeftValue() { + walk(this.root, null, (node) => { + if (node.children && node.children.length) { + // 第一个子节点的left值 = 该节点中心的left值 - 子节点的宽度之和的一半 + let left = node.left + node.width / 2 - node.childrenAreaWidth / 2 + let totalLeft = left + this.mindMap.opt.marginX + node.children.forEach((cur) => { + cur.left = totalLeft + totalLeft += cur.width + this.mindMap.opt.marginX + }) + } + }, null, true) + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-08 10:04:05 + * @Desc: 调整节点left + */ + adjustLeftValue() { + let margin = this.mindMap.opt.marginX * 2 + walk(this.root, null, (node) => { + // 判断子节点所占的宽度之和是否大于该节点自身,大于则需要调整位置 + let difference = node.childrenAreaWidth - margin - node.width + if (difference > 0) { + this.updateBrothers(node, difference / 2) + } + }, null, true) + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-07 14:26:03 + * @Desc: 更新兄弟节点的left + */ + updateBrothers(node, addWidth) { + if (node.parent) { + let childrenList = node.parent.children + let index = childrenList.findIndex((item) => { + return item === node + }) + childrenList.forEach((item, _index) => { + let _offset = 0 + if (_index < index) { + _offset = -addWidth + } else if (_index > index) { + _offset = addWidth + } + item.left += _offset + // 同步更新子节点的位置 + if (item.children && item.children.length) { + this.updateChildren(item.children, 'left', _offset) + } + }) + // 更新父节点的位置 + this.updateBrothers(node.parent, addWidth) + } + } + + /** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-07 11:25:52 + * @Desc: 更新子节点属性 + */ + updateChildren(children, prop, offset) { + children.forEach((item) => { + item[prop] += offset + if (item.children && item.children.length) { + this.updateChildren(item.children, prop, offset) + } + }) + } + + +} + +export default Render \ No newline at end of file diff --git a/simple-mind-map/src/layouts/Structure.js b/simple-mind-map/src/layouts/Structure.js new file mode 100644 index 00000000..2cc8c28c --- /dev/null +++ b/simple-mind-map/src/layouts/Structure.js @@ -0,0 +1,11 @@ +/** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-12 17:21:04 + * @Desc: 基类 + */ +class Structure { + +} + +export default Structure \ No newline at end of file diff --git a/src/package/mind-map/src/svg/btns.js b/simple-mind-map/src/svg/btns.js similarity index 100% rename from src/package/mind-map/src/svg/btns.js rename to simple-mind-map/src/svg/btns.js diff --git a/src/package/mind-map/src/themes/blueSky.js b/simple-mind-map/src/themes/blueSky.js similarity index 100% rename from src/package/mind-map/src/themes/blueSky.js rename to simple-mind-map/src/themes/blueSky.js diff --git a/src/package/mind-map/src/themes/brainImpairedPink.js b/simple-mind-map/src/themes/brainImpairedPink.js similarity index 100% rename from src/package/mind-map/src/themes/brainImpairedPink.js rename to simple-mind-map/src/themes/brainImpairedPink.js diff --git a/src/package/mind-map/src/themes/classic.js b/simple-mind-map/src/themes/classic.js similarity index 100% rename from src/package/mind-map/src/themes/classic.js rename to simple-mind-map/src/themes/classic.js diff --git a/src/package/mind-map/src/themes/classic2.js b/simple-mind-map/src/themes/classic2.js similarity index 100% rename from src/package/mind-map/src/themes/classic2.js rename to simple-mind-map/src/themes/classic2.js diff --git a/src/package/mind-map/src/themes/classic3.js b/simple-mind-map/src/themes/classic3.js similarity index 100% rename from src/package/mind-map/src/themes/classic3.js rename to simple-mind-map/src/themes/classic3.js diff --git a/src/package/mind-map/src/themes/dark.js b/simple-mind-map/src/themes/dark.js similarity index 100% rename from src/package/mind-map/src/themes/dark.js rename to simple-mind-map/src/themes/dark.js diff --git a/src/package/mind-map/src/themes/default.js b/simple-mind-map/src/themes/default.js similarity index 100% rename from src/package/mind-map/src/themes/default.js rename to simple-mind-map/src/themes/default.js diff --git a/src/package/mind-map/src/themes/earthYellow.js b/simple-mind-map/src/themes/earthYellow.js similarity index 100% rename from src/package/mind-map/src/themes/earthYellow.js rename to simple-mind-map/src/themes/earthYellow.js diff --git a/src/package/mind-map/src/themes/freshGreen.js b/simple-mind-map/src/themes/freshGreen.js similarity index 100% rename from src/package/mind-map/src/themes/freshGreen.js rename to simple-mind-map/src/themes/freshGreen.js diff --git a/src/package/mind-map/src/themes/freshRed.js b/simple-mind-map/src/themes/freshRed.js similarity index 100% rename from src/package/mind-map/src/themes/freshRed.js rename to simple-mind-map/src/themes/freshRed.js diff --git a/src/package/mind-map/src/themes/index.js b/simple-mind-map/src/themes/index.js similarity index 100% rename from src/package/mind-map/src/themes/index.js rename to simple-mind-map/src/themes/index.js diff --git a/src/package/mind-map/src/themes/romanticPurple.js b/simple-mind-map/src/themes/romanticPurple.js similarity index 100% rename from src/package/mind-map/src/themes/romanticPurple.js rename to simple-mind-map/src/themes/romanticPurple.js diff --git a/src/package/mind-map/src/Utils.js b/simple-mind-map/src/utils/index.js similarity index 96% rename from src/package/mind-map/src/Utils.js rename to simple-mind-map/src/utils/index.js index 895abd14..d658f2e2 100644 --- a/src/package/mind-map/src/Utils.js +++ b/simple-mind-map/src/utils/index.js @@ -1,134 +1,134 @@ -/** - * javascript comment - * @Author: 王林25 - * @Date: 2021-04-06 14:13:17 - * @Desc: 深度优先遍历树 - */ -export const walk = (root, parent, beforeCallback, afterCallback, isRoot, layerIndex = 0) => { - beforeCallback && beforeCallback(root, parent, isRoot, layerIndex) - if (root.children && root.children.length > 0) { - let _layerIndex = layerIndex + 1 - root.children.forEach((node) => { - walk(node, root, beforeCallback, afterCallback, false, _layerIndex) - }) - } - afterCallback && afterCallback(root, parent, isRoot, layerIndex) -} - -/** - * javascript comment - * @Author: 王林25 - * @Date: 2021-04-07 18:47:20 - * @Desc: 广度优先遍历树 - */ -export const bfsWalk = (root, callback) => { - callback(root) - let stack = [root] - while (stack.length) { - let cur = stack.shift() - if (cur.children && cur.children.length) { - cur.children.forEach((item) => { - stack.push(item) - callback(item) - }) - } - } -} - -/** - * javascript comment - * @Author: 王林25 - * @Date: 2021-04-09 10:44:54 - * @Desc: 缩放图片尺寸 - */ -export const resizeImgSize = (width, height, maxWidth, maxHeight) => { - let nRatio = width / height - let arr = [] - if (maxWidth && maxHeight) { - if (width <= maxWidth && height <= maxHeight) { - arr = [width, height] - } else { - let mRatio = maxWidth / maxHeight - if (nRatio > mRatio) { // 固定高度 - arr = [nRatio * maxHeight, maxHeight] - } else { // 固定宽度 - arr = [maxWidth, maxWidth / nRatio] - } - } - } else if (maxWidth) { - if (width <= maxWidth) { - arr = [width, height] - } else { - arr = [maxWidth, maxWidth / nRatio] - } - } else if (maxHeight) { - if (height <= maxHeight) { - arr = [width, height] - } else { - arr = [nRatio * maxHeight, maxHeight] - } - } - return arr -} - -/** - * javascript comment - * @Author: 王林25 - * @Date: 2021-04-09 10:18:42 - * @Desc: 缩放图片 - */ -export const resizeImg = (imgUrl, maxWidth, maxHeight) => { - return new Promise((resolve, reject) => { - let img = new Image() - img.src = imgUrl - img.onload = () => { - let arr = resizeImgSize(img.naturalWidth, img.naturalHeight, maxWidth, maxHeight) - resolve(arr) - } - img.onerror = (e) => { - reject(e) - } - }) -} - -/** - * @Author: 王林 - * @Date: 2021-05-04 12:26:56 - * @Desc: 从头html结构字符串里获取带换行符的字符串 - */ -export const getStrWithBrFromHtml = (str) => { - str = str.replace(/
/img, '\n') - let el = document.createElement('div') - el.innerHTML = str - str = el.textContent - return str; -} - -/** - * @Author: 王林 - * @Date: 2021-05-04 14:45:39 - * @Desc: 极简的深拷贝 - */ -export const simpleDeepClone = (data) => { - try { - return JSON.parse(JSON.stringify(data)) - } catch (error) { - return null - } -} - -/** - * @Author: 王林 - * @Date: 2021-05-04 14:40:11 - * @Desc: 复制渲染树数据 - */ -export const copyRenderTree = (tree, root) => { - tree.data = simpleDeepClone(root.data) - tree.children = [] - if (root.children.length > 0) { - root.children.forEach((item, index) => { - tree.children[index] = copyRenderTree({}, item) - }) - } - return tree; +/** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-06 14:13:17 + * @Desc: 深度优先遍历树 + */ +export const walk = (root, parent, beforeCallback, afterCallback, isRoot, layerIndex = 0) => { + beforeCallback && beforeCallback(root, parent, isRoot, layerIndex) + if (root.children && root.children.length > 0) { + let _layerIndex = layerIndex + 1 + root.children.forEach((node) => { + walk(node, root, beforeCallback, afterCallback, false, _layerIndex) + }) + } + afterCallback && afterCallback(root, parent, isRoot, layerIndex) +} + +/** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-07 18:47:20 + * @Desc: 广度优先遍历树 + */ +export const bfsWalk = (root, callback) => { + callback(root) + let stack = [root] + while (stack.length) { + let cur = stack.shift() + if (cur.children && cur.children.length) { + cur.children.forEach((item) => { + stack.push(item) + callback(item) + }) + } + } +} + +/** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-09 10:44:54 + * @Desc: 缩放图片尺寸 + */ +export const resizeImgSize = (width, height, maxWidth, maxHeight) => { + let nRatio = width / height + let arr = [] + if (maxWidth && maxHeight) { + if (width <= maxWidth && height <= maxHeight) { + arr = [width, height] + } else { + let mRatio = maxWidth / maxHeight + if (nRatio > mRatio) { // 固定高度 + arr = [nRatio * maxHeight, maxHeight] + } else { // 固定宽度 + arr = [maxWidth, maxWidth / nRatio] + } + } + } else if (maxWidth) { + if (width <= maxWidth) { + arr = [width, height] + } else { + arr = [maxWidth, maxWidth / nRatio] + } + } else if (maxHeight) { + if (height <= maxHeight) { + arr = [width, height] + } else { + arr = [nRatio * maxHeight, maxHeight] + } + } + return arr +} + +/** + * javascript comment + * @Author: 王林25 + * @Date: 2021-04-09 10:18:42 + * @Desc: 缩放图片 + */ +export const resizeImg = (imgUrl, maxWidth, maxHeight) => { + return new Promise((resolve, reject) => { + let img = new Image() + img.src = imgUrl + img.onload = () => { + let arr = resizeImgSize(img.naturalWidth, img.naturalHeight, maxWidth, maxHeight) + resolve(arr) + } + img.onerror = (e) => { + reject(e) + } + }) +} + +/** + * @Author: 王林 + * @Date: 2021-05-04 12:26:56 + * @Desc: 从头html结构字符串里获取带换行符的字符串 + */ +export const getStrWithBrFromHtml = (str) => { + str = str.replace(/
/img, '\n') + let el = document.createElement('div') + el.innerHTML = str + str = el.textContent + return str; +} + +/** + * @Author: 王林 + * @Date: 2021-05-04 14:45:39 + * @Desc: 极简的深拷贝 + */ +export const simpleDeepClone = (data) => { + try { + return JSON.parse(JSON.stringify(data)) + } catch (error) { + return null + } +} + +/** + * @Author: 王林 + * @Date: 2021-05-04 14:40:11 + * @Desc: 复制渲染树数据 + */ +export const copyRenderTree = (tree, root) => { + tree.data = simpleDeepClone(root.data) + tree.children = [] + if (root.children.length > 0) { + root.children.forEach((item, index) => { + tree.children[index] = copyRenderTree({}, item) + }) + } + return tree; } \ No newline at end of file diff --git a/src/package/mind-map/src/utils/keyMap.js b/simple-mind-map/src/utils/keyMap.js similarity index 100% rename from src/package/mind-map/src/utils/keyMap.js rename to simple-mind-map/src/utils/keyMap.js diff --git a/src/package/.DS_Store b/src/package/.DS_Store deleted file mode 100644 index fa590cfdcfb6e2ba58d94c7b29dbfd25afea0e5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKPfNov6i>FP?L^!`n8#eaP1vSvC!y4N@FrCBpt7}exI)*CwR7mK^ke8Z@*DVd zd@sp{V|wu*GTwui-^=@xkY7sDFvhq&@f(a)7-I$~V!?#w8^Jj0iWIa5k;^d-*^s$x z+l zRKPGy)9hBNvst566U}xrtBF~=U9XAbqgIxgM)ja^a^4$0KFyx9msdqDhwo6zuEsgM zfw8jA2WK3GadZ!{dEGppkQg8ah=FxxK%aTW_Bt<;)&oKrt`(p?P!!C| n6)sA^kXJF};#Is4Dh2!k4M0m{t`IyR^dlf?poSRuQwBZ(twK^! diff --git a/src/pages/Index/Index.vue b/src/pages/Index/Index.vue deleted file mode 100644 index 308dabc0..00000000 --- a/src/pages/Index/Index.vue +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - diff --git a/src/store.js b/src/store.js deleted file mode 100644 index b8baeb93..00000000 --- a/src/store.js +++ /dev/null @@ -1,68 +0,0 @@ -import Vue from 'vue' -import Vuex from 'vuex' -import exampleData from './package/mind-map/example/exampleData'; - -Vue.use(Vuex) - -const store = new Vuex.Store({ - state: { - userInfo: null,// 用户信息 - mindMapData: null// 思维导图数据 - }, - mutations: { - /** - * @Author: 王林 - * @Date: 2020-11-28 15:32:32 - * @Desc: 设置用户信息 - */ - setUserInfo(state, userInfo) { - state.userInfo = userInfo - }, - - /** - * @Author: 王林 - * @Date: 2021-04-10 14:50:01 - * @Desc: 设置思维导图数据 - */ - setMindMapData(state, data) { - state.mindMapData = data - } - }, - actions: { - /** - * @Author: 王林 - * @Date: 2020-11-28 15:28:03 - * @Desc: 获取用户信息 - */ - async getUserInfo(ctx) { - try { - let { data } = await api.getUserInfo() - ctx.commit('setUserInfo', data.data) - } catch (error) { - console.log(error) - } - }, - - /** - * @Author: 王林 - * @Date: 2021-04-10 14:50:40 - * @Desc: 获取思维导图数据 - */ - async getUserMindMapData(ctx) { - try { - let { data } = { - data: { - data: { - mindMapData: exampleData - } - } - } - ctx.commit('setMindMapData', data.data) - } catch (error) { - console.log(error) - } - } - } -}) - -export default store \ No newline at end of file diff --git a/.DS_Store b/web/.DS_Store similarity index 100% rename from .DS_Store rename to web/.DS_Store diff --git a/babel.config.js b/web/babel.config.js similarity index 100% rename from babel.config.js rename to web/babel.config.js diff --git a/package.json b/web/package.json similarity index 94% rename from package.json rename to web/package.json index 01d4412c..1b04cfd0 100644 --- a/package.json +++ b/web/package.json @@ -8,9 +8,7 @@ "lint": "vue-cli-service lint" }, "dependencies": { - "@svgdotjs/svg.js": "^3.0.16", "core-js": "^3.6.5", - "deepmerge": "^1.5.2", "element-ui": "^2.15.1", "vue": "^2.6.11", "vue-router": "^3.5.1", diff --git a/public/index.html b/web/public/index.html similarity index 79% rename from public/index.html rename to web/public/index.html index 37d3bac8..3cfbc940 100644 --- a/public/index.html +++ b/web/public/index.html @@ -10,8 +10,6 @@ - -

diff --git a/src/.DS_Store b/web/src/.DS_Store similarity index 100% rename from src/.DS_Store rename to web/src/.DS_Store diff --git a/src/App.vue b/web/src/App.vue similarity index 100% rename from src/App.vue rename to web/src/App.vue diff --git a/src/assets/.DS_Store b/web/src/assets/.DS_Store similarity index 100% rename from src/assets/.DS_Store rename to web/src/assets/.DS_Store diff --git a/src/assets/icon-font/.DS_Store b/web/src/assets/icon-font/.DS_Store similarity index 100% rename from src/assets/icon-font/.DS_Store rename to web/src/assets/icon-font/.DS_Store diff --git a/src/assets/icon-font/demo.css b/web/src/assets/icon-font/demo.css similarity index 100% rename from src/assets/icon-font/demo.css rename to web/src/assets/icon-font/demo.css diff --git a/src/assets/icon-font/demo_index.html b/web/src/assets/icon-font/demo_index.html similarity index 100% rename from src/assets/icon-font/demo_index.html rename to web/src/assets/icon-font/demo_index.html diff --git a/src/assets/icon-font/iconfont.css b/web/src/assets/icon-font/iconfont.css similarity index 100% rename from src/assets/icon-font/iconfont.css rename to web/src/assets/icon-font/iconfont.css diff --git a/src/assets/icon-font/iconfont.js b/web/src/assets/icon-font/iconfont.js similarity index 100% rename from src/assets/icon-font/iconfont.js rename to web/src/assets/icon-font/iconfont.js diff --git a/src/assets/icon-font/iconfont.json b/web/src/assets/icon-font/iconfont.json similarity index 100% rename from src/assets/icon-font/iconfont.json rename to web/src/assets/icon-font/iconfont.json diff --git a/src/assets/icon-font/iconfont.ttf b/web/src/assets/icon-font/iconfont.ttf similarity index 100% rename from src/assets/icon-font/iconfont.ttf rename to web/src/assets/icon-font/iconfont.ttf diff --git a/src/assets/icon-font/iconfont.woff b/web/src/assets/icon-font/iconfont.woff similarity index 100% rename from src/assets/icon-font/iconfont.woff rename to web/src/assets/icon-font/iconfont.woff diff --git a/src/assets/icon-font/iconfont.woff2 b/web/src/assets/icon-font/iconfont.woff2 similarity index 100% rename from src/assets/icon-font/iconfont.woff2 rename to web/src/assets/icon-font/iconfont.woff2 diff --git a/src/components/ImgUpload/index.vue b/web/src/components/ImgUpload/index.vue similarity index 84% rename from src/components/ImgUpload/index.vue rename to web/src/components/ImgUpload/index.vue index 5841c686..09da3823 100644 --- a/src/components/ImgUpload/index.vue +++ b/web/src/components/ImgUpload/index.vue @@ -31,8 +31,6 @@