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