From 8e35b03ede1f4adf2842cc233b1c9cd915f75519 Mon Sep 17 00:00:00 2001 From: shaohuzhang1 Date: Thu, 9 Apr 2026 17:28:35 +0800 Subject: [PATCH] fix: [Intelligent Agent] Tool nodes and intelligent agent nodes in the canvas cannot be copied and pasted using Ctrl+C/V --- ui/src/workflow/common/data.ts | 37 ++++++++++++++++++++++++++++++ ui/src/workflow/common/shortcut.ts | 10 +++++--- 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/ui/src/workflow/common/data.ts b/ui/src/workflow/common/data.ts index 34f7861c426..c6120fd60df 100644 --- a/ui/src/workflow/common/data.ts +++ b/ui/src/workflow/common/data.ts @@ -1,6 +1,7 @@ import { WorkflowKind } from './../../enums/application' import { WorkflowType, WorkflowMode } from '@/enums/application' import { t } from '@/locales' +import call$ from 'dingtalk-jsapi/api/biz/telephone/call' export const startNode = { id: WorkflowType.Start, @@ -1022,6 +1023,42 @@ export const getMenuNodes = (workflowMode: WorkflowMode) => { return toolLoopMenuNodes } } +export const workflowModelDict: any = { + [WorkflowMode.Application]: (node: any) => { + return ( + ['application-node', 'tool-workflow-lib-node', 'tool-lib-node'].includes(node.type) && + node?.properties?.node_data?.tool_type !== 'DATA_SOURCE' + ) + }, + [WorkflowMode.ApplicationLoop]: (node: any) => { + return ( + ['application-node', 'tool-workflow-lib-node', 'tool-lib-node'].includes(node.type) && + node?.properties?.node_data?.tool_type !== 'DATA_SOURCE' + ) + }, + [WorkflowMode.Knowledge]: (node: any) => { + console.log(['tool-workflow-lib-node', 'tool-lib-node'].includes(node)) + return ['tool-workflow-lib-node', 'tool-lib-node'].includes(node.type) + }, + [WorkflowMode.KnowledgeLoop]: (node: any) => { + return ( + ['tool-workflow-lib-node', 'tool-lib-node'].includes(node.type) && + node?.properties?.node_data?.tool_type !== 'DATA_SOURCE' + ) + }, + [WorkflowMode.Tool]: (node: any) => { + return ( + ['tool-workflow-lib-node', 'tool-lib-node'].includes(node.type) && + node?.properties?.node_data?.tool_type !== 'DATA_SOURCE' + ) + }, + [WorkflowMode.ToolLoop]: (node: any) => { + return ( + ['tool-workflow-lib-node', 'tool-lib-node'].includes(node.type) && + node?.properties?.node_data?.tool_type !== 'DATA_SOURCE' + ) + }, +} /** * 工具配置数据 diff --git a/ui/src/workflow/common/shortcut.ts b/ui/src/workflow/common/shortcut.ts index 1c59bfd581f..504ad094b95 100644 --- a/ui/src/workflow/common/shortcut.ts +++ b/ui/src/workflow/common/shortcut.ts @@ -4,7 +4,7 @@ import { type GraphModel } from '@logicflow/core' import { MsgSuccess, MsgError, MsgConfirm } from '@/utils/message' import { WorkflowType } from '@/enums/application' import { t } from '@/locales' -import { getMenuNodes } from './data' +import { getMenuNodes, workflowModelDict } from './data' let selected: any | null = null function translationNodeData(nodeData: any, distance: any) { @@ -71,12 +71,16 @@ export function initDefaultShortcut(lf: LogicFlow, graph: GraphModel) { MsgSuccess(t('workflow.tip.copyError')) return false } + const paste_node = () => { if (!keyboardOptions?.enabled) return true if (graph.textEditElement) return true - const menus = getMenuNodes(lf.graphModel.get_provide(null, null).workflowMode) + const workflowMode = lf.graphModel.get_provide(null, null).workflowMode + const menus = getMenuNodes(workflowMode) const nodes = menus?.flatMap((m: any) => m.list).map((n) => n.type) - selected.nodes = selected.nodes.filter((n: any) => nodes?.includes(n.type)) + selected.nodes = selected.nodes.filter( + (n: any) => nodes?.includes(n.type) || workflowModelDict[workflowMode](n), + ) if (selected && (selected.nodes || selected.edges)) { lf.clearSelectElements() const addElements = lf.addElements(selected, CHILDREN_TRANSLATION_DISTANCE)