Procházet zdrojové kódy

fix: bug(某些情况下,row类型节点无法删除问题)

肖阳 před 3 roky
rodič
revize
bb342f6ae8
1 změnil soubory, kde provedl 24 přidání a 5 odebrání
  1. 24 5
      src/components/DrawFlow/src/DrawFlow.vue

+ 24 - 5
src/components/DrawFlow/src/DrawFlow.vue

@@ -94,8 +94,29 @@ export default {
           delete i.childNode;
         }
       });
+
+      list = this.shakeDeleteNode(list);
       return list;
     },
+    // 删除没有上级的节点
+    shakeDeleteNode(list) {
+      console.log(selfConfig, "list");
+      let root = JSON.parse(JSON.stringify(list)).filter(i => i.isRoot)[0];
+      let selfConfig = JSON.parse(JSON.stringify(list)).filter(i => !i.isRoot);
+      const ids = list.map(i => i.id);
+      console.log(ids, "ids");
+      let hasNoPidNode = false;
+      // 删除pids没有id的节点
+      selfConfig.forEach(i => {
+        if (i.pids.some(j => !ids.includes(j))) {
+          hasNoPidNode = true;
+          selfConfig = this.deleteNode(selfConfig, i);
+        }
+      });
+      if (root) selfConfig.unshift(root);
+      if (hasNoPidNode) return this.shakeDeleteNode(selfConfig);
+      return selfConfig;
+    },
     /**
      * 初始化 数据私有化
      */
@@ -111,7 +132,6 @@ export default {
     },
     clickSelectBox(nextNode) {
       let { node, selfConfig } = this.getNodeFactory(nextNode);
-      console.log(node, nextNode);
       this.selfConfig = selfConfig.concat(node);
     },
     /**
@@ -192,13 +212,13 @@ export default {
         repickConfig.groupId = node.groupId;
         repickConfig.id = node.id;
         let selfConfig = JSON.parse(JSON.stringify(this.selfConfig));
-        console.log("selfConfigselfConfigselfConfig", selfConfig);
         this.selfConfig = this.deleteNode(selfConfig, node);
         this.repickDeleteArr(repickConfig);
       } else {
         this.deleteColNode(node);
       }
     },
+
     // 删除节点
     deleteNode(selfConfig, node) {
       selfConfig = selfConfig.map(i => i.id !== node.id && i).filter(Boolean);
@@ -243,12 +263,12 @@ export default {
     },
     // 循环遍历删除组下关联节点
     deleteLoop(selfConfig, node, deleteArr) {
-      console.log(selfConfig, node, "selfConfig");
+      // 获取当前节点下所有关联节点
       let currentDeleteArr = selfConfig.filter(i => {
         if (i.isRow) {
           return i.groupId === node.id;
         } else {
-          return i.groupPid === node.id;
+          return i.groupPid === node.id || i.groupPid === node.groupId;
         }
       });
       if (currentDeleteArr.length) {
@@ -275,7 +295,6 @@ export default {
         }
       });
       this.selfConfig = selfConfig;
-      console.log(selfConfig, repickConfig, "groupPid");
     },
     //绘制body
     drawBody(h, node) {