diff --git a/ui/src/assets/workflow/icon_tool_custom.svg b/ui/src/assets/workflow/icon_tool_custom.svg new file mode 100644 index 00000000000..6a759b9238c --- /dev/null +++ b/ui/src/assets/workflow/icon_tool_custom.svg @@ -0,0 +1,4 @@ + + + + diff --git a/ui/src/components/codemirror-editor/style.scss b/ui/src/components/codemirror-editor/style.scss index adeaa6141cd..0a52d6ca779 100644 --- a/ui/src/components/codemirror-editor/style.scss +++ b/ui/src/components/codemirror-editor/style.scss @@ -50,4 +50,7 @@ background-color: var(--el-scrollbar-hover-bg-color); opacity: var(--el-scrollbar-hover-opacity); } + :deep(.cm-content) { + background: white; + } } diff --git a/ui/src/workflow-canvas/WORKFLOW_README.md b/ui/src/workflow-canvas/WORKFLOW_README.md index f6ecdc86f3b..e7238b06607 100644 --- a/ui/src/workflow-canvas/WORKFLOW_README.md +++ b/ui/src/workflow-canvas/WORKFLOW_README.md @@ -145,6 +145,11 @@ AI 对话、意图识别、问题优化、参数提取、图片理解、视频 中间 computed。独立弹窗、资源选择等具有完整交互边界的能力放在节点目录的 `component/` 下; 节点入口负责统一写回节点属性和执行节点级校验。 +自定义工具节点的参数列表、Python 代码与返回内容由节点入口维护,参数弹窗放在 +`tool-custom-node/component/InputFieldDialog.vue`,同时封装标题栏的添加按钮,编辑入口调用其 `open(data, index)`。 +组件通过 `submit(data, index?)` 提交,节点写回后 +调用 `close()`。新增与编辑参数继续按来源重置参数值,保留旧节点在流程末尾时的返回内容兼容逻辑。 + 变量拆分节点的 `VariableFieldTable` 通过 `v-model` 接收 `VariableField[]`,只负责列表增删改、 重名检查和编辑弹窗,不接收节点模型或读写 `node_data`。节点入口在列表写回时同步输出字段并 清理下游失效引用;字段类型由该组件目录的 `types.ts` 统一定义。 diff --git a/ui/src/workflow-canvas/config/node-data.ts b/ui/src/workflow-canvas/config/node-data.ts index 2090a90604b..75d3ca8d2d5 100644 --- a/ui/src/workflow-canvas/config/node-data.ts +++ b/ui/src/workflow-canvas/config/node-data.ts @@ -350,7 +350,6 @@ export const mcpNode = { type: WorkflowNodeType.McpNode, text: '通过 SSE/Streamable HTTP 方式执行MCP服务中的工具', label: 'MCP 调用', - height: 252, properties: { stepName: 'MCP 调用', config: { fields: [{ label: '结果', value: 'result' }] } }, } @@ -359,7 +358,6 @@ export const toolCustomNode = { type: WorkflowNodeType.ToolLibCustom, text: '通过执行自定义脚本,实现数据处理', label: '自定义工具', - height: 260, properties: { stepName: '自定义工具', config: { fields: [{ label: '结果', value: 'result' }] } }, } diff --git a/ui/src/workflow-canvas/icons/mcp-node-icon.vue b/ui/src/workflow-canvas/icons/mcp-node-icon.vue index 7ea4a139f8c..1385569c5c9 100644 --- a/ui/src/workflow-canvas/icons/mcp-node-icon.vue +++ b/ui/src/workflow-canvas/icons/mcp-node-icon.vue @@ -1,6 +1,6 @@ diff --git a/ui/src/workflow-canvas/icons/tool-node-icon.vue b/ui/src/workflow-canvas/icons/tool-node-icon.vue new file mode 100644 index 00000000000..c3216abcf41 --- /dev/null +++ b/ui/src/workflow-canvas/icons/tool-node-icon.vue @@ -0,0 +1,6 @@ + + diff --git a/ui/src/workflow-canvas/nodes/tool-custom-node/InputFieldDialog.vue b/ui/src/workflow-canvas/nodes/tool-custom-node/component/FieldSetting.vue similarity index 68% rename from ui/src/workflow-canvas/nodes/tool-custom-node/InputFieldDialog.vue rename to ui/src/workflow-canvas/nodes/tool-custom-node/component/FieldSetting.vue index 161d5d4cded..06739aeb676 100644 --- a/ui/src/workflow-canvas/nodes/tool-custom-node/InputFieldDialog.vue +++ b/ui/src/workflow-canvas/nodes/tool-custom-node/component/FieldSetting.vue @@ -1,49 +1,60 @@