|
@@ -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();
|
|
|
//只把选中的节点移除
|