From d0c378489fb96ed691b8c54d36c2515c529116f2 Mon Sep 17 00:00:00 2001
From: yijiusmile <253281376@qq.com>
Date: 星期二, 09 三月 2021 00:56:34 +0800
Subject: [PATCH] 设置权限时,选中子部门自动选择父部门

---
 src/views/febs/system/user/Edit.vue |   32 +++++++++++++++++++++++++++++++-
 1 files changed, 31 insertions(+), 1 deletions(-)

diff --git a/src/views/febs/system/user/Edit.vue b/src/views/febs/system/user/Edit.vue
index edaedd8..96c4683 100644
--- a/src/views/febs/system/user/Edit.vue
+++ b/src/views/febs/system/user/Edit.vue
@@ -66,13 +66,14 @@
         <el-tree
           ref="deptTree"
           :data="deptTree"
-          :check-strictly="false"
+          :check-strictly="true"
           :default-checked-keys="user.deptIdsArr"
           show-checkbox
           accordion
           node-key="id"
           highlight-current
           style="border: 1px solid #DCDFE6;border-radius: 3px;padding: 6px;"
+          @check="checkeTree"
         />
       </el-form-item>
       <el-form-item :label="$t('table.user.status')" prop="status">
@@ -256,6 +257,35 @@
     close() {
       this.$emit('close')
     },
+    // 选中子节点,默认选中父节点
+    checkeTree(data) {
+      let thisNode = this.$refs.deptTree.getNode(data.id) // 获取当前节点
+      const keys = this.$refs.deptTree.getCheckedKeys() // 获取已勾选节点的key值
+      if (thisNode.checked) { // 当前节点若被选中
+        // if (thisNode.data.id !== '1') {
+        //   this.checkAllChild(thisNode, keys)
+        // }
+        for (let i = thisNode.level; i > 1; i--) { // 判断是否有父级节点
+          if (!thisNode.parent.checked) { // 父级节点未被选中,则将父节点替换成当前节点,往上继续查询,并将此节点key存入keys数组
+            thisNode = thisNode.parent
+            keys.push(thisNode.data.id)
+          }
+        }
+      }
+      this.$refs.deptTree.setCheckedKeys(keys) // 将所有keys数组的节点全选中
+    },
+    checkAllChild(data, keys) {
+      if (data.childNodes.length === 0) {
+        return
+      } else {
+        for (let i = 0; i < data.childNodes.length; i++) {
+          if (!data.childNodes[i].checked) {
+            keys.push(data.childNodes[i].data.id)
+          }
+          this.checkAllChild(data.childNodes[i], keys)
+        }
+      }
+    },
     submitForm() {
       this.$refs.form.validate((valid) => {
         if (valid) {

--
Gitblit v1.8.0