Sean преди 3 месеца
родител
ревизия
97d7daa983
променени са 1 файла, в които са добавени 68 реда и са изтрити 5 реда
  1. 68 5
      src/views/role/roleList.vue

+ 68 - 5
src/views/role/roleList.vue

@@ -68,6 +68,7 @@
                 :default-checked-keys="checkedKeys"
                 :props="defaultProps">
               </el-tree>
+              <!--没有被选中的父级在halfCheckedNodes,halfCheckedKeys属性中-->
             </div>
           </el-form-item>
           <input type="hidden" v-model="form.rule" />
@@ -272,10 +273,24 @@ export default {
 
     //4.添加 start ------------------------------------------------------------>
     addData(){
-      //获取选中的节点
+      this.form.id = this.editId;
+      //半选的节点
+      let supplement = [];
+      let allKeys = this.$refs.tree.getHalfCheckedNodes();
+      if(allKeys.length > 0){
+        for(let i = 0; i < allKeys.length; i++){
+          supplement.push(allKeys[i].id);
+        }
+      }
+      console.log(supplement)
+      //选中的节点
       let checkedArr = this.$refs.tree.getCheckedKeys();
       this.form.rule = checkedArr;
-      
+      console.log(checkedArr)
+      //合并节点
+      this.form.rule = [...new Set([...supplement, ...checkedArr])];
+      console.log(this.form.rule)
+      //提交数据
       this.$refs.form.validate(valid => {
         if (valid) {
           this.$store.dispatch('userRole/addRole',this.form).then(res=> {
@@ -333,9 +348,24 @@ export default {
     //提交编辑
     editData(){
       this.form.id = this.editId;
-      //获取选中的节点
+      //半选的节点
+      let supplement = [];
+      let allKeys = this.$refs.tree.getHalfCheckedNodes();
+      if(allKeys.length > 0){
+        for(let i = 0; i < allKeys.length; i++){
+          supplement.push(allKeys[i].id);
+        }
+      }
+      console.log(supplement)
+      //选中的节点
       let checkedArr = this.$refs.tree.getCheckedKeys();
       this.form.rule = checkedArr;
+      console.log(checkedArr)
+      //合并节点
+      this.form.rule = [...new Set([...supplement, ...checkedArr])];
+      console.log(this.form.rule)
+
+      //提交数据
       this.$refs.form.validate(valid => {
         if (valid) {
           this.$store.dispatch('userRole/updateRole',this.form).then(res=> {
@@ -354,10 +384,43 @@ export default {
           })
         }
       })
-      
-    }
+    },
     //编辑 end ------------------------------------------------------------>
 
+    //5.tree start ------------------------------------------------------------>
+    checkChange(data) {
+      const node = this.$refs.tree.getNode(data.id);
+      this.setNode(node);
+    },
+    setNode(node) {
+      console.log(node, "node");
+      if (node.checked) {
+        //如果当前是选中checkbox,则递归设置父节点和父父节点++选中
+        this.setParentNode(node);
+      } else {
+        //当前是取消选中,将所有子节点都取消选中
+        this.setChildenNode(node);
+      }
+    },
+    setParentNode(node) {
+      if (node.parent) {
+        for (const key in node) {
+          if (key === "parent") {
+            node[key].checked = true;
+            this.setParentNode(node[key]);
+          }
+        }
+      }
+    },
+    setChildenNode(node) {
+      let len = node.childNodes.length;
+      for (let i = 0; i < len; i++) {
+        node.childNodes[i].checked = false;
+        this.setChildenNode(node.childNodes[i]);
+      }
+    },
+    //5.tree end ------------------------------------------------------------>
+
   },
   mounted(){
     //获取页面列表