deploy-ease-platform/frontend/src/pages/Workflow/Design/utils/nodeUtils.ts
dengqichen 2c66fed29a 1
2025-10-20 14:54:19 +08:00

78 lines
2.5 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import {Graph} from '@antv/x6';
import {convertPortConfig} from '../constants';
/**
* 添加节点到图形
* @param isNew 是否为新节点
* @param graph X6 Graph实例
* @param currentNodeDefinition 工作流节点定义
* @param allNodeDefinitions 工作流节点定义列表
* @param position 新节点的位置(可选)
* @returns 创建的节点实例
*/
export const addNodeToGraph = (
isNew: boolean,
graph: Graph,
currentNodeDefinition: any,
allNodeDefinitions: any,
position?: { x: number; y: number }
) => {
let nodeDefinition = allNodeDefinitions.find((def: any) => def.nodeType === currentNodeDefinition.nodeType);
if (!nodeDefinition) {
console.error('找不到节点定义:', currentNodeDefinition.nodeType);
return null;
}
// 合并UI变量使用节点定义中的完整配置但保留保存数据中的位置信息
let uiVariables = isNew
? nodeDefinition.uiVariables
: {
...nodeDefinition.uiVariables, // 完整的UI配置
...currentNodeDefinition.uiVariables // 保存的位置信息(如果有的话)
};
// 根据形状类型设置正确的 shape
let shape = 'rect'; // 默认使用矩形
if (uiVariables.shape === 'circle') {
shape = 'circle';
} else if (uiVariables.shape === 'diamond') {
shape = 'polygon';
}
// 创建节点配置
const nodeConfig: any = {
inherit: 'rect',
width: uiVariables.size.width,
height: uiVariables.size.height,
attrs: {
body: {
...uiVariables.style,
...(uiVariables.shape === 'diamond' ? {
refPoints: '0,10 10,0 20,10 10,20',
} : {})
},
label: {
text: isNew ? nodeDefinition.nodeName : currentNodeDefinition.nodeName
},
},
shape,
nodeType: isNew ? nodeDefinition.nodeType : currentNodeDefinition.nodeType,
nodeCode: nodeDefinition.nodeCode,
ports: convertPortConfig(uiVariables.ports)
};
// 为还原的节点设置ID保持与保存数据的一致性
if (!isNew && currentNodeDefinition.id) {
nodeConfig.id = currentNodeDefinition.id;
}
const nodePosition = isNew ? position : currentNodeDefinition.uiVariables?.position;
if (nodePosition) {
Object.assign(nodeConfig, nodePosition);
}
console.log('创建节点配置:', nodeConfig);
const node = graph.addNode(nodeConfig);
return node;
};