|
33 | 33 | </el-button> |
34 | 34 | </div> |
35 | 35 | </template> |
36 | | - <el-select v-model="form_data.mcp_tool" @change="changeTool"> |
| 36 | + <el-select v-model="form_data.mcp_tool" @change="changeTool" filterable> |
37 | 37 | <el-option |
38 | 38 | v-for="item in form_data.mcp_tools" |
39 | 39 | :key="item.value" |
|
72 | 72 | v-if="form_data.mcp_tool" |
73 | 73 | @submit.prevent |
74 | 74 | > |
75 | | - <el-form-item v-for="item in form_data.tool_form_field" :key="item.field" |
76 | | - :rules="[item.props_info.rules]" :required="item.required"> |
| 75 | + <el-form-item |
| 76 | + v-for="item in form_data.tool_form_field" :key="item.field" |
| 77 | + :required="item.required" |
| 78 | + > |
77 | 79 | <template #label> |
78 | 80 | <div class="flex-between"> |
79 | 81 | <div> |
80 | 82 | <TooltipLabel :label="item.label.label" :tooltip="item.label.attrs.tooltip" /> |
81 | 83 | <span v-if="item.required" class="danger">*</span> |
82 | 84 | </div> |
83 | | - <el-select :teleported="false" v-model="item.source" size="small" style="width: 85px" |
| 85 | + <el-select :teleported="false" v-model="item.source" size="small" |
| 86 | + style="width: 85px" |
84 | 87 | @change="form_data.tool_params[form_data.params_nested] = {}"> |
85 | 88 | <el-option |
86 | 89 | :label="$t('views.applicationWorkflow.nodes.replyNode.replyContent.reference')" |
|
108 | 111 | </el-form-item> |
109 | 112 | </el-form> |
110 | 113 | </div> |
111 | | - <div class="border-r-4 p-8-12 mb-8 layout-bg lighter" v-else> |
| 114 | + <div |
| 115 | + v-else |
| 116 | + class="border-r-4 p-8-12 mb-8 layout-bg lighter" |
| 117 | + > |
112 | 118 | <el-form |
113 | 119 | ref="dynamicsFormRef" |
114 | 120 | label-position="top" |
|
118 | 124 | v-if="form_data.mcp_tool" |
119 | 125 | @submit.prevent |
120 | 126 | > |
121 | | - <el-form-item v-for="item in form_data.tool_form_field" :key="item.field" |
122 | | - :rules="[item.props_info.rules]" :required="item.required"> |
| 127 | + <el-form-item |
| 128 | + v-for="item in form_data.tool_form_field" :key="item.field" |
| 129 | + :required="item.required" |
| 130 | + > |
123 | 131 | <template #label> |
124 | 132 | <div class="flex-between"> |
125 | 133 | <div> |
126 | 134 | <TooltipLabel :label="item.label.label" :tooltip="item.label.attrs.tooltip" /> |
127 | 135 | <span v-if="item.required" class="danger">*</span> |
128 | 136 | </div> |
129 | | - <el-select :teleported="false" v-model="item.source" size="small" style="width: 85px"> |
| 137 | + <el-select :teleported="false" v-model="item.source" size="small" |
| 138 | + style="width: 85px"> |
130 | 139 | <el-option |
131 | 140 | :label="$t('views.applicationWorkflow.nodes.replyNode.replyContent.reference')" |
132 | 141 | value="referencing" |
@@ -307,7 +316,24 @@ const form_data = computed({ |
307 | 316 | const replyNodeFormRef = ref() |
308 | 317 |
|
309 | 318 | const validate = async () => { |
310 | | - let ps = [replyNodeFormRef.value?.validate(), dynamicsFormRef.value?.validate()] |
| 319 | + // 对动态表单,只验证必填字段 |
| 320 | + if (dynamicsFormRef.value) { |
| 321 | + const requiredFields = form_data.value.tool_form_field |
| 322 | + .filter((item: any) => item.required) |
| 323 | + .map((item: any) => item.label.label) |
| 324 | +
|
| 325 | + if (requiredFields.length > 0) { |
| 326 | + for (const item of requiredFields) { |
| 327 | + if (!form_data.value.tool_params[form_data.value.params_nested][item]) { |
| 328 | + return Promise.reject({ |
| 329 | + node: props.nodeModel, |
| 330 | + errMessage: item + t('dynamicsForm.tip.requiredMessage') |
| 331 | + }) |
| 332 | + } |
| 333 | + } |
| 334 | + } |
| 335 | + } |
| 336 | + let ps = [replyNodeFormRef.value?.validate()] |
311 | 337 | return Promise.all(ps).catch((err: any) => { |
312 | 338 | return Promise.reject({ node: props.nodeModel, errMessage: err }) |
313 | 339 | }) |
|
0 commit comments