Skip to content

Commit 0a3b9ee

Browse files
committed
fix: refactor form item rendering for improved readability and structure
--bug=1054022 --user=刘瑞斌 【应用】MCP节点工具列表建议支持搜索 https://www.tapd.cn/57709429/s/1677517 --bug=1054029 --user=刘瑞斌 【应用】MCP工具参数必填时,参数置空可以发布应用 https://www.tapd.cn/57709429/s/1677571
1 parent 97fb4a5 commit 0a3b9ee

File tree

1 file changed

+35
-9
lines changed

1 file changed

+35
-9
lines changed

ui/src/workflow/nodes/mcp-node/index.vue

Lines changed: 35 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
</el-button>
3434
</div>
3535
</template>
36-
<el-select v-model="form_data.mcp_tool" @change="changeTool">
36+
<el-select v-model="form_data.mcp_tool" @change="changeTool" filterable>
3737
<el-option
3838
v-for="item in form_data.mcp_tools"
3939
:key="item.value"
@@ -72,15 +72,18 @@
7272
v-if="form_data.mcp_tool"
7373
@submit.prevent
7474
>
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+
>
7779
<template #label>
7880
<div class="flex-between">
7981
<div>
8082
<TooltipLabel :label="item.label.label" :tooltip="item.label.attrs.tooltip" />
8183
<span v-if="item.required" class="danger">*</span>
8284
</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"
8487
@change="form_data.tool_params[form_data.params_nested] = {}">
8588
<el-option
8689
:label="$t('views.applicationWorkflow.nodes.replyNode.replyContent.reference')"
@@ -108,7 +111,10 @@
108111
</el-form-item>
109112
</el-form>
110113
</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+
>
112118
<el-form
113119
ref="dynamicsFormRef"
114120
label-position="top"
@@ -118,15 +124,18 @@
118124
v-if="form_data.mcp_tool"
119125
@submit.prevent
120126
>
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+
>
123131
<template #label>
124132
<div class="flex-between">
125133
<div>
126134
<TooltipLabel :label="item.label.label" :tooltip="item.label.attrs.tooltip" />
127135
<span v-if="item.required" class="danger">*</span>
128136
</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">
130139
<el-option
131140
:label="$t('views.applicationWorkflow.nodes.replyNode.replyContent.reference')"
132141
value="referencing"
@@ -307,7 +316,24 @@ const form_data = computed({
307316
const replyNodeFormRef = ref()
308317
309318
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()]
311337
return Promise.all(ps).catch((err: any) => {
312338
return Promise.reject({ node: props.nodeModel, errMessage: err })
313339
})

0 commit comments

Comments
 (0)