From 67e50265b5cdae1c28f39b924ccb277857f4acea Mon Sep 17 00:00:00 2001
From: wujingjing <gersonwu@qq.com>
Date: 星期二, 18 二月 2025 14:08:36 +0800
Subject: [PATCH] 一些必填

---
 src/components/vue-flow/ui/nodes/CodeNode.vue |   86 +++++++++++++++++++++++++++----------------
 1 files changed, 54 insertions(+), 32 deletions(-)

diff --git a/src/components/vue-flow/ui/nodes/CodeNode.vue b/src/components/vue-flow/ui/nodes/CodeNode.vue
index b6c933c..68ca9ba 100644
--- a/src/components/vue-flow/ui/nodes/CodeNode.vue
+++ b/src/components/vue-flow/ui/nodes/CodeNode.vue
@@ -1,42 +1,48 @@
 <template>
 	<NodeBasicLayout
 		v-model:title="data.title"
+		style="width: 320px"
 		:type="NodeType.Code"
 		:showOffset="false"
 		:description="data.description"
 		:isViewMode="isViewMode"
 	>
 		<Handle :id="targetHandleId" type="target" :position="Position.Left" />
-		<FieldLayout :title="codeInput.name">
-			<div class="flex flex-col gap-y-2">
-				<div :key="subIndex" v-for="(subItem, subIndex) in codeInput.params[0].value" class="flex-items-center gap-x-2 pr-8">
-					<el-input filterable class="w-[120px] flex-0" v-model="subItem.key" placeholder="鍙傛暟鍚�" :readonly="isViewMode"></el-input>
+		<el-form ref="formRef" :model="data" :rules="formRules" label-position="right" label-width="60px" :show-message="false">
+			<!-- <FieldLayout :title="codeInput.name">
+				<div class="flex flex-col gap-y-2">
+					<div :key="subIndex" v-for="(subItem, subIndex) in codeInput.params[0].value" class="flex-items-center gap-x-2 pr-8">
+						<el-input filterable class="w-[120px] flex-0" v-model="subItem.key" placeholder="鍙傛暟鍚�" :readonly="isViewMode"></el-input>
 
-					<el-input filterable class="w-[120px] flex-0" v-model="subItem.value" placeholder="鍊�" :readonly="isViewMode"></el-input>
-					<span
-						v-if="!isViewMode"
-						class="ywifont ywicon-shanchu text-red-400 cursor-pointer"
-						@click="delInputVarItem(subIndex)"
-					></span>
+						<el-input filterable class="w-[120px] flex-0" v-model="subItem.value" placeholder="鍊�" :readonly="isViewMode"></el-input>
+						<span
+							v-if="!isViewMode"
+							class="ywifont ywicon-shanchu text-red-400 cursor-pointer"
+							@click="delInputVarItem(subIndex)"
+						></span>
+					</div>
+					<el-button v-if="!isViewMode" class="w-fit mt-3" type="primary" @click="addInputVarItem">娣诲姞鏂扮殑鍏ュ弬</el-button>
 				</div>
