From 119486a4c9a4c4196578222c4533ab0e353e1227 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?cls=5F=E5=AE=81=E6=B3=A2=E6=9C=AC=E6=9C=BA?= <908705107@qq.com> Date: Wed, 10 Jun 2026 11:43:21 +0800 Subject: [PATCH] Reuse shared workflow node registry --- .../ai-platform/workflow/editor/index.vue | 62 ++----------------- 1 file changed, 6 insertions(+), 56 deletions(-) diff --git a/web/apps/web-ele/src/views/ai-platform/workflow/editor/index.vue b/web/apps/web-ele/src/views/ai-platform/workflow/editor/index.vue index 666374d..5d0afc4 100644 --- a/web/apps/web-ele/src/views/ai-platform/workflow/editor/index.vue +++ b/web/apps/web-ele/src/views/ai-platform/workflow/editor/index.vue @@ -4,7 +4,6 @@ import type { AIWorkflow } from '#/api/ai-platform/ai-platform'; import { computed, defineAsyncComponent, - markRaw, nextTick, onMounted, onUnmounted, @@ -70,7 +69,10 @@ import RunDialog from './components/RunDialog.vue'; import ContextMenu from './components/ContextMenu.vue'; import Panel from './components/Panel.vue'; import VersionHistoryPanel from './components/VersionHistoryPanel.vue'; -import AddButtonEdge from './edges/AddButtonEdge.vue'; +import { + workflowEdgeTypes, + workflowNodeTypes, +} from '../shared/workflowNodeTypes'; import '@vue-flow/minimap/dist/style.css'; import '@vue-flow/core/dist/style.css'; @@ -80,23 +82,6 @@ import '@vue-flow/controls/dist/style.css'; const AiChatPanel = defineAsyncComponent(() => import('#/components/ai-chat-panel/AiChatPanel.vue'), ); -const ChoiceNode = defineAsyncComponent(() => import('./nodes/ChoiceNode.vue')); -const CodeNode = defineAsyncComponent(() => import('./nodes/CodeNode.vue')); -const ConditionNode = defineAsyncComponent(() => import('./nodes/ConditionNode.vue')); -const ConfirmNode = defineAsyncComponent(() => import('./nodes/ConfirmNode.vue')); -const EndNode = defineAsyncComponent(() => import('./nodes/EndNode.vue')); -const HttpNode = defineAsyncComponent(() => import('./nodes/HttpNode.vue')); -const IntentNode = defineAsyncComponent(() => import('./nodes/IntentNode.vue')); -const KnowledgeRetrievalNode = defineAsyncComponent(() => import('./nodes/KnowledgeRetrievalNode.vue')); -const LLMNode = defineAsyncComponent(() => import('./nodes/LLMNode.vue')); -const LoopNode = defineAsyncComponent(() => import('./nodes/LoopNode.vue')); -const MergeNode = defineAsyncComponent(() => import('./nodes/MergeNode.vue')); -const MessageNode = defineAsyncComponent(() => import('./nodes/MessageNode.vue')); -const ParallelNode = defineAsyncComponent(() => import('./nodes/ParallelNode.vue')); -const QuestionNode = defineAsyncComponent(() => import('./nodes/QuestionNode.vue')); -const StartNode = defineAsyncComponent(() => import('./nodes/StartNode.vue')); -const SubflowNode = defineAsyncComponent(() => import('./nodes/SubflowNode.vue')); -const TemplateNode = defineAsyncComponent(() => import('./nodes/TemplateNode.vue')); const appContextStore = useAppContextStore(); @@ -122,43 +107,8 @@ const contextMenu = ref({ node: null as any, }); -// 注册自定义节点 -const nodeTypes = { - start: markRaw(StartNode), - llm: markRaw(LLMNode), - end: markRaw(EndNode), - http: markRaw(HttpNode), - code: markRaw(CodeNode), - condition: markRaw(ConditionNode), - template: markRaw(TemplateNode), - parallel: markRaw(ParallelNode), - merge: markRaw(MergeNode), - // 对话流节点 - question: markRaw(QuestionNode), - choice: markRaw(ChoiceNode), - message: markRaw(MessageNode), - confirm: markRaw(ConfirmNode), - // 意图识别节点 - intent: markRaw(IntentNode), - // Snowflake Cortex 节点 - // 循环节点 - loop: markRaw(LoopNode), - // 表单节点 - // 应用管理节点 - // 仪表盘节点 - // 系统总结节点 - // 子流程节点 - subflow: markRaw(SubflowNode), - // 表单数据节点 - // Text-to-SQL 节点 - // 知识库节点 - knowledge_retrieval: markRaw(KnowledgeRetrievalNode), -}; - -// 注册自定义边类型 -const edgeTypes = { - addButton: markRaw(AddButtonEdge), -}; +const nodeTypes = workflowNodeTypes; +const edgeTypes = workflowEdgeTypes; const { addNodes,