From 5dbe82bd29f3fcda7d013593c4e5628ad40bc7db Mon Sep 17 00:00:00 2001 From: KuroSago Date: Tue, 6 May 2025 17:47:59 +0800 Subject: [PATCH] insertChildNode --- .../mind-map/src/components/ToolBar.vue | 2 +- .../components/ToolBar/InsertChildNode.vue | 23 ++++++++++-- .../src/store/helpers/insertChildNode.ts | 35 +++++++++++++++++++ .../mind-map/src/store/modules/mindMap.ts | 4 ++- web3/packages/mind-map/src/types/index.d.ts | 4 --- 5 files changed, 60 insertions(+), 8 deletions(-) create mode 100644 web3/packages/mind-map/src/store/helpers/insertChildNode.ts diff --git a/web3/packages/mind-map/src/components/ToolBar.vue b/web3/packages/mind-map/src/components/ToolBar.vue index 863f29f1..40cc9e88 100644 --- a/web3/packages/mind-map/src/components/ToolBar.vue +++ b/web3/packages/mind-map/src/components/ToolBar.vue @@ -8,6 +8,6 @@ \ No newline at end of file diff --git a/web3/packages/mind-map/src/components/ToolBar/InsertChildNode.vue b/web3/packages/mind-map/src/components/ToolBar/InsertChildNode.vue index 6be69539..635cd28d 100644 --- a/web3/packages/mind-map/src/components/ToolBar/InsertChildNode.vue +++ b/web3/packages/mind-map/src/components/ToolBar/InsertChildNode.vue @@ -1,7 +1,26 @@ \ No newline at end of file +import { useMindMapStore } from "../../store/index"; + +const { insertChildNode } = useMindMapStore(); + +async function addNewChildNode() { + insertChildNode( + async () => { + return { + uid: "newChildNode", + text: "新节点22222", + }; + } + ); +} + diff --git a/web3/packages/mind-map/src/store/helpers/insertChildNode.ts b/web3/packages/mind-map/src/store/helpers/insertChildNode.ts new file mode 100644 index 00000000..a91b85c4 --- /dev/null +++ b/web3/packages/mind-map/src/store/helpers/insertChildNode.ts @@ -0,0 +1,35 @@ +import { useMindMapStore } from "../../store/index"; + +/** + * 追加子节点 + * @param beforeInsertCallback 插入前执行的异步回调函数,如果返回节点信息则会合并到节点选项中 + * @param nodeOptions 节点选项,可自定义节点属性 + * @returns 返回Promise,可用于链式调用 + */ +export async function insertChildNode( + beforeInsertCallback: () => Promise<({ uid: number | string, text: string } | boolean)>, + nodeOptions: Record = { uid: 313123123, text: "新节点" } +) { + const { getMindMapInstance } = useMindMapStore(); + + const _nodeOptions = { + ...nodeOptions, + } + + try { + // 如果提供了回调函数,先执行回调 + const result = await beforeInsertCallback(); + + if (!result) return; // 如果直接 false 则不再执行插入操作 + + if (result) { + Object.assign(_nodeOptions, result); + } + + // 执行插入子节点命令 + return getMindMapInstance()?.execCommand("INSERT_CHILD_NODE", false, [], _nodeOptions); + } catch (error) { + console.error("插入子节点失败:", error); + throw error; + } +} \ No newline at end of file diff --git a/web3/packages/mind-map/src/store/modules/mindMap.ts b/web3/packages/mind-map/src/store/modules/mindMap.ts index d82388b4..6c981de7 100644 --- a/web3/packages/mind-map/src/store/modules/mindMap.ts +++ b/web3/packages/mind-map/src/store/modules/mindMap.ts @@ -3,6 +3,7 @@ import { ref } from "vue"; import { importFile } from "../helpers/import"; import { exportFile } from "../helpers/export"; import { usePlugins } from "../helpers/usePlugin"; +import { insertChildNode } from "../helpers/insertChildNode"; import MindMap from "simple-mind-map"; @@ -32,7 +33,7 @@ export const useMindMapStore = defineStore( } - + // 因为避免使用响应对象 function getMindMapInstance (): MindMap | null { return mindMapInstance; } @@ -45,6 +46,7 @@ export const useMindMapStore = defineStore( importFile, exportFile, + insertChildNode, // func initMindMap, diff --git a/web3/packages/mind-map/src/types/index.d.ts b/web3/packages/mind-map/src/types/index.d.ts index 70b5b15b..f6ab991d 100644 --- a/web3/packages/mind-map/src/types/index.d.ts +++ b/web3/packages/mind-map/src/types/index.d.ts @@ -1,6 +1,3 @@ -// 导入全局声明文件 -/// - declare module 'simple-mind-map' { import MindMap from 'simple-mind-map/types/index'; export default MindMap @@ -21,7 +18,6 @@ declare module 'simple-mind-map/src/plugins/Export' { export default Export; } -// simple-mind-map/src/parse/markdown declare module 'simple-mind-map/src/parse/markdown' { import markdown from 'simple-mind-map/types/src/parse/markdown'; export default markdown;