From 1598df378ab18d8388483d129439eec3cac38afe Mon Sep 17 00:00:00 2001
From: wujingjing <gersonwu@qq.com>
Date: 星期四, 20 三月 2025 15:38:10 +0800
Subject: [PATCH] 添加 n8n 节点

---
 src/components/vue-flow/MainCanvas.vue |   73 ++++++++++++++++++++++++++++++++----
 1 files changed, 64 insertions(+), 9 deletions(-)

diff --git a/src/components/vue-flow/MainCanvas.vue b/src/components/vue-flow/MainCanvas.vue
index 64db7c1..82f64e9 100644
--- a/src/components/vue-flow/MainCanvas.vue
+++ b/src/components/vue-flow/MainCanvas.vue
@@ -2,13 +2,28 @@
 	<div class="relative h-full w-full" id="main-canvas" @drop="handleOnDrop" @dragover="handleOnDragOver">
 		<VueFlow v-model="elements" :node-types="nodeTypes" :connection-mode="ConnectionMode.Strict">
 			<template #node-start="startNodeProps">
-				<StartNode ref="nodeRef" v-bind="startNodeProps" :isViewMode="isViewMode" @register="(ref) => registerNodeRef(startNodeProps.id, ref)" />
+				<StartNode
+					ref="nodeRef"
+					v-bind="startNodeProps"
+					:isViewMode="isViewMode"
+					@register="(ref) => registerNodeRef(startNodeProps.id, ref)"
+				/>
 			</template>
 			<template #node-condition="conditionNodeProps">
-				<ConditionNode ref="nodeRef" v-bind="conditionNodeProps" :isViewMode="isViewMode" @register="(ref) => registerNodeRef(conditionNodeProps.id, ref)" />
+				<ConditionNode
+					ref="nodeRef"
+					v-bind="conditionNodeProps"
+					:isViewMode="isViewMode"
+					@register="(ref) => registerNodeRef(conditionNodeProps.id, ref)"
+				/>
 			</template>
 			<template #node-output_msg="outputNodeProps">
-				<OutputNode ref="nodeRef" v-bind="outputNodeProps" :isViewMode="isViewMode" @register="(ref) => registerNodeRef(outputNodeProps.id, ref)" />
+				<OutputNode
+					ref="nodeRef"
+					v-bind="outputNodeProps"
+					:isViewMode="isViewMode"
+					@register="(ref) => registerNodeRef(outputNodeProps.id, ref)"
+				/>
 			</template>
 
 			<template #node-end="endNodeProps">
@@ -20,20 +35,50 @@
 			</template>
 
 			<template #node-agent="agentNodeProps">
-				<AgentNode ref="nodeRef" v-bind="agentNodeProps" :agentNames="agentNames" :isViewMode="isViewMode" @register="(ref) => registerNodeRef(agentNodeProps.id, ref)" />
+				<AgentNode
+					ref="nodeRef"
+					v-bind="agentNodeProps"
+					:agentNames="agentNames"
+					:isViewMode="isViewMode"
+					@register="(ref) => registerNodeRef(agentNodeProps.id, ref)"
+				/>
 			</template>
 			<template #node-func="funcNodeProps">
 				<FuncNode ref="nodeRef" v-bind="funcNodeProps" :funcNames="funcNames" :isViewMode="isViewMode" />
 			</template>
 
 			<template #node-code="codeNodeProps">
-				<CodeNode ref="nodeRef" v-bind="codeNodeProps" :isViewMode="isViewMode" @register="(ref) => registerNodeRef(codeNodeProps.id, ref)" />
+				<CodeNode
+					ref="nodeRef"
+					v-bind="codeNodeProps"
+					:isViewMode="isViewMode"
+					@register="(ref) => registerNodeRef(codeNodeProps.id, ref)"
+				/>
 			</template>
 			<template #node-python_code="pythonCodeNodeProps">
-				<PythonCodeNode ref="nodeRef" v-bind="pythonCodeNodeProps" :isViewMode="isViewMode" @register="(ref) => registerNodeRef(pythonCodeNodeProps.id, ref)" />
+				<PythonCodeNode
+					ref="nodeRef"
+					v-bind="pythonCodeNodeProps"
+					:isViewMode="isViewMode"
+					@register="(ref) => registerNodeRef(pythonCodeNodeProps.id, ref)"
+				/>
+			</template>
+			<template #node-n8n="n8nNodeProps">
+				<N8nNode
+					:workflowList="n8nWorkflowList"
+					ref="nodeRef"
+					v-bind="n8nNodeProps"
+					:isViewMode="isViewMode"
+					@register="(ref) => registerNodeRef(n8nNodeProps.id, ref)"
+				/>
 			</template>
 			<template #node-text_resource="textResourceNodeProps">
-				<TextResourceNode ref="nodeRef" v-bind="textResourceNodeProps" :isViewMode="isViewMode" @register="(ref) => registerNodeRef(textResourceNodeProps.id, ref)" />
+				<TextResourceNode
+					ref="nodeRef"
+					v-bind="textResourceNodeProps"
+					:isViewMode="isViewMode"
+					@register="(ref) => registerNodeRef(textResourceNodeProps.id, ref)"
+				/>
 			</template>
 
 			<template #node-analysis="analysisNodeProps">
@@ -78,8 +123,17 @@
 import TextResourceNode from './ui/nodes/TextResourceNode.vue';
 import { NodeType, nodeTypeMap } from './vueFlowEnum';
 import { VueFlowHelper } from './VueFlowHelper';
-
+import N8nNode from './ui/nodes/N8nNode.vue';
+import { GetN8nWorkflowList } from '/@/api/n8n';
 const props = defineProps(['flowJson', 'agentNames', 'funcNames', 'llmInfoList', 'isViewMode']);
+
+const n8nWorkflowList = ref([]);
+const getN8nWorkflowList = async () => {
+	const res = await GetN8nWorkflowList({
+		active: true,
+	});
+	n8nWorkflowList.value = res.values?.data ?? [];
+};
 
 const nodeTypes = {};
 const elements = ref<Elements>();
@@ -136,7 +190,8 @@
 
 	setInteractive(!props.isViewMode);
 };
-onMounted(() => {
+onMounted(async () => {
+	getN8nWorkflowList();
 	setTimeout(() => {
 		initFlowStatus();
 	}, 30);

--
Gitblit v1.9.3