LogicFlow icon indicating copy to clipboard operation
LogicFlow copied to clipboard

[Bug Report]: 新创建的dynamic-group中的孩子节点会被之前创建的dynamic-group节点影响

Open xiaozhaoCcz opened this issue 1 year ago • 1 comments

发生了什么?

Image Image

function confirmDialog() {
  const _node = lf.value.getNodeModelById(jobNodeEditId.value);
  const _jobInfo = jobInfoList.value.find(
    (e: any) => e.id === jobSelectId.value
  ) as any;

  // const position =
  const nodeInfo = {
    width: _node.width,
    height: _node.height,
    x: _node.x,
    y: _node.y,
  };

  console.log(nodeInfo);

  const graphModel = lf.value.graphModel;
  if (_jobInfo.jobType === 2) {
    //新增任务组
    let data = {} as any;
    await JobInfoAPI.getJobCompose(jobSelectId.value, 1).then(
      (res) => (data = res)
    );
    // 后端返回的代码
    const jobNode = data.jobNode;
    const newNodes = data.nodes;
    const newEdges = data.edges;
    newNodes.push(jobNode);

    // await addJobNodes(newNodes, graphModel, newEdges);

    newNodes.forEach((node) => {
      // 直接新增节点,dynamic-group中的child节点是空的???
      graphModel.addNode(generateNode(node));
    });
    // 重新设置任务组的孩子节点
    newNodes.forEach((n) => {
      const node = lf.value.getNodeModelById(n.id);
      if (n.nodeType === "dynamic-group") {
        JSON.parse(n.children).forEach((id: any) => node.addChild(id));
      }
    });
    // 添加新边
    newEdges.forEach((e) => {
      graphModel.addEdge(generateEdge(e));
    });

    const pNode = lf.value.getNodeModelById(jobNode.id);
    graphModel.moveNode2Coordinate(
      [jobNode.id],
      nodeInfo.x - nodeInfo.width / 2 + pNode.width / 2,
      nodeInfo.y - nodeInfo.height / 2 + pNode.height / 2
    );
    graphModel.deleteNode(_node.id);
  } else {
    _node.setProperty("jobId", jobSelectId.value);
    _node.updateText(_jobInfo.jobDesc);
  }
  cancelDialog();
}
function generateNode(node: any) {
  return {
    id: node.id,
    text: node.jobName,
    type: node.nodeType,
    x: node.nodePositionX,
    y: node.nodePositionY,
    properties: JSON.parse(node.properties),
    children: node.children != null ? JSON.parse(node.children) : [],
  };
}

function generateEdge(edge: any) {
  return {
    sourceNodeId: edge.fromNodeId,
    targetNodeId: edge.endNodeId,
    type: "polyline",
  };
}

logicflow/core版本

2.0.10

logicflow/extension版本

2.0.14

logicflow/engine版本

No response

浏览器&环境

No response

xiaozhaoCcz avatar Jan 20 '25 14:01 xiaozhaoCcz

lf.addelements 替换 graphModel.addNode 试试呢,不行的话最好弄个完整的可复现示例出来

ZivvW avatar Jan 21 '25 03:01 ZivvW