Reuse shared workflow node registry

This commit is contained in:
2026-06-10 11:43:21 +08:00
parent 2adc78ac09
commit 119486a4c9
@@ -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,