78 lines
2.5 KiB
TypeScript
78 lines
2.5 KiB
TypeScript
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;
|
||
};
|