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
This commit is contained in:
parent
97fb4a5cea
commit
0a3b9ee02b
@ -33,7 +33,7 @@
|
|||||||
</el-button>
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<el-select v-model="form_data.mcp_tool" @change="changeTool">
|
<el-select v-model="form_data.mcp_tool" @change="changeTool" filterable>
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in form_data.mcp_tools"
|
v-for="item in form_data.mcp_tools"
|
||||||
:key="item.value"
|
:key="item.value"
|
||||||
@ -72,15 +72,18 @@
|
|||||||
v-if="form_data.mcp_tool"
|
v-if="form_data.mcp_tool"
|
||||||
@submit.prevent
|
@submit.prevent
|
||||||
>
|
>
|
||||||
<el-form-item v-for="item in form_data.tool_form_field" :key="item.field"
|
<el-form-item
|
||||||
:rules="[item.props_info.rules]" :required="item.required">
|
v-for="item in form_data.tool_form_field" :key="item.field"
|
||||||
|
:required="item.required"
|
||||||
|
>
|
||||||
<template #label>
|
<template #label>
|
||||||
<div class="flex-between">
|
<div class="flex-between">
|
||||||
<div>
|
<div>
|
||||||
<TooltipLabel :label="item.label.label" :tooltip="item.label.attrs.tooltip" />
|
<TooltipLabel :label="item.label.label" :tooltip="item.label.attrs.tooltip" />
|
||||||
<span v-if="item.required" class="danger">*</span>
|
<span v-if="item.required" class="danger">*</span>
|
||||||
</div>
|
</div>
|
||||||
<el-select :teleported="false" v-model="item.source" size="small" style="width: 85px"
|
<el-select :teleported="false" v-model="item.source" size="small"
|
||||||
|
style="width: 85px"
|
||||||
@change="form_data.tool_params[form_data.params_nested] = {}">
|
@change="form_data.tool_params[form_data.params_nested] = {}">
|
||||||
<el-option
|
<el-option
|
||||||
:label="$t('views.applicationWorkflow.nodes.replyNode.replyContent.reference')"
|
:label="$t('views.applicationWorkflow.nodes.replyNode.replyContent.reference')"
|
||||||
@ -108,7 +111,10 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</div>
|
</div>
|
||||||
<div class="border-r-4 p-8-12 mb-8 layout-bg lighter" v-else>
|
<div
|
||||||
|
v-else
|
||||||
|
class="border-r-4 p-8-12 mb-8 layout-bg lighter"
|
||||||
|
>
|
||||||
<el-form
|
<el-form
|
||||||
ref="dynamicsFormRef"
|
ref="dynamicsFormRef"
|
||||||
label-position="top"
|
label-position="top"
|
||||||
@ -118,15 +124,18 @@
|
|||||||
v-if="form_data.mcp_tool"
|
v-if="form_data.mcp_tool"
|
||||||
@submit.prevent
|
@submit.prevent
|
||||||
>
|
>
|
||||||
<el-form-item v-for="item in form_data.tool_form_field" :key="item.field"
|
<el-form-item
|
||||||
:rules="[item.props_info.rules]" :required="item.required">
|
v-for="item in form_data.tool_form_field" :key="item.field"
|
||||||
|
:required="item.required"
|
||||||
|
>
|
||||||
<template #label>
|
<template #label>
|
||||||
<div class="flex-between">
|
<div class="flex-between">
|
||||||
<div>
|
<div>
|
||||||
<TooltipLabel :label="item.label.label" :tooltip="item.label.attrs.tooltip" />
|
<TooltipLabel :label="item.label.label" :tooltip="item.label.attrs.tooltip" />
|
||||||
<span v-if="item.required" class="danger">*</span>
|
<span v-if="item.required" class="danger">*</span>
|
||||||
</div>
|
</div>
|
||||||
<el-select :teleported="false" v-model="item.source" size="small" style="width: 85px">
|
<el-select :teleported="false" v-model="item.source" size="small"
|
||||||
|
style="width: 85px">
|
||||||
<el-option
|
<el-option
|
||||||
:label="$t('views.applicationWorkflow.nodes.replyNode.replyContent.reference')"
|
:label="$t('views.applicationWorkflow.nodes.replyNode.replyContent.reference')"
|
||||||
value="referencing"
|
value="referencing"
|
||||||
@ -307,7 +316,24 @@ const form_data = computed({
|
|||||||
const replyNodeFormRef = ref()
|
const replyNodeFormRef = ref()
|
||||||
|
|
||||||
const validate = async () => {
|
const validate = async () => {
|
||||||
let ps = [replyNodeFormRef.value?.validate(), dynamicsFormRef.value?.validate()]
|
// 对动态表单,只验证必填字段
|
||||||
|
if (dynamicsFormRef.value) {
|
||||||
|
const requiredFields = form_data.value.tool_form_field
|
||||||
|
.filter((item: any) => item.required)
|
||||||
|
.map((item: any) => item.label.label)
|
||||||
|
|
||||||
|
if (requiredFields.length > 0) {
|
||||||
|
for (const item of requiredFields) {
|
||||||
|
if (!form_data.value.tool_params[form_data.value.params_nested][item]) {
|
||||||
|
return Promise.reject({
|
||||||
|
node: props.nodeModel,
|
||||||
|
errMessage: item + t('dynamicsForm.tip.requiredMessage')
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let ps = [replyNodeFormRef.value?.validate()]
|
||||||
return Promise.all(ps).catch((err: any) => {
|
return Promise.all(ps).catch((err: any) => {
|
||||||
return Promise.reject({ node: props.nodeModel, errMessage: err })
|
return Promise.reject({ node: props.nodeModel, errMessage: err })
|
||||||
})
|
})
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user