From 0f01c4bbce19fa8489a4e835c83cb9415549f681 Mon Sep 17 00:00:00 2001
From: wujingjing <gersonwu@qq.com>
Date: 星期一, 17 二月 2025 17:54:22 +0800
Subject: [PATCH] 表单校验

---
 src/components/vue-flow/ui/nodes/LLMNode.vue |  119 +++++++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 79 insertions(+), 40 deletions(-)

diff --git a/src/components/vue-flow/ui/nodes/LLMNode.vue b/src/components/vue-flow/ui/nodes/LLMNode.vue
index a612aab..0c0e258 100644
--- a/src/components/vue-flow/ui/nodes/LLMNode.vue
+++ b/src/components/vue-flow/ui/nodes/LLMNode.vue
@@ -6,48 +6,68 @@
 		:isViewMode="isViewMode"
 	>
 		<Handle :id="targetHandleId" type="target" :position="Position.Left" />
-
-		<FieldLayout :title="VueFlowHelper.getConfigValue(modelSetting, 'name', '妯″瀷璁剧疆')">
-			<div class="w-full flex-items-center gap-x-2">
-				<div class="flex-column gap-y-1.5">
-					<span class="text-gray-500">{{ VueFlowHelper.getParams(modelSetting, 'llm_model').label }}</span>
-					<el-tree-select
-						v-model="VueFlowHelper.getParams(modelSetting, 'llm_model').value"
-						:data="llmInfoList"
-						:props="{ label: 'name', value: 'id' }"
-						:render-after-expand="false"
-						:check-strictly="false"
-						:show-checkbox="false"
-						:accordion="true"
-						:disabled="isViewMode"
-						filterable
-						:placeholder="VueFlowHelper.getParams(modelSetting, 'llm_model').placeholder"
-					/>
+		<el-form :model="data" :rules="formRules" label-position="right" label-width="60px" status-icon>
+			<FieldLayout :title="VueFlowHelper.getConfigValue(modelSetting, 'name', '妯″瀷璁剧疆')">
+				<div class="w-full flex-items-center gap-x-2">
+					<div class="flex-column gap-y-1.5">
+						<el-form-item
+							labelPosition="top"
+							:label="VueFlowHelper.getParams(modelSetting, 'llm_model').label"
+							prop="group_params.0.params.0.value"
+						>
+							<el-tree-select
+								v-model="VueFlowHelper.getParams(modelSetting, 'llm_model').value"
+								:data="llmInfoList"
+								:props="{ label: 'name', value: 'id' }"
+								:render-after-expand="false"
+								:check-strictly="false"
+								:show-checkbox="false"
+								:accordion="true"
+								:disabled="isViewMode"
+								filterable
+								clearable
+								:placeholder="VueFlowHelper.getParams(modelSetting, 'llm_model').placeholder"
+							/>
+						</el-form-item>
+					</div>
+					<div class="flex-column gap-y-1.5">
+						<el-form-item
+							labelPosition="top"
+							:label="VueFlowHelper.getParams(modelSetting, 'temperature').label"
+							prop="group_params.0.params.1.value"
+						>
+							<el-input-number
+								class="w-full"
+								controls-position="right"
+								v-model="VueFlowHelper.getParams(modelSetting, 'temperature').value"
+								:readonly="isViewMode"
+								placeholder=""
+							></el-input-number>
+						</el-form-item>
+					</div>
 				</div>
-				<div class="flex-column gap-y-1.5">
-					<span class="text-gray-500">{{ VueFlowHelper.getParams(modelSetting, 'temperature').label }}</span>
-					<el-input-number
-						class="w-full"
-						controls-position="right"
-						v-model="VueFlowHelper.getParams(modelSetting, 'temperature').value"
+			</FieldLayout>
+			<FieldLayout :title="prompt.name">
+				<CodeEditor
+					:title="prompt.name"
+					class="nowheel"
+					v-model:editValue="VueFlowHelper.getParams(prompt, 'prompt').value"
+					:maxHeight="180"
+					:disabled="isViewMode"
+				/>
+			</FieldLayout>
+			<FieldLayout :title="outputParam.name" >
+				<el-form-item labelWidth="0" prop="group_params.2.params.0.value">
+					<el-input
+						class="w-full flex-0"
+						v-model="outputParam.params[0].value"
+						placeholder="杈撳嚭鍙傛暟鍚�"
 						:readonly="isViewMode"
-						placeholder=""
-					></el-input-number>
-				</div>
-			</div>
-		</FieldLayout>
-		<FieldLayout :title="prompt.name">
-			<CodeEditor
-				:title="prompt.name"
-				class="nowheel"
-				v-model:editValue="VueFlowHelper.getParams(prompt, 'prompt').value"
-				:maxHeight="180"
-				:disabled="isViewMode"
-			/>
-		</FieldLayout>
-		<FieldLayout :title="outputParam.name">
-			<el-input class="w-full flex-0" v-model="outputParam.params[0].value" placeholder="杈撳嚭鍙傛暟鍚�" :readonly="isViewMode"></el-input>
-		</FieldLayout>
+					></el-input>
+				</el-form-item>
+			</FieldLayout>
+		</el-form>
+
 		<Handle :id="sourceHandleId" type="source" :position="Position.Right" />
 	</NodeBasicLayout>
 </template>
@@ -75,8 +95,27 @@
 const targetHandleId = ref(VueFlowHelper.getHandleId(node.node, 'target'));
 
 const data = ref(node.node.data);
+console.log('馃殌 ~ data.value:', data.value);
 const modelSetting = ref(VueFlowHelper.getGroupParam(data.value, 0));
 const prompt = ref(VueFlowHelper.getGroupParam(data.value, 1));
 const outputParam = ref(VueFlowHelper.getGroupParam(data.value, 2));
 VueFlowHelper.getConfigValue(VueFlowHelper.getParams(prompt.value, 'prompt'), 'label', '');
+
+const formRules = ref({
+	'group_params.0.params.0.value': [{ required: true, message: '璇烽�夋嫨妯″瀷', trigger: 'change' }],
+	// 'group_params.0.params.1.value': [{ required: true, message: '璇疯緭鍏ユ俯搴�', trigger: 'blur' }],
+	// 'group_params.2.params.0.value': [{ required: true, message: '璇疯緭鍏ヨ緭鍑哄弬鏁板悕', trigger: 'blur' }],
+});
+
+const formRef = ref();
+const validateForm = async () => {
+	const valid = await formRef.value.validate();
+	if (valid) {
+		console.log('submit!');
+	}
+};
+
+defineExpose({
+	validateForm,
+});
 </script>

--
Gitblit v1.9.3