-				<el-button v-if="!isViewMode" class="w-fit mt-3" type="primary" @click="addInputVarItem">娣诲姞鏂扮殑鍏ュ弬</el-button>
-			</div>
-		</FieldLayout>
-		<FieldLayout :title="codeStr.name">
-			<CodeEditor
-				:title="codeStr.name"
-				:language="codeLanguage"
-				v-model:defaultLanguage="codeStr.params[0].defaultLanguage"
-				v-model:editValue="codeStr.params[0].value"
-				:disabled="isViewMode"
-			/>
-			<template #right>
-				<el-select :disabled="isViewMode" size="small" class="w-[100px]" v-model="codeStr.params[0].defaultLanguage">
-					<el-option v-for="item in codeLanguage" :key="item" :value="item" :label="textTypeMap[item]"></el-option>
-				</el-select>
-			</template>
-		</FieldLayout>
-		<FieldLayout :title="codeOutput.name">
+			</FieldLayout> -->
+			<FieldLayout :title="codeStr.name" required>
+				<el-form-item prop="group_params.1.params.0.value" labelWidth="0">
+					<CodeEditor
+						class="w-full"
+						:title="codeStr.name"
+						:language="codeLanguage"
+						v-model:defaultLanguage="codeStr.params[0].defaultLanguage"
+						v-model:editValue="codeStr.params[0].value"
+						:disabled="isViewMode"
+					/>
+				</el-form-item>
+
+				<template #right>
+					<el-select :disabled="isViewMode" size="small" class="w-[100px]" v-model="codeStr.params[0].defaultLanguage">
+						<el-option v-for="item in codeLanguage" :key="item" :value="item" :label="textTypeMap[item]"></el-option>
+					</el-select>
+				</template>
+			</FieldLayout>
+			<!-- <FieldLayout :title="codeOutput.name">
 			<div class="flex flex-col gap-y-2">
 				<div :key="subIndex" v-for="(subItem, subIndex) in codeOutput.params[0].value" class="flex-items-center gap-x-2 pr-8">
 					<el-input :readonly="isViewMode" filterable class="w-[120px] flex-0" v-model="subItem.key" placeholder="鍙傛暟鍚�"> </el-input>
@@ -57,7 +63,8 @@
 				</div>
 				<el-button v-if="!isViewMode" class="w-fit mt-3" type="primary" @click="addOutputVarItem">娣诲姞鏂扮殑鍑哄弬</el-button>
 			</div>
-		</FieldLayout>
+		</FieldLayout> -->
+		</el-form>
 		<Handle :id="sourceHandleId" type="source" :position="Position.Right" />
 	</NodeBasicLayout>
 </template>
@@ -65,15 +72,16 @@
 <script lang="ts" setup>
 import type { NodeProps } from '@vue-flow/core';
 import { Handle, Position, useNode } from '@vue-flow/core';
-import { ref } from 'vue';
+import { onMounted, ref } from 'vue';
 import { VueFlowHelper } from '../../VueFlowHelper';
-import { NodeType, ParameterType, parameterTypeMap } from '../../vueFlowEnum';
+import { NodeType, ParameterType } from '../../vueFlowEnum';
 import CodeEditor from '/@/components/input/codeEditor/index.vue';
 // import CodeEditDialog from './components/CodeEditDlg.vue';
 import FieldLayout from './components/FieldLayout.vue';
 import NodeBasicLayout from './components/NodeBasicLayout.vue';
 import type { LLMNodeData, LLMNodeEvents } from './index';
 import { textTypeMap } from '/@/components/input/codeEditor/types';
+import { validateForm } from './utils';
 defineProps<
 	NodeProps<LLMNodeData, LLMNodeEvents> & {
 		isViewMode?: boolean;
@@ -88,7 +96,9 @@
 const codeOutput = ref(VueFlowHelper.getGroupParam(data.value, 2));
 
 const codeLanguage = ref(VueFlowHelper.getConfigValue(codeStr.value.params[0], 'language', ['text', 'javascript']));
-
+const emit = defineEmits<{
+	(e: 'register', data: { validateForm: () => Promise<{ isValid: boolean; invalidFields?: any }> }): void;
+}>();
 // defaultLanguage 涓嶅瓨鍦紝璁剧疆榛樿鍊�
 !codeStr.value.params[0].defaultLanguage && (codeStr.value.params[0].defaultLanguage = 'javascript');
 
@@ -142,4 +152,16 @@
 	}
 	codeOutput.value.params[0].value.push(getOutputEmptyItem());
 };
+
+const formRef = ref();
+const formRules = ref({
+	'group_params.1.params.0.value': [{ required: true, message: '璇疯緭鍏ユ墽琛屼唬鐮�', trigger: 'blur' }],
+});
+
+// 娉ㄥ唽鑺傜偣瀹炰緥
+onMounted(() => {
+	emit('register', {
+		validateForm: validateForm(formRef) as any,
+	});
+});
 </script>

--
Gitblit v1.9.3