From d7b93ba0a0c4c915fe3462f0065f4a61fb23c749 Mon Sep 17 00:00:00 2001 From: wanglin2 <1013335014@qq.com> Date: Thu, 12 Jan 2023 15:45:41 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=94=AF=E6=8C=81=E6=B3=A8?= =?UTF-8?q?=E5=86=8C=E6=96=B0=E4=B8=BB=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 42 +++++++++++++++++- README.zh-Hans.md | 42 +++++++++++++++++- simple-mind-map/index.js | 9 ++++ simple-mind-map/package.json | 2 +- web/src/assets/img/blackGold.jpg | Bin 0 -> 10175 bytes web/src/assets/img/blackHumour.jpg | Bin 0 -> 9639 bytes web/src/assets/img/coffee.jpg | Bin 0 -> 8745 bytes web/src/assets/img/courseGreen.jpg | Bin 0 -> 9107 bytes web/src/assets/img/lateNightOffice.jpg | Bin 0 -> 9017 bytes web/src/assets/img/redSpirit.jpg | Bin 0 -> 9413 bytes web/src/assets/img/simpleBlack.jpg | Bin 0 -> 9944 bytes web/src/config/constant.js | 9 +++- web/src/customThemes/blackGold.js | 55 +++++++++++++++++++++++ web/src/customThemes/blackHumour.js | 56 ++++++++++++++++++++++++ web/src/customThemes/coffee.js | 53 ++++++++++++++++++++++ web/src/customThemes/courseGreen.js | 53 ++++++++++++++++++++++ web/src/customThemes/index.js | 45 +++++++++++++++++++ web/src/customThemes/lateNightOffice.js | 56 ++++++++++++++++++++++++ web/src/customThemes/redSpirit.js | 55 +++++++++++++++++++++++ web/src/customThemes/simpleBlack.js | 51 +++++++++++++++++++++ web/src/pages/Edit/components/Edit.vue | 6 +++ web/src/pages/Edit/components/Theme.vue | 3 +- 22 files changed, 530 insertions(+), 7 deletions(-) create mode 100644 web/src/assets/img/blackGold.jpg create mode 100644 web/src/assets/img/blackHumour.jpg create mode 100644 web/src/assets/img/coffee.jpg create mode 100644 web/src/assets/img/courseGreen.jpg create mode 100644 web/src/assets/img/lateNightOffice.jpg create mode 100644 web/src/assets/img/redSpirit.jpg create mode 100644 web/src/assets/img/simpleBlack.jpg create mode 100644 web/src/customThemes/blackGold.js create mode 100644 web/src/customThemes/blackHumour.js create mode 100644 web/src/customThemes/coffee.js create mode 100644 web/src/customThemes/courseGreen.js create mode 100644 web/src/customThemes/index.js create mode 100644 web/src/customThemes/lateNightOffice.js create mode 100644 web/src/customThemes/redSpirit.js create mode 100644 web/src/customThemes/simpleBlack.js diff --git a/README.md b/README.md index 5d47718a..1190bc55 100644 --- a/README.md +++ b/README.md @@ -224,7 +224,7 @@ version does not have a `content.json`, it corresponds to `content.xml`. `content`: the contents of the `content.xml` file within the `.xmind` zip package -### Instantiation options: +### Instantiation options | Field Name | Type | Default Value | Description | Required | | -------------------------------- | ------- | ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | @@ -243,7 +243,39 @@ package | customNoteContentShow(v0.1.6+) | Object | null | Custom node note content display, object type, structure: {show: (noteContent, left, top) => {// your display node note logic }, hide: () => {// your hide node note logic }} | | | readonly(v0.1.7+) | Boolean | false | Whether it is read-only mode | | -### Instance methods: +### Static methods + +#### defineTheme(name, config) + +v0.2.23+ + +Define new theme. + +`name`:New theme name + +`config`:New theme config + +`Simple-mind-map ` Built-in many themes. In addition, you can register new theme. It is recommended to register before instantiation, so that you can directly use the newly registered theme during instantiation. Use example: + +```js +import MindMap from 'simple-mind-map' +// 注册新主题 +MindMap.defineTheme('主题名称', {}) + +// 1.实例化时使用新注册的主题 +const mindMap = new MindMap({ + theme: '主题名称' +}) + +// 2.动态切换新主题 +mindMap.setTheme('主题名称') +``` + +For all configurations of theme, please refer to [Default Topic](https://github.com/wanglin2/mind-map/blob/main/simple-mind-map/src/themes/default.js). The `defineTheme`method will merge the configuration you passed in with the default configuration. Most of the themes do not need custom many parts. For a typical customized theme configuration, please refer to [blueSky](https://github.com/wanglin2/mind-map/blob/main/simple-mind-map/src/themes/blueSky.js). + + + +### Instance methods #### render() @@ -1160,12 +1192,18 @@ The built-in themes and icons in the project come from: [Zhixi Mind Map](https://www.zhixi.com/) +Respect the copyright, and do not use the theme and icons directly for commercial projects. + # License [MIT](https://opensource.org/licenses/MIT) # Changelog +## 0.2.23 + +New: Support register new theme. + ## 0.2.22 optimization:The theme and structure pictures of the built-in `simple-mind-map` package are removed and replaced by user self-maintenance. The original pictures can be found in the `web/assets/img/` directory. diff --git a/README.zh-Hans.md b/README.zh-Hans.md index e5eb9909..fd25dac1 100644 --- a/README.zh-Hans.md +++ b/README.zh-Hans.md @@ -187,7 +187,7 @@ v0.2.8+ `content`:`.xmind`压缩包内的`content.xml`文件内容 -### 实例化选项: +### 实例化选项 | 字段名称 | 类型 | 默认值 | 描述 | 是否必填 | | ------------------------------ | ------- | ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---- | @@ -206,7 +206,39 @@ v0.2.8+ | customNoteContentShow(v0.1.6+) | Object | null | 自定义节点备注内容显示,Object类型,结构为:{show: (noteContent, left, top) => {// 你的显示节点备注逻辑 }, hide: () => {// 你的隐藏节点备注逻辑 }} | | | readonly(v0.1.7+) | Boolean | false | 是否是只读模式 | | -### 实例方法: +### 静态方法 + +#### defineTheme(name, config) + +v0.2.23+ + +定义新主题。 + +`name`:新主题名称 + +`config`:主题数据 + +`simple-mind-map`内置了众多主题,另外你也可以注册新主题,建议在实例化之前进行注册,这样在实例化时可以直接使用新注册的主题,使用示例: + +```js +import MindMap from 'simple-mind-map' +// 注册新主题 +MindMap.defineTheme('主题名称', {}) + +// 1.实例化时使用新注册的主题 +const mindMap = new MindMap({ + theme: '主题名称' +}) + +// 2.动态切换新主题 +mindMap.setTheme('主题名称') +``` + +主题的所有配置可以参考[默认主题](https://github.com/wanglin2/mind-map/blob/main/simple-mind-map/src/themes/default.js)。`defineTheme`方法会把你传入的配置和默认配置做合并。大部分主题其实需要自定义的部分不是很多,一个典型的自定义主题配置可以参考[blueSky](https://github.com/wanglin2/mind-map/blob/main/simple-mind-map/src/themes/blueSky.js)。 + + + +### 实例方法 #### render() @@ -1058,12 +1090,18 @@ copyNodeTree({}, node) [知犀思维导图](https://www.zhixi.com/) +尊重版权,主题和图片请勿直接用于商业项目。 + # License [MIT](https://opensource.org/licenses/MIT) # Changelog +## 0.2.23 + +新增:支持注册新主题。 + ## 0.2.22 优化:取消内置`simple-mind-map`包的主题和结构图片,改为由使用者自行维护,原有图片可在`web/assets/img/`目录找到。 diff --git a/simple-mind-map/index.js b/simple-mind-map/index.js index 49bfd880..bd1a81b1 100644 --- a/simple-mind-map/index.js +++ b/simple-mind-map/index.js @@ -16,6 +16,7 @@ import { SVG } from '@svgdotjs/svg.js' import xmind from './src/parse/xmind' import { simpleDeepClone } from './src/utils' import KeyboardNavigation from './src/KeyboardNavigation' +import defaultTheme from './src/themes/default' // 默认选项配置 const defaultOpt = { @@ -328,4 +329,12 @@ class MindMap { MindMap.xmind = xmind +// 定义新主题 +MindMap.defineTheme = (name, config = {}) => { + if (theme[name]) { + return new Error('该主题名称已存在') + } + theme[name] = merge(defaultTheme, config) +} + export default MindMap diff --git a/simple-mind-map/package.json b/simple-mind-map/package.json index f54c5f20..e7e95e62 100644 --- a/simple-mind-map/package.json +++ b/simple-mind-map/package.json @@ -1,6 +1,6 @@ { "name": "simple-mind-map", - "version": "0.2.22", + "version": "0.2.23", "description": "一个简单的web在线思维导图", "authors": [ { diff --git a/web/src/assets/img/blackGold.jpg b/web/src/assets/img/blackGold.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f63de9834e8af1882e8e3c389ebe000250399bc3 GIT binary patch literal 10175 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 literal 0 HcmV?d00001 diff --git a/web/src/assets/img/blackHumour.jpg b/web/src/assets/img/blackHumour.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b0c33be73ba895d790400185eb0ec039f90b3c9b GIT binary patch literal 9639 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 CfLZnc literal 0 HcmV?d00001 diff --git a/web/src/assets/img/coffee.jpg b/web/src/assets/img/coffee.jpg new file mode 100644 index 0000000000000000000000000000000000000000..30db8d00d3615a313f0965ad8bba5025c9ee8c27 GIT binary patch literal 8745 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 L|KblG!sPz|5jO}i literal 0 HcmV?d00001 diff --git a/web/src/assets/img/courseGreen.jpg b/web/src/assets/img/courseGreen.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8cf7ae6ada339d74fdabd8bd667f052ccb760750 GIT binary patch literal 9107 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 literal 0 HcmV?d00001 diff --git a/web/src/assets/img/lateNightOffice.jpg b/web/src/assets/img/lateNightOffice.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d6745ee3714edc9858a1ba808c5b985a41fa90d1 GIT binary patch literal 9017 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 AsQ>@~ literal 0 HcmV?d00001 diff --git a/web/src/config/constant.js b/web/src/config/constant.js index bb1b4c0d..9532e57f 100644 --- a/web/src/config/constant.js +++ b/web/src/config/constant.js @@ -29,6 +29,13 @@ export const themeMap = { earthYellow: require('../assets/img/earthYellow.jpg'), freshGreen: require('../assets/img/freshGreen.jpg'), freshRed: require('../assets/img/freshRed.jpg'), - romanticPurple: require('../assets/img/romanticPurple.jpg') + romanticPurple: require('../assets/img/romanticPurple.jpg'), + simpleBlack: require('../assets/img/simpleBlack.jpg'), + courseGreen: require('../assets/img/courseGreen.jpg'), + coffee: require('../assets/img/coffee.jpg'), + redSpirit: require('../assets/img/redSpirit.jpg'), + blackHumour: require('../assets/img/blackHumour.jpg'), + lateNightOffice: require('../assets/img/lateNightOffice.jpg'), + blackGold: require('../assets/img/blackGold.jpg'), } \ No newline at end of file diff --git a/web/src/customThemes/blackGold.js b/web/src/customThemes/blackGold.js new file mode 100644 index 00000000..fb468c9d --- /dev/null +++ b/web/src/customThemes/blackGold.js @@ -0,0 +1,55 @@ +// 黑金 +export default { + // 背景颜色 + backgroundColor: 'rgb(18, 20, 20)', + // 连线的颜色 + lineColor: 'rgb(205, 186, 156)', + lineWidth: 3, + // 概要连线的粗细 + generalizationLineWidth: 3, + // 概要连线的颜色 + generalizationLineColor: 'rgb(245, 224, 191)', + // 根节点样式 + root: { + fillColor: 'rgb(255, 208, 124)', + color: 'rgb(111, 61, 6)', + borderColor: '', + borderWidth: 0, + fontSize: 24, + active: { + borderColor: '#fff', + borderWidth: 3, + } + }, + // 二级节点样式 + second: { + fillColor: 'rgb(66, 57, 46)', + color: 'rgb(225, 201, 158)', + borderColor: 'rgb(245, 224, 191)', + borderWidth: 2, + fontSize: 18, + active: { + borderColor: 'rgb(255, 208, 124)', + } + }, + // 三级及以下节点样式 + node: { + fontSize: 14, + color: 'rgb(231, 203, 155)', + active: { + borderColor: 'rgb(255, 208, 124)' + } + }, + // 概要节点样式 + generalization: { + fontSize: 14, + fillColor: 'rgb(56, 45, 34)', + borderColor: 'rgb(104, 84, 61)', + borderWidth: 2, + color: 'rgb(242, 216, 176)', + active: { + borderColor: 'rgb(255, 208, 124)' + } + } + } + \ No newline at end of file diff --git a/web/src/customThemes/blackHumour.js b/web/src/customThemes/blackHumour.js new file mode 100644 index 00000000..c91468a6 --- /dev/null +++ b/web/src/customThemes/blackHumour.js @@ -0,0 +1,56 @@ +// 黑色幽默 +export default { + // 背景颜色 + backgroundColor: 'rgb(27, 31, 34)', + // 连线的颜色 + lineColor: 'rgb(75, 81, 78)', + lineWidth: 3, + // 概要连线的粗细 + generalizationLineWidth: 3, + // 概要连线的颜色 + generalizationLineColor: 'rgb(255, 119, 34)', + // 根节点样式 + root: { + fillColor: 'rgb(36, 179, 96)', + color: '#fff', + borderColor: '', + borderWidth: 0, + fontSize: 24, + active: { + borderColor: 'rgb(254, 199, 13)', + borderWidth: 3, + } + }, + // 二级节点样式 + second: { + fillColor: 'rgb(254, 199, 13)', + color: 'rgb(0, 0, 0)', + borderColor: '', + borderWidth: 0, + fontSize: 18, + active: { + borderColor: 'rgb(36, 179, 96)', + borderWidth: 3, + } + }, + // 三级及以下节点样式 + node: { + fontSize: 14, + color: 'rgb(204, 204, 204)', + active: { + borderColor: 'rgb(254, 199, 13)' + } + }, + // 概要节点样式 + generalization: { + fontSize: 14, + fillColor: 'rgb(27, 31, 34)', + borderColor: 'rgb(255, 119, 34)', + borderWidth: 2, + color: 'rgb(204, 204, 204)', + active: { + borderColor: 'rgb(36, 179, 96)' + } + } + } + \ No newline at end of file diff --git a/web/src/customThemes/coffee.js b/web/src/customThemes/coffee.js new file mode 100644 index 00000000..1011c4b1 --- /dev/null +++ b/web/src/customThemes/coffee.js @@ -0,0 +1,53 @@ +// 咖啡 +export default { + // 连线的颜色 + lineColor: 'rgb(173, 123, 91)', + lineWidth: 4, + // 概要连线的粗细 + generalizationLineWidth: 4, + // 概要连线的颜色 + generalizationLineColor: 'rgb(173, 123, 91)', + // 根节点样式 + root: { + fillColor: 'rgb(202, 117, 79)', + color: '#fff', + borderColor: '', + borderWidth: 0, + fontSize: 24, + active: { + borderColor: 'rgb(173, 123, 91)', + borderWidth: 3, + } + }, + // 二级节点样式 + second: { + fillColor: 'rgb(245, 231, 216)', + color: 'rgb(125, 86, 42)', + borderColor: '', + borderWidth: 0, + fontSize: 18, + active: { + borderColor: 'rgb(173, 123, 91)', + } + }, + // 三级及以下节点样式 + node: { + fontSize: 14, + color: 'rgb(96, 71, 47)', + active: { + borderColor: 'rgb(173, 123, 91)' + } + }, + // 概要节点样式 + generalization: { + fontSize: 14, + fillColor: 'rgb(255, 249, 239)', + borderColor: 'rgb(173, 123, 91)', + borderWidth: 2, + color: 'rgb(122, 83, 44)', + active: { + borderColor: 'rgb(202, 117, 79)' + } + } + } + \ No newline at end of file diff --git a/web/src/customThemes/courseGreen.js b/web/src/customThemes/courseGreen.js new file mode 100644 index 00000000..9e780d92 --- /dev/null +++ b/web/src/customThemes/courseGreen.js @@ -0,0 +1,53 @@ +// 课程绿 +export default { + // 连线的颜色 + lineColor: 'rgb(113, 195, 169)', + lineWidth: 3, + // 概要连线的粗细 + generalizationLineWidth: 3, + // 概要连线的颜色 + generalizationLineColor: 'rgb(113, 195, 169)', + // 根节点样式 + root: { + fillColor: 'rgb(16, 160, 121)', + color: '#fff', + borderColor: '', + borderWidth: 0, + fontSize: 24, + active: { + borderColor: 'rgb(173, 91, 12)', + borderWidth: 3, + } + }, + // 二级节点样式 + second: { + fillColor: 'rgb(240, 252, 249)', + color: 'rgb(50, 113, 96)', + borderColor: 'rgb(113, 195, 169)', + borderWidth: 2, + fontSize: 18, + active: { + borderColor: 'rgb(173, 91, 12)', + } + }, + // 三级及以下节点样式 + node: { + fontSize: 14, + color: 'rgb(10, 59, 43)', + active: { + borderColor: 'rgb(173, 91, 12)' + } + }, + // 概要节点样式 + generalization: { + fontSize: 14, + fillColor: 'rgb(246, 238, 211)', + borderColor: '', + borderWidth: 0, + color: 'rgb(173, 91, 12)', + active: { + borderColor: 'rgb(113, 195, 169)' + } + } + } + \ No newline at end of file diff --git a/web/src/customThemes/index.js b/web/src/customThemes/index.js new file mode 100644 index 00000000..7279ed8e --- /dev/null +++ b/web/src/customThemes/index.js @@ -0,0 +1,45 @@ +import simpleBlack from './simpleBlack' +import courseGreen from './courseGreen' +import coffee from './coffee' +import redSpirit from './redSpirit' +import blackHumour from './blackHumour' +import lateNightOffice from './lateNightOffice' +import blackGold from './blackGold' + +export default [ + { + name: '简约黑', + value: 'simpleBlack', + theme: simpleBlack + }, + { + name: '课程绿', + value: 'courseGreen', + theme: courseGreen + }, + { + name: '咖啡', + value: 'coffee', + theme: coffee + }, + { + name: '红色精神', + value: 'redSpirit', + theme: redSpirit + }, + { + name: '黑色幽默', + value: 'blackHumour', + theme: blackHumour + }, + { + name: '深夜办公室', + value: 'lateNightOffice', + theme: lateNightOffice + }, + { + name: '黑金', + value: 'blackGold', + theme: blackGold + } +] \ No newline at end of file diff --git a/web/src/customThemes/lateNightOffice.js b/web/src/customThemes/lateNightOffice.js new file mode 100644 index 00000000..c2b65af3 --- /dev/null +++ b/web/src/customThemes/lateNightOffice.js @@ -0,0 +1,56 @@ +// 深夜办公室 +export default { + // 背景颜色 + backgroundColor: 'rgb(32, 37, 49)', + // 连线的颜色 + lineColor: 'rgb(137, 167, 196)', + lineWidth: 3, + // 概要连线的粗细 + generalizationLineWidth: 3, + // 概要连线的颜色 + generalizationLineColor: 'rgb(255, 119, 34)', + // 根节点样式 + root: { + fillColor: 'rgb(23, 153, 243)', + color: 'rgb(255, 255, 255)', + borderColor: '', + borderWidth: 0, + fontSize: 24, + active: { + borderColor: 'rgb(255, 119, 34)', + borderWidth: 3, + } + }, + // 二级节点样式 + second: { + fillColor: 'rgb(70, 78, 94)', + color: 'rgb(209, 210, 210)', + borderColor: '', + borderWidth: 0, + fontSize: 18, + active: { + borderColor: 'rgb(255, 119, 34)', + borderWidth: 3, + } + }, + // 三级及以下节点样式 + node: { + fontSize: 14, + color: 'rgb(204, 204, 204)', + active: { + borderColor: 'rgb(255, 119, 34)' + } + }, + // 概要节点样式 + generalization: { + fontSize: 14, + fillColor: 'rgb(255, 119, 34)', + borderColor: '', + borderWidth: 2, + color: '#fff', + active: { + borderColor: 'rgb(23, 153, 243)' + } + } + } + \ No newline at end of file diff --git a/web/src/customThemes/redSpirit.js b/web/src/customThemes/redSpirit.js new file mode 100644 index 00000000..3240b4fb --- /dev/null +++ b/web/src/customThemes/redSpirit.js @@ -0,0 +1,55 @@ +// 红色精神 +export default { + // 背景颜色 + backgroundColor: 'rgb(255, 238, 228)', + // 连线的颜色 + lineColor: 'rgb(230, 138, 131)', + lineWidth: 3, + // 概要连线的粗细 + generalizationLineWidth: 3, + // 概要连线的颜色 + generalizationLineColor: 'rgb(222, 101, 85)', + // 根节点样式 + root: { + fillColor: 'rgb(207, 44, 44)', + color: 'rgb(255, 233, 157)', + borderColor: '', + borderWidth: 0, + fontSize: 24, + active: { + borderColor: 'rgb(255, 233, 157)', + borderWidth: 3, + } + }, + // 二级节点样式 + second: { + fillColor: 'rgb(255, 255, 255)', + color: 'rgb(211, 58, 21)', + borderColor: 'rgb(222, 101, 85)', + borderWidth: 2, + fontSize: 18, + active: { + borderColor: 'rgb(255, 233, 157)', + } + }, + // 三级及以下节点样式 + node: { + fontSize: 14, + color: 'rgb(144, 71, 43)', + active: { + borderColor: 'rgb(255, 233, 157)' + } + }, + // 概要节点样式 + generalization: { + fontSize: 14, + fillColor: 'rgb(255, 247, 211)', + borderColor: 'rgb(255, 202, 162)', + borderWidth: 2, + color: 'rgb(187, 101, 69)', + active: { + borderColor: 'rgb(222, 101, 85)' + } + } + } + \ No newline at end of file diff --git a/web/src/customThemes/simpleBlack.js b/web/src/customThemes/simpleBlack.js new file mode 100644 index 00000000..36457826 --- /dev/null +++ b/web/src/customThemes/simpleBlack.js @@ -0,0 +1,51 @@ +// 简约黑 +export default { + // 连线的颜色 + lineColor: 'rgb(34, 34, 34)', + lineWidth: 4, + // 概要连线的粗细 + generalizationLineWidth: 4, + // 概要连线的颜色 + generalizationLineColor: 'rgb(34, 34, 34)', + // 根节点样式 + root: { + fillColor: '#fff', + color: 'rgb(34, 34, 34)', + borderColor: 'rgb(34, 34, 34)', + borderWidth: 3, + fontSize: 24, + active: { + borderColor: '#a13600', + } + }, + // 二级节点样式 + second: { + fillColor: 'rgb(241, 246, 248)', + color: 'rgb(34, 34, 34)', + borderColor: 'rgb(34, 34, 34)', + borderWidth: 3, + fontSize: 18, + active: { + borderColor: '#a13600', + } + }, + // 三级及以下节点样式 + node: { + fontSize: 14, + color: 'rgb(34, 34, 34)', + active: { + borderColor: '#a13600' + } + }, + // 概要节点样式 + generalization: { + fontSize: 14, + fillColor: 'transparent', + borderColor: 'rgb(34, 34, 34)', + borderWidth: 2, + color: 'rgb(34, 34, 34)', + active: { + borderColor: '#a13600' + } + } +} diff --git a/web/src/pages/Edit/components/Edit.vue b/web/src/pages/Edit/components/Edit.vue index b3b1a8ba..52e9a92e 100644 --- a/web/src/pages/Edit/components/Edit.vue +++ b/web/src/pages/Edit/components/Edit.vue @@ -37,6 +37,12 @@ import Navigator from './Navigator.vue' import NodeImgPreview from './NodeImgPreview.vue' import SidebarTrigger from './SidebarTrigger.vue' import { mapState } from 'vuex' +import customThemeList from '@/customThemes' + +// 注册自定义主题 +customThemeList.forEach((item) => { + MindMap.defineTheme(item.value, item.theme) +}) /** * @Author: 王林 diff --git a/web/src/pages/Edit/components/Theme.vue b/web/src/pages/Edit/components/Theme.vue index 6494d8f2..d377f5af 100644 --- a/web/src/pages/Edit/components/Theme.vue +++ b/web/src/pages/Edit/components/Theme.vue @@ -23,6 +23,7 @@ import { themeList } from 'simple-mind-map/src/utils/constant' import { storeConfig } from '@/api' import { mapState } from 'vuex' import { themeMap } from '@/config/constant.js' +import customThemeList from '@/customThemes' /** * @Author: 王林 @@ -41,7 +42,7 @@ export default { }, data() { return { - themeList, + themeList: [...themeList, ...customThemeList], themeMap, theme: '' }