Explorar el Código

分配节点树,以增量的形式添加

gangyj hace 2 años
padre
commit
a4c487d77a
Se han modificado 1 ficheros con 59 adiciones y 9 borrados
  1. 59 9
      src/components/tree-tree/main.vue

+ 59 - 9
src/components/tree-tree/main.vue

@@ -91,15 +91,55 @@ export default {
 
   methods:{
     addTree(){
-      //console.log(this.$refs.leftTree.getCheckedNodes())
-      let allTree = JSON.parse(JSON.stringify(this.leftTreeData));
-
-      //把半选和选中的数组key合并
-      let keys = this.$refs.leftTree.getCheckedKeys().concat(this.$refs.leftTree.getHalfCheckedKeys());
-      //console.log(keys,'keys');
-      //console.log(allTree,'allTree');
-      this.getRightTree(allTree,keys);
-      this.rightTreeData = allTree;
+      if(this.rightTreeData.length < 1){
+        //直接把左边勾选的树复制到右侧
+
+        //console.log(this.$refs.leftTree.getCheckedNodes())
+        let allTree = JSON.parse(JSON.stringify(this.leftTreeData));
+
+        //把半选和选中的数组key合并
+        let keys = this.$refs.leftTree.getCheckedKeys().concat(this.$refs.leftTree.getHalfCheckedKeys());
+        //console.log(keys,'keys');
+        //console.log(allTree,'allTree');
+        this.getRightTree(allTree,keys);
+        this.rightTreeData = allTree;
+      }else{
+        //只增加右侧树没有的节点,不会覆盖右侧树多余的节点
+
+        let checkNodes = this.$refs.leftTree.getCheckedNodes(false,true);
+        //console.log(checkNodes)
+        let rIdMap = new Map();
+        checkNodes.forEach((data)=>{
+          rIdMap.set(data.id,data)
+        })
+
+        let lIdSet = new Set();
+        this.getRightTreeData(lIdSet,this.rightTreeData);
+
+        //在右侧id减去左侧有的id,剩下的就是新增的id
+        lIdSet.forEach((id)=>{
+          rIdMap.delete(id);
+        })
+
+        //console.log(rIdSet)
+        let addMap = new Map();
+        rIdMap.forEach((data)=>{
+          if(data.parentId != '0'){
+            //在左侧树能找到父节点的,新增
+            let lNode = this.$refs.rightTree.getNode(data.parentId);
+            if(lNode){
+              addMap.set(data,lNode.data.id);
+            }
+          }
+        })
+
+        //console.log(addMap)
+        addMap.forEach((value,key)=>{
+          this.$refs.rightTree.append(key,value);
+        })
+
+      }
+      
       this.$emit('onAddTree',this.rightTreeData);
     },
     getRightTree(arr,keys){
@@ -129,6 +169,16 @@ export default {
         }
       }
     },
+
+    getRightTreeData(set,arr){
+      arr.forEach((data)=>{
+        set.add(data.id);
+        if(data.children && data.children.length){
+          this.getRightTreeData(set,data.children);
+        }
+      })
+    },
+
     delTree(){
       let delNodes = this.$refs.rightTree.getCheckedNodes();
       //只把选中的节点移除