优化注释,去掉冗余信息
This commit is contained in:
parent
e634fee753
commit
0d3c1b7417
@ -53,19 +53,9 @@ const defaultOpt = {
|
|||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 思维导图
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-06 11:18:47
|
|
||||||
* @Desc: 思维导图
|
|
||||||
*/
|
|
||||||
class MindMap {
|
class MindMap {
|
||||||
/**
|
// 构造函数
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-06 11:19:01
|
|
||||||
* @Desc: 构造函数
|
|
||||||
*/
|
|
||||||
constructor(opt = {}) {
|
constructor(opt = {}) {
|
||||||
// 合并选项
|
// 合并选项
|
||||||
this.opt = this.handleOpt(merge(defaultOpt, opt))
|
this.opt = this.handleOpt(merge(defaultOpt, opt))
|
||||||
@ -149,11 +139,7 @@ class MindMap {
|
|||||||
}, 0)
|
}, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 配置参数处理
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-01 22:15:22
|
|
||||||
* @Desc: 配置参数处理
|
|
||||||
*/
|
|
||||||
handleOpt(opt) {
|
handleOpt(opt) {
|
||||||
// 检查布局配置
|
// 检查布局配置
|
||||||
if (!layoutValueList.includes(opt.layout)) {
|
if (!layoutValueList.includes(opt.layout)) {
|
||||||
@ -164,12 +150,7 @@ class MindMap {
|
|||||||
return opt
|
return opt
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 渲染,部分渲染
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-06 18:47:29
|
|
||||||
* @Desc: 渲染,部分渲染
|
|
||||||
*/
|
|
||||||
render() {
|
render() {
|
||||||
this.batchExecution.push('render', () => {
|
this.batchExecution.push('render', () => {
|
||||||
this.initTheme()
|
this.initTheme()
|
||||||
@ -178,11 +159,7 @@ class MindMap {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 重新渲染
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-08 22:05:11
|
|
||||||
* @Desc: 重新渲染
|
|
||||||
*/
|
|
||||||
reRender() {
|
reRender() {
|
||||||
this.batchExecution.push('render', () => {
|
this.batchExecution.push('render', () => {
|
||||||
this.draw.clear()
|
this.draw.clear()
|
||||||
@ -192,11 +169,7 @@ class MindMap {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 容器尺寸变化,调整尺寸
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-11 21:16:52
|
|
||||||
* @Desc: 容器尺寸变化,调整尺寸
|
|
||||||
*/
|
|
||||||
resize() {
|
resize() {
|
||||||
this.elRect = this.el.getBoundingClientRect()
|
this.elRect = this.el.getBoundingClientRect()
|
||||||
this.width = this.elRect.width
|
this.width = this.elRect.width
|
||||||
@ -204,38 +177,22 @@ class MindMap {
|
|||||||
this.svg.size(this.width, this.height)
|
this.svg.size(this.width, this.height)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 监听事件
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-24 13:25:50
|
|
||||||
* @Desc: 监听事件
|
|
||||||
*/
|
|
||||||
on(event, fn) {
|
on(event, fn) {
|
||||||
this.event.on(event, fn)
|
this.event.on(event, fn)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 触发事件
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-24 13:51:35
|
|
||||||
* @Desc: 触发事件
|
|
||||||
*/
|
|
||||||
emit(event, ...args) {
|
emit(event, ...args) {
|
||||||
this.event.emit(event, ...args)
|
this.event.emit(event, ...args)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 解绑事件
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-24 13:53:54
|
|
||||||
* @Desc: 解绑事件
|
|
||||||
*/
|
|
||||||
off(event, fn) {
|
off(event, fn) {
|
||||||
this.event.off(event, fn)
|
this.event.off(event, fn)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 设置主题
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-05-05 13:32:43
|
|
||||||
* @Desc: 设置主题
|
|
||||||
*/
|
|
||||||
initTheme() {
|
initTheme() {
|
||||||
// 合并主题配置
|
// 合并主题配置
|
||||||
this.themeConfig = merge(theme[this.opt.theme], this.opt.themeConfig)
|
this.themeConfig = merge(theme[this.opt.theme], this.opt.themeConfig)
|
||||||
@ -243,70 +200,40 @@ class MindMap {
|
|||||||
Style.setBackgroundStyle(this.el, this.themeConfig)
|
Style.setBackgroundStyle(this.el, this.themeConfig)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 设置主题
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-05-05 13:52:08
|
|
||||||
* @Desc: 设置主题
|
|
||||||
*/
|
|
||||||
setTheme(theme) {
|
setTheme(theme) {
|
||||||
this.renderer.clearAllActive()
|
this.renderer.clearAllActive()
|
||||||
this.opt.theme = theme
|
this.opt.theme = theme
|
||||||
this.reRender()
|
this.reRender()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 获取当前主题
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-06-25 23:52:37
|
|
||||||
* @Desc: 获取当前主题
|
|
||||||
*/
|
|
||||||
getTheme() {
|
getTheme() {
|
||||||
return this.opt.theme
|
return this.opt.theme
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 设置主题配置
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-05-05 13:50:17
|
|
||||||
* @Desc: 设置主题配置
|
|
||||||
*/
|
|
||||||
setThemeConfig(config) {
|
setThemeConfig(config) {
|
||||||
this.opt.themeConfig = config
|
this.opt.themeConfig = config
|
||||||
this.reRender()
|
this.reRender()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 获取自定义主题配置
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-08-01 10:38:34
|
|
||||||
* @Desc: 获取自定义主题配置
|
|
||||||
*/
|
|
||||||
getCustomThemeConfig() {
|
getCustomThemeConfig() {
|
||||||
return this.opt.themeConfig
|
return this.opt.themeConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 获取某个主题配置值
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-05-05 14:01:29
|
|
||||||
* @Desc: 获取某个主题配置值
|
|
||||||
*/
|
|
||||||
getThemeConfig(prop) {
|
getThemeConfig(prop) {
|
||||||
return prop === undefined ? this.themeConfig : this.themeConfig[prop]
|
return prop === undefined ? this.themeConfig : this.themeConfig[prop]
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 获取当前布局结构
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-07-13 16:17:06
|
|
||||||
* @Desc: 获取当前布局结构
|
|
||||||
*/
|
|
||||||
getLayout() {
|
getLayout() {
|
||||||
return this.opt.layout
|
return this.opt.layout
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 设置布局结构
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-07-13 16:17:33
|
|
||||||
* @Desc: 设置布局结构
|
|
||||||
*/
|
|
||||||
setLayout(layout) {
|
setLayout(layout) {
|
||||||
// 检查布局配置
|
// 检查布局配置
|
||||||
if (!layoutValueList.includes(layout)) {
|
if (!layoutValueList.includes(layout)) {
|
||||||
@ -317,20 +244,12 @@ class MindMap {
|
|||||||
this.render()
|
this.render()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 执行命令
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-05-04 13:01:00
|
|
||||||
* @Desc: 执行命令
|
|
||||||
*/
|
|
||||||
execCommand(...args) {
|
execCommand(...args) {
|
||||||
this.command.exec(...args)
|
this.command.exec(...args)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 动态设置思维导图数据,纯节点数据
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-08-03 22:58:12
|
|
||||||
* @Desc: 动态设置思维导图数据,纯节点数据
|
|
||||||
*/
|
|
||||||
setData(data) {
|
setData(data) {
|
||||||
this.execCommand('CLEAR_ACTIVE_NODE')
|
this.execCommand('CLEAR_ACTIVE_NODE')
|
||||||
this.command.clearHistory()
|
this.command.clearHistory()
|
||||||
@ -338,12 +257,7 @@ class MindMap {
|
|||||||
this.reRender()
|
this.reRender()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 动态设置思维导图数据,包括节点数据、布局、主题、视图
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-09-21 16:39:13
|
|
||||||
* @Desc: 动态设置思维导图数据,包括节点数据、布局、主题、视图
|
|
||||||
*/
|
|
||||||
setFullData(data) {
|
setFullData(data) {
|
||||||
if (data.root) {
|
if (data.root) {
|
||||||
this.setData(data.root)
|
this.setData(data.root)
|
||||||
@ -364,12 +278,7 @@ class MindMap {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 获取思维导图数据,节点树、主题、布局等
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2022-09-24 14:42:07
|
|
||||||
* @Desc: 获取思维导图数据,节点树、主题、布局等
|
|
||||||
*/
|
|
||||||
getData(withConfig) {
|
getData(withConfig) {
|
||||||
let nodeData = this.command.getCopyData()
|
let nodeData = this.command.getCopyData()
|
||||||
let data = {}
|
let data = {}
|
||||||
@ -389,21 +298,13 @@ class MindMap {
|
|||||||
return simpleDeepClone(data)
|
return simpleDeepClone(data)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 导出
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-01 22:06:38
|
|
||||||
* @Desc: 导出
|
|
||||||
*/
|
|
||||||
async export(...args) {
|
async export(...args) {
|
||||||
let result = await this.doExport.export(...args)
|
let result = await this.doExport.export(...args)
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 转换位置
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-11 09:20:03
|
|
||||||
* @Desc: 转换位置
|
|
||||||
*/
|
|
||||||
toPos(x, y) {
|
toPos(x, y) {
|
||||||
return {
|
return {
|
||||||
x: x - this.elRect.left,
|
x: x - this.elRect.left,
|
||||||
@ -411,12 +312,7 @@ class MindMap {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 设置只读模式、编辑模式
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-06-08 14:12:38
|
|
||||||
* @Desc: 设置只读模式、编辑模式
|
|
||||||
*/
|
|
||||||
setMode(mode) {
|
setMode(mode) {
|
||||||
if (!['readonly', 'edit'].includes(mode)) {
|
if (!['readonly', 'edit'].includes(mode)) {
|
||||||
return
|
return
|
||||||
|
|||||||
32
simple-mind-map/scripts/changeComments.js
Normal file
32
simple-mind-map/scripts/changeComments.js
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
// 将/** */类型的注释转换为//类型
|
||||||
|
const path = require('path')
|
||||||
|
const fs = require('fs')
|
||||||
|
|
||||||
|
const entryPath = path.resolve(__dirname, '../src')
|
||||||
|
|
||||||
|
const transform = dir => {
|
||||||
|
let dirs = fs.readdirSync(dir)
|
||||||
|
dirs.forEach(item => {
|
||||||
|
let file = path.join(dir, item)
|
||||||
|
if (fs.statSync(file).isDirectory()) {
|
||||||
|
transform(file)
|
||||||
|
} else if (/\.js$/.test(file)) {
|
||||||
|
rewriteComments(file)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const rewriteComments = file => {
|
||||||
|
let content = fs.readFileSync(file, 'utf-8')
|
||||||
|
console.log('当前转换文件:', file)
|
||||||
|
content = content.replace(/\/\*\*[^/]+\*\//g, str => {
|
||||||
|
let res = /@Desc:([^\n]+)\n/g.exec(str)
|
||||||
|
if (res.length > 0) {
|
||||||
|
return '// ' + res[1]
|
||||||
|
}
|
||||||
|
})
|
||||||
|
fs.writeFileSync(file, content)
|
||||||
|
}
|
||||||
|
|
||||||
|
transform(entryPath)
|
||||||
|
rewriteComments(path.join(__dirname, '../index.js'))
|
||||||
@ -1,8 +1,4 @@
|
|||||||
/**
|
// 在下一个事件循环里执行任务
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-06-27 13:16:23
|
|
||||||
* @Desc: 在下一个事件循环里执行任务
|
|
||||||
*/
|
|
||||||
const nextTick = function (fn, ctx) {
|
const nextTick = function (fn, ctx) {
|
||||||
let pending = false
|
let pending = false
|
||||||
let timerFunc = null
|
let timerFunc = null
|
||||||
@ -33,28 +29,16 @@ const nextTick = function (fn, ctx) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 批量执行
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-06-26 22:40:52
|
|
||||||
* @Desc: 批量执行
|
|
||||||
*/
|
|
||||||
class BatchExecution {
|
class BatchExecution {
|
||||||
/**
|
// 构造函数
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-06-26 22:41:41
|
|
||||||
* @Desc: 构造函数
|
|
||||||
*/
|
|
||||||
constructor() {
|
constructor() {
|
||||||
this.has = {}
|
this.has = {}
|
||||||
this.queue = []
|
this.queue = []
|
||||||
this.nextTick = nextTick(this.flush, this)
|
this.nextTick = nextTick(this.flush, this)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 添加任务
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-06-27 12:54:04
|
|
||||||
* @Desc: 添加任务
|
|
||||||
*/
|
|
||||||
push(name, fn) {
|
push(name, fn) {
|
||||||
if (this.has[name]) {
|
if (this.has[name]) {
|
||||||
return
|
return
|
||||||
@ -67,11 +51,7 @@ class BatchExecution {
|
|||||||
this.nextTick()
|
this.nextTick()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 执行队列
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-06-27 13:09:24
|
|
||||||
* @Desc: 执行队列
|
|
||||||
*/
|
|
||||||
flush() {
|
flush() {
|
||||||
let fns = this.queue.slice(0)
|
let fns = this.queue.slice(0)
|
||||||
this.queue = []
|
this.queue = []
|
||||||
|
|||||||
@ -1,16 +1,8 @@
|
|||||||
import { copyRenderTree, simpleDeepClone } from './utils'
|
import { copyRenderTree, simpleDeepClone } from './utils'
|
||||||
|
|
||||||
/**
|
// 命令类
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-05-04 13:10:06
|
|
||||||
* @Desc: 命令类
|
|
||||||
*/
|
|
||||||
class Command {
|
class Command {
|
||||||
/**
|
// 构造函数
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-05-04 13:10:24
|
|
||||||
* @Desc: 构造函数
|
|
||||||
*/
|
|
||||||
constructor(opt = {}) {
|
constructor(opt = {}) {
|
||||||
this.opt = opt
|
this.opt = opt
|
||||||
this.mindMap = opt.mindMap
|
this.mindMap = opt.mindMap
|
||||||
@ -21,22 +13,14 @@ class Command {
|
|||||||
this.registerShortcutKeys()
|
this.registerShortcutKeys()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 清空历史数据
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-08-03 23:06:55
|
|
||||||
* @Desc: 清空历史数据
|
|
||||||
*/
|
|
||||||
clearHistory() {
|
clearHistory() {
|
||||||
this.history = []
|
this.history = []
|
||||||
this.activeHistoryIndex = 0
|
this.activeHistoryIndex = 0
|
||||||
this.mindMap.emit('back_forward', 0, 0)
|
this.mindMap.emit('back_forward', 0, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 注册快捷键
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-08-02 23:23:19
|
|
||||||
* @Desc: 注册快捷键
|
|
||||||
*/
|
|
||||||
registerShortcutKeys() {
|
registerShortcutKeys() {
|
||||||
this.mindMap.keyCommand.addShortcut('Control+z', () => {
|
this.mindMap.keyCommand.addShortcut('Control+z', () => {
|
||||||
this.mindMap.execCommand('BACK')
|
this.mindMap.execCommand('BACK')
|
||||||
@ -46,11 +30,7 @@ class Command {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 执行命令
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-05-04 13:12:30
|
|
||||||
* @Desc: 执行命令
|
|
||||||
*/
|
|
||||||
exec(name, ...args) {
|
exec(name, ...args) {
|
||||||
if (this.commands[name]) {
|
if (this.commands[name]) {
|
||||||
this.commands[name].forEach(fn => {
|
this.commands[name].forEach(fn => {
|
||||||
@ -63,11 +43,7 @@ class Command {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 添加命令
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-05-04 13:13:01
|
|
||||||
* @Desc: 添加命令
|
|
||||||
*/
|
|
||||||
add(name, fn) {
|
add(name, fn) {
|
||||||
if (this.commands[name]) {
|
if (this.commands[name]) {
|
||||||
this.commands[name].push(fn)
|
this.commands[name].push(fn)
|
||||||
@ -76,11 +52,7 @@ class Command {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 移除命令
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-15 23:02:41
|
|
||||||
* @Desc: 移除命令
|
|
||||||
*/
|
|
||||||
remove(name, fn) {
|
remove(name, fn) {
|
||||||
if (!this.commands[name]) {
|
if (!this.commands[name]) {
|
||||||
return
|
return
|
||||||
@ -98,11 +70,7 @@ class Command {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 添加回退数据
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-05-04 14:35:43
|
|
||||||
* @Desc: 添加回退数据
|
|
||||||
*/
|
|
||||||
addHistory() {
|
addHistory() {
|
||||||
let data = this.getCopyData()
|
let data = this.getCopyData()
|
||||||
this.history.push(simpleDeepClone(data))
|
this.history.push(simpleDeepClone(data))
|
||||||
@ -115,11 +83,7 @@ class Command {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 回退
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-11 22:34:53
|
|
||||||
* @Desc: 回退
|
|
||||||
*/
|
|
||||||
back(step = 1) {
|
back(step = 1) {
|
||||||
if (this.activeHistoryIndex - step >= 0) {
|
if (this.activeHistoryIndex - step >= 0) {
|
||||||
this.activeHistoryIndex -= step
|
this.activeHistoryIndex -= step
|
||||||
@ -132,12 +96,7 @@ class Command {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 前进
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-07-12 10:45:31
|
|
||||||
* @Desc: 前进
|
|
||||||
*/
|
|
||||||
forward(step = 1) {
|
forward(step = 1) {
|
||||||
let len = this.history.length
|
let len = this.history.length
|
||||||
if (this.activeHistoryIndex + step <= len - 1) {
|
if (this.activeHistoryIndex + step <= len - 1) {
|
||||||
@ -147,11 +106,7 @@ class Command {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 获取渲染树数据副本
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-05-04 15:02:58
|
|
||||||
* @Desc: 获取渲染树数据副本
|
|
||||||
*/
|
|
||||||
getCopyData() {
|
getCopyData() {
|
||||||
return copyRenderTree({}, this.mindMap.renderer.renderTree)
|
return copyRenderTree({}, this.mindMap.renderer.renderTree)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,18 +1,9 @@
|
|||||||
import { bfsWalk, throttle } from './utils'
|
import { bfsWalk, throttle } from './utils'
|
||||||
import Base from './layouts/Base'
|
import Base from './layouts/Base'
|
||||||
|
|
||||||
/**
|
// 节点拖动类
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-11-23 17:38:55
|
|
||||||
* @Desc: 节点拖动类
|
|
||||||
*/
|
|
||||||
class Drag extends Base {
|
class Drag extends Base {
|
||||||
/**
|
// 构造函数
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-10 22:35:16
|
|
||||||
* @Desc: 构造函数
|
|
||||||
*/
|
|
||||||
constructor({ mindMap }) {
|
constructor({ mindMap }) {
|
||||||
super(mindMap.renderer)
|
super(mindMap.renderer)
|
||||||
this.mindMap = mindMap
|
this.mindMap = mindMap
|
||||||
@ -20,12 +11,7 @@ class Drag extends Base {
|
|||||||
this.bindEvent()
|
this.bindEvent()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 复位
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-11-23 19:33:56
|
|
||||||
* @Desc: 复位
|
|
||||||
*/
|
|
||||||
reset() {
|
reset() {
|
||||||
// 当前拖拽节点
|
// 当前拖拽节点
|
||||||
this.node = null
|
this.node = null
|
||||||
@ -58,11 +44,7 @@ class Drag extends Base {
|
|||||||
this.mouseMoveY = 0
|
this.mouseMoveY = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 绑定事件
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-10 22:36:36
|
|
||||||
* @Desc: 绑定事件
|
|
||||||
*/
|
|
||||||
bindEvent() {
|
bindEvent() {
|
||||||
this.checkOverlapNode = throttle(this.checkOverlapNode, 300, this)
|
this.checkOverlapNode = throttle(this.checkOverlapNode, 300, this)
|
||||||
this.mindMap.on('node_mousedown', (node, e) => {
|
this.mindMap.on('node_mousedown', (node, e) => {
|
||||||
@ -110,12 +92,7 @@ class Drag extends Base {
|
|||||||
this.mindMap.on('mouseup', this.onMouseup)
|
this.mindMap.on('mouseup', this.onMouseup)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 鼠标松开事件
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-11-23 19:38:02
|
|
||||||
* @Desc: 鼠标松开事件
|
|
||||||
*/
|
|
||||||
onMouseup(e) {
|
onMouseup(e) {
|
||||||
if (!this.isMousedown) {
|
if (!this.isMousedown) {
|
||||||
return
|
return
|
||||||
@ -156,12 +133,7 @@ class Drag extends Base {
|
|||||||
this.reset()
|
this.reset()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 创建克隆节点
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-11-23 19:34:53
|
|
||||||
* @Desc: 创建克隆节点
|
|
||||||
*/
|
|
||||||
createCloneNode() {
|
createCloneNode() {
|
||||||
if (!this.clone) {
|
if (!this.clone) {
|
||||||
// 节点
|
// 节点
|
||||||
@ -182,12 +154,7 @@ class Drag extends Base {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 移除克隆节点
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-11-23 19:35:16
|
|
||||||
* @Desc: 移除克隆节点
|
|
||||||
*/
|
|
||||||
removeCloneNode() {
|
removeCloneNode() {
|
||||||
if (!this.clone) {
|
if (!this.clone) {
|
||||||
return
|
return
|
||||||
@ -197,12 +164,7 @@ class Drag extends Base {
|
|||||||
this.placeholder.remove()
|
this.placeholder.remove()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 拖动中
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-11-23 18:53:47
|
|
||||||
* @Desc: 拖动中
|
|
||||||
*/
|
|
||||||
onMove(x, y) {
|
onMove(x, y) {
|
||||||
if (!this.isMousedown) {
|
if (!this.isMousedown) {
|
||||||
return
|
return
|
||||||
@ -228,11 +190,7 @@ class Drag extends Base {
|
|||||||
this.checkOverlapNode()
|
this.checkOverlapNode()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 检测重叠节点
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-11 10:20:43
|
|
||||||
* @Desc: 检测重叠节点
|
|
||||||
*/
|
|
||||||
checkOverlapNode() {
|
checkOverlapNode() {
|
||||||
if (!this.drawTransform) {
|
if (!this.drawTransform) {
|
||||||
return
|
return
|
||||||
|
|||||||
@ -1,18 +1,8 @@
|
|||||||
import EventEmitter from 'eventemitter3'
|
import EventEmitter from 'eventemitter3'
|
||||||
|
|
||||||
/**
|
// 事件类
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-07 14:53:09
|
|
||||||
* @Desc: 事件类
|
|
||||||
*/
|
|
||||||
class Event extends EventEmitter {
|
class Event extends EventEmitter {
|
||||||
/**
|
// 构造函数
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-07 14:53:25
|
|
||||||
* @Desc: 构造函数
|
|
||||||
*/
|
|
||||||
constructor(opt = {}) {
|
constructor(opt = {}) {
|
||||||
super()
|
super()
|
||||||
this.opt = opt
|
this.opt = opt
|
||||||
@ -34,12 +24,7 @@ class Event extends EventEmitter {
|
|||||||
this.bind()
|
this.bind()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 绑定函数上下文
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-07 15:52:24
|
|
||||||
* @Desc: 绑定函数上下文
|
|
||||||
*/
|
|
||||||
bindFn() {
|
bindFn() {
|
||||||
this.onDrawClick = this.onDrawClick.bind(this)
|
this.onDrawClick = this.onDrawClick.bind(this)
|
||||||
this.onMousedown = this.onMousedown.bind(this)
|
this.onMousedown = this.onMousedown.bind(this)
|
||||||
@ -51,12 +36,7 @@ class Event extends EventEmitter {
|
|||||||
this.onKeyup = this.onKeyup.bind(this)
|
this.onKeyup = this.onKeyup.bind(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 绑定事件
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-07 14:53:43
|
|
||||||
* @Desc: 绑定事件
|
|
||||||
*/
|
|
||||||
bind() {
|
bind() {
|
||||||
this.mindMap.svg.on('click', this.onDrawClick)
|
this.mindMap.svg.on('click', this.onDrawClick)
|
||||||
this.mindMap.el.addEventListener('mousedown', this.onMousedown)
|
this.mindMap.el.addEventListener('mousedown', this.onMousedown)
|
||||||
@ -73,12 +53,7 @@ class Event extends EventEmitter {
|
|||||||
window.addEventListener('keyup', this.onKeyup)
|
window.addEventListener('keyup', this.onKeyup)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 解绑事件
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-07 15:40:51
|
|
||||||
* @Desc: 解绑事件
|
|
||||||
*/
|
|
||||||
unbind() {
|
unbind() {
|
||||||
this.mindMap.svg.off('click', this.onDrawClick)
|
this.mindMap.svg.off('click', this.onDrawClick)
|
||||||
this.mindMap.el.removeEventListener('mousedown', this.onMousedown)
|
this.mindMap.el.removeEventListener('mousedown', this.onMousedown)
|
||||||
@ -89,30 +64,17 @@ class Event extends EventEmitter {
|
|||||||
window.removeEventListener('keyup', this.onKeyup)
|
window.removeEventListener('keyup', this.onKeyup)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 画布的单击事件
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-24 13:19:39
|
|
||||||
* @Desc: 画布的单击事件
|
|
||||||
*/
|
|
||||||
onDrawClick(e) {
|
onDrawClick(e) {
|
||||||
this.emit('draw_click', e)
|
this.emit('draw_click', e)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// svg画布的鼠标按下事件
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-16 13:37:30
|
|
||||||
* @Desc: svg画布的鼠标按下事件
|
|
||||||
*/
|
|
||||||
onSvgMousedown(e) {
|
onSvgMousedown(e) {
|
||||||
this.emit('svg_mousedown', e)
|
this.emit('svg_mousedown', e)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 鼠标按下事件
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-07 15:17:35
|
|
||||||
* @Desc: 鼠标按下事件
|
|
||||||
*/
|
|
||||||
onMousedown(e) {
|
onMousedown(e) {
|
||||||
// e.preventDefault()
|
// e.preventDefault()
|
||||||
// 鼠标左键
|
// 鼠标左键
|
||||||
@ -124,12 +86,7 @@ class Event extends EventEmitter {
|
|||||||
this.emit('mousedown', e, this)
|
this.emit('mousedown', e, this)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 鼠标移动事件
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-07 15:18:32
|
|
||||||
* @Desc: 鼠标移动事件
|
|
||||||
*/
|
|
||||||
onMousemove(e) {
|
onMousemove(e) {
|
||||||
// e.preventDefault()
|
// e.preventDefault()
|
||||||
this.mousemovePos.x = e.clientX
|
this.mousemovePos.x = e.clientX
|
||||||
@ -142,23 +99,13 @@ class Event extends EventEmitter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 鼠标松开事件
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-07 15:18:57
|
|
||||||
* @Desc: 鼠标松开事件
|
|
||||||
*/
|
|
||||||
onMouseup(e) {
|
onMouseup(e) {
|
||||||
this.isLeftMousedown = false
|
this.isLeftMousedown = false
|
||||||
this.emit('mouseup', e, this)
|
this.emit('mouseup', e, this)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 鼠标滚动
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-07 15:46:27
|
|
||||||
* @Desc: 鼠标滚动
|
|
||||||
*/
|
|
||||||
onMousewheel(e) {
|
onMousewheel(e) {
|
||||||
e.stopPropagation()
|
e.stopPropagation()
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
@ -171,22 +118,13 @@ class Event extends EventEmitter {
|
|||||||
this.emit('mousewheel', e, dir, this)
|
this.emit('mousewheel', e, dir, this)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 鼠标右键菜单事件
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-10 22:34:13
|
|
||||||
* @Desc: 鼠标右键菜单事件
|
|
||||||
*/
|
|
||||||
onContextmenu(e) {
|
onContextmenu(e) {
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
this.emit('contextmenu', e)
|
this.emit('contextmenu', e)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 按键松开事件
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-12-09 11:12:11
|
|
||||||
* @Desc: 按键松开事件
|
|
||||||
*/
|
|
||||||
onKeyup(e) {
|
onKeyup(e) {
|
||||||
this.emit('keyup', e)
|
this.emit('keyup', e)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,27 +3,15 @@ import JsPDF from 'jspdf'
|
|||||||
import { SVG } from '@svgdotjs/svg.js'
|
import { SVG } from '@svgdotjs/svg.js'
|
||||||
const URL = window.URL || window.webkitURL || window
|
const URL = window.URL || window.webkitURL || window
|
||||||
|
|
||||||
/**
|
// 导出类
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-01 22:05:16
|
|
||||||
* @Desc: 导出类
|
|
||||||
*/
|
|
||||||
class Export {
|
class Export {
|
||||||
/**
|
// 构造函数
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-01 22:05:42
|
|
||||||
* @Desc: 构造函数
|
|
||||||
*/
|
|
||||||
constructor(opt) {
|
constructor(opt) {
|
||||||
this.mindMap = opt.mindMap
|
this.mindMap = opt.mindMap
|
||||||
this.exportPadding = this.mindMap.opt.exportPadding
|
this.exportPadding = this.mindMap.opt.exportPadding
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 导出
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-02 07:44:06
|
|
||||||
* @Desc: 导出
|
|
||||||
*/
|
|
||||||
async export(type, isDownload = true, name = '思维导图', ...args) {
|
async export(type, isDownload = true, name = '思维导图', ...args) {
|
||||||
if (this[type]) {
|
if (this[type]) {
|
||||||
let result = await this[type](name, ...args)
|
let result = await this[type](name, ...args)
|
||||||
@ -36,11 +24,7 @@ class Export {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 获取svg数据
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-04 14:57:40
|
|
||||||
* @Desc: 获取svg数据
|
|
||||||
*/
|
|
||||||
async getSvgData() {
|
async getSvgData() {
|
||||||
let { svg, svgHTML } = this.mindMap.miniMap.getMiniMap()
|
let { svg, svgHTML } = this.mindMap.miniMap.getMiniMap()
|
||||||
// 把图片的url转换成data:url类型,否则导出会丢失图片
|
// 把图片的url转换成data:url类型,否则导出会丢失图片
|
||||||
@ -57,11 +41,7 @@ class Export {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// svg转png
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-04 15:25:19
|
|
||||||
* @Desc: svg转png
|
|
||||||
*/
|
|
||||||
svgToPng(svgSrc) {
|
svgToPng(svgSrc) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const img = new Image()
|
const img = new Image()
|
||||||
@ -99,11 +79,7 @@ class Export {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 在canvas上绘制思维导图背景
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-04 15:32:07
|
|
||||||
* @Desc: 在canvas上绘制思维导图背景
|
|
||||||
*/
|
|
||||||
drawBackgroundToCanvas(ctx, width, height) {
|
drawBackgroundToCanvas(ctx, width, height) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let {
|
let {
|
||||||
@ -139,10 +115,8 @@ class Export {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 导出为png
|
||||||
/**
|
/**
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-01 22:09:51
|
|
||||||
* @Desc: 导出为png
|
|
||||||
* 方法1.把svg的图片都转化成data:url格式,再转换
|
* 方法1.把svg的图片都转化成data:url格式,再转换
|
||||||
* 方法2.把svg的图片提取出来再挨个绘制到canvas里,最后一起转换
|
* 方法2.把svg的图片提取出来再挨个绘制到canvas里,最后一起转换
|
||||||
*/
|
*/
|
||||||
@ -160,12 +134,7 @@ class Export {
|
|||||||
return imgDataUrl
|
return imgDataUrl
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 导出为pdf
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-08-08 19:23:08
|
|
||||||
* @Desc: 导出为pdf
|
|
||||||
*/
|
|
||||||
async pdf(name) {
|
async pdf(name) {
|
||||||
let img = await this.png()
|
let img = await this.png()
|
||||||
let pdf = new JsPDF('', 'pt', 'a4')
|
let pdf = new JsPDF('', 'pt', 'a4')
|
||||||
@ -197,11 +166,7 @@ class Export {
|
|||||||
image.src = img
|
image.src = img
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 在svg上绘制思维导图背景
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-04 15:32:07
|
|
||||||
* @Desc: 在svg上绘制思维导图背景
|
|
||||||
*/
|
|
||||||
drawBackgroundToSvg(svg) {
|
drawBackgroundToSvg(svg) {
|
||||||
return new Promise(async resolve => {
|
return new Promise(async resolve => {
|
||||||
let {
|
let {
|
||||||
@ -223,11 +188,7 @@ class Export {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 导出为svg
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-04 14:54:07
|
|
||||||
* @Desc: 导出为svg
|
|
||||||
*/
|
|
||||||
async svg(name) {
|
async svg(name) {
|
||||||
let { node } = await this.getSvgData()
|
let { node } = await this.getSvgData()
|
||||||
node.first().before(SVG(`<title>${name}</title>`))
|
node.first().before(SVG(`<title>${name}</title>`))
|
||||||
@ -240,11 +201,7 @@ class Export {
|
|||||||
return URL.createObjectURL(blob)
|
return URL.createObjectURL(blob)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 导出为json
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-08-03 22:19:17
|
|
||||||
* @Desc: 导出为json
|
|
||||||
*/
|
|
||||||
json(name, withConfig = true) {
|
json(name, withConfig = true) {
|
||||||
let data = this.mindMap.getData(withConfig)
|
let data = this.mindMap.getData(withConfig)
|
||||||
let str = JSON.stringify(data)
|
let str = JSON.stringify(data)
|
||||||
@ -252,11 +209,7 @@ class Export {
|
|||||||
return URL.createObjectURL(blob)
|
return URL.createObjectURL(blob)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 专有文件,其实就是json文件
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-08-03 22:24:24
|
|
||||||
* @Desc: 专有文件,其实就是json文件
|
|
||||||
*/
|
|
||||||
smm(name, withConfig) {
|
smm(name, withConfig) {
|
||||||
return this.json(name, withConfig)
|
return this.json(name, withConfig)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,15 +1,7 @@
|
|||||||
import { keyMap } from './utils/keyMap'
|
import { keyMap } from './utils/keyMap'
|
||||||
/**
|
// 快捷按键、命令处理类
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-24 15:20:46
|
|
||||||
* @Desc: 快捷按键、命令处理类
|
|
||||||
*/
|
|
||||||
export default class KeyCommand {
|
export default class KeyCommand {
|
||||||
/**
|
// 构造函数
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-24 15:21:32
|
|
||||||
* @Desc: 构造函数
|
|
||||||
*/
|
|
||||||
constructor(opt) {
|
constructor(opt) {
|
||||||
this.opt = opt
|
this.opt = opt
|
||||||
this.mindMap = opt.mindMap
|
this.mindMap = opt.mindMap
|
||||||
@ -21,51 +13,29 @@ export default class KeyCommand {
|
|||||||
this.bindEvent()
|
this.bindEvent()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 暂停快捷键响应
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2022-08-14 08:57:55
|
|
||||||
* @Desc: 暂停快捷键响应
|
|
||||||
*/
|
|
||||||
pause() {
|
pause() {
|
||||||
this.isPause = true
|
this.isPause = true
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 恢复快捷键响应
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2022-08-14 08:58:43
|
|
||||||
* @Desc: 恢复快捷键响应
|
|
||||||
*/
|
|
||||||
recovery() {
|
recovery() {
|
||||||
this.isPause = false
|
this.isPause = false
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 保存当前注册的快捷键数据,然后清空快捷键数据
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-08-16 16:29:01
|
|
||||||
* @Desc: 保存当前注册的快捷键数据,然后清空快捷键数据
|
|
||||||
*/
|
|
||||||
save() {
|
save() {
|
||||||
this.shortcutMapCache = this.shortcutMap
|
this.shortcutMapCache = this.shortcutMap
|
||||||
this.shortcutMap = {}
|
this.shortcutMap = {}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 恢复保存的快捷键数据,然后清空缓存数据
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-08-16 16:29:38
|
|
||||||
* @Desc: 恢复保存的快捷键数据,然后清空缓存数据
|
|
||||||
*/
|
|
||||||
restore() {
|
restore() {
|
||||||
this.shortcutMap = this.shortcutMapCache
|
this.shortcutMap = this.shortcutMapCache
|
||||||
this.shortcutMapCache = {}
|
this.shortcutMapCache = {}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 绑定事件
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-24 15:23:22
|
|
||||||
* @Desc: 绑定事件
|
|
||||||
*/
|
|
||||||
bindEvent() {
|
bindEvent() {
|
||||||
window.addEventListener('keydown', e => {
|
window.addEventListener('keydown', e => {
|
||||||
if (this.isPause) {
|
if (this.isPause) {
|
||||||
@ -83,11 +53,7 @@ export default class KeyCommand {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 检查键值是否符合
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-24 19:24:53
|
|
||||||
* @Desc: 检查键值是否符合
|
|
||||||
*/
|
|
||||||
checkKey(e, key) {
|
checkKey(e, key) {
|
||||||
let o = this.getOriginEventCodeArr(e)
|
let o = this.getOriginEventCodeArr(e)
|
||||||
let k = this.getKeyCodeArr(key)
|
let k = this.getKeyCodeArr(key)
|
||||||
@ -107,11 +73,7 @@ export default class KeyCommand {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 获取事件对象里的键值数组
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-24 19:15:19
|
|
||||||
* @Desc: 获取事件对象里的键值数组
|
|
||||||
*/
|
|
||||||
getOriginEventCodeArr(e) {
|
getOriginEventCodeArr(e) {
|
||||||
let arr = []
|
let arr = []
|
||||||
if (e.ctrlKey || e.metaKey) {
|
if (e.ctrlKey || e.metaKey) {
|
||||||
@ -129,11 +91,7 @@ export default class KeyCommand {
|
|||||||
return arr
|
return arr
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 获取快捷键对应的键值数组
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-24 19:40:11
|
|
||||||
* @Desc: 获取快捷键对应的键值数组
|
|
||||||
*/
|
|
||||||
getKeyCodeArr(key) {
|
getKeyCodeArr(key) {
|
||||||
let keyArr = key.split(/\s*\+\s*/)
|
let keyArr = key.split(/\s*\+\s*/)
|
||||||
let arr = []
|
let arr = []
|
||||||
@ -143,10 +101,8 @@ export default class KeyCommand {
|
|||||||
return arr
|
return arr
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 添加快捷键命令
|
||||||
/**
|
/**
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-24 15:23:00
|
|
||||||
* @Desc: 添加快捷键命令
|
|
||||||
* Enter
|
* Enter
|
||||||
* Tab | Insert
|
* Tab | Insert
|
||||||
* Shift + a
|
* Shift + a
|
||||||
@ -161,12 +117,7 @@ export default class KeyCommand {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 移除快捷键命令
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-07-27 14:06:16
|
|
||||||
* @Desc: 移除快捷键命令
|
|
||||||
*/
|
|
||||||
removeShortcut(key, fn) {
|
removeShortcut(key, fn) {
|
||||||
key.split(/\s*\|\s*/).forEach(item => {
|
key.split(/\s*\|\s*/).forEach(item => {
|
||||||
if (this.shortcutMap[item]) {
|
if (this.shortcutMap[item]) {
|
||||||
@ -185,11 +136,7 @@ export default class KeyCommand {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 获取指定快捷键的处理函数
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2022-08-14 08:49:58
|
|
||||||
* @Desc: 获取指定快捷键的处理函数
|
|
||||||
*/
|
|
||||||
getShortcutFn(key) {
|
getShortcutFn(key) {
|
||||||
let res = []
|
let res = []
|
||||||
key.split(/\s*\|\s*/).forEach(item => {
|
key.split(/\s*\|\s*/).forEach(item => {
|
||||||
|
|||||||
@ -1,19 +1,9 @@
|
|||||||
import { isKey } from './utils/keyMap'
|
import { isKey } from './utils/keyMap'
|
||||||
import { bfsWalk } from './utils'
|
import { bfsWalk } from './utils'
|
||||||
|
|
||||||
/**
|
// 键盘导航类
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-12-09 11:06:50
|
|
||||||
* @Desc: 键盘导航类
|
|
||||||
*/
|
|
||||||
export default class KeyboardNavigation {
|
export default class KeyboardNavigation {
|
||||||
/**
|
// 构造函数
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-12-09 11:07:24
|
|
||||||
* @Desc: 构造函数
|
|
||||||
*/
|
|
||||||
constructor(opt) {
|
constructor(opt) {
|
||||||
this.opt = opt
|
this.opt = opt
|
||||||
this.mindMap = opt.mindMap
|
this.mindMap = opt.mindMap
|
||||||
@ -21,12 +11,7 @@ export default class KeyboardNavigation {
|
|||||||
this.mindMap.on('keyup', this.onKeyup)
|
this.mindMap.on('keyup', this.onKeyup)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 处理按键事件
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-12-09 14:12:27
|
|
||||||
* @Desc: 处理按键事件
|
|
||||||
*/
|
|
||||||
onKeyup(e) {
|
onKeyup(e) {
|
||||||
;['Left', 'Up', 'Right', 'Down'].forEach(dir => {
|
;['Left', 'Up', 'Right', 'Down'].forEach(dir => {
|
||||||
if (isKey(e, dir)) {
|
if (isKey(e, dir)) {
|
||||||
@ -41,12 +26,7 @@ export default class KeyboardNavigation {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 聚焦到下一个节点
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-12-09 14:12:39
|
|
||||||
* @Desc: 聚焦到下一个节点
|
|
||||||
*/
|
|
||||||
focus(dir) {
|
focus(dir) {
|
||||||
// 当前聚焦的节点
|
// 当前聚焦的节点
|
||||||
let currentActiveNode = this.mindMap.renderer.activeNodeList[0]
|
let currentActiveNode = this.mindMap.renderer.activeNodeList[0]
|
||||||
@ -99,12 +79,7 @@ export default class KeyboardNavigation {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 1.简单算法
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-12-12 16:22:54
|
|
||||||
* @Desc: 1.简单算法
|
|
||||||
*/
|
|
||||||
getFocusNodeBySimpleAlgorithm({
|
getFocusNodeBySimpleAlgorithm({
|
||||||
currentActiveNode,
|
currentActiveNode,
|
||||||
currentActiveNodeRect,
|
currentActiveNodeRect,
|
||||||
@ -143,12 +118,7 @@ export default class KeyboardNavigation {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 2.阴影算法
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-12-12 16:24:54
|
|
||||||
* @Desc: 2.阴影算法
|
|
||||||
*/
|
|
||||||
getFocusNodeByShadowAlgorithm({
|
getFocusNodeByShadowAlgorithm({
|
||||||
currentActiveNode,
|
currentActiveNode,
|
||||||
currentActiveNodeRect,
|
currentActiveNodeRect,
|
||||||
@ -187,12 +157,7 @@ export default class KeyboardNavigation {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 3.区域算法
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-12-13 16:15:36
|
|
||||||
* @Desc: 3.区域算法
|
|
||||||
*/
|
|
||||||
getFocusNodeByAreaAlgorithm({
|
getFocusNodeByAreaAlgorithm({
|
||||||
currentActiveNode,
|
currentActiveNode,
|
||||||
currentActiveNodeRect,
|
currentActiveNodeRect,
|
||||||
@ -229,12 +194,7 @@ export default class KeyboardNavigation {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 获取节点的位置信息
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-12-09 14:12:50
|
|
||||||
* @Desc: 获取节点的位置信息
|
|
||||||
*/
|
|
||||||
getNodeRect(node) {
|
getNodeRect(node) {
|
||||||
let { scaleX, scaleY, translateX, translateY } =
|
let { scaleX, scaleY, translateX, translateY } =
|
||||||
this.mindMap.draw.transform()
|
this.mindMap.draw.transform()
|
||||||
@ -247,12 +207,7 @@ export default class KeyboardNavigation {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 获取两个节点的距离
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-12-09 14:13:04
|
|
||||||
* @Desc: 获取两个节点的距离
|
|
||||||
*/
|
|
||||||
getDistance(node1Rect, node2Rect) {
|
getDistance(node1Rect, node2Rect) {
|
||||||
let center1 = this.getCenter(node1Rect)
|
let center1 = this.getCenter(node1Rect)
|
||||||
let center2 = this.getCenter(node2Rect)
|
let center2 = this.getCenter(node2Rect)
|
||||||
@ -261,12 +216,7 @@ export default class KeyboardNavigation {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 获取节点的中心点
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-12-09 14:13:11
|
|
||||||
* @Desc: 获取节点的中心点
|
|
||||||
*/
|
|
||||||
getCenter({ left, right, top, bottom }) {
|
getCenter({ left, right, top, bottom }) {
|
||||||
return {
|
return {
|
||||||
x: (left + right) / 2,
|
x: (left + right) / 2,
|
||||||
|
|||||||
@ -1,11 +1,6 @@
|
|||||||
// 小地图类
|
// 小地图类
|
||||||
class MiniMap {
|
class MiniMap {
|
||||||
/**
|
// 构造函数
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-10-10 14:00:45
|
|
||||||
* @Desc: 构造函数
|
|
||||||
*/
|
|
||||||
constructor(opt) {
|
constructor(opt) {
|
||||||
this.mindMap = opt.mindMap
|
this.mindMap = opt.mindMap
|
||||||
this.isMousedown = false
|
this.isMousedown = false
|
||||||
@ -19,12 +14,7 @@ class MiniMap {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 获取小地图相关数据
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-10-10 14:00:43
|
|
||||||
* @Desc: 获取小地图相关数据
|
|
||||||
*/
|
|
||||||
getMiniMap() {
|
getMiniMap() {
|
||||||
const svg = this.mindMap.svg
|
const svg = this.mindMap.svg
|
||||||
const draw = this.mindMap.draw
|
const draw = this.mindMap.draw
|
||||||
@ -61,11 +51,8 @@ class MiniMap {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 计算小地图的渲染数据
|
||||||
/**
|
/**
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-10-10 14:05:51
|
|
||||||
* @Desc: 计算小地图的渲染数据
|
|
||||||
* boxWidth:小地图容器的宽度
|
* boxWidth:小地图容器的宽度
|
||||||
* boxHeight:小地图容器的高度
|
* boxHeight:小地图容器的高度
|
||||||
*/
|
*/
|
||||||
@ -124,12 +111,7 @@ class MiniMap {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 小地图鼠标按下事件
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-10-10 14:22:40
|
|
||||||
* @Desc: 小地图鼠标按下事件
|
|
||||||
*/
|
|
||||||
onMousedown(e) {
|
onMousedown(e) {
|
||||||
this.isMousedown = true
|
this.isMousedown = true
|
||||||
this.mousedownPos = {
|
this.mousedownPos = {
|
||||||
@ -144,12 +126,7 @@ class MiniMap {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 小地图鼠标移动事件
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-10-10 14:22:55
|
|
||||||
* @Desc: 小地图鼠标移动事件
|
|
||||||
*/
|
|
||||||
onMousemove(e, sensitivityNum = 5) {
|
onMousemove(e, sensitivityNum = 5) {
|
||||||
if (!this.isMousedown) {
|
if (!this.isMousedown) {
|
||||||
return
|
return
|
||||||
@ -161,12 +138,7 @@ class MiniMap {
|
|||||||
this.mindMap.view.translateYTo(oy * sensitivityNum + this.startViewPos.y)
|
this.mindMap.view.translateYTo(oy * sensitivityNum + this.startViewPos.y)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 小地图鼠标松开事件
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-10-10 14:23:01
|
|
||||||
* @Desc: 小地图鼠标松开事件
|
|
||||||
*/
|
|
||||||
onMouseup() {
|
onMouseup() {
|
||||||
this.isMousedown = false
|
this.isMousedown = false
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,19 +5,9 @@ import { Image, SVG, Circle, A, G, Rect, Text } from '@svgdotjs/svg.js'
|
|||||||
import btnsSvg from './svg/btns'
|
import btnsSvg from './svg/btns'
|
||||||
import iconsSvg from './svg/icons'
|
import iconsSvg from './svg/icons'
|
||||||
|
|
||||||
/**
|
// 节点类
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-06 11:26:00
|
|
||||||
* @Desc: 节点类
|
|
||||||
*/
|
|
||||||
class Node {
|
class Node {
|
||||||
/**
|
// 构造函数
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-06 11:26:17
|
|
||||||
* @Desc: 构造函数
|
|
||||||
*/
|
|
||||||
constructor(opt = {}) {
|
constructor(opt = {}) {
|
||||||
// 节点数据
|
// 节点数据
|
||||||
this.nodeData = this.handleData(opt.data || {})
|
this.nodeData = this.handleData(opt.data || {})
|
||||||
@ -118,11 +108,7 @@ class Node {
|
|||||||
this._top = val
|
this._top = val
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 更新主题配置
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-12 07:40:47
|
|
||||||
* @Desc: 更新主题配置
|
|
||||||
*/
|
|
||||||
updateThemeConfig() {
|
updateThemeConfig() {
|
||||||
// 主题配置
|
// 主题配置
|
||||||
this.themeConfig = this.mindMap.themeConfig
|
this.themeConfig = this.mindMap.themeConfig
|
||||||
@ -130,11 +116,7 @@ class Node {
|
|||||||
this.style.updateThemeConfig(this.themeConfig)
|
this.style.updateThemeConfig(this.themeConfig)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 复位部分布局时会重新设置的数据
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-05 23:11:39
|
|
||||||
* @Desc: 复位部分布局时会重新设置的数据
|
|
||||||
*/
|
|
||||||
reset() {
|
reset() {
|
||||||
this.children = []
|
this.children = []
|
||||||
this.parent = null
|
this.parent = null
|
||||||
@ -144,11 +126,7 @@ class Node {
|
|||||||
this.top = 0
|
this.top = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 处理数据
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-06-20 10:12:31
|
|
||||||
* @Desc: 处理数据
|
|
||||||
*/
|
|
||||||
handleData(data) {
|
handleData(data) {
|
||||||
data.data.expand = data.data.expand === false ? false : true
|
data.data.expand = data.data.expand === false ? false : true
|
||||||
data.data.isActive = data.data.isActive === true ? true : false
|
data.data.isActive = data.data.isActive === true ? true : false
|
||||||
@ -156,22 +134,12 @@ class Node {
|
|||||||
return data
|
return data
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 检查节点是否存在自定义数据
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-08-02 19:53:40
|
|
||||||
* @Desc: 检查节点是否存在自定义数据
|
|
||||||
*/
|
|
||||||
hasCustomPosition() {
|
hasCustomPosition() {
|
||||||
return this.customLeft !== undefined && this.customTop !== undefined
|
return this.customLeft !== undefined && this.customTop !== undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 检查节点是否存在自定义位置的祖先节点
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-08-04 09:06:56
|
|
||||||
* @Desc: 检查节点是否存在自定义位置的祖先节点
|
|
||||||
*/
|
|
||||||
ancestorHasCustomPosition() {
|
ancestorHasCustomPosition() {
|
||||||
let node = this
|
let node = this
|
||||||
while (node) {
|
while (node) {
|
||||||
@ -183,21 +151,12 @@ class Node {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 添加子节点
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-06 15:55:04
|
|
||||||
* @Desc: 添加子节点
|
|
||||||
*/
|
|
||||||
addChildren(node) {
|
addChildren(node) {
|
||||||
this.children.push(node)
|
this.children.push(node)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 创建节点的各个内容对象数据
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-06 22:08:09
|
|
||||||
* @Desc: 创建节点的各个内容对象数据
|
|
||||||
*/
|
|
||||||
createNodeData() {
|
createNodeData() {
|
||||||
this._imgData = this.createImgNode()
|
this._imgData = this.createImgNode()
|
||||||
this._iconData = this.createIconNode()
|
this._iconData = this.createIconNode()
|
||||||
@ -208,11 +167,7 @@ class Node {
|
|||||||
this.createGeneralizationNode()
|
this.createGeneralizationNode()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 解绑所有事件
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-10 09:20:02
|
|
||||||
* @Desc: 解绑所有事件
|
|
||||||
*/
|
|
||||||
removeAllEvent() {
|
removeAllEvent() {
|
||||||
if (this._noteData) {
|
if (this._noteData) {
|
||||||
this._noteData.node.off(['mouseover', 'mouseout'])
|
this._noteData.node.off(['mouseover', 'mouseout'])
|
||||||
@ -231,11 +186,7 @@ class Node {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 移除节点内容
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-07 21:27:24
|
|
||||||
* @Desc: 移除节点内容
|
|
||||||
*/
|
|
||||||
removeAllNode() {
|
removeAllNode() {
|
||||||
// 节点内的内容
|
// 节点内的内容
|
||||||
;[
|
;[
|
||||||
@ -269,12 +220,7 @@ class Node {
|
|||||||
this.removeGeneralization()
|
this.removeGeneralization()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 计算节点的宽高
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-09 09:46:23
|
|
||||||
* @Desc: 计算节点的宽高
|
|
||||||
*/
|
|
||||||
getSize() {
|
getSize() {
|
||||||
this.removeAllNode()
|
this.removeAllNode()
|
||||||
this.createNodeData()
|
this.createNodeData()
|
||||||
@ -286,12 +232,7 @@ class Node {
|
|||||||
return changed
|
return changed
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 计算节点尺寸信息
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-06 14:52:17
|
|
||||||
* @Desc: 计算节点尺寸信息
|
|
||||||
*/
|
|
||||||
getNodeRect() {
|
getNodeRect() {
|
||||||
// 宽高
|
// 宽高
|
||||||
let imgContentWidth = 0
|
let imgContentWidth = 0
|
||||||
@ -358,12 +299,7 @@ class Node {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 创建图片节点
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-09 14:06:17
|
|
||||||
* @Desc: 创建图片节点
|
|
||||||
*/
|
|
||||||
createImgNode() {
|
createImgNode() {
|
||||||
let img = this.nodeData.data.image
|
let img = this.nodeData.data.image
|
||||||
if (!img) {
|
if (!img) {
|
||||||
@ -384,12 +320,7 @@ class Node {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 获取图片显示宽高
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-09 10:12:51
|
|
||||||
* @Desc: 获取图片显示宽高
|
|
||||||
*/
|
|
||||||
getImgShowSize() {
|
getImgShowSize() {
|
||||||
return resizeImgSize(
|
return resizeImgSize(
|
||||||
this.nodeData.data.imageSize.width,
|
this.nodeData.data.imageSize.width,
|
||||||
@ -399,12 +330,7 @@ class Node {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 创建icon节点
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-09 14:10:48
|
|
||||||
* @Desc: 创建icon节点
|
|
||||||
*/
|
|
||||||
createIconNode() {
|
createIconNode() {
|
||||||
let _data = this.nodeData.data
|
let _data = this.nodeData.data
|
||||||
if (!_data.icon || _data.icon.length <= 0) {
|
if (!_data.icon || _data.icon.length <= 0) {
|
||||||
@ -420,12 +346,7 @@ class Node {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 创建文本节点
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-09 14:08:56
|
|
||||||
* @Desc: 创建文本节点
|
|
||||||
*/
|
|
||||||
createTextNode() {
|
createTextNode() {
|
||||||
let g = new G()
|
let g = new G()
|
||||||
let fontSize = this.getStyle(
|
let fontSize = this.getStyle(
|
||||||
@ -452,11 +373,7 @@ class Node {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 创建超链接节点
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-06-20 15:28:54
|
|
||||||
* @Desc: 创建超链接节点
|
|
||||||
*/
|
|
||||||
createHyperlinkNode() {
|
createHyperlinkNode() {
|
||||||
let { hyperlink, hyperlinkTitle } = this.nodeData.data
|
let { hyperlink, hyperlinkTitle } = this.nodeData.data
|
||||||
if (!hyperlink) {
|
if (!hyperlink) {
|
||||||
@ -486,11 +403,7 @@ class Node {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 创建标签节点
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-06-20 19:49:15
|
|
||||||
* @Desc: 创建标签节点
|
|
||||||
*/
|
|
||||||
createTagNode() {
|
createTagNode() {
|
||||||
let tagData = this.nodeData.data.tag
|
let tagData = this.nodeData.data.tag
|
||||||
if (!tagData || tagData.length <= 0) {
|
if (!tagData || tagData.length <= 0) {
|
||||||
@ -516,11 +429,7 @@ class Node {
|
|||||||
return nodes
|
return nodes
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 创建备注节点
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-06-20 21:19:36
|
|
||||||
* @Desc: 创建备注节点
|
|
||||||
*/
|
|
||||||
createNoteNode() {
|
createNoteNode() {
|
||||||
if (!this.nodeData.data.note) {
|
if (!this.nodeData.data.note) {
|
||||||
return null
|
return null
|
||||||
@ -577,12 +486,7 @@ class Node {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 获取节点形状
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2022-09-12 22:02:07
|
|
||||||
* @Desc: 获取节点形状
|
|
||||||
*/
|
|
||||||
getShape() {
|
getShape() {
|
||||||
// 节点使用功能横线风格的话不支持设置形状,直接使用默认的矩形
|
// 节点使用功能横线风格的话不支持设置形状,直接使用默认的矩形
|
||||||
return this.themeConfig.nodeUseLineStyle
|
return this.themeConfig.nodeUseLineStyle
|
||||||
@ -590,12 +494,7 @@ class Node {
|
|||||||
: this.style.getStyle('shape', false, false)
|
: this.style.getStyle('shape', false, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 定位节点内容
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-09 11:10:11
|
|
||||||
* @Desc: 定位节点内容
|
|
||||||
*/
|
|
||||||
layout() {
|
layout() {
|
||||||
let { width, textContentItemMargin } = this
|
let { width, textContentItemMargin } = this
|
||||||
let { paddingY } = this.getPaddingVale()
|
let { paddingY } = this.getPaddingVale()
|
||||||
@ -719,11 +618,7 @@ class Node {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 激活节点
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-10 16:44:22
|
|
||||||
* @Desc: 激活节点
|
|
||||||
*/
|
|
||||||
active(e) {
|
active(e) {
|
||||||
if (this.mindMap.opt.readonly) {
|
if (this.mindMap.opt.readonly) {
|
||||||
return
|
return
|
||||||
@ -739,11 +634,7 @@ class Node {
|
|||||||
this.mindMap.emit('node_active', this, this.renderer.activeNodeList)
|
this.mindMap.emit('node_active', this, this.renderer.activeNodeList)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 渲染节点到画布,会移除旧的,创建新的
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-04 20:20:09
|
|
||||||
* @Desc: 渲染节点到画布,会移除旧的,创建新的
|
|
||||||
*/
|
|
||||||
renderNode() {
|
renderNode() {
|
||||||
// 连线
|
// 连线
|
||||||
this.renderLine()
|
this.renderLine()
|
||||||
@ -753,11 +644,7 @@ class Node {
|
|||||||
this.layout()
|
this.layout()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 更新节点
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-04 22:47:01
|
|
||||||
* @Desc: 更新节点
|
|
||||||
*/
|
|
||||||
update(layout = false) {
|
update(layout = false) {
|
||||||
if (!this.group) {
|
if (!this.group) {
|
||||||
return
|
return
|
||||||
@ -798,12 +685,7 @@ class Node {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 递归渲染
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-07 13:55:58
|
|
||||||
* @Desc: 递归渲染
|
|
||||||
*/
|
|
||||||
render(callback = () => {}) {
|
render(callback = () => {}) {
|
||||||
// 节点
|
// 节点
|
||||||
if (this.initRender) {
|
if (this.initRender) {
|
||||||
@ -844,11 +726,7 @@ class Node {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 递归删除
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-10 09:24:55
|
|
||||||
* @Desc: 递归删除
|
|
||||||
*/
|
|
||||||
remove() {
|
remove() {
|
||||||
this.initRender = true
|
this.initRender = true
|
||||||
this.removeAllEvent()
|
this.removeAllEvent()
|
||||||
@ -866,12 +744,7 @@ class Node {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 隐藏节点
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-11-23 18:39:14
|
|
||||||
* @Desc: 隐藏节点
|
|
||||||
*/
|
|
||||||
hide() {
|
hide() {
|
||||||
this.group.hide()
|
this.group.hide()
|
||||||
this.hideGeneralization()
|
this.hideGeneralization()
|
||||||
@ -891,12 +764,7 @@ class Node {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 显示节点
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-11-23 18:39:14
|
|
||||||
* @Desc: 显示节点
|
|
||||||
*/
|
|
||||||
show() {
|
show() {
|
||||||
if (!this.group) {
|
if (!this.group) {
|
||||||
return
|
return
|
||||||
@ -919,11 +787,7 @@ class Node {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 连线
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-10 22:01:53
|
|
||||||
* @Desc: 连线
|
|
||||||
*/
|
|
||||||
renderLine(deep = false) {
|
renderLine(deep = false) {
|
||||||
if (this.nodeData.data.expand === false) {
|
if (this.nodeData.data.expand === false) {
|
||||||
return
|
return
|
||||||
@ -959,12 +823,7 @@ class Node {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 设置连线样式
|
||||||
* javascript comment
|
|
||||||
* @Author: flydreame
|
|
||||||
* @Date: 2022-09-17 12:41:29
|
|
||||||
* @Desc: 设置连线样式
|
|
||||||
*/
|
|
||||||
styleLine(line, node) {
|
styleLine(line, node) {
|
||||||
let width =
|
let width =
|
||||||
node.getSelfInhertStyle('lineWidth') || node.getStyle('lineWidth', true)
|
node.getSelfInhertStyle('lineWidth') || node.getStyle('lineWidth', true)
|
||||||
@ -980,11 +839,7 @@ class Node {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 移除连线
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-10 16:40:21
|
|
||||||
* @Desc: 移除连线
|
|
||||||
*/
|
|
||||||
removeLine() {
|
removeLine() {
|
||||||
this._lines.forEach(line => {
|
this._lines.forEach(line => {
|
||||||
line.remove()
|
line.remove()
|
||||||
@ -992,21 +847,12 @@ class Node {
|
|||||||
this._lines = []
|
this._lines = []
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 检查是否存在概要
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-08-01 09:27:30
|
|
||||||
* @Desc: 检查是否存在概要
|
|
||||||
*/
|
|
||||||
checkHasGeneralization() {
|
checkHasGeneralization() {
|
||||||
return !!this.nodeData.data.generalization
|
return !!this.nodeData.data.generalization
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 创建概要节点
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2022-07-31 09:41:28
|
|
||||||
* @Desc: 创建概要节点
|
|
||||||
*/
|
|
||||||
createGeneralizationNode() {
|
createGeneralizationNode() {
|
||||||
if (this.isGeneralization || !this.checkHasGeneralization()) {
|
if (this.isGeneralization || !this.checkHasGeneralization()) {
|
||||||
return
|
return
|
||||||
@ -1034,22 +880,13 @@ class Node {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 更新概要节点
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-08-01 15:38:52
|
|
||||||
* @Desc: 更新概要节点
|
|
||||||
*/
|
|
||||||
updateGeneralization() {
|
updateGeneralization() {
|
||||||
this.removeGeneralization()
|
this.removeGeneralization()
|
||||||
this.createGeneralizationNode()
|
this.createGeneralizationNode()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 渲染概要节点
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2022-07-30 08:35:51
|
|
||||||
* @Desc: 渲染概要节点
|
|
||||||
*/
|
|
||||||
renderGeneralization() {
|
renderGeneralization() {
|
||||||
if (this.isGeneralization) {
|
if (this.isGeneralization) {
|
||||||
return
|
return
|
||||||
@ -1074,11 +911,7 @@ class Node {
|
|||||||
this._generalizationNode.render()
|
this._generalizationNode.render()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 删除概要节点
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2022-07-30 13:11:27
|
|
||||||
* @Desc: 删除概要节点
|
|
||||||
*/
|
|
||||||
removeGeneralization() {
|
removeGeneralization() {
|
||||||
if (this._generalizationLine) {
|
if (this._generalizationLine) {
|
||||||
this._generalizationLine.remove()
|
this._generalizationLine.remove()
|
||||||
@ -1098,12 +931,7 @@ class Node {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 隐藏概要节点
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-08-01 09:56:46
|
|
||||||
* @Desc: 隐藏概要节点
|
|
||||||
*/
|
|
||||||
hideGeneralization() {
|
hideGeneralization() {
|
||||||
if (this._generalizationLine) {
|
if (this._generalizationLine) {
|
||||||
this._generalizationLine.hide()
|
this._generalizationLine.hide()
|
||||||
@ -1113,12 +941,7 @@ class Node {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 显示概要节点
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-08-01 09:57:42
|
|
||||||
* @Desc: 显示概要节点
|
|
||||||
*/
|
|
||||||
showGeneralization() {
|
showGeneralization() {
|
||||||
if (this._generalizationLine) {
|
if (this._generalizationLine) {
|
||||||
this._generalizationLine.show()
|
this._generalizationLine.show()
|
||||||
@ -1128,11 +951,7 @@ class Node {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 创建或更新展开收缩按钮内容
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-10 17:59:14
|
|
||||||
* @Desc: 创建或更新展开收缩按钮内容
|
|
||||||
*/
|
|
||||||
updateExpandBtnNode() {
|
updateExpandBtnNode() {
|
||||||
if (this._expandBtn) {
|
if (this._expandBtn) {
|
||||||
this._expandBtn.clear()
|
this._expandBtn.clear()
|
||||||
@ -1151,12 +970,7 @@ class Node {
|
|||||||
if (this._expandBtn) this._expandBtn.add(fillNode).add(node)
|
if (this._expandBtn) this._expandBtn.add(fillNode).add(node)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 更新展开收缩按钮位置
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-07-12 18:18:13
|
|
||||||
* @Desc: 更新展开收缩按钮位置
|
|
||||||
*/
|
|
||||||
updateExpandBtnPos() {
|
updateExpandBtnPos() {
|
||||||
if (!this._expandBtn) {
|
if (!this._expandBtn) {
|
||||||
return
|
return
|
||||||
@ -1164,11 +978,7 @@ class Node {
|
|||||||
this.renderer.layout.renderExpandBtn(this, this._expandBtn)
|
this.renderer.layout.renderExpandBtn(this, this._expandBtn)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 展开收缩按钮
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 19:47:01
|
|
||||||
* @Desc: 展开收缩按钮
|
|
||||||
*/
|
|
||||||
renderExpandBtn() {
|
renderExpandBtn() {
|
||||||
if (
|
if (
|
||||||
!this.nodeData.children ||
|
!this.nodeData.children ||
|
||||||
@ -1205,11 +1015,7 @@ class Node {
|
|||||||
this.updateExpandBtnPos()
|
this.updateExpandBtnPos()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 移除展开收缩按钮
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-11 13:26:00
|
|
||||||
* @Desc: 移除展开收缩按钮
|
|
||||||
*/
|
|
||||||
removeExpandBtn() {
|
removeExpandBtn() {
|
||||||
if (this._expandBtn) {
|
if (this._expandBtn) {
|
||||||
this._expandBtn.off(['mouseover', 'mouseout', 'click'])
|
this._expandBtn.off(['mouseover', 'mouseout', 'click'])
|
||||||
@ -1219,12 +1025,7 @@ class Node {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 检测当前节点是否是某个节点的祖先节点
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-11-25 09:51:37
|
|
||||||
* @Desc: 检测当前节点是否是某个节点的祖先节点
|
|
||||||
*/
|
|
||||||
isParent(node) {
|
isParent(node) {
|
||||||
if (this === node) {
|
if (this === node) {
|
||||||
return false
|
return false
|
||||||
@ -1239,12 +1040,7 @@ class Node {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 检测当前节点是否是某个节点的兄弟节点
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-11-25 10:32:34
|
|
||||||
* @Desc: 检测当前节点是否是某个节点的兄弟节点
|
|
||||||
*/
|
|
||||||
isBrother(node) {
|
isBrother(node) {
|
||||||
if (!this.parent || this === node) {
|
if (!this.parent || this === node) {
|
||||||
return false
|
return false
|
||||||
@ -1254,11 +1050,7 @@ class Node {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 获取padding值
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-06-20 22:51:57
|
|
||||||
* @Desc: 获取padding值
|
|
||||||
*/
|
|
||||||
getPaddingVale() {
|
getPaddingVale() {
|
||||||
return {
|
return {
|
||||||
paddingX: this.getStyle('paddingX', true, this.nodeData.data.isActive),
|
paddingX: this.getStyle('paddingX', true, this.nodeData.data.isActive),
|
||||||
@ -1266,32 +1058,18 @@ class Node {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 获取某个样式
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-05-04 21:48:49
|
|
||||||
* @Desc: 获取某个样式
|
|
||||||
*/
|
|
||||||
getStyle(prop, root, isActive) {
|
getStyle(prop, root, isActive) {
|
||||||
let v = this.style.merge(prop, root, isActive)
|
let v = this.style.merge(prop, root, isActive)
|
||||||
return v === undefined ? '' : v
|
return v === undefined ? '' : v
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 获取自定义样式
|
||||||
* javascript comment
|
|
||||||
* @Author: flydreame
|
|
||||||
* @Date: 2022-09-17 11:21:15
|
|
||||||
* @Desc: 获取自定义样式
|
|
||||||
*/
|
|
||||||
getSelfStyle(prop) {
|
getSelfStyle(prop) {
|
||||||
return this.style.getSelfStyle(prop)
|
return this.style.getSelfStyle(prop)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 获取最近一个存在自身自定义样式的祖先节点的自定义样式
|
||||||
* javascript comment
|
|
||||||
* @Author: flydreame
|
|
||||||
* @Date: 2022-09-17 11:21:26
|
|
||||||
* @Desc: 获取最近一个存在自身自定义样式的祖先节点的自定义样式
|
|
||||||
*/
|
|
||||||
getParentSelfStyle(prop) {
|
getParentSelfStyle(prop) {
|
||||||
if (this.parent) {
|
if (this.parent) {
|
||||||
return (
|
return (
|
||||||
@ -1301,12 +1079,7 @@ class Node {
|
|||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 获取自身可继承的自定义样式
|
||||||
* javascript comment
|
|
||||||
* @Author: flydreame
|
|
||||||
* @Date: 2022-09-17 12:15:30
|
|
||||||
* @Desc: 获取自身可继承的自定义样式
|
|
||||||
*/
|
|
||||||
getSelfInhertStyle(prop) {
|
getSelfInhertStyle(prop) {
|
||||||
return (
|
return (
|
||||||
this.getSelfStyle(prop) || // 自身
|
this.getSelfStyle(prop) || // 自身
|
||||||
@ -1314,93 +1087,52 @@ class Node {
|
|||||||
) // 父级
|
) // 父级
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 修改某个样式
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-05-04 22:18:07
|
|
||||||
* @Desc: 修改某个样式
|
|
||||||
*/
|
|
||||||
setStyle(prop, value, isActive) {
|
setStyle(prop, value, isActive) {
|
||||||
this.mindMap.execCommand('SET_NODE_STYLE', this, prop, value, isActive)
|
this.mindMap.execCommand('SET_NODE_STYLE', this, prop, value, isActive)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 获取数据
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-06-22 22:04:02
|
|
||||||
* @Desc: 获取数据
|
|
||||||
*/
|
|
||||||
getData(key) {
|
getData(key) {
|
||||||
return key ? this.nodeData.data[key] || '' : this.nodeData.data
|
return key ? this.nodeData.data[key] || '' : this.nodeData.data
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 设置数据
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-06-22 22:12:01
|
|
||||||
* @Desc: 设置数据
|
|
||||||
*/
|
|
||||||
setData(data = {}) {
|
setData(data = {}) {
|
||||||
this.mindMap.execCommand('SET_NODE_DATA', this, data)
|
this.mindMap.execCommand('SET_NODE_DATA', this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 设置文本
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-10 08:41:28
|
|
||||||
* @Desc: 设置文本
|
|
||||||
*/
|
|
||||||
setText(text) {
|
setText(text) {
|
||||||
this.mindMap.execCommand('SET_NODE_TEXT', this, text)
|
this.mindMap.execCommand('SET_NODE_TEXT', this, text)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 设置图片
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-10 08:42:19
|
|
||||||
* @Desc: 设置图片
|
|
||||||
*/
|
|
||||||
setImage(imgData) {
|
setImage(imgData) {
|
||||||
this.mindMap.execCommand('SET_NODE_IMAGE', this, imgData)
|
this.mindMap.execCommand('SET_NODE_IMAGE', this, imgData)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 设置图标
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-10 08:47:29
|
|
||||||
* @Desc: 设置图标
|
|
||||||
*/
|
|
||||||
setIcon(icons) {
|
setIcon(icons) {
|
||||||
this.mindMap.execCommand('SET_NODE_ICON', this, icons)
|
this.mindMap.execCommand('SET_NODE_ICON', this, icons)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 设置超链接
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-10 08:50:41
|
|
||||||
* @Desc: 设置超链接
|
|
||||||
*/
|
|
||||||
setHyperlink(link, title) {
|
setHyperlink(link, title) {
|
||||||
this.mindMap.execCommand('SET_NODE_HYPERLINK', this, link, title)
|
this.mindMap.execCommand('SET_NODE_HYPERLINK', this, link, title)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 设置备注
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-10 08:53:24
|
|
||||||
* @Desc: 设置备注
|
|
||||||
*/
|
|
||||||
setNote(note) {
|
setNote(note) {
|
||||||
this.mindMap.execCommand('SET_NODE_NOTE', this, note)
|
this.mindMap.execCommand('SET_NODE_NOTE', this, note)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 设置标签
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-10 08:55:08
|
|
||||||
* @Desc: 设置标签
|
|
||||||
*/
|
|
||||||
setTag(tag) {
|
setTag(tag) {
|
||||||
this.mindMap.execCommand('SET_NODE_TAG', this, tag)
|
this.mindMap.execCommand('SET_NODE_TAG', this, tag)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 设置形状
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2022-09-12 21:47:45
|
|
||||||
* @Desc: 设置形状
|
|
||||||
*/
|
|
||||||
setShape(shape) {
|
setShape(shape) {
|
||||||
this.mindMap.execCommand('SET_NODE_SHAPE', this, shape)
|
this.mindMap.execCommand('SET_NODE_SHAPE', this, shape)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -20,19 +20,9 @@ const layouts = {
|
|||||||
organizationStructure: OrganizationStructure
|
organizationStructure: OrganizationStructure
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 渲染
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-08 16:25:07
|
|
||||||
* @Desc: 渲染
|
|
||||||
*/
|
|
||||||
class Render {
|
class Render {
|
||||||
/**
|
// 构造函数
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-08 16:25:32
|
|
||||||
* @Desc: 构造函数
|
|
||||||
*/
|
|
||||||
constructor(opt = {}) {
|
constructor(opt = {}) {
|
||||||
this.opt = opt
|
this.opt = opt
|
||||||
this.mindMap = opt.mindMap
|
this.mindMap = opt.mindMap
|
||||||
@ -58,12 +48,7 @@ class Render {
|
|||||||
this.registerShortcutKeys()
|
this.registerShortcutKeys()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 设置布局结构
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-07-13 16:20:07
|
|
||||||
* @Desc: 设置布局结构
|
|
||||||
*/
|
|
||||||
setLayout() {
|
setLayout() {
|
||||||
this.layout = new (
|
this.layout = new (
|
||||||
layouts[this.mindMap.opt.layout]
|
layouts[this.mindMap.opt.layout]
|
||||||
@ -72,11 +57,7 @@ class Render {
|
|||||||
)(this)
|
)(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 绑定事件
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-06-20 10:34:06
|
|
||||||
* @Desc: 绑定事件
|
|
||||||
*/
|
|
||||||
bindEvent() {
|
bindEvent() {
|
||||||
// 点击事件
|
// 点击事件
|
||||||
this.mindMap.on('draw_click', () => {
|
this.mindMap.on('draw_click', () => {
|
||||||
@ -87,11 +68,7 @@ class Render {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 注册命令
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-05-04 13:19:06
|
|
||||||
* @Desc: 注册命令
|
|
||||||
*/
|
|
||||||
registerCommands() {
|
registerCommands() {
|
||||||
// 全选
|
// 全选
|
||||||
this.selectAll = this.selectAll.bind(this)
|
this.selectAll = this.selectAll.bind(this)
|
||||||
@ -192,11 +169,7 @@ class Render {
|
|||||||
this.mindMap.command.add('SET_NODE_SHAPE', this.setNodeShape)
|
this.mindMap.command.add('SET_NODE_SHAPE', this.setNodeShape)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 注册快捷键
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-11 16:55:44
|
|
||||||
* @Desc: 注册快捷键
|
|
||||||
*/
|
|
||||||
registerShortcutKeys() {
|
registerShortcutKeys() {
|
||||||
// 插入下级节点
|
// 插入下级节点
|
||||||
this.mindMap.keyCommand.addShortcut('Tab', () => {
|
this.mindMap.keyCommand.addShortcut('Tab', () => {
|
||||||
@ -240,12 +213,7 @@ class Render {
|
|||||||
// 复制节点、剪切节点、粘贴节点的快捷键需开发者自行注册实现,可参考demo
|
// 复制节点、剪切节点、粘贴节点的快捷键需开发者自行注册实现,可参考demo
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 开启文字编辑,会禁用回车键和删除键相关快捷键防止冲突
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-05-09 10:43:52
|
|
||||||
* @Desc: 开启文字编辑,会禁用回车键和删除键相关快捷键防止冲突
|
|
||||||
*/
|
|
||||||
startTextEdit() {
|
startTextEdit() {
|
||||||
this.mindMap.keyCommand.save()
|
this.mindMap.keyCommand.save()
|
||||||
// this.mindMap.keyCommand.removeShortcut('Del|Backspace')
|
// this.mindMap.keyCommand.removeShortcut('Del|Backspace')
|
||||||
@ -253,12 +221,7 @@ class Render {
|
|||||||
// this.mindMap.keyCommand.removeShortcut('Enter', this.insertNodeWrap)
|
// this.mindMap.keyCommand.removeShortcut('Enter', this.insertNodeWrap)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 结束文字编辑,会恢复回车键和删除键相关快捷键
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-05-09 10:45:11
|
|
||||||
* @Desc: 结束文字编辑,会恢复回车键和删除键相关快捷键
|
|
||||||
*/
|
|
||||||
endTextEdit() {
|
endTextEdit() {
|
||||||
this.mindMap.keyCommand.restore()
|
this.mindMap.keyCommand.restore()
|
||||||
// this.mindMap.keyCommand.addShortcut('Del|Backspace', this.removeNodeWrap)
|
// this.mindMap.keyCommand.addShortcut('Del|Backspace', this.removeNodeWrap)
|
||||||
@ -266,12 +229,7 @@ class Render {
|
|||||||
// this.mindMap.keyCommand.addShortcut('Enter', this.insertNodeWrap)
|
// this.mindMap.keyCommand.addShortcut('Enter', this.insertNodeWrap)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 渲染
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-08 16:27:55
|
|
||||||
* @Desc: 渲染
|
|
||||||
*/
|
|
||||||
render() {
|
render() {
|
||||||
if (this.reRender) {
|
if (this.reRender) {
|
||||||
this.clearActive()
|
this.clearActive()
|
||||||
@ -285,11 +243,7 @@ class Render {
|
|||||||
this.mindMap.emit('node_active', null, this.activeNodeList)
|
this.mindMap.emit('node_active', null, this.activeNodeList)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 清除当前激活的节点
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-12 22:45:01
|
|
||||||
* @Desc: 清除当前激活的节点
|
|
||||||
*/
|
|
||||||
clearActive() {
|
clearActive() {
|
||||||
this.activeNodeList.forEach(item => {
|
this.activeNodeList.forEach(item => {
|
||||||
this.setNodeActive(item, false)
|
this.setNodeActive(item, false)
|
||||||
@ -297,11 +251,7 @@ class Render {
|
|||||||
this.activeNodeList = []
|
this.activeNodeList = []
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 清除当前所有激活节点,并会触发事件
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-08-03 23:14:34
|
|
||||||
* @Desc: 清除当前所有激活节点,并会触发事件
|
|
||||||
*/
|
|
||||||
clearAllActive() {
|
clearAllActive() {
|
||||||
if (this.activeNodeList.length <= 0) {
|
if (this.activeNodeList.length <= 0) {
|
||||||
return
|
return
|
||||||
@ -310,11 +260,7 @@ class Render {
|
|||||||
this.mindMap.emit('node_active', null, [])
|
this.mindMap.emit('node_active', null, [])
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 添加节点到激活列表里
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-11 10:54:00
|
|
||||||
* @Desc: 添加节点到激活列表里
|
|
||||||
*/
|
|
||||||
addActiveNode(node) {
|
addActiveNode(node) {
|
||||||
let index = this.findActiveNodeIndex(node)
|
let index = this.findActiveNodeIndex(node)
|
||||||
if (index === -1) {
|
if (index === -1) {
|
||||||
@ -322,11 +268,7 @@ class Render {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 在激活列表里移除某个节点
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-10 10:04:04
|
|
||||||
* @Desc: 在激活列表里移除某个节点
|
|
||||||
*/
|
|
||||||
removeActiveNode(node) {
|
removeActiveNode(node) {
|
||||||
let index = this.findActiveNodeIndex(node)
|
let index = this.findActiveNodeIndex(node)
|
||||||
if (index === -1) {
|
if (index === -1) {
|
||||||
@ -335,22 +277,14 @@ class Render {
|
|||||||
this.activeNodeList.splice(index, 1)
|
this.activeNodeList.splice(index, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 检索某个节点在激活列表里的索引
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-11 10:55:23
|
|
||||||
* @Desc: 检索某个节点在激活列表里的索引
|
|
||||||
*/
|
|
||||||
findActiveNodeIndex(node) {
|
findActiveNodeIndex(node) {
|
||||||
return this.activeNodeList.findIndex(item => {
|
return this.activeNodeList.findIndex(item => {
|
||||||
return item === node
|
return item === node
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 获取节点在同级里的索引位置
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-05-04 13:46:08
|
|
||||||
* @Desc: 获取节点在同级里的索引位置
|
|
||||||
*/
|
|
||||||
getNodeIndex(node) {
|
getNodeIndex(node) {
|
||||||
return node.parent
|
return node.parent
|
||||||
? node.parent.children.findIndex(item => {
|
? node.parent.children.findIndex(item => {
|
||||||
@ -359,11 +293,7 @@ class Render {
|
|||||||
: 0
|
: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 全选
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-08-04 23:54:52
|
|
||||||
* @Desc: 全选
|
|
||||||
*/
|
|
||||||
selectAll() {
|
selectAll() {
|
||||||
walk(
|
walk(
|
||||||
this.root,
|
this.root,
|
||||||
@ -384,11 +314,7 @@ class Render {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 回退
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-11 22:34:12
|
|
||||||
* @Desc: 回退
|
|
||||||
*/
|
|
||||||
back(step) {
|
back(step) {
|
||||||
this.clearAllActive()
|
this.clearAllActive()
|
||||||
let data = this.mindMap.command.back(step)
|
let data = this.mindMap.command.back(step)
|
||||||
@ -398,12 +324,7 @@ class Render {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 前进
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-07-12 10:44:51
|
|
||||||
* @Desc: 前进
|
|
||||||
*/
|
|
||||||
forward(step) {
|
forward(step) {
|
||||||
this.clearAllActive()
|
this.clearAllActive()
|
||||||
let data = this.mindMap.command.forward(step)
|
let data = this.mindMap.command.forward(step)
|
||||||
@ -413,11 +334,7 @@ class Render {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 插入同级节点,多个节点只会操作第一个节点
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-05-04 13:19:54
|
|
||||||
* @Desc: 插入同级节点,多个节点只会操作第一个节点
|
|
||||||
*/
|
|
||||||
insertNode() {
|
insertNode() {
|
||||||
if (this.activeNodeList.length <= 0) {
|
if (this.activeNodeList.length <= 0) {
|
||||||
return
|
return
|
||||||
@ -443,11 +360,7 @@ class Render {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 插入子节点
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-05-04 13:31:02
|
|
||||||
* @Desc: 插入子节点
|
|
||||||
*/
|
|
||||||
insertChildNode() {
|
insertChildNode() {
|
||||||
if (this.activeNodeList.length <= 0) {
|
if (this.activeNodeList.length <= 0) {
|
||||||
return
|
return
|
||||||
@ -477,11 +390,7 @@ class Render {
|
|||||||
this.mindMap.render()
|
this.mindMap.render()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 上移节点,多个节点只会操作第一个节点
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-14 23:34:14
|
|
||||||
* @Desc: 上移节点,多个节点只会操作第一个节点
|
|
||||||
*/
|
|
||||||
upNode() {
|
upNode() {
|
||||||
if (this.activeNodeList.length <= 0) {
|
if (this.activeNodeList.length <= 0) {
|
||||||
return
|
return
|
||||||
@ -508,11 +417,7 @@ class Render {
|
|||||||
this.mindMap.render()
|
this.mindMap.render()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 下移节点,多个节点只会操作第一个节点
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-14 23:34:18
|
|
||||||
* @Desc: 下移节点,多个节点只会操作第一个节点
|
|
||||||
*/
|
|
||||||
downNode() {
|
downNode() {
|
||||||
if (this.activeNodeList.length <= 0) {
|
if (this.activeNodeList.length <= 0) {
|
||||||
return
|
return
|
||||||
@ -539,12 +444,7 @@ class Render {
|
|||||||
this.mindMap.render()
|
this.mindMap.render()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 将节点移动到另一个节点的前面
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-11-25 10:51:34
|
|
||||||
* @Desc: 将节点移动到另一个节点的前面
|
|
||||||
*/
|
|
||||||
insertBefore(node, exist) {
|
insertBefore(node, exist) {
|
||||||
if (node.isRoot) {
|
if (node.isRoot) {
|
||||||
return
|
return
|
||||||
@ -575,12 +475,7 @@ class Render {
|
|||||||
this.mindMap.render()
|
this.mindMap.render()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 将节点移动到另一个节点的后面
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-11-25 10:51:34
|
|
||||||
* @Desc: 将节点移动到另一个节点的后面
|
|
||||||
*/
|
|
||||||
insertAfter(node, exist) {
|
insertAfter(node, exist) {
|
||||||
if (node.isRoot) {
|
if (node.isRoot) {
|
||||||
return
|
return
|
||||||
@ -612,11 +507,7 @@ class Render {
|
|||||||
this.mindMap.render()
|
this.mindMap.render()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 移除节点
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-05-04 13:40:39
|
|
||||||
* @Desc: 移除节点
|
|
||||||
*/
|
|
||||||
removeNode() {
|
removeNode() {
|
||||||
if (this.activeNodeList.length <= 0) {
|
if (this.activeNodeList.length <= 0) {
|
||||||
return
|
return
|
||||||
@ -648,11 +539,7 @@ class Render {
|
|||||||
this.mindMap.render()
|
this.mindMap.render()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 移除某个指定节点
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-15 22:46:27
|
|
||||||
* @Desc: 移除某个指定节点
|
|
||||||
*/
|
|
||||||
removeOneNode(node) {
|
removeOneNode(node) {
|
||||||
let index = this.getNodeIndex(node)
|
let index = this.getNodeIndex(node)
|
||||||
node.remove()
|
node.remove()
|
||||||
@ -660,12 +547,7 @@ class Render {
|
|||||||
node.parent.nodeData.children.splice(index, 1)
|
node.parent.nodeData.children.splice(index, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 复制节点,多个节点只会操作第一个节点
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-07-15 09:53:23
|
|
||||||
* @Desc: 复制节点,多个节点只会操作第一个节点
|
|
||||||
*/
|
|
||||||
copyNode() {
|
copyNode() {
|
||||||
if (this.activeNodeList.length <= 0) {
|
if (this.activeNodeList.length <= 0) {
|
||||||
return
|
return
|
||||||
@ -673,11 +555,7 @@ class Render {
|
|||||||
return copyNodeTree({}, this.activeNodeList[0], true)
|
return copyNodeTree({}, this.activeNodeList[0], true)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 剪切节点,多个节点只会操作第一个节点
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-15 22:36:45
|
|
||||||
* @Desc: 剪切节点,多个节点只会操作第一个节点
|
|
||||||
*/
|
|
||||||
cutNode(callback) {
|
cutNode(callback) {
|
||||||
if (this.activeNodeList.length <= 0) {
|
if (this.activeNodeList.length <= 0) {
|
||||||
return
|
return
|
||||||
@ -696,12 +574,7 @@ class Render {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 移动一个节点作为另一个节点的子节点
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-11-24 16:54:01
|
|
||||||
* @Desc: 移动一个节点作为另一个节点的子节点
|
|
||||||
*/
|
|
||||||
moveNodeTo(node, toNode) {
|
moveNodeTo(node, toNode) {
|
||||||
if (node.isRoot) {
|
if (node.isRoot) {
|
||||||
return
|
return
|
||||||
@ -714,11 +587,7 @@ class Render {
|
|||||||
this.mindMap.render()
|
this.mindMap.render()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 粘贴节点到节点
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-15 20:09:39
|
|
||||||
* @Desc: 粘贴节点到节点
|
|
||||||
*/
|
|
||||||
pasteNode(data) {
|
pasteNode(data) {
|
||||||
if (this.activeNodeList.length <= 0) {
|
if (this.activeNodeList.length <= 0) {
|
||||||
return
|
return
|
||||||
@ -729,11 +598,7 @@ class Render {
|
|||||||
this.mindMap.render()
|
this.mindMap.render()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 设置节点样式
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-08 21:54:30
|
|
||||||
* @Desc: 设置节点样式
|
|
||||||
*/
|
|
||||||
setNodeStyle(node, prop, value, isActive) {
|
setNodeStyle(node, prop, value, isActive) {
|
||||||
let data = {}
|
let data = {}
|
||||||
if (isActive) {
|
if (isActive) {
|
||||||
@ -755,11 +620,7 @@ class Render {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 设置节点是否激活
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-08 22:13:03
|
|
||||||
* @Desc: 设置节点是否激活
|
|
||||||
*/
|
|
||||||
setNodeActive(node, active) {
|
setNodeActive(node, active) {
|
||||||
this.setNodeData(node, {
|
this.setNodeData(node, {
|
||||||
isActive: active
|
isActive: active
|
||||||
@ -767,11 +628,7 @@ class Render {
|
|||||||
node.renderNode()
|
node.renderNode()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 设置节点是否展开
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-10 16:52:41
|
|
||||||
* @Desc: 设置节点是否展开
|
|
||||||
*/
|
|
||||||
setNodeExpand(node, expand) {
|
setNodeExpand(node, expand) {
|
||||||
this.setNodeData(node, {
|
this.setNodeData(node, {
|
||||||
expand
|
expand
|
||||||
@ -794,11 +651,7 @@ class Render {
|
|||||||
this.mindMap.render()
|
this.mindMap.render()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 展开所有
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-15 23:23:37
|
|
||||||
* @Desc: 展开所有
|
|
||||||
*/
|
|
||||||
expandAllNode() {
|
expandAllNode() {
|
||||||
walk(
|
walk(
|
||||||
this.renderTree,
|
this.renderTree,
|
||||||
@ -816,11 +669,7 @@ class Render {
|
|||||||
this.mindMap.reRender()
|
this.mindMap.reRender()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 收起所有
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-15 23:27:14
|
|
||||||
* @Desc: 收起所有
|
|
||||||
*/
|
|
||||||
unexpandAllNode() {
|
unexpandAllNode() {
|
||||||
walk(
|
walk(
|
||||||
this.renderTree,
|
this.renderTree,
|
||||||
@ -839,12 +688,7 @@ class Render {
|
|||||||
this.mindMap.reRender()
|
this.mindMap.reRender()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 展开到指定层级
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-09-23 16:31:27
|
|
||||||
* @Desc: 展开到指定层级
|
|
||||||
*/
|
|
||||||
expandToLevel(level) {
|
expandToLevel(level) {
|
||||||
walk(
|
walk(
|
||||||
this.renderTree,
|
this.renderTree,
|
||||||
@ -861,11 +705,7 @@ class Render {
|
|||||||
this.mindMap.reRender()
|
this.mindMap.reRender()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 切换激活节点的展开状态
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2022-08-14 09:18:40
|
|
||||||
* @Desc: 切换激活节点的展开状态
|
|
||||||
*/
|
|
||||||
toggleActiveExpand() {
|
toggleActiveExpand() {
|
||||||
this.activeNodeList.forEach(node => {
|
this.activeNodeList.forEach(node => {
|
||||||
if (node.nodeData.children.length <= 0) {
|
if (node.nodeData.children.length <= 0) {
|
||||||
@ -875,11 +715,7 @@ class Render {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 切换节点展开状态
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-11 17:15:33
|
|
||||||
* @Desc: 切换节点展开状态
|
|
||||||
*/
|
|
||||||
toggleNodeExpand(node) {
|
toggleNodeExpand(node) {
|
||||||
this.mindMap.execCommand(
|
this.mindMap.execCommand(
|
||||||
'SET_NODE_EXPAND',
|
'SET_NODE_EXPAND',
|
||||||
@ -888,22 +724,14 @@ class Render {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 设置节点文本
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-09 22:04:19
|
|
||||||
* @Desc: 设置节点文本
|
|
||||||
*/
|
|
||||||
setNodeText(node, text) {
|
setNodeText(node, text) {
|
||||||
this.setNodeDataRender(node, {
|
this.setNodeDataRender(node, {
|
||||||
text
|
text
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 设置节点图片
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-10 08:37:40
|
|
||||||
* @Desc: 设置节点图片
|
|
||||||
*/
|
|
||||||
setNodeImage(node, { url, title, width, height }) {
|
setNodeImage(node, { url, title, width, height }) {
|
||||||
this.setNodeDataRender(node, {
|
this.setNodeDataRender(node, {
|
||||||
image: url,
|
image: url,
|
||||||
@ -915,22 +743,14 @@ class Render {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 设置节点图标
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-10 08:44:06
|
|
||||||
* @Desc: 设置节点图标
|
|
||||||
*/
|
|
||||||
setNodeIcon(node, icons) {
|
setNodeIcon(node, icons) {
|
||||||
this.setNodeDataRender(node, {
|
this.setNodeDataRender(node, {
|
||||||
icon: icons
|
icon: icons
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 设置节点超链接
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-10 08:49:33
|
|
||||||
* @Desc: 设置节点超链接
|
|
||||||
*/
|
|
||||||
setNodeHyperlink(node, link, title = '') {
|
setNodeHyperlink(node, link, title = '') {
|
||||||
this.setNodeDataRender(node, {
|
this.setNodeDataRender(node, {
|
||||||
hyperlink: link,
|
hyperlink: link,
|
||||||
@ -938,33 +758,21 @@ class Render {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 设置节点备注
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-10 08:52:59
|
|
||||||
* @Desc: 设置节点备注
|
|
||||||
*/
|
|
||||||
setNodeNote(node, note) {
|
setNodeNote(node, note) {
|
||||||
this.setNodeDataRender(node, {
|
this.setNodeDataRender(node, {
|
||||||
note
|
note
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 设置节点标签
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-10 08:54:53
|
|
||||||
* @Desc: 设置节点标签
|
|
||||||
*/
|
|
||||||
setNodeTag(node, tag) {
|
setNodeTag(node, tag) {
|
||||||
this.setNodeDataRender(node, {
|
this.setNodeDataRender(node, {
|
||||||
tag
|
tag
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 添加节点概要
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2022-07-30 20:52:42
|
|
||||||
* @Desc: 添加节点概要
|
|
||||||
*/
|
|
||||||
addGeneralization(data) {
|
addGeneralization(data) {
|
||||||
if (this.activeNodeList.length <= 0) {
|
if (this.activeNodeList.length <= 0) {
|
||||||
return
|
return
|
||||||
@ -983,11 +791,7 @@ class Render {
|
|||||||
this.mindMap.render()
|
this.mindMap.render()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 删除节点概要
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2022-07-30 21:16:33
|
|
||||||
* @Desc: 删除节点概要
|
|
||||||
*/
|
|
||||||
removeGeneralization() {
|
removeGeneralization() {
|
||||||
if (this.activeNodeList.length <= 0) {
|
if (this.activeNodeList.length <= 0) {
|
||||||
return
|
return
|
||||||
@ -1004,12 +808,7 @@ class Render {
|
|||||||
this.mindMap.render()
|
this.mindMap.render()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 设置节点自定义位置
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-08-02 19:04:24
|
|
||||||
* @Desc: 设置节点自定义位置
|
|
||||||
*/
|
|
||||||
setNodeCustomPosition(node, left = undefined, top = undefined) {
|
setNodeCustomPosition(node, left = undefined, top = undefined) {
|
||||||
let nodeList = [node] || this.activeNodeList
|
let nodeList = [node] || this.activeNodeList
|
||||||
nodeList.forEach(item => {
|
nodeList.forEach(item => {
|
||||||
@ -1020,12 +819,7 @@ class Render {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 一键整理布局,即去除自定义位置
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-08-02 20:02:50
|
|
||||||
* @Desc: 一键整理布局,即去除自定义位置
|
|
||||||
*/
|
|
||||||
resetLayout() {
|
resetLayout() {
|
||||||
walk(
|
walk(
|
||||||
this.root,
|
this.root,
|
||||||
@ -1046,12 +840,7 @@ class Render {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 设置节点形状
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2022-09-12 21:44:01
|
|
||||||
* @Desc: 设置节点形状
|
|
||||||
*/
|
|
||||||
setNodeShape(node, shape) {
|
setNodeShape(node, shape) {
|
||||||
if (!shape || !shapeList.includes(shape)) {
|
if (!shape || !shapeList.includes(shape)) {
|
||||||
return
|
return
|
||||||
@ -1062,22 +851,14 @@ class Render {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 更新节点数据
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-05-04 14:19:48
|
|
||||||
* @Desc: 更新节点数据
|
|
||||||
*/
|
|
||||||
setNodeData(node, data) {
|
setNodeData(node, data) {
|
||||||
Object.keys(data).forEach(key => {
|
Object.keys(data).forEach(key => {
|
||||||
node.nodeData.data[key] = data[key]
|
node.nodeData.data[key] = data[key]
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 设置节点数据,并判断是否渲染
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-10 08:45:48
|
|
||||||
* @Desc: 设置节点数据,并判断是否渲染
|
|
||||||
*/
|
|
||||||
setNodeDataRender(node, data) {
|
setNodeDataRender(node, data) {
|
||||||
this.setNodeData(node, data)
|
this.setNodeData(node, data)
|
||||||
let changed = node.getSize()
|
let changed = node.getSize()
|
||||||
@ -1091,12 +872,7 @@ class Render {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 移动节点到画布中心
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-12-09 11:46:57
|
|
||||||
* @Desc: 移动节点到画布中心
|
|
||||||
*/
|
|
||||||
moveNodeToCenter(node) {
|
moveNodeToCenter(node) {
|
||||||
let halfWidth = this.mindMap.width / 2
|
let halfWidth = this.mindMap.width / 2
|
||||||
let halfHeight = this.mindMap.height / 2
|
let halfHeight = this.mindMap.height / 2
|
||||||
|
|||||||
@ -1,17 +1,9 @@
|
|||||||
import { bfsWalk, throttle } from './utils'
|
import { bfsWalk, throttle } from './utils'
|
||||||
|
|
||||||
/**
|
// 选择节点类
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-10 22:34:51
|
|
||||||
* @Desc: 选择节点类
|
|
||||||
*/
|
|
||||||
|
|
||||||
class Select {
|
class Select {
|
||||||
/**
|
// 构造函数
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-10 22:35:16
|
|
||||||
* @Desc: 构造函数
|
|
||||||
*/
|
|
||||||
constructor({ mindMap }) {
|
constructor({ mindMap }) {
|
||||||
this.mindMap = mindMap
|
this.mindMap = mindMap
|
||||||
this.rect = null
|
this.rect = null
|
||||||
@ -23,11 +15,7 @@ class Select {
|
|||||||
this.bindEvent()
|
this.bindEvent()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 绑定事件
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-10 22:36:36
|
|
||||||
* @Desc: 绑定事件
|
|
||||||
*/
|
|
||||||
bindEvent() {
|
bindEvent() {
|
||||||
this.checkInNodes = throttle(this.checkInNodes, 500, this)
|
this.checkInNodes = throttle(this.checkInNodes, 500, this)
|
||||||
this.mindMap.on('mousedown', e => {
|
this.mindMap.on('mousedown', e => {
|
||||||
@ -81,11 +69,7 @@ class Select {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 鼠标移动事件
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-13 07:55:49
|
|
||||||
* @Desc: 鼠标移动事件
|
|
||||||
*/
|
|
||||||
onMove(x, y) {
|
onMove(x, y) {
|
||||||
// 绘制矩形
|
// 绘制矩形
|
||||||
this.rect.plot([
|
this.rect.plot([
|
||||||
@ -128,22 +112,14 @@ class Select {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 开启自动移动
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-22 08:02:23
|
|
||||||
* @Desc: 开启自动移动
|
|
||||||
*/
|
|
||||||
startAutoMove(x, y) {
|
startAutoMove(x, y) {
|
||||||
this.autoMoveTimer = setTimeout(() => {
|
this.autoMoveTimer = setTimeout(() => {
|
||||||
this.onMove(x, y)
|
this.onMove(x, y)
|
||||||
}, 20)
|
}, 20)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 创建矩形
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-11 10:19:37
|
|
||||||
* @Desc: 创建矩形
|
|
||||||
*/
|
|
||||||
createRect(x, y) {
|
createRect(x, y) {
|
||||||
this.rect = this.mindMap.svg
|
this.rect = this.mindMap.svg
|
||||||
.polygon()
|
.polygon()
|
||||||
@ -156,11 +132,7 @@ class Select {
|
|||||||
.plot([[x, y]])
|
.plot([[x, y]])
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 检测在选区里的节点
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-11 10:20:43
|
|
||||||
* @Desc: 检测在选区里的节点
|
|
||||||
*/
|
|
||||||
checkInNodes() {
|
checkInNodes() {
|
||||||
let { scaleX, scaleY, translateX, translateY } =
|
let { scaleX, scaleY, translateX, translateY } =
|
||||||
this.mindMap.draw.transform()
|
this.mindMap.draw.transform()
|
||||||
|
|||||||
@ -1,18 +1,10 @@
|
|||||||
/**
|
// 节点形状类
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2022-08-22 21:32:50
|
|
||||||
* @Desc: 节点形状类
|
|
||||||
*/
|
|
||||||
export default class Shape {
|
export default class Shape {
|
||||||
constructor(node) {
|
constructor(node) {
|
||||||
this.node = node
|
this.node = node
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 形状需要的padding
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2022-08-17 22:32:32
|
|
||||||
* @Desc: 形状需要的padding
|
|
||||||
*/
|
|
||||||
getShapePadding(width, height, paddingX, paddingY) {
|
getShapePadding(width, height, paddingX, paddingY) {
|
||||||
const shape = this.node.getShape()
|
const shape = this.node.getShape()
|
||||||
const defaultPaddingX = 15
|
const defaultPaddingX = 15
|
||||||
@ -64,11 +56,7 @@ export default class Shape {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 创建形状节点
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2022-08-17 22:22:53
|
|
||||||
* @Desc: 创建形状节点
|
|
||||||
*/
|
|
||||||
createShape() {
|
createShape() {
|
||||||
const shape = this.node.getShape()
|
const shape = this.node.getShape()
|
||||||
let { width, height } = this.node
|
let { width, height } = this.node
|
||||||
@ -104,11 +92,7 @@ export default class Shape {
|
|||||||
return node
|
return node
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 创建菱形
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2022-09-04 09:08:54
|
|
||||||
* @Desc: 创建菱形
|
|
||||||
*/
|
|
||||||
createDiamond() {
|
createDiamond() {
|
||||||
let { width, height } = this.node
|
let { width, height } = this.node
|
||||||
let halfWidth = width / 2
|
let halfWidth = width / 2
|
||||||
@ -129,11 +113,7 @@ export default class Shape {
|
|||||||
`)
|
`)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 创建平行四边形
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2022-09-03 16:14:12
|
|
||||||
* @Desc: 创建平行四边形
|
|
||||||
*/
|
|
||||||
createParallelogram() {
|
createParallelogram() {
|
||||||
let { paddingX } = this.node.getPaddingVale()
|
let { paddingX } = this.node.getPaddingVale()
|
||||||
paddingX = paddingX || this.node.shapePadding.paddingX
|
paddingX = paddingX || this.node.shapePadding.paddingX
|
||||||
@ -146,11 +126,7 @@ export default class Shape {
|
|||||||
`)
|
`)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 创建圆角矩形
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2022-09-03 16:50:23
|
|
||||||
* @Desc: 创建圆角矩形
|
|
||||||
*/
|
|
||||||
createRoundedRectangle() {
|
createRoundedRectangle() {
|
||||||
let { width, height } = this.node
|
let { width, height } = this.node
|
||||||
let halfHeight = height / 2
|
let halfHeight = height / 2
|
||||||
@ -163,12 +139,7 @@ export default class Shape {
|
|||||||
`)
|
`)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 创建八角矩形
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2022-09-12 16:14:08
|
|
||||||
* @Desc: 创建八角矩形
|
|
||||||
*/
|
|
||||||
createOctagonalRectangle() {
|
createOctagonalRectangle() {
|
||||||
let w = 5
|
let w = 5
|
||||||
let { width, height } = this.node
|
let { width, height } = this.node
|
||||||
@ -184,12 +155,7 @@ export default class Shape {
|
|||||||
`)
|
`)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 创建外三角矩形
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2022-09-12 20:55:50
|
|
||||||
* @Desc: 创建外三角矩形
|
|
||||||
*/
|
|
||||||
createOuterTriangularRectangle() {
|
createOuterTriangularRectangle() {
|
||||||
let { paddingX } = this.node.getPaddingVale()
|
let { paddingX } = this.node.getPaddingVale()
|
||||||
paddingX = paddingX || this.node.shapePadding.paddingX
|
paddingX = paddingX || this.node.shapePadding.paddingX
|
||||||
@ -204,12 +170,7 @@ export default class Shape {
|
|||||||
`)
|
`)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 创建内三角矩形
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2022-09-12 20:59:37
|
|
||||||
* @Desc: 创建内三角矩形
|
|
||||||
*/
|
|
||||||
createInnerTriangularRectangle() {
|
createInnerTriangularRectangle() {
|
||||||
let { paddingX } = this.node.getPaddingVale()
|
let { paddingX } = this.node.getPaddingVale()
|
||||||
paddingX = paddingX || this.node.shapePadding.paddingX
|
paddingX = paddingX || this.node.shapePadding.paddingX
|
||||||
@ -224,12 +185,7 @@ export default class Shape {
|
|||||||
`)
|
`)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 创建椭圆
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2022-09-12 21:06:31
|
|
||||||
* @Desc: 创建椭圆
|
|
||||||
*/
|
|
||||||
createEllipse() {
|
createEllipse() {
|
||||||
let { width, height } = this.node
|
let { width, height } = this.node
|
||||||
let halfWidth = width / 2
|
let halfWidth = width / 2
|
||||||
@ -242,12 +198,7 @@ export default class Shape {
|
|||||||
`)
|
`)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 创建圆
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2022-09-12 21:14:04
|
|
||||||
* @Desc: 创建圆
|
|
||||||
*/
|
|
||||||
createCircle() {
|
createCircle() {
|
||||||
let { width, height } = this.node
|
let { width, height } = this.node
|
||||||
let halfWidth = width / 2
|
let halfWidth = width / 2
|
||||||
|
|||||||
@ -1,17 +1,9 @@
|
|||||||
import { tagColorList } from './utils/constant'
|
import { tagColorList } from './utils/constant'
|
||||||
const rootProp = ['paddingX', 'paddingY']
|
const rootProp = ['paddingX', 'paddingY']
|
||||||
|
|
||||||
/**
|
// 样式类
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 10:09:08
|
|
||||||
* @Desc: 样式类
|
|
||||||
*/
|
|
||||||
class Style {
|
class Style {
|
||||||
/**
|
// 设置背景样式
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 16:01:53
|
|
||||||
* @Desc: 设置背景样式
|
|
||||||
*/
|
|
||||||
static setBackgroundStyle(el, themeConfig) {
|
static setBackgroundStyle(el, themeConfig) {
|
||||||
let { backgroundColor, backgroundImage, backgroundRepeat } = themeConfig
|
let { backgroundColor, backgroundImage, backgroundRepeat } = themeConfig
|
||||||
el.style.backgroundColor = backgroundColor
|
el.style.backgroundColor = backgroundColor
|
||||||
@ -21,30 +13,18 @@ class Style {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 构造函数
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 10:10:11
|
|
||||||
* @Desc: 构造函数
|
|
||||||
*/
|
|
||||||
constructor(ctx, themeConfig) {
|
constructor(ctx, themeConfig) {
|
||||||
this.ctx = ctx
|
this.ctx = ctx
|
||||||
this.themeConfig = themeConfig
|
this.themeConfig = themeConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 更新主题配置
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-12 07:40:14
|
|
||||||
* @Desc: 更新主题配置
|
|
||||||
*/
|
|
||||||
updateThemeConfig(themeConfig) {
|
updateThemeConfig(themeConfig) {
|
||||||
this.themeConfig = themeConfig
|
this.themeConfig = themeConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 合并样式
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 12:02:55
|
|
||||||
* @Desc: 合并样式
|
|
||||||
*/
|
|
||||||
merge(prop, root, isActive) {
|
merge(prop, root, isActive) {
|
||||||
// 三级及以下节点
|
// 三级及以下节点
|
||||||
let defaultConfig = this.themeConfig.node
|
let defaultConfig = this.themeConfig.node
|
||||||
@ -78,42 +58,23 @@ class Style {
|
|||||||
: defaultConfig[prop]
|
: defaultConfig[prop]
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 获取某个样式值
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2022-09-12 21:55:57
|
|
||||||
* @Desc: 获取某个样式值
|
|
||||||
*/
|
|
||||||
getStyle(prop, root, isActive) {
|
getStyle(prop, root, isActive) {
|
||||||
return this.merge(prop, root, isActive)
|
return this.merge(prop, root, isActive)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 获取自身自定义样式
|
||||||
* javascript comment
|
|
||||||
* @Author: flydreame
|
|
||||||
* @Date: 2022-09-17 12:09:39
|
|
||||||
* @Desc: 获取自身自定义样式
|
|
||||||
*/
|
|
||||||
getSelfStyle(prop) {
|
getSelfStyle(prop) {
|
||||||
return this.ctx.nodeData.data[prop]
|
return this.ctx.nodeData.data[prop]
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 矩形
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 10:12:56
|
|
||||||
* @Desc: 矩形
|
|
||||||
*/
|
|
||||||
rect(node) {
|
rect(node) {
|
||||||
this.shape(node)
|
this.shape(node)
|
||||||
node.radius(this.merge('borderRadius'))
|
node.radius(this.merge('borderRadius'))
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 矩形外的其他形状
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2022-09-12 15:04:28
|
|
||||||
* @Desc: 矩形外的其他形状
|
|
||||||
*/
|
|
||||||
shape(node) {
|
shape(node) {
|
||||||
node.fill({
|
node.fill({
|
||||||
color: this.merge('fillColor')
|
color: this.merge('fillColor')
|
||||||
@ -134,11 +95,7 @@ class Style {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 文字
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 12:07:59
|
|
||||||
* @Desc: 文字
|
|
||||||
*/
|
|
||||||
text(node) {
|
text(node) {
|
||||||
node
|
node
|
||||||
.fill({
|
.fill({
|
||||||
@ -153,22 +110,14 @@ class Style {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// html文字节点
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-13 08:14:34
|
|
||||||
* @Desc: html文字节点
|
|
||||||
*/
|
|
||||||
domText(node, fontSizeScale = 1) {
|
domText(node, fontSizeScale = 1) {
|
||||||
node.style.fontFamily = this.merge('fontFamily')
|
node.style.fontFamily = this.merge('fontFamily')
|
||||||
node.style.fontSize = this.merge('fontSize') * fontSizeScale + 'px'
|
node.style.fontSize = this.merge('fontSize') * fontSizeScale + 'px'
|
||||||
node.style.fontWeight = this.merge('fontWeight') || 'normal'
|
node.style.fontWeight = this.merge('fontWeight') || 'normal'
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 标签文字
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-06-20 20:02:18
|
|
||||||
* @Desc: 标签文字
|
|
||||||
*/
|
|
||||||
tagText(node, index) {
|
tagText(node, index) {
|
||||||
node
|
node
|
||||||
.fill({
|
.fill({
|
||||||
@ -179,42 +128,26 @@ class Style {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 标签矩形
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-06-20 21:04:11
|
|
||||||
* @Desc: 标签矩形
|
|
||||||
*/
|
|
||||||
tagRect(node, index) {
|
tagRect(node, index) {
|
||||||
node.fill({
|
node.fill({
|
||||||
color: tagColorList[index].background
|
color: tagColorList[index].background
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 内置图标
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-03 22:37:19
|
|
||||||
* @Desc: 内置图标
|
|
||||||
*/
|
|
||||||
iconNode(node) {
|
iconNode(node) {
|
||||||
node.attr({
|
node.attr({
|
||||||
fill: this.merge('color')
|
fill: this.merge('color')
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 连线
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 14:50:49
|
|
||||||
* @Desc: 连线
|
|
||||||
*/
|
|
||||||
line(node, { width, color, dasharray } = {}) {
|
line(node, { width, color, dasharray } = {}) {
|
||||||
node.stroke({ width, color, dasharray }).fill({ color: 'none' })
|
node.stroke({ width, color, dasharray }).fill({ color: 'none' })
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 概要连线
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2022-07-30 16:19:03
|
|
||||||
* @Desc: 概要连线
|
|
||||||
*/
|
|
||||||
generalizationLine(node) {
|
generalizationLine(node) {
|
||||||
node
|
node
|
||||||
.stroke({
|
.stroke({
|
||||||
@ -224,11 +157,7 @@ class Style {
|
|||||||
.fill({ color: 'none' })
|
.fill({ color: 'none' })
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 按钮
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 20:03:59
|
|
||||||
* @Desc: 按钮
|
|
||||||
*/
|
|
||||||
iconBtn(node, fillNode) {
|
iconBtn(node, fillNode) {
|
||||||
node.fill({ color: '#808080' })
|
node.fill({ color: '#808080' })
|
||||||
fillNode.fill({ color: '#fff' })
|
fillNode.fill({ color: '#fff' })
|
||||||
|
|||||||
@ -1,18 +1,8 @@
|
|||||||
import { getStrWithBrFromHtml } from './utils'
|
import { getStrWithBrFromHtml } from './utils'
|
||||||
|
|
||||||
/**
|
// 节点文字编辑类
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-06-19 11:11:28
|
|
||||||
* @Desc: 节点文字编辑类
|
|
||||||
*/
|
|
||||||
export default class TextEdit {
|
export default class TextEdit {
|
||||||
/**
|
// 构造函数
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-06-19 11:22:57
|
|
||||||
* @Desc: 构造函数
|
|
||||||
*/
|
|
||||||
constructor(renderer) {
|
constructor(renderer) {
|
||||||
this.renderer = renderer
|
this.renderer = renderer
|
||||||
this.mindMap = renderer.mindMap
|
this.mindMap = renderer.mindMap
|
||||||
@ -23,11 +13,7 @@ export default class TextEdit {
|
|||||||
this.bindEvent()
|
this.bindEvent()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 事件
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-24 13:27:04
|
|
||||||
* @Desc: 事件
|
|
||||||
*/
|
|
||||||
bindEvent() {
|
bindEvent() {
|
||||||
this.show = this.show.bind(this)
|
this.show = this.show.bind(this)
|
||||||
// 节点双击事件
|
// 节点双击事件
|
||||||
@ -54,12 +40,7 @@ export default class TextEdit {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 注册临时快捷键
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-08-16 16:27:02
|
|
||||||
* @Desc: 注册临时快捷键
|
|
||||||
*/
|
|
||||||
registerTmpShortcut() {
|
registerTmpShortcut() {
|
||||||
// 注册回车快捷键
|
// 注册回车快捷键
|
||||||
this.mindMap.keyCommand.addShortcut('Enter', () => {
|
this.mindMap.keyCommand.addShortcut('Enter', () => {
|
||||||
@ -67,20 +48,12 @@ export default class TextEdit {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 显示文本编辑框
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-13 22:15:56
|
|
||||||
* @Desc: 显示文本编辑框
|
|
||||||
*/
|
|
||||||
show(node) {
|
show(node) {
|
||||||
this.showEditTextBox(node, node._textData.node.node.getBoundingClientRect())
|
this.showEditTextBox(node, node._textData.node.node.getBoundingClientRect())
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 显示文本编辑框
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-13 22:13:02
|
|
||||||
* @Desc: 显示文本编辑框
|
|
||||||
*/
|
|
||||||
showEditTextBox(node, rect) {
|
showEditTextBox(node, rect) {
|
||||||
this.mindMap.emit('before_show_text_edit')
|
this.mindMap.emit('before_show_text_edit')
|
||||||
this.registerTmpShortcut()
|
this.registerTmpShortcut()
|
||||||
@ -107,11 +80,7 @@ export default class TextEdit {
|
|||||||
this.selectNodeText()
|
this.selectNodeText()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 选中文本
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-08-02 23:13:50
|
|
||||||
* @Desc: 选中文本
|
|
||||||
*/
|
|
||||||
selectNodeText() {
|
selectNodeText() {
|
||||||
let selection = window.getSelection()
|
let selection = window.getSelection()
|
||||||
let range = document.createRange()
|
let range = document.createRange()
|
||||||
@ -120,11 +89,7 @@ export default class TextEdit {
|
|||||||
selection.addRange(range)
|
selection.addRange(range)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 隐藏文本编辑框
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-24 13:48:16
|
|
||||||
* @Desc: 隐藏文本编辑框
|
|
||||||
*/
|
|
||||||
hideEditTextBox() {
|
hideEditTextBox() {
|
||||||
if (!this.showTextEdit) {
|
if (!this.showTextEdit) {
|
||||||
return
|
return
|
||||||
|
|||||||
@ -1,16 +1,6 @@
|
|||||||
/**
|
// 视图操作类
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-07 14:45:24
|
|
||||||
* @Desc: 视图操作类
|
|
||||||
*/
|
|
||||||
class View {
|
class View {
|
||||||
/**
|
// 构造函数
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-07 14:45:40
|
|
||||||
* @Desc: 构造函数
|
|
||||||
*/
|
|
||||||
constructor(opt = {}) {
|
constructor(opt = {}) {
|
||||||
this.opt = opt
|
this.opt = opt
|
||||||
this.mindMap = this.opt.mindMap
|
this.mindMap = this.opt.mindMap
|
||||||
@ -24,12 +14,7 @@ class View {
|
|||||||
this.bind()
|
this.bind()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 绑定
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-07 15:38:51
|
|
||||||
* @Desc: 绑定
|
|
||||||
*/
|
|
||||||
bind() {
|
bind() {
|
||||||
// 快捷键
|
// 快捷键
|
||||||
this.mindMap.keyCommand.addShortcut('Control+=', () => {
|
this.mindMap.keyCommand.addShortcut('Control+=', () => {
|
||||||
@ -80,12 +65,7 @@ class View {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 获取当前变换状态数据
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-11-22 18:30:24
|
|
||||||
* @Desc: 获取当前变换状态数据
|
|
||||||
*/
|
|
||||||
getTransformData() {
|
getTransformData() {
|
||||||
return {
|
return {
|
||||||
transform: this.mindMap.draw.transform(),
|
transform: this.mindMap.draw.transform(),
|
||||||
@ -99,12 +79,7 @@ class View {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 动态设置变换状态数据
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-11-22 19:54:17
|
|
||||||
* @Desc: 动态设置变换状态数据
|
|
||||||
*/
|
|
||||||
setTransformData(viewData) {
|
setTransformData(viewData) {
|
||||||
if (viewData) {
|
if (viewData) {
|
||||||
Object.keys(viewData.state).forEach(prop => {
|
Object.keys(viewData.state).forEach(prop => {
|
||||||
@ -118,55 +93,31 @@ class View {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 平移x方向
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-07-13 15:49:06
|
|
||||||
* @Desc: 平移x方向
|
|
||||||
*/
|
|
||||||
translateX(step) {
|
translateX(step) {
|
||||||
this.x += step
|
this.x += step
|
||||||
this.transform()
|
this.transform()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 平移x方式到
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-10-10 14:03:53
|
|
||||||
* @Desc: 平移x方式到
|
|
||||||
*/
|
|
||||||
translateXTo(x) {
|
translateXTo(x) {
|
||||||
this.x = x
|
this.x = x
|
||||||
this.transform()
|
this.transform()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 平移y方向
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-07-13 15:48:52
|
|
||||||
* @Desc: 平移y方向
|
|
||||||
*/
|
|
||||||
translateY(step) {
|
translateY(step) {
|
||||||
this.y += step
|
this.y += step
|
||||||
this.transform()
|
this.transform()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 平移y方向到
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-10-10 14:04:10
|
|
||||||
* @Desc: 平移y方向到
|
|
||||||
*/
|
|
||||||
translateYTo(y) {
|
translateYTo(y) {
|
||||||
this.y = y
|
this.y = y
|
||||||
this.transform()
|
this.transform()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 应用变换
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-04 17:13:14
|
|
||||||
* @Desc: 应用变换
|
|
||||||
*/
|
|
||||||
transform() {
|
transform() {
|
||||||
this.mindMap.draw.transform({
|
this.mindMap.draw.transform({
|
||||||
scale: this.scale,
|
scale: this.scale,
|
||||||
@ -176,11 +127,7 @@ class View {
|
|||||||
this.mindMap.emit('view_data_change', this.getTransformData())
|
this.mindMap.emit('view_data_change', this.getTransformData())
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 恢复
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-11 17:41:35
|
|
||||||
* @Desc: 恢复
|
|
||||||
*/
|
|
||||||
reset() {
|
reset() {
|
||||||
this.scale = 1
|
this.scale = 1
|
||||||
this.x = 0
|
this.x = 0
|
||||||
@ -188,11 +135,7 @@ class View {
|
|||||||
this.transform()
|
this.transform()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 缩小
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-04 17:10:34
|
|
||||||
* @Desc: 缩小
|
|
||||||
*/
|
|
||||||
narrow() {
|
narrow() {
|
||||||
if (this.scale - this.mindMap.opt.scaleRatio > 0.1) {
|
if (this.scale - this.mindMap.opt.scaleRatio > 0.1) {
|
||||||
this.scale -= this.mindMap.opt.scaleRatio
|
this.scale -= this.mindMap.opt.scaleRatio
|
||||||
@ -203,23 +146,14 @@ class View {
|
|||||||
this.mindMap.emit('scale', this.scale)
|
this.mindMap.emit('scale', this.scale)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 放大
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-04 17:10:41
|
|
||||||
* @Desc: 放大
|
|
||||||
*/
|
|
||||||
enlarge() {
|
enlarge() {
|
||||||
this.scale += this.mindMap.opt.scaleRatio
|
this.scale += this.mindMap.opt.scaleRatio
|
||||||
this.transform()
|
this.transform()
|
||||||
this.mindMap.emit('scale', this.scale)
|
this.mindMap.emit('scale', this.scale)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 设置缩放
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-12-09 16:31:59
|
|
||||||
* @Desc: 设置缩放
|
|
||||||
*/
|
|
||||||
setScale(scale) {
|
setScale(scale) {
|
||||||
this.scale = scale
|
this.scale = scale
|
||||||
this.transform()
|
this.transform()
|
||||||
|
|||||||
@ -1,16 +1,8 @@
|
|||||||
import Node from '../Node'
|
import Node from '../Node'
|
||||||
|
|
||||||
/**
|
// 布局基类
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-12 22:24:30
|
|
||||||
* @Desc: 布局基类
|
|
||||||
*/
|
|
||||||
class Base {
|
class Base {
|
||||||
/**
|
// 构造函数
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-12 22:25:16
|
|
||||||
* @Desc: 构造函数
|
|
||||||
*/
|
|
||||||
constructor(renderer) {
|
constructor(renderer) {
|
||||||
// 渲染实例
|
// 渲染实例
|
||||||
this.renderer = renderer
|
this.renderer = renderer
|
||||||
@ -22,45 +14,25 @@ class Base {
|
|||||||
this.root = null
|
this.root = null
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 计算节点位置
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-12 22:39:50
|
|
||||||
* @Desc: 计算节点位置
|
|
||||||
*/
|
|
||||||
doLayout() {
|
doLayout() {
|
||||||
throw new Error('【computed】方法为必要方法,需要子类进行重写!')
|
throw new Error('【computed】方法为必要方法,需要子类进行重写!')
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 连线
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-12 22:41:04
|
|
||||||
* @Desc: 连线
|
|
||||||
*/
|
|
||||||
renderLine() {
|
renderLine() {
|
||||||
throw new Error('【renderLine】方法为必要方法,需要子类进行重写!')
|
throw new Error('【renderLine】方法为必要方法,需要子类进行重写!')
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 定位展开收缩按钮
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-12 22:42:08
|
|
||||||
* @Desc: 定位展开收缩按钮
|
|
||||||
*/
|
|
||||||
renderExpandBtn() {
|
renderExpandBtn() {
|
||||||
throw new Error('【renderExpandBtn】方法为必要方法,需要子类进行重写!')
|
throw new Error('【renderExpandBtn】方法为必要方法,需要子类进行重写!')
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 概要节点
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2022-07-30 22:49:28
|
|
||||||
* @Desc: 概要节点
|
|
||||||
*/
|
|
||||||
renderGeneralization() {}
|
renderGeneralization() {}
|
||||||
|
|
||||||
/**
|
// 创建节点实例
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-10 21:30:54
|
|
||||||
* @Desc: 创建节点实例
|
|
||||||
*/
|
|
||||||
createNode(data, parent, isRoot, layerIndex) {
|
createNode(data, parent, isRoot, layerIndex) {
|
||||||
// 创建节点
|
// 创建节点
|
||||||
let newNode = null
|
let newNode = null
|
||||||
@ -98,22 +70,13 @@ class Base {
|
|||||||
return newNode
|
return newNode
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 定位节点到画布中间
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-16 13:48:43
|
|
||||||
* @Desc: 定位节点到画布中间
|
|
||||||
*/
|
|
||||||
setNodeCenter(node) {
|
setNodeCenter(node) {
|
||||||
node.left = (this.mindMap.width - node.width) / 2
|
node.left = (this.mindMap.width - node.width) / 2
|
||||||
node.top = (this.mindMap.height - node.height) / 2
|
node.top = (this.mindMap.height - node.height) / 2
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 更新子节点属性
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-07 11:25:52
|
|
||||||
* @Desc: 更新子节点属性
|
|
||||||
*/
|
|
||||||
updateChildren(children, prop, offset) {
|
updateChildren(children, prop, offset) {
|
||||||
children.forEach(item => {
|
children.forEach(item => {
|
||||||
item[prop] += offset
|
item[prop] += offset
|
||||||
@ -124,22 +87,14 @@ class Base {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 二次贝塞尔曲线
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 15:05:01
|
|
||||||
* @Desc: 二次贝塞尔曲线
|
|
||||||
*/
|
|
||||||
quadraticCurvePath(x1, y1, x2, y2) {
|
quadraticCurvePath(x1, y1, x2, y2) {
|
||||||
let cx = x1 + (x2 - x1) * 0.2
|
let cx = x1 + (x2 - x1) * 0.2
|
||||||
let cy = y1 + (y2 - y1) * 0.8
|
let cy = y1 + (y2 - y1) * 0.8
|
||||||
return `M ${x1},${y1} Q ${cx},${cy} ${x2},${y2}`
|
return `M ${x1},${y1} Q ${cx},${cy} ${x2},${y2}`
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 三次贝塞尔曲线
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 15:05:18
|
|
||||||
* @Desc: 三次贝塞尔曲线
|
|
||||||
*/
|
|
||||||
cubicBezierPath(x1, y1, x2, y2) {
|
cubicBezierPath(x1, y1, x2, y2) {
|
||||||
let cx1 = x1 + (x2 - x1) / 2
|
let cx1 = x1 + (x2 - x1) / 2
|
||||||
let cy1 = y1
|
let cy1 = y1
|
||||||
@ -148,33 +103,21 @@ class Base {
|
|||||||
return `M ${x1},${y1} C ${cx1},${cy1} ${cx2},${cy2} ${x2},${y2}`
|
return `M ${x1},${y1} C ${cx1},${cy1} ${cx2},${cy2} ${x2},${y2}`
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 获取节点的marginX
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-06-27 19:00:07
|
|
||||||
* @Desc: 获取节点的marginX
|
|
||||||
*/
|
|
||||||
getMarginX(layerIndex) {
|
getMarginX(layerIndex) {
|
||||||
return layerIndex === 1
|
return layerIndex === 1
|
||||||
? this.mindMap.themeConfig.second.marginX
|
? this.mindMap.themeConfig.second.marginX
|
||||||
: this.mindMap.themeConfig.node.marginX
|
: this.mindMap.themeConfig.node.marginX
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 获取节点的marginY
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 15:34:20
|
|
||||||
* @Desc: 获取节点的marginY
|
|
||||||
*/
|
|
||||||
getMarginY(layerIndex) {
|
getMarginY(layerIndex) {
|
||||||
return layerIndex === 1
|
return layerIndex === 1
|
||||||
? this.mindMap.themeConfig.second.marginY
|
? this.mindMap.themeConfig.second.marginY
|
||||||
: this.mindMap.themeConfig.node.marginY
|
: this.mindMap.themeConfig.node.marginY
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 获取节点包括概要在内的宽度
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2022-07-31 20:53:12
|
|
||||||
* @Desc: 获取节点包括概要在内的宽度
|
|
||||||
*/
|
|
||||||
getNodeWidthWithGeneralization(node) {
|
getNodeWidthWithGeneralization(node) {
|
||||||
return Math.max(
|
return Math.max(
|
||||||
node.width,
|
node.width,
|
||||||
@ -182,11 +125,7 @@ class Base {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 获取节点包括概要在内的高度
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2022-07-31 20:53:12
|
|
||||||
* @Desc: 获取节点包括概要在内的高度
|
|
||||||
*/
|
|
||||||
getNodeHeightWithGeneralization(node) {
|
getNodeHeightWithGeneralization(node) {
|
||||||
return Math.max(
|
return Math.max(
|
||||||
node.height,
|
node.height,
|
||||||
@ -194,10 +133,8 @@ class Base {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 获取节点的边界值
|
||||||
/**
|
/**
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2022-07-31 09:14:03
|
|
||||||
* @Desc: 获取节点的边界值
|
|
||||||
* dir:生长方向,h(水平)、v(垂直)
|
* dir:生长方向,h(水平)、v(垂直)
|
||||||
* isLeft:是否向左生长
|
* isLeft:是否向左生长
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -1,27 +1,14 @@
|
|||||||
import Base from './Base'
|
import Base from './Base'
|
||||||
import { walk, asyncRun } from '../utils'
|
import { walk, asyncRun } from '../utils'
|
||||||
|
|
||||||
/**
|
// 目录组织图
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-12 22:25:58
|
|
||||||
* @Desc: 目录组织图
|
|
||||||
*/
|
|
||||||
class CatalogOrganization extends Base {
|
class CatalogOrganization extends Base {
|
||||||
/**
|
// 构造函数
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-12 22:26:31
|
|
||||||
* @Desc: 构造函数
|
|
||||||
*/
|
|
||||||
constructor(opt = {}) {
|
constructor(opt = {}) {
|
||||||
super(opt)
|
super(opt)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 布局
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-06 14:04:20
|
|
||||||
* @Desc: 布局
|
|
||||||
*/
|
|
||||||
doLayout(callback) {
|
doLayout(callback) {
|
||||||
let task = [
|
let task = [
|
||||||
() => {
|
() => {
|
||||||
@ -40,12 +27,7 @@ class CatalogOrganization extends Base {
|
|||||||
asyncRun(task)
|
asyncRun(task)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 遍历数据计算节点的left、width、height
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-08 09:49:32
|
|
||||||
* @Desc: 遍历数据计算节点的left、width、height
|
|
||||||
*/
|
|
||||||
computedBaseValue() {
|
computedBaseValue() {
|
||||||
walk(
|
walk(
|
||||||
this.renderer.renderTree,
|
this.renderer.renderTree,
|
||||||
@ -84,12 +66,7 @@ class CatalogOrganization extends Base {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 遍历节点树计算节点的left、top
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-08 09:59:25
|
|
||||||
* @Desc: 遍历节点树计算节点的left、top
|
|
||||||
*/
|
|
||||||
computedLeftTopValue() {
|
computedLeftTopValue() {
|
||||||
walk(
|
walk(
|
||||||
this.root,
|
this.root,
|
||||||
@ -124,12 +101,7 @@ class CatalogOrganization extends Base {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 调整节点left、top
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-08 10:04:05
|
|
||||||
* @Desc: 调整节点left、top
|
|
||||||
*/
|
|
||||||
adjustLeftTopValue() {
|
adjustLeftTopValue() {
|
||||||
walk(
|
walk(
|
||||||
this.root,
|
this.root,
|
||||||
@ -164,12 +136,7 @@ class CatalogOrganization extends Base {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 递归计算节点的宽度
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-12 18:55:03
|
|
||||||
* @Desc: 递归计算节点的宽度
|
|
||||||
*/
|
|
||||||
getNodeAreaWidth(node) {
|
getNodeAreaWidth(node) {
|
||||||
let widthArr = []
|
let widthArr = []
|
||||||
let loop = (node, width) => {
|
let loop = (node, width) => {
|
||||||
@ -187,12 +154,7 @@ class CatalogOrganization extends Base {
|
|||||||
return Math.max(...widthArr)
|
return Math.max(...widthArr)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 调整兄弟节点的left
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-07-13 11:12:51
|
|
||||||
* @Desc: 调整兄弟节点的left
|
|
||||||
*/
|
|
||||||
updateBrothersLeft(node, addWidth) {
|
updateBrothersLeft(node, addWidth) {
|
||||||
if (node.parent) {
|
if (node.parent) {
|
||||||
let childrenList = node.parent.children
|
let childrenList = node.parent.children
|
||||||
@ -238,12 +200,7 @@ class CatalogOrganization extends Base {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 调整兄弟节点的top
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-07 14:26:03
|
|
||||||
* @Desc: 调整兄弟节点的top
|
|
||||||
*/
|
|
||||||
updateBrothersTop(node, addHeight) {
|
updateBrothersTop(node, addHeight) {
|
||||||
if (node.parent && !node.parent.isRoot) {
|
if (node.parent && !node.parent.isRoot) {
|
||||||
let childrenList = node.parent.children
|
let childrenList = node.parent.children
|
||||||
@ -271,11 +228,7 @@ class CatalogOrganization extends Base {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 绘制连线,连接该节点到其子节点
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 14:42:48
|
|
||||||
* @Desc: 绘制连线,连接该节点到其子节点
|
|
||||||
*/
|
|
||||||
renderLine(node, lines, style) {
|
renderLine(node, lines, style) {
|
||||||
if (node.children.length <= 0) {
|
if (node.children.length <= 0) {
|
||||||
return []
|
return []
|
||||||
@ -396,11 +349,7 @@ class CatalogOrganization extends Base {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 渲染按钮
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 19:54:26
|
|
||||||
* @Desc: 渲染按钮
|
|
||||||
*/
|
|
||||||
renderExpandBtn(node, btn) {
|
renderExpandBtn(node, btn) {
|
||||||
let { width, height, expandBtnSize, isRoot } = node
|
let { width, height, expandBtnSize, isRoot } = node
|
||||||
if (!isRoot) {
|
if (!isRoot) {
|
||||||
@ -412,11 +361,7 @@ class CatalogOrganization extends Base {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 创建概要节点
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2022-07-30 08:30:35
|
|
||||||
* @Desc: 创建概要节点
|
|
||||||
*/
|
|
||||||
renderGeneralization(node, gLine, gNode) {
|
renderGeneralization(node, gLine, gNode) {
|
||||||
let {
|
let {
|
||||||
top,
|
top,
|
||||||
|
|||||||
@ -1,27 +1,14 @@
|
|||||||
import Base from './Base'
|
import Base from './Base'
|
||||||
import { walk, asyncRun } from '../utils'
|
import { walk, asyncRun } from '../utils'
|
||||||
|
|
||||||
/**
|
// 逻辑结构图
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-12 22:25:58
|
|
||||||
* @Desc: 逻辑结构图
|
|
||||||
*/
|
|
||||||
class LogicalStructure extends Base {
|
class LogicalStructure extends Base {
|
||||||
/**
|
// 构造函数
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-12 22:26:31
|
|
||||||
* @Desc: 构造函数
|
|
||||||
*/
|
|
||||||
constructor(opt = {}) {
|
constructor(opt = {}) {
|
||||||
super(opt)
|
super(opt)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 布局
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-06 14:04:20
|
|
||||||
* @Desc: 布局
|
|
||||||
*/
|
|
||||||
doLayout(callback) {
|
doLayout(callback) {
|
||||||
let task = [
|
let task = [
|
||||||
() => {
|
() => {
|
||||||
@ -40,12 +27,7 @@ class LogicalStructure extends Base {
|
|||||||
asyncRun(task)
|
asyncRun(task)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 遍历数据计算节点的left、width、height
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-08 09:49:32
|
|
||||||
* @Desc: 遍历数据计算节点的left、width、height
|
|
||||||
*/
|
|
||||||
computedBaseValue() {
|
computedBaseValue() {
|
||||||
walk(
|
walk(
|
||||||
this.renderer.renderTree,
|
this.renderer.renderTree,
|
||||||
@ -80,12 +62,7 @@ class LogicalStructure extends Base {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 遍历节点树计算节点的top
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-08 09:59:25
|
|
||||||
* @Desc: 遍历节点树计算节点的top
|
|
||||||
*/
|
|
||||||
computedTopValue() {
|
computedTopValue() {
|
||||||
walk(
|
walk(
|
||||||
this.root,
|
this.root,
|
||||||
@ -111,12 +88,7 @@ class LogicalStructure extends Base {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 调整节点top
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-08 10:04:05
|
|
||||||
* @Desc: 调整节点top
|
|
||||||
*/
|
|
||||||
adjustTopValue() {
|
adjustTopValue() {
|
||||||
walk(
|
walk(
|
||||||
this.root,
|
this.root,
|
||||||
@ -139,12 +111,7 @@ class LogicalStructure extends Base {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 更新兄弟节点的top
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-07 14:26:03
|
|
||||||
* @Desc: 更新兄弟节点的top
|
|
||||||
*/
|
|
||||||
updateBrothers(node, addHeight) {
|
updateBrothers(node, addHeight) {
|
||||||
if (node.parent) {
|
if (node.parent) {
|
||||||
let childrenList = node.parent.children
|
let childrenList = node.parent.children
|
||||||
@ -175,11 +142,7 @@ class LogicalStructure extends Base {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 绘制连线,连接该节点到其子节点
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 14:42:48
|
|
||||||
* @Desc: 绘制连线,连接该节点到其子节点
|
|
||||||
*/
|
|
||||||
renderLine(node, lines, style, lineStyle) {
|
renderLine(node, lines, style, lineStyle) {
|
||||||
if (lineStyle === 'curve') {
|
if (lineStyle === 'curve') {
|
||||||
this.renderLineCurve(node, lines, style)
|
this.renderLineCurve(node, lines, style)
|
||||||
@ -190,12 +153,7 @@ class LogicalStructure extends Base {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 直线风格连线
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-09-30 14:17:30
|
|
||||||
* @Desc: 直线风格连线
|
|
||||||
*/
|
|
||||||
renderLineStraight(node, lines, style) {
|
renderLineStraight(node, lines, style) {
|
||||||
if (node.children.length <= 0) {
|
if (node.children.length <= 0) {
|
||||||
return []
|
return []
|
||||||
@ -221,12 +179,7 @@ class LogicalStructure extends Base {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 直连风格
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-09-30 14:34:41
|
|
||||||
* @Desc: 直连风格
|
|
||||||
*/
|
|
||||||
renderLineDirect(node, lines, style) {
|
renderLineDirect(node, lines, style) {
|
||||||
if (node.children.length <= 0) {
|
if (node.children.length <= 0) {
|
||||||
return []
|
return []
|
||||||
@ -248,12 +201,7 @@ class LogicalStructure extends Base {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 曲线风格连线
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-09-30 14:17:43
|
|
||||||
* @Desc: 曲线风格连线
|
|
||||||
*/
|
|
||||||
renderLineCurve(node, lines, style) {
|
renderLineCurve(node, lines, style) {
|
||||||
if (node.children.length <= 0) {
|
if (node.children.length <= 0) {
|
||||||
return []
|
return []
|
||||||
@ -280,11 +228,7 @@ class LogicalStructure extends Base {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 渲染按钮
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 19:54:26
|
|
||||||
* @Desc: 渲染按钮
|
|
||||||
*/
|
|
||||||
renderExpandBtn(node, btn) {
|
renderExpandBtn(node, btn) {
|
||||||
let { width, height } = node
|
let { width, height } = node
|
||||||
let { translateX, translateY } = btn.transform()
|
let { translateX, translateY } = btn.transform()
|
||||||
@ -298,11 +242,7 @@ class LogicalStructure extends Base {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 创建概要节点
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2022-07-30 08:30:35
|
|
||||||
* @Desc: 创建概要节点
|
|
||||||
*/
|
|
||||||
renderGeneralization(node, gLine, gNode) {
|
renderGeneralization(node, gLine, gNode) {
|
||||||
let {
|
let {
|
||||||
top,
|
top,
|
||||||
|
|||||||
@ -1,28 +1,17 @@
|
|||||||
import Base from './Base'
|
import Base from './Base'
|
||||||
import { walk, asyncRun } from '../utils'
|
import { walk, asyncRun } from '../utils'
|
||||||
|
|
||||||
/**
|
// 思维导图
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-12 22:25:58
|
|
||||||
* @Desc: 思维导图
|
|
||||||
* 在逻辑结构图的基础上增加一个变量来记录生长方向,向左还是向右,同时在计算left的时候根据方向来计算、调整top时只考虑同方向的节点即可
|
|
||||||
*/
|
|
||||||
class MindMap extends Base {
|
class MindMap extends Base {
|
||||||
/**
|
// 构造函数
|
||||||
* @Author: 王林
|
// 在逻辑结构图的基础上增加一个变量来记录生长方向,向左还是向右,同时在计算left的时候根据方向来计算、调整top时只考虑同方向的节点即可
|
||||||
* @Date: 2021-04-12 22:26:31
|
|
||||||
* @Desc: 构造函数
|
|
||||||
*/
|
|
||||||
constructor(opt = {}) {
|
constructor(opt = {}) {
|
||||||
super(opt)
|
super(opt)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 布局
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-06 14:04:20
|
|
||||||
* @Desc: 布局
|
|
||||||
*/
|
|
||||||
doLayout(callback) {
|
doLayout(callback) {
|
||||||
let task = [
|
let task = [
|
||||||
() => {
|
() => {
|
||||||
@ -41,12 +30,8 @@ class MindMap extends Base {
|
|||||||
asyncRun(task)
|
asyncRun(task)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 遍历数据计算节点的left、width、height
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-08 09:49:32
|
|
||||||
* @Desc: 遍历数据计算节点的left、width、height
|
|
||||||
*/
|
|
||||||
computedBaseValue() {
|
computedBaseValue() {
|
||||||
walk(
|
walk(
|
||||||
this.renderer.renderTree,
|
this.renderer.renderTree,
|
||||||
@ -110,12 +95,8 @@ class MindMap extends Base {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 遍历节点树计算节点的top
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-08 09:59:25
|
|
||||||
* @Desc: 遍历节点树计算节点的top
|
|
||||||
*/
|
|
||||||
computedTopValue() {
|
computedTopValue() {
|
||||||
walk(
|
walk(
|
||||||
this.root,
|
this.root,
|
||||||
@ -147,12 +128,8 @@ class MindMap extends Base {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 调整节点top
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-08 10:04:05
|
|
||||||
* @Desc: 调整节点top
|
|
||||||
*/
|
|
||||||
adjustTopValue() {
|
adjustTopValue() {
|
||||||
walk(
|
walk(
|
||||||
this.root,
|
this.root,
|
||||||
@ -174,12 +151,8 @@ class MindMap extends Base {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 更新兄弟节点的top
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-07 14:26:03
|
|
||||||
* @Desc: 更新兄弟节点的top
|
|
||||||
*/
|
|
||||||
updateBrothers(node, leftAddHeight, rightAddHeight) {
|
updateBrothers(node, leftAddHeight, rightAddHeight) {
|
||||||
if (node.parent) {
|
if (node.parent) {
|
||||||
// 过滤出和自己同方向的节点
|
// 过滤出和自己同方向的节点
|
||||||
@ -214,11 +187,8 @@ class MindMap extends Base {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 绘制连线,连接该节点到其子节点
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 14:42:48
|
|
||||||
* @Desc: 绘制连线,连接该节点到其子节点
|
|
||||||
*/
|
|
||||||
renderLine(node, lines, style, lineStyle) {
|
renderLine(node, lines, style, lineStyle) {
|
||||||
if (lineStyle === 'curve') {
|
if (lineStyle === 'curve') {
|
||||||
this.renderLineCurve(node, lines, style)
|
this.renderLineCurve(node, lines, style)
|
||||||
@ -229,12 +199,8 @@ class MindMap extends Base {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 直线风格连线
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-09-30 14:10:47
|
|
||||||
* @Desc: 直线风格连线
|
|
||||||
*/
|
|
||||||
renderLineStraight(node, lines, style) {
|
renderLineStraight(node, lines, style) {
|
||||||
if (node.children.length <= 0) {
|
if (node.children.length <= 0) {
|
||||||
return []
|
return []
|
||||||
@ -268,12 +234,8 @@ class MindMap extends Base {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 直连风格
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-09-30 14:34:41
|
|
||||||
* @Desc: 直连风格
|
|
||||||
*/
|
|
||||||
renderLineDirect(node, lines, style) {
|
renderLineDirect(node, lines, style) {
|
||||||
if (node.children.length <= 0) {
|
if (node.children.length <= 0) {
|
||||||
return []
|
return []
|
||||||
@ -304,12 +266,8 @@ class MindMap extends Base {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 曲线风格连线
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-09-30 14:10:56
|
|
||||||
* @Desc: 曲线风格连线
|
|
||||||
*/
|
|
||||||
renderLineCurve(node, lines, style) {
|
renderLineCurve(node, lines, style) {
|
||||||
if (node.children.length <= 0) {
|
if (node.children.length <= 0) {
|
||||||
return []
|
return []
|
||||||
@ -345,11 +303,8 @@ class MindMap extends Base {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 渲染按钮
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 19:54:26
|
|
||||||
* @Desc: 渲染按钮
|
|
||||||
*/
|
|
||||||
renderExpandBtn(node, btn) {
|
renderExpandBtn(node, btn) {
|
||||||
let { width, height, expandBtnSize } = node
|
let { width, height, expandBtnSize } = node
|
||||||
let { translateX, translateY } = btn.transform()
|
let { translateX, translateY } = btn.transform()
|
||||||
@ -362,11 +317,8 @@ class MindMap extends Base {
|
|||||||
btn.translate(x, y)
|
btn.translate(x, y)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 创建概要节点
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2022-07-30 08:30:35
|
|
||||||
* @Desc: 创建概要节点
|
|
||||||
*/
|
|
||||||
renderGeneralization(node, gLine, gNode) {
|
renderGeneralization(node, gLine, gNode) {
|
||||||
let isLeft = node.dir === 'left'
|
let isLeft = node.dir === 'left'
|
||||||
let {
|
let {
|
||||||
|
|||||||
@ -1,28 +1,17 @@
|
|||||||
import Base from './Base'
|
import Base from './Base'
|
||||||
import { walk, asyncRun } from '../utils'
|
import { walk, asyncRun } from '../utils'
|
||||||
|
|
||||||
/**
|
// 组织结构图
|
||||||
* @Author: 王林
|
// 和逻辑结构图基本一样,只是方向变成向下生长,所以先计算节点的top,后计算节点的left、最后调整节点的left即可
|
||||||
* @Date: 2021-04-12 22:25:58
|
|
||||||
* @Desc: 组织结构图
|
|
||||||
* 和逻辑结构图基本一样,只是方向变成向下生长,所以先计算节点的top,后计算节点的left、最后调整节点的left即可
|
|
||||||
*/
|
|
||||||
class OrganizationStructure extends Base {
|
class OrganizationStructure extends Base {
|
||||||
/**
|
// 构造函数
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-12 22:26:31
|
|
||||||
* @Desc: 构造函数
|
|
||||||
*/
|
|
||||||
constructor(opt = {}) {
|
constructor(opt = {}) {
|
||||||
super(opt)
|
super(opt)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 布局
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-06 14:04:20
|
|
||||||
* @Desc: 布局
|
|
||||||
*/
|
|
||||||
doLayout(callback) {
|
doLayout(callback) {
|
||||||
let task = [
|
let task = [
|
||||||
() => {
|
() => {
|
||||||
@ -41,12 +30,8 @@ class OrganizationStructure extends Base {
|
|||||||
asyncRun(task)
|
asyncRun(task)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 遍历数据计算节点的left、width、height
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-08 09:49:32
|
|
||||||
* @Desc: 遍历数据计算节点的left、width、height
|
|
||||||
*/
|
|
||||||
computedBaseValue() {
|
computedBaseValue() {
|
||||||
walk(
|
walk(
|
||||||
this.renderer.renderTree,
|
this.renderer.renderTree,
|
||||||
@ -81,12 +66,8 @@ class OrganizationStructure extends Base {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 遍历节点树计算节点的left
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-08 09:59:25
|
|
||||||
* @Desc: 遍历节点树计算节点的left
|
|
||||||
*/
|
|
||||||
computedLeftValue() {
|
computedLeftValue() {
|
||||||
walk(
|
walk(
|
||||||
this.root,
|
this.root,
|
||||||
@ -112,12 +93,8 @@ class OrganizationStructure extends Base {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 调整节点left
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-08 10:04:05
|
|
||||||
* @Desc: 调整节点left
|
|
||||||
*/
|
|
||||||
adjustLeftValue() {
|
adjustLeftValue() {
|
||||||
walk(
|
walk(
|
||||||
this.root,
|
this.root,
|
||||||
@ -140,12 +117,8 @@ class OrganizationStructure extends Base {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 更新兄弟节点的left
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-07 14:26:03
|
|
||||||
* @Desc: 更新兄弟节点的left
|
|
||||||
*/
|
|
||||||
updateBrothers(node, addWidth) {
|
updateBrothers(node, addWidth) {
|
||||||
if (node.parent) {
|
if (node.parent) {
|
||||||
let childrenList = node.parent.children
|
let childrenList = node.parent.children
|
||||||
@ -176,11 +149,8 @@ class OrganizationStructure extends Base {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 绘制连线,连接该节点到其子节点
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 14:42:48
|
|
||||||
* @Desc: 绘制连线,连接该节点到其子节点
|
|
||||||
*/
|
|
||||||
renderLine(node, lines, style, lineStyle) {
|
renderLine(node, lines, style, lineStyle) {
|
||||||
if (lineStyle === 'direct') {
|
if (lineStyle === 'direct') {
|
||||||
this.renderLineDirect(node, lines, style)
|
this.renderLineDirect(node, lines, style)
|
||||||
@ -189,12 +159,8 @@ class OrganizationStructure extends Base {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 直连风格
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-09-30 14:34:41
|
|
||||||
* @Desc: 直连风格
|
|
||||||
*/
|
|
||||||
renderLineDirect(node, lines, style) {
|
renderLineDirect(node, lines, style) {
|
||||||
if (node.children.length <= 0) {
|
if (node.children.length <= 0) {
|
||||||
return []
|
return []
|
||||||
@ -215,12 +181,8 @@ class OrganizationStructure extends Base {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 直线风格连线
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-09-30 14:39:07
|
|
||||||
* @Desc: 直线风格连线
|
|
||||||
*/
|
|
||||||
renderLineStraight(node, lines, style) {
|
renderLineStraight(node, lines, style) {
|
||||||
if (node.children.length <= 0) {
|
if (node.children.length <= 0) {
|
||||||
return []
|
return []
|
||||||
@ -269,11 +231,8 @@ class OrganizationStructure extends Base {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 渲染按钮
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 19:54:26
|
|
||||||
* @Desc: 渲染按钮
|
|
||||||
*/
|
|
||||||
renderExpandBtn(node, btn) {
|
renderExpandBtn(node, btn) {
|
||||||
let { width, height, expandBtnSize } = node
|
let { width, height, expandBtnSize } = node
|
||||||
let { translateX, translateY } = btn.transform()
|
let { translateX, translateY } = btn.transform()
|
||||||
@ -283,11 +242,8 @@ class OrganizationStructure extends Base {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 创建概要节点
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2022-07-30 08:30:35
|
|
||||||
* @Desc: 创建概要节点
|
|
||||||
*/
|
|
||||||
renderGeneralization(node, gLine, gNode) {
|
renderGeneralization(node, gLine, gNode) {
|
||||||
let {
|
let {
|
||||||
bottom,
|
bottom,
|
||||||
|
|||||||
@ -1,12 +1,7 @@
|
|||||||
import JSZip from 'jszip'
|
import JSZip from 'jszip'
|
||||||
import xmlConvert from 'xml-js'
|
import xmlConvert from 'xml-js'
|
||||||
|
|
||||||
/**
|
// 解析.xmind文件
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-09-21 14:07:47
|
|
||||||
* @Desc: 解析.xmind文件
|
|
||||||
*/
|
|
||||||
const parseXmindFile = file => {
|
const parseXmindFile = file => {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
JSZip.loadAsync(file).then(
|
JSZip.loadAsync(file).then(
|
||||||
@ -37,12 +32,7 @@ const parseXmindFile = file => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 转换xmind数据
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-09-21 18:57:25
|
|
||||||
* @Desc: 转换xmind数据
|
|
||||||
*/
|
|
||||||
const transformXmind = content => {
|
const transformXmind = content => {
|
||||||
let data = JSON.parse(content)[0]
|
let data = JSON.parse(content)[0]
|
||||||
let nodeTree = data.rootTopic
|
let nodeTree = data.rootTopic
|
||||||
@ -82,12 +72,7 @@ const transformXmind = content => {
|
|||||||
return newTree
|
return newTree
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 转换旧版xmind数据,xmind8
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2022-09-23 15:51:51
|
|
||||||
* @Desc: 转换旧版xmind数据,xmind8
|
|
||||||
*/
|
|
||||||
const transformOldXmind = content => {
|
const transformOldXmind = content => {
|
||||||
let data = JSON.parse(content)
|
let data = JSON.parse(content)
|
||||||
let elements = data.elements
|
let elements = data.elements
|
||||||
|
|||||||
@ -1,15 +1,7 @@
|
|||||||
/**
|
// 展开按钮
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 19:46:10
|
|
||||||
* @Desc: 展开按钮
|
|
||||||
*/
|
|
||||||
const open = `<svg t="1618141562310" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="13476" width="200" height="200"><path d="M475.136 327.168v147.968h-147.968v74.24h147.968v147.968h74.24v-147.968h147.968v-74.24h-147.968v-147.968h-74.24z m36.864-222.208c225.28 0 407.04 181.76 407.04 407.04s-181.76 407.04-407.04 407.04-407.04-181.76-407.04-407.04 181.76-407.04 407.04-407.04z m0-74.24c-265.216 0-480.768 215.552-480.768 480.768s215.552 480.768 480.768 480.768 480.768-215.552 480.768-480.768-215.552-480.768-480.768-480.768z" p-id="13477"></path></svg>`
|
const open = `<svg t="1618141562310" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="13476" width="200" height="200"><path d="M475.136 327.168v147.968h-147.968v74.24h147.968v147.968h74.24v-147.968h147.968v-74.24h-147.968v-147.968h-74.24z m36.864-222.208c225.28 0 407.04 181.76 407.04 407.04s-181.76 407.04-407.04 407.04-407.04-181.76-407.04-407.04 181.76-407.04 407.04-407.04z m0-74.24c-265.216 0-480.768 215.552-480.768 480.768s215.552 480.768 480.768 480.768 480.768-215.552 480.768-480.768-215.552-480.768-480.768-480.768z" p-id="13477"></path></svg>`
|
||||||
|
|
||||||
/**
|
// 收缩按钮
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 19:46:23
|
|
||||||
* @Desc: 收缩按钮
|
|
||||||
*/
|
|
||||||
const close = `<svg t="1618141589243" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="13611" width="200" height="200"><path d="M512 105.472c225.28 0 407.04 181.76 407.04 407.04s-181.76 407.04-407.04 407.04-407.04-181.76-407.04-407.04 181.76-407.04 407.04-407.04z m0-74.24c-265.216 0-480.768 215.552-480.768 480.768s215.552 480.768 480.768 480.768 480.768-215.552 480.768-480.768-215.552-480.768-480.768-480.768z" p-id="13612"></path><path d="M252.928 474.624h518.144v74.24h-518.144z" p-id="13613"></path></svg>`
|
const close = `<svg t="1618141589243" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="13611" width="200" height="200"><path d="M512 105.472c225.28 0 407.04 181.76 407.04 407.04s-181.76 407.04-407.04 407.04-407.04-181.76-407.04-407.04 181.76-407.04 407.04-407.04z m0-74.24c-265.216 0-480.768 215.552-480.768 480.768s215.552 480.768 480.768 480.768 480.768-215.552 480.768-480.768-215.552-480.768-480.768-480.768z" p-id="13612"></path><path d="M252.928 474.624h518.144v74.24h-518.144z" p-id="13613"></path></svg>`
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
|||||||
@ -278,11 +278,7 @@ export const nodeIconList = [
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
/**
|
// 获取nodeIconList icon内容
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-06-23 22:36:56
|
|
||||||
* @Desc: 获取nodeIconList icon内容
|
|
||||||
*/
|
|
||||||
const getNodeIconListIcon = name => {
|
const getNodeIconListIcon = name => {
|
||||||
let arr = name.split('_')
|
let arr = name.split('_')
|
||||||
let typeData = nodeIconList.find(item => {
|
let typeData = nodeIconList.find(item => {
|
||||||
|
|||||||
@ -1,11 +1,7 @@
|
|||||||
import defaultTheme from './default'
|
import defaultTheme from './default'
|
||||||
import merge from 'deepmerge'
|
import merge from 'deepmerge'
|
||||||
|
|
||||||
/**
|
// 天空蓝
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 15:22:18
|
|
||||||
* @Desc: 天空蓝
|
|
||||||
*/
|
|
||||||
export default merge(defaultTheme, {
|
export default merge(defaultTheme, {
|
||||||
// 连线的颜色
|
// 连线的颜色
|
||||||
lineColor: 'rgb(115, 161, 191)',
|
lineColor: 'rgb(115, 161, 191)',
|
||||||
|
|||||||
@ -1,11 +1,7 @@
|
|||||||
import defaultTheme from './default'
|
import defaultTheme from './default'
|
||||||
import merge from 'deepmerge'
|
import merge from 'deepmerge'
|
||||||
|
|
||||||
/**
|
// 脑残粉
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 15:22:18
|
|
||||||
* @Desc: 脑残粉
|
|
||||||
*/
|
|
||||||
export default merge(defaultTheme, {
|
export default merge(defaultTheme, {
|
||||||
// 连线的颜色
|
// 连线的颜色
|
||||||
lineColor: 'rgb(191, 115, 148)',
|
lineColor: 'rgb(191, 115, 148)',
|
||||||
|
|||||||
@ -1,11 +1,7 @@
|
|||||||
import defaultTheme from './default'
|
import defaultTheme from './default'
|
||||||
import merge from 'deepmerge'
|
import merge from 'deepmerge'
|
||||||
|
|
||||||
/**
|
// 脑图经典
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 15:22:18
|
|
||||||
* @Desc: 脑图经典
|
|
||||||
*/
|
|
||||||
export default merge(defaultTheme, {
|
export default merge(defaultTheme, {
|
||||||
// 连线的颜色
|
// 连线的颜色
|
||||||
lineColor: '#fff',
|
lineColor: '#fff',
|
||||||
|
|||||||
@ -1,11 +1,7 @@
|
|||||||
import defaultTheme from './default'
|
import defaultTheme from './default'
|
||||||
import merge from 'deepmerge'
|
import merge from 'deepmerge'
|
||||||
|
|
||||||
/**
|
// 经典2
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 15:22:18
|
|
||||||
* @Desc: 经典2
|
|
||||||
*/
|
|
||||||
export default merge(defaultTheme, {
|
export default merge(defaultTheme, {
|
||||||
// 连线的颜色
|
// 连线的颜色
|
||||||
lineColor: 'rgb(51, 51, 51)',
|
lineColor: 'rgb(51, 51, 51)',
|
||||||
|
|||||||
@ -1,11 +1,7 @@
|
|||||||
import defaultTheme from './default'
|
import defaultTheme from './default'
|
||||||
import merge from 'deepmerge'
|
import merge from 'deepmerge'
|
||||||
|
|
||||||
/**
|
// 经典3
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 15:22:18
|
|
||||||
* @Desc: 经典3
|
|
||||||
*/
|
|
||||||
export default merge(defaultTheme, {
|
export default merge(defaultTheme, {
|
||||||
// 连线的颜色
|
// 连线的颜色
|
||||||
lineColor: 'rgb(94, 202, 110)',
|
lineColor: 'rgb(94, 202, 110)',
|
||||||
|
|||||||
@ -1,11 +1,7 @@
|
|||||||
import defaultTheme from './default'
|
import defaultTheme from './default'
|
||||||
import merge from 'deepmerge'
|
import merge from 'deepmerge'
|
||||||
|
|
||||||
/**
|
// 经典4
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 15:22:18
|
|
||||||
* @Desc: 经典4
|
|
||||||
*/
|
|
||||||
export default merge(defaultTheme, {
|
export default merge(defaultTheme, {
|
||||||
// 连线的颜色
|
// 连线的颜色
|
||||||
lineColor: 'rgb(30, 53, 86)',
|
lineColor: 'rgb(30, 53, 86)',
|
||||||
|
|||||||
@ -1,11 +1,7 @@
|
|||||||
import defaultTheme from './default'
|
import defaultTheme from './default'
|
||||||
import merge from 'deepmerge'
|
import merge from 'deepmerge'
|
||||||
|
|
||||||
/**
|
// 经典蓝
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 15:22:18
|
|
||||||
* @Desc: 经典蓝
|
|
||||||
*/
|
|
||||||
export default merge(defaultTheme, {
|
export default merge(defaultTheme, {
|
||||||
// 连线的颜色
|
// 连线的颜色
|
||||||
lineColor: 'rgb(51, 51, 51)',
|
lineColor: 'rgb(51, 51, 51)',
|
||||||
|
|||||||
@ -1,11 +1,7 @@
|
|||||||
import defaultTheme from './default'
|
import defaultTheme from './default'
|
||||||
import merge from 'deepmerge'
|
import merge from 'deepmerge'
|
||||||
|
|
||||||
/**
|
// 经典绿
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 15:22:18
|
|
||||||
* @Desc: 经典绿
|
|
||||||
*/
|
|
||||||
export default merge(defaultTheme, {
|
export default merge(defaultTheme, {
|
||||||
// 连线的颜色
|
// 连线的颜色
|
||||||
lineColor: 'rgb(123, 199, 120)',
|
lineColor: 'rgb(123, 199, 120)',
|
||||||
|
|||||||
@ -1,11 +1,7 @@
|
|||||||
import defaultTheme from './default'
|
import defaultTheme from './default'
|
||||||
import merge from 'deepmerge'
|
import merge from 'deepmerge'
|
||||||
|
|
||||||
/**
|
// 暗色
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 15:22:18
|
|
||||||
* @Desc: 暗色
|
|
||||||
*/
|
|
||||||
export default merge(defaultTheme, {
|
export default merge(defaultTheme, {
|
||||||
// 连线的颜色
|
// 连线的颜色
|
||||||
lineColor: 'rgb(17, 68, 23)',
|
lineColor: 'rgb(17, 68, 23)',
|
||||||
|
|||||||
@ -1,11 +1,7 @@
|
|||||||
import defaultTheme from './default'
|
import defaultTheme from './default'
|
||||||
import merge from 'deepmerge'
|
import merge from 'deepmerge'
|
||||||
|
|
||||||
/**
|
// 暗色2
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 15:22:18
|
|
||||||
* @Desc: 暗色2
|
|
||||||
*/
|
|
||||||
export default merge(defaultTheme, {
|
export default merge(defaultTheme, {
|
||||||
// 连线的颜色
|
// 连线的颜色
|
||||||
lineColor: 'rgb(75, 81, 78)',
|
lineColor: 'rgb(75, 81, 78)',
|
||||||
|
|||||||
@ -1,8 +1,4 @@
|
|||||||
/**
|
// 默认主题
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 10:19:55
|
|
||||||
* @Desc: 默认主题
|
|
||||||
*/
|
|
||||||
export default {
|
export default {
|
||||||
// 节点内边距
|
// 节点内边距
|
||||||
paddingX: 15,
|
paddingX: 15,
|
||||||
|
|||||||
@ -1,11 +1,7 @@
|
|||||||
import defaultTheme from './default'
|
import defaultTheme from './default'
|
||||||
import merge from 'deepmerge'
|
import merge from 'deepmerge'
|
||||||
|
|
||||||
/**
|
// 泥土黄
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 15:22:18
|
|
||||||
* @Desc: 泥土黄
|
|
||||||
*/
|
|
||||||
export default merge(defaultTheme, {
|
export default merge(defaultTheme, {
|
||||||
// 连线的颜色
|
// 连线的颜色
|
||||||
lineColor: 'rgb(191, 147, 115)',
|
lineColor: 'rgb(191, 147, 115)',
|
||||||
|
|||||||
@ -1,11 +1,7 @@
|
|||||||
import defaultTheme from './default'
|
import defaultTheme from './default'
|
||||||
import merge from 'deepmerge'
|
import merge from 'deepmerge'
|
||||||
|
|
||||||
/**
|
// 清新绿
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 15:22:18
|
|
||||||
* @Desc: 清新绿
|
|
||||||
*/
|
|
||||||
export default merge(defaultTheme, {
|
export default merge(defaultTheme, {
|
||||||
// 连线的颜色
|
// 连线的颜色
|
||||||
lineColor: '#333',
|
lineColor: '#333',
|
||||||
|
|||||||
@ -1,11 +1,7 @@
|
|||||||
import defaultTheme from './default'
|
import defaultTheme from './default'
|
||||||
import merge from 'deepmerge'
|
import merge from 'deepmerge'
|
||||||
|
|
||||||
/**
|
// 清新红
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 15:22:18
|
|
||||||
* @Desc: 清新红
|
|
||||||
*/
|
|
||||||
export default merge(defaultTheme, {
|
export default merge(defaultTheme, {
|
||||||
// 连线的颜色
|
// 连线的颜色
|
||||||
lineColor: 'rgb(191, 115, 115)',
|
lineColor: 'rgb(191, 115, 115)',
|
||||||
|
|||||||
@ -1,11 +1,7 @@
|
|||||||
import defaultTheme from './default'
|
import defaultTheme from './default'
|
||||||
import merge from 'deepmerge'
|
import merge from 'deepmerge'
|
||||||
|
|
||||||
/**
|
// 金色vip
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 15:22:18
|
|
||||||
* @Desc: 金色vip
|
|
||||||
*/
|
|
||||||
export default merge(defaultTheme, {
|
export default merge(defaultTheme, {
|
||||||
// 连线的颜色
|
// 连线的颜色
|
||||||
lineColor: 'rgb(51, 56, 62)',
|
lineColor: 'rgb(51, 56, 62)',
|
||||||
|
|||||||
@ -1,11 +1,7 @@
|
|||||||
import defaultTheme from './default'
|
import defaultTheme from './default'
|
||||||
import merge from 'deepmerge'
|
import merge from 'deepmerge'
|
||||||
|
|
||||||
/**
|
// 绿叶
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 15:22:18
|
|
||||||
* @Desc: 绿叶
|
|
||||||
*/
|
|
||||||
export default merge(defaultTheme, {
|
export default merge(defaultTheme, {
|
||||||
// 连线的颜色
|
// 连线的颜色
|
||||||
lineColor: 'rgb(40, 193, 84)',
|
lineColor: 'rgb(40, 193, 84)',
|
||||||
|
|||||||
@ -1,11 +1,7 @@
|
|||||||
import defaultTheme from './default'
|
import defaultTheme from './default'
|
||||||
import merge from 'deepmerge'
|
import merge from 'deepmerge'
|
||||||
|
|
||||||
/**
|
// 小黄人
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 15:22:18
|
|
||||||
* @Desc: 小黄人
|
|
||||||
*/
|
|
||||||
export default merge(defaultTheme, {
|
export default merge(defaultTheme, {
|
||||||
// 连线的颜色
|
// 连线的颜色
|
||||||
lineColor: 'rgb(51, 51, 51)',
|
lineColor: 'rgb(51, 51, 51)',
|
||||||
|
|||||||
@ -1,11 +1,7 @@
|
|||||||
import defaultTheme from './default'
|
import defaultTheme from './default'
|
||||||
import merge from 'deepmerge'
|
import merge from 'deepmerge'
|
||||||
|
|
||||||
/**
|
// 薄荷
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 15:22:18
|
|
||||||
* @Desc: 薄荷
|
|
||||||
*/
|
|
||||||
export default merge(defaultTheme, {
|
export default merge(defaultTheme, {
|
||||||
// 连线的颜色
|
// 连线的颜色
|
||||||
lineColor: 'rgb(104, 204, 202)',
|
lineColor: 'rgb(104, 204, 202)',
|
||||||
|
|||||||
@ -1,11 +1,7 @@
|
|||||||
import defaultTheme from './default'
|
import defaultTheme from './default'
|
||||||
import merge from 'deepmerge'
|
import merge from 'deepmerge'
|
||||||
|
|
||||||
/**
|
// 粉红葡萄
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 15:22:18
|
|
||||||
* @Desc: 粉红葡萄
|
|
||||||
*/
|
|
||||||
export default merge(defaultTheme, {
|
export default merge(defaultTheme, {
|
||||||
// 连线的颜色
|
// 连线的颜色
|
||||||
lineColor: 'rgb(166, 101, 106)',
|
lineColor: 'rgb(166, 101, 106)',
|
||||||
|
|||||||
@ -1,11 +1,7 @@
|
|||||||
import defaultTheme from './default'
|
import defaultTheme from './default'
|
||||||
import merge from 'deepmerge'
|
import merge from 'deepmerge'
|
||||||
|
|
||||||
/**
|
// 浪漫紫
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 15:22:18
|
|
||||||
* @Desc: 浪漫紫
|
|
||||||
*/
|
|
||||||
export default merge(defaultTheme, {
|
export default merge(defaultTheme, {
|
||||||
// 连线的颜色
|
// 连线的颜色
|
||||||
lineColor: 'rgb(123, 115, 191)',
|
lineColor: 'rgb(123, 115, 191)',
|
||||||
|
|||||||
@ -1,11 +1,7 @@
|
|||||||
import defaultTheme from './default'
|
import defaultTheme from './default'
|
||||||
import merge from 'deepmerge'
|
import merge from 'deepmerge'
|
||||||
|
|
||||||
/**
|
// 天清绿
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 15:22:18
|
|
||||||
* @Desc: 天清绿
|
|
||||||
*/
|
|
||||||
export default merge(defaultTheme, {
|
export default merge(defaultTheme, {
|
||||||
// 连线的颜色
|
// 连线的颜色
|
||||||
lineColor: '#fff',
|
lineColor: '#fff',
|
||||||
|
|||||||
@ -1,11 +1,7 @@
|
|||||||
import defaultTheme from './default'
|
import defaultTheme from './default'
|
||||||
import merge from 'deepmerge'
|
import merge from 'deepmerge'
|
||||||
|
|
||||||
/**
|
// 活力橙
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-04-11 15:22:18
|
|
||||||
* @Desc: 活力橙
|
|
||||||
*/
|
|
||||||
export default merge(defaultTheme, {
|
export default merge(defaultTheme, {
|
||||||
// 连线的颜色
|
// 连线的颜色
|
||||||
lineColor: 'rgb(254, 146, 0)',
|
lineColor: 'rgb(254, 146, 0)',
|
||||||
|
|||||||
@ -1,8 +1,4 @@
|
|||||||
/**
|
// 标签颜色列表
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-06-24 21:42:07
|
|
||||||
* @Desc: 标签颜色列表
|
|
||||||
*/
|
|
||||||
export const tagColorList = [
|
export const tagColorList = [
|
||||||
{
|
{
|
||||||
color: 'rgb(77, 65, 0)',
|
color: 'rgb(77, 65, 0)',
|
||||||
@ -26,12 +22,7 @@ export const tagColorList = [
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
/**
|
// 布局结构列表
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-07-13 15:56:28
|
|
||||||
* @Desc: 布局结构列表
|
|
||||||
*/
|
|
||||||
export const layoutList = [
|
export const layoutList = [
|
||||||
{
|
{
|
||||||
name: '逻辑结构图',
|
name: '逻辑结构图',
|
||||||
@ -61,11 +52,7 @@ export const layoutValueList = [
|
|||||||
'organizationStructure'
|
'organizationStructure'
|
||||||
]
|
]
|
||||||
|
|
||||||
/**
|
// 主题列表
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-06-24 22:58:42
|
|
||||||
* @Desc: 主题列表
|
|
||||||
*/
|
|
||||||
export const themeList = [
|
export const themeList = [
|
||||||
{
|
{
|
||||||
name: '默认',
|
name: '默认',
|
||||||
|
|||||||
@ -1,9 +1,4 @@
|
|||||||
/**
|
// 深度优先遍历树
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-06 14:13:17
|
|
||||||
* @Desc: 深度优先遍历树
|
|
||||||
*/
|
|
||||||
export const walk = (
|
export const walk = (
|
||||||
root,
|
root,
|
||||||
parent,
|
parent,
|
||||||
@ -34,12 +29,7 @@ export const walk = (
|
|||||||
afterCallback && afterCallback(root, parent, isRoot, layerIndex, index)
|
afterCallback && afterCallback(root, parent, isRoot, layerIndex, index)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 广度优先遍历树
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-07 18:47:20
|
|
||||||
* @Desc: 广度优先遍历树
|
|
||||||
*/
|
|
||||||
export const bfsWalk = (root, callback) => {
|
export const bfsWalk = (root, callback) => {
|
||||||
callback(root)
|
callback(root)
|
||||||
let stack = [root]
|
let stack = [root]
|
||||||
@ -60,12 +50,7 @@ export const bfsWalk = (root, callback) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 缩放图片尺寸
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-09 10:44:54
|
|
||||||
* @Desc: 缩放图片尺寸
|
|
||||||
*/
|
|
||||||
export const resizeImgSize = (width, height, maxWidth, maxHeight) => {
|
export const resizeImgSize = (width, height, maxWidth, maxHeight) => {
|
||||||
let nRatio = width / height
|
let nRatio = width / height
|
||||||
let arr = []
|
let arr = []
|
||||||
@ -98,12 +83,7 @@ export const resizeImgSize = (width, height, maxWidth, maxHeight) => {
|
|||||||
return arr
|
return arr
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 缩放图片
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-04-09 10:18:42
|
|
||||||
* @Desc: 缩放图片
|
|
||||||
*/
|
|
||||||
export const resizeImg = (imgUrl, maxWidth, maxHeight) => {
|
export const resizeImg = (imgUrl, maxWidth, maxHeight) => {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let img = new Image()
|
let img = new Image()
|
||||||
@ -123,11 +103,7 @@ export const resizeImg = (imgUrl, maxWidth, maxHeight) => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 从头html结构字符串里获取带换行符的字符串
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-05-04 12:26:56
|
|
||||||
* @Desc: 从头html结构字符串里获取带换行符的字符串
|
|
||||||
*/
|
|
||||||
export const getStrWithBrFromHtml = str => {
|
export const getStrWithBrFromHtml = str => {
|
||||||
str = str.replace(/<br>/gim, '\n')
|
str = str.replace(/<br>/gim, '\n')
|
||||||
let el = document.createElement('div')
|
let el = document.createElement('div')
|
||||||
@ -136,11 +112,7 @@ export const getStrWithBrFromHtml = str => {
|
|||||||
return str
|
return str
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 极简的深拷贝
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-05-04 14:45:39
|
|
||||||
* @Desc: 极简的深拷贝
|
|
||||||
*/
|
|
||||||
export const simpleDeepClone = data => {
|
export const simpleDeepClone = data => {
|
||||||
try {
|
try {
|
||||||
return JSON.parse(JSON.stringify(data))
|
return JSON.parse(JSON.stringify(data))
|
||||||
@ -149,11 +121,7 @@ export const simpleDeepClone = data => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 复制渲染树数据
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-05-04 14:40:11
|
|
||||||
* @Desc: 复制渲染树数据
|
|
||||||
*/
|
|
||||||
export const copyRenderTree = (tree, root) => {
|
export const copyRenderTree = (tree, root) => {
|
||||||
tree.data = simpleDeepClone(root.data)
|
tree.data = simpleDeepClone(root.data)
|
||||||
tree.children = []
|
tree.children = []
|
||||||
@ -165,11 +133,7 @@ export const copyRenderTree = (tree, root) => {
|
|||||||
return tree
|
return tree
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 复制节点树数据
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-05-04 14:40:11
|
|
||||||
* @Desc: 复制节点树数据
|
|
||||||
*/
|
|
||||||
export const copyNodeTree = (tree, root, removeActiveState = false) => {
|
export const copyNodeTree = (tree, root, removeActiveState = false) => {
|
||||||
tree.data = simpleDeepClone(root.nodeData ? root.nodeData.data : root.data)
|
tree.data = simpleDeepClone(root.nodeData ? root.nodeData.data : root.data)
|
||||||
if (removeActiveState) {
|
if (removeActiveState) {
|
||||||
@ -192,11 +156,7 @@ export const copyNodeTree = (tree, root, removeActiveState = false) => {
|
|||||||
return tree
|
return tree
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 图片转成dataURL
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-04 09:08:43
|
|
||||||
* @Desc: 图片转成dataURL
|
|
||||||
*/
|
|
||||||
export const imgToDataUrl = src => {
|
export const imgToDataUrl = src => {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const img = new Image()
|
const img = new Image()
|
||||||
@ -222,11 +182,7 @@ export const imgToDataUrl = src => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 下载文件
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-04 16:20:06
|
|
||||||
* @Desc: 下载文件
|
|
||||||
*/
|
|
||||||
export const downloadFile = (file, fileName) => {
|
export const downloadFile = (file, fileName) => {
|
||||||
let a = document.createElement('a')
|
let a = document.createElement('a')
|
||||||
a.href = file
|
a.href = file
|
||||||
@ -234,11 +190,7 @@ export const downloadFile = (file, fileName) => {
|
|||||||
a.click()
|
a.click()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 节流函数
|
||||||
* @Author: 王林
|
|
||||||
* @Date: 2021-07-11 10:36:47
|
|
||||||
* @Desc: 节流函数
|
|
||||||
*/
|
|
||||||
export const throttle = (fn, time = 300, ctx) => {
|
export const throttle = (fn, time = 300, ctx) => {
|
||||||
let timer = null
|
let timer = null
|
||||||
return () => {
|
return () => {
|
||||||
@ -252,12 +204,7 @@ export const throttle = (fn, time = 300, ctx) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// 异步执行任务队列
|
||||||
* javascript comment
|
|
||||||
* @Author: 王林25
|
|
||||||
* @Date: 2021-07-12 10:27:36
|
|
||||||
* @Desc: 异步执行任务队列
|
|
||||||
*/
|
|
||||||
export const asyncRun = (taskList, callback = () => {}) => {
|
export const asyncRun = (taskList, callback = () => {}) => {
|
||||||
let index = 0
|
let index = 0
|
||||||
let len = taskList.length
|
let len = taskList.length
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user