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 | 136 ++++++++++++++++++++++++++++++-------------- 1 files changed, 92 insertions(+), 44 deletions(-) diff --git a/src/components/vue-flow/ui/nodes/LLMNode.vue b/src/components/vue-flow/ui/nodes/LLMNode.vue index f114e2d..0c0e258 100644 --- a/src/components/vue-flow/ui/nodes/LLMNode.vue +++ b/src/components/vue-flow/ui/nodes/LLMNode.vue @@ -3,71 +3,119 @@ v-model:title="data.title" :type="NodeType.LLM" :description="VueFlowHelper.getConfigValue(data, 'description', '璋冪敤澶фā鍨嬪洖绛旂敤鎴烽棶棰樻垨鑰呭鐞嗕换鍔°��')" + :isViewMode="isViewMode" > <Handle :id="targetHandleId" type="target" :position="Position.Left" /> - <FieldLayout :title="outputParam.name"> - <el-input class="w-full flex-0" v-model="outputParam.params[0].value" placeholder="杈撳嚭鍙傛暟鍚�"> </el-input> - </FieldLayout> - <FieldLayout :title="VueFlowHelper.getConfigValue(modelSetting, 'name', '妯″瀷璁剧疆')"> - <div class="w-[340px] 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-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> + </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" + ></el-input> + </el-form-item> + </FieldLayout> + </el-form> - <el-select - v-model="VueFlowHelper.getParams(modelSetting, 'llm_model').value" - class="w-[150px]" - :placeholder="VueFlowHelper.getParams(modelSetting, 'llm_model').placeholder" - > - <el-option v-for="item in VueFlowConstant.LLM_MODEL_LIST" :key="item.value" :label="item.label" :value="item.value" /> - </el-select> - </div> - <div class="flex-column gap-y-1.5"> - <span class="text-gray-500">{{ VueFlowHelper.getParams(modelSetting, 'temperature').label }}</span> - <el-input-number - v-model="VueFlowHelper.getParams(modelSetting, 'temperature').value" - class="w-[180px]" - placeholder="" - ></el-input-number> - </div> - </div> - </FieldLayout> - <FieldLayout :title="prompt.name"> - <el-input - class="nowheel" - v-model="VueFlowHelper.getParams(prompt, 'prompt').value" - type="textarea" - :autosize="{ minRows: 3, maxRows: 6 }" - autocomplete="off" - > - </el-input> - </FieldLayout> <Handle :id="sourceHandleId" type="source" :position="Position.Right" /> </NodeBasicLayout> </template> -<script lang="ts" setup> -import { Handle, Position, useNode, useVueFlow } from '@vue-flow/core'; -import { ref } from 'vue'; - +<script setup lang="ts"> import type { NodeProps } from '@vue-flow/core'; -import { VueFlowConstant } from '../../VueFlowConstant'; +import { Handle, Position, useNode } from '@vue-flow/core'; +import { ref } from 'vue'; import { VueFlowHelper } from '../../VueFlowHelper'; -import type { LLMNodeData, LLMNodeEvents } from './index'; -import { deepClone } from '/@/utils/other'; import { NodeType } from '../../vueFlowEnum'; - import FieldLayout from './components/FieldLayout.vue'; import NodeBasicLayout from './components/NodeBasicLayout.vue'; +import type { LLMNodeData, LLMNodeEvents } from './index'; +import CodeEditor from '/@/components/input/codeEditor/index.vue'; -defineProps<NodeProps<LLMNodeData, LLMNodeEvents>>(); +defineProps< + NodeProps<LLMNodeData, LLMNodeEvents> & { + isViewMode?: boolean; + llmInfoList: any[]; + } +>(); const node = useNode(); const sourceHandleId = ref(VueFlowHelper.getHandleId(node.node, 'source')); 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