From 6e7dcb7b05eb8f47e5acee99137124bf79e9683f Mon Sep 17 00:00:00 2001 From: ai-business-hql Date: Fri, 6 Jun 2025 17:40:57 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=BE=8E=E5=8C=96api=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E7=9A=84=E5=B7=A5=E4=BD=9C=E6=B5=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ui/src/components/chat/MessageList.tsx | 53 ++++++++++++++++++- .../chat/messages/WorkflowOption.tsx | 46 +++++++++++++++- 2 files changed, 97 insertions(+), 2 deletions(-) diff --git a/ui/src/components/chat/MessageList.tsx b/ui/src/components/chat/MessageList.tsx index 22a48dd..b1f3f77 100644 --- a/ui/src/components/chat/MessageList.tsx +++ b/ui/src/components/chat/MessageList.tsx @@ -199,8 +199,59 @@ export function MessageList({ messages, latestInput, onOptionClick, installedNod } else if (message.metadata?.pendingWorkflow) { const workflow = message.metadata.pendingWorkflow; const optimizedParams = message.metadata.optimizedParams; - app.loadGraphData(workflow); + // 支持不同格式的工作流 + if(workflow.nodes) { + app.loadGraphData(workflow); + } else { + app.loadApiJson(workflow); + // 获取所有节点,并且优化排布 + const node_ids = Object.keys(workflow); + + // 布局参数 + let start_x = 0; + const base_size_x = 250; + const base_size_y = 60; + const param_y = 20; + const align = 60; + const align_y = 50; + const max_size_y = 1000; + + let last_start_x = start_x; + let last_start_y = 0; + let tool_size_y = 0; + + for(const node_id of node_ids) { + const node = app.graph._nodes_by_id[node_id]; + if(node) { + // 检查是否需要换列 + if (tool_size_y > max_size_y) { + last_start_x += base_size_x + align; + tool_size_y = 0; + last_start_y = 0; + } + + // 根据参数计算节点的高度 + const inputCount = node.inputs ? node.inputs.length : 0; + const outputCount = node.outputs ? node.outputs.length : 0; + const widgetCount = node.widgets ? node.widgets.length : 0; + const param_count = Math.max(inputCount, outputCount) + widgetCount; + + const size_y = param_y * param_count + base_size_y; + + // 设置节点大小和位置 + node.size[0] = base_size_x; + node.size[1] = size_y; + node.pos[0] = last_start_x; + node.pos[1] = last_start_y; + + tool_size_y += size_y + align_y; + last_start_y += size_y + align_y; + } + } + } + + // 应用优化参数 for (const [nodeId, nodeName, paramIndex, paramName, value] of optimizedParams) { const widgets = app.graph._nodes_by_id[nodeId].widgets; for (const widget of widgets) { diff --git a/ui/src/components/chat/messages/WorkflowOption.tsx b/ui/src/components/chat/messages/WorkflowOption.tsx index 43a9e17..5a2d88f 100644 --- a/ui/src/components/chat/messages/WorkflowOption.tsx +++ b/ui/src/components/chat/messages/WorkflowOption.tsx @@ -78,7 +78,7 @@ export function WorkflowOption({ content, name = 'Assistant', avatar, latestInpu } } else { for (const node of Object.values(optimizedResult.workflow)) { - nodeTypes.add(node.class_type); + nodeTypes.add((node as any).class_type); } } @@ -151,6 +151,50 @@ export function WorkflowOption({ content, name = 'Assistant', avatar, latestInpu app.loadGraphData(workflow); } else { app.loadApiJson(workflow); + // 获取所有节点,并且优化排布 + const node_ids = Object.keys(workflow); + + // 布局参数 + let start_x = 0; + const base_size_x = 250; + const base_size_y = 60; + const param_y = 20; + const align = 60; + const align_y = 50; + const max_size_y = 1000; + + let last_start_x = start_x; + let last_start_y = 0; + let tool_size_y = 0; + + for(const node_id of node_ids) { + const node = app.graph._nodes_by_id[node_id]; + if(node) { + // 检查是否需要换列 + if (tool_size_y > max_size_y) { + last_start_x += base_size_x + align; + tool_size_y = 0; + last_start_y = 0; + } + + // 根据参数计算节点的高度 + const inputCount = node.inputs ? node.inputs.length : 0; + const outputCount = node.outputs ? node.outputs.length : 0; + const widgetCount = node.widgets ? node.widgets.length : 0; + const param_count = Math.max(inputCount, outputCount) + widgetCount; + + const size_y = param_y * param_count + base_size_y; + + // 设置节点大小和位置 + node.size[0] = base_size_x; + node.size[1] = size_y; + node.pos[0] = last_start_x; + node.pos[1] = last_start_y; + + tool_size_y += size_y + align_y; + last_start_y += size_y + align_y; + } + } } // 应用优化后的参数 [节点id,节点名称,参数id,参数名称,参数默认值]