Skip to content

Commit 436e43d

Browse files
committed
feat: enhance form handling with dynamic input fields and reference content retrieval
1 parent b8562ec commit 436e43d

File tree

2 files changed

+87
-25
lines changed

2 files changed

+87
-25
lines changed

apps/application/flow/step_node/mcp_node/impl/base_mcp_node.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ def handle_variables(self, tool_params):
3535
tool_params[k] = self.workflow_manage.generate_prompt(tool_params[k])
3636
if type(v) == dict:
3737
self.handle_variables(v)
38+
if (type(v) == list) and (type(v[0]) == str):
39+
tool_params[k] = self.get_reference_content(v)
3840
return tool_params
3941

4042
def get_reference_content(self, fields: List[str]):

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

Lines changed: 85 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -62,28 +62,95 @@
6262
class="border-r-4 p-8-12 mb-8 layout-bg lighter"
6363
v-if="form_data.tool_params[form_data.params_nested]"
6464
>
65-
<DynamicsForm
66-
v-if="form_data.mcp_tool"
67-
v-model="form_data.tool_params[form_data.params_nested]"
68-
:model="form_data.tool_params[form_data.params_nested]"
65+
<el-form
66+
ref="dynamicsFormRef"
6967
label-position="top"
68+
v-loading="loading"
7069
require-asterisk-position="right"
71-
:render_data="form_data.tool_form_field"
72-
ref="dynamicsFormRef"
70+
:hide-required-asterisk="true"
71+
v-if="form_data.mcp_tool"
72+
@submit.prevent
7373
>
74-
</DynamicsForm>
74+
<el-form-item v-for="item in form_data.tool_form_field" :key="item.field"
75+
:rules="[item.props_info.rules]" :required="item.required">
76+
<template #label>
77+
<div class="flex-between">
78+
<div>
79+
<TooltipLabel :label="item.label.label" :tooltip="item.label.attrs.tooltip" />
80+
<span v-if="item.required" class="danger">*</span>
81+
</div>
82+
<el-select :teleported="false" v-model="item.source" size="small" style="width: 85px"
83+
@change="form_data.tool_params[form_data.params_nested] = {}">
84+
<el-option
85+
:label="$t('views.applicationWorkflow.nodes.replyNode.replyContent.reference')"
86+
value="referencing"
87+
/>
88+
<el-option
89+
:label="$t('views.applicationWorkflow.nodes.replyNode.replyContent.custom')"
90+
value="custom"
91+
/>
92+
</el-select>
93+
</div>
94+
</template>
95+
<el-input
96+
v-if="item.source === 'custom'"
97+
v-model="form_data.tool_params[form_data.params_nested][item.label.label]"
98+
/>
99+
<NodeCascader
100+
v-else
101+
ref="nodeCascaderRef2"
102+
:nodeModel="nodeModel"
103+
class="w-full"
104+
:placeholder="$t('views.applicationWorkflow.variable.placeholder')"
105+
v-model="form_data.tool_params[form_data.params_nested][item.label.label]"
106+
/>
107+
</el-form-item>
108+
</el-form>
75109
</div>
76110
<div class="border-r-4 p-8-12 mb-8 layout-bg lighter" v-else>
77-
<DynamicsForm
78-
v-if="form_data.mcp_tool"
79-
v-model="form_data.tool_params"
80-
:model="form_data.tool_params"
111+
<el-form
112+
ref="dynamicsFormRef"
81113
label-position="top"
114+
v-loading="loading"
82115
require-asterisk-position="right"
83-
:render_data="form_data.tool_form_field"
84-
ref="dynamicsFormRef"
116+
:hide-required-asterisk="true"
117+
v-if="form_data.mcp_tool"
118+
@submit.prevent
85119
>
86-
</DynamicsForm>
120+
<el-form-item v-for="item in form_data.tool_form_field" :key="item.field"
121+
:rules="[item.props_info.rules]" :required="item.required">
122+
<template #label>
123+
<div class="flex-between">
124+
<div>
125+
<TooltipLabel :label="item.label.label" :tooltip="item.label.attrs.tooltip" />
126+
<span v-if="item.required" class="danger">*</span>
127+
</div>
128+
<el-select :teleported="false" v-model="item.source" size="small" style="width: 85px">
129+
<el-option
130+
:label="$t('views.applicationWorkflow.nodes.replyNode.replyContent.reference')"
131+
value="referencing"
132+
/>
133+
<el-option
134+
:label="$t('views.applicationWorkflow.nodes.replyNode.replyContent.custom')"
135+
value="custom"
136+
/>
137+
</el-select>
138+
</div>
139+
</template>
140+
<el-input
141+
v-if="item.source === 'custom'"
142+
v-model="form_data.tool_params[item.label.label]"
143+
/>
144+
<NodeCascader
145+
v-else
146+
ref="nodeCascaderRef2"
147+
:nodeModel="nodeModel"
148+
class="w-full"
149+
:placeholder="$t('views.applicationWorkflow.variable.placeholder')"
150+
v-model="form_data.tool_params[item.label.label]"
151+
/>
152+
</el-form-item>
153+
</el-form>
87154
</div>
88155
</NodeContainer>
89156
</template>
@@ -94,8 +161,9 @@ import { computed, onMounted, ref } from 'vue'
94161
import { isLastNode } from '@/workflow/common/data'
95162
import applicationApi from '@/api/application'
96163
import { t } from '@/locales'
97-
import DynamicsForm from '@/components/dynamics-form/index.vue'
98164
import { MsgError, MsgSuccess } from '@/utils/message'
165+
import TooltipLabel from '@/components/dynamics-form/items/label/TooltipLabel.vue'
166+
import NodeCascader from '@/workflow/common/NodeCascader.vue'
99167
100168
const props = defineProps<{ nodeModel: any }>()
101169
@@ -168,9 +236,8 @@ function changeTool() {
168236
props_info: {}
169237
},
170238
input_type: 'TextInput',
239+
source: 'custom',
171240
required: args_schema.properties[item].required?.indexOf(item2) !== -1,
172-
default_value: '',
173-
show_default_value: false,
174241
props_info: {
175242
rules: [
176243
{
@@ -193,9 +260,8 @@ function changeTool() {
193260
props_info: {}
194261
},
195262
input_type: 'TextInput',
263+
source: 'custom',
196264
required: args_schema.required?.indexOf(item) !== -1,
197-
default_value: '',
198-
show_default_value: false,
199265
props_info: {
200266
rules: [
201267
{
@@ -211,15 +277,9 @@ function changeTool() {
211277
//
212278
if (form_data.value.params_nested) {
213279
form_data.value.tool_params = { [form_data.value.params_nested]: {} }
214-
dynamicsFormRef.value?.render(
215-
form_data.value.tool_form_field,
216-
form_data.value.tool_params[form_data.value.params_nested]
217-
)
218280
} else {
219281
form_data.value.tool_params = {}
220-
dynamicsFormRef.value?.render(form_data.value.tool_form_field, form_data.value.tool_params)
221282
}
222-
console.log(form_data.value.tool_params)
223283
}
224284
225285
const form_data = computed({

0 commit comments

Comments
 (0)