diff --git a/app/canvas/[id]/page.tsx b/app/canvas/[id]/page.tsx
index ca5411f19..a047d4efc 100644
--- a/app/canvas/[id]/page.tsx
+++ b/app/canvas/[id]/page.tsx
@@ -10,6 +10,7 @@ import {
ChevronDown,
ChevronLeft,
ChevronRight,
+ Trash2,
Save,
Undo2,
Redo2,
@@ -941,6 +942,7 @@ export default function CanvasEditorPage({ params }: PageProps) {
const clearCanvas = useCanvasStore((state) => state.clearCanvas);
const getCanvasState = useCanvasStore((state) => state.getCanvasState);
const addNode = useCanvasStore((state) => state.addNode);
+ const deleteNode = useCanvasStore((state) => state.deleteNode);
const addEdge = useCanvasStore((state) => state.addEdge);
const selectNodes = useCanvasStore((state) => state.selectNodes);
const updateNode = useCanvasStore((state) => state.updateNode);
@@ -1187,6 +1189,11 @@ export default function CanvasEditorPage({ params }: PageProps) {
: 296
: 0;
const selectedWorkflowPanelLeft = isVideoMode ? videoModuleSidebarWidth + 28 : 16;
+ const handleDeleteSelectedWorkflowNode = useCallback(() => {
+ if (!selectedVideoWorkflowNode) return;
+ deleteNode(selectedVideoWorkflowNode.id);
+ toast.success(`已删除模块:${selectedVideoWorkflowDefinition?.label || "当前模块"}`);
+ }, [deleteNode, selectedVideoWorkflowDefinition?.label, selectedVideoWorkflowNode]);
const workflowGraph = useMemo(
() => createWorkflowGraphContext(nodes, edges),
[edges, nodes]
@@ -7941,6 +7948,17 @@ export default function CanvasEditorPage({ params }: PageProps) {
)}
) : null}
+
+
diff --git a/components/canvas/nodes/TextNode.tsx b/components/canvas/nodes/TextNode.tsx
index 73eeeb7c2..e98166d6e 100644
--- a/components/canvas/nodes/TextNode.tsx
+++ b/components/canvas/nodes/TextNode.tsx
@@ -1,6 +1,7 @@
"use client";
import React, { useState, useRef, useEffect } from "react";
+import { Trash2 } from "lucide-react";
import { useCanvasStore } from "@/store/canvas";
import type { CanvasNode, TextNodeData } from "@/types/canvas";
import { cn } from "@/lib/utils";
@@ -17,6 +18,7 @@ export function TextNode({ node, isSelected }: TextNodeProps) {
const textareaRef = useRef