From e6cdc4fb6348e41dd52dd059675ab2ec29d6fab5 Mon Sep 17 00:00:00 2001 From: KuroSago Date: Wed, 7 May 2025 11:01:50 +0800 Subject: [PATCH] RemoveNode --- .../types/src/core/render/Render.d.ts | 2 +- .../mind-map/src/components/ToolBar.vue | 2 + .../components/ToolBar/InsertSiblingNode.vue | 47 +++++++++---------- .../src/components/ToolBar/RemoveNode.vue | 29 ++++++++++++ .../mind-map/src/store/helpers/removeNode.ts | 36 ++++++++++++++ .../mind-map/src/store/modules/mindMap.ts | 2 + 6 files changed, 92 insertions(+), 26 deletions(-) create mode 100644 web3/packages/mind-map/src/components/ToolBar/RemoveNode.vue create mode 100644 web3/packages/mind-map/src/store/helpers/removeNode.ts diff --git a/simple-mind-map/types/src/core/render/Render.d.ts b/simple-mind-map/types/src/core/render/Render.d.ts index fde6737b..7ca3976e 100644 --- a/simple-mind-map/types/src/core/render/Render.d.ts +++ b/simple-mind-map/types/src/core/render/Render.d.ts @@ -114,7 +114,7 @@ declare class Render { moveNodeToCenter(node: any, resetScale: any): void; setRootNodeCenter(): void; expandToNodeUid(uid: any, callback?: () => void): void; - findNodeByUid(uid: any): any; + findNodeByUid(uid: string | number): any; highlightNode(node: any, range: any, style: any): void; closeHighlightNode(): void; hasRichTextPlugin(): boolean; diff --git a/web3/packages/mind-map/src/components/ToolBar.vue b/web3/packages/mind-map/src/components/ToolBar.vue index 37610951..5f4daa73 100644 --- a/web3/packages/mind-map/src/components/ToolBar.vue +++ b/web3/packages/mind-map/src/components/ToolBar.vue @@ -4,6 +4,7 @@ + @@ -12,4 +13,5 @@ import InsertChildNode from "./ToolBar/InsertChildNode.vue"; import ImportBtn from "./ToolBar/ImportBtn.vue"; import ExportBtn from "./ToolBar/ExportBtn.vue"; import InsertSiblingNode from "./ToolBar/InsertSiblingNode.vue"; +import RemoveNode from "./ToolBar/RemoveNode.vue"; \ No newline at end of file diff --git a/web3/packages/mind-map/src/components/ToolBar/InsertSiblingNode.vue b/web3/packages/mind-map/src/components/ToolBar/InsertSiblingNode.vue index 4030c603..f850a5a1 100644 --- a/web3/packages/mind-map/src/components/ToolBar/InsertSiblingNode.vue +++ b/web3/packages/mind-map/src/components/ToolBar/InsertSiblingNode.vue @@ -1,28 +1,25 @@ - - - \ No newline at end of file + + + + diff --git a/web3/packages/mind-map/src/components/ToolBar/RemoveNode.vue b/web3/packages/mind-map/src/components/ToolBar/RemoveNode.vue new file mode 100644 index 00000000..f281c138 --- /dev/null +++ b/web3/packages/mind-map/src/components/ToolBar/RemoveNode.vue @@ -0,0 +1,29 @@ + + + diff --git a/web3/packages/mind-map/src/store/helpers/removeNode.ts b/web3/packages/mind-map/src/store/helpers/removeNode.ts new file mode 100644 index 00000000..e8743346 --- /dev/null +++ b/web3/packages/mind-map/src/store/helpers/removeNode.ts @@ -0,0 +1,36 @@ +import { useMindMapStore } from "../../store/index"; + +/** + * 删除节点 + * @param beforeRemoveCallback 删除前执行的异步回调函数,如果返回false则取消删除操作 + * @param nodeId 要删除的节点ID,如不提供则删除当前选中的节点 + * @returns 返回Promise,可用于链式调用 + */ +export async function removeNode(params: { + beforeRemoveCallback?: () => Promise; + nodeId?: string | number; +}): Promise { + const { getMindMapInstance } = useMindMapStore(); + + try { + // 如果提供了回调函数,先执行回调 + if (params.beforeRemoveCallback) { + const shouldContinue = await params.beforeRemoveCallback(); + if (!shouldContinue) return; // 如果回调返回false则取消删除操作 + } + + if (params.nodeId) { + const node = getMindMapInstance()?.renderer?.findNodeByUid( + params.nodeId + ); + if (node) { + return getMindMapInstance()?.execCommand("REMOVE_NODE", [node]); + } + } else { + return getMindMapInstance()?.execCommand("REMOVE_NODE"); + } + } catch (error) { + console.error("删除节点失败:", error); + throw error; + } +} diff --git a/web3/packages/mind-map/src/store/modules/mindMap.ts b/web3/packages/mind-map/src/store/modules/mindMap.ts index 1774b3ba..a9078dbb 100644 --- a/web3/packages/mind-map/src/store/modules/mindMap.ts +++ b/web3/packages/mind-map/src/store/modules/mindMap.ts @@ -5,6 +5,7 @@ import { exportFile } from "../helpers/export"; import { usePlugins } from "../helpers/usePlugin"; import { insertChildNode } from "../helpers/insertChildNode"; import { insertSiblingNode } from "../helpers/insertSiblingNode"; +import { removeNode } from "../helpers/removeNode"; import type MindMapNode from "simple-mind-map/types/src/core/render/node/MindMapNode"; @@ -65,6 +66,7 @@ export const useMindMapStore = defineStore( exportFile, insertChildNode, insertSiblingNode, + removeNode, // func initMindMap,