Bläddra i källkod

更新 权限树形结构优化

wzh 3 år sedan
förälder
incheckning
faeb1c671c
2 ändrade filer med 45 tillägg och 16 borttagningar
  1. 11 5
      src/store/index.js
  2. 34 11
      src/views/authManage/addRole.vue

+ 11 - 5
src/store/index.js

@@ -16,6 +16,7 @@ const store = createStore({
     basePermissionData: [],
     userPermission: [],
     menuData: [],
+    baseParentNodes: [],
   },
   getters: {},
   mutations: {
@@ -40,21 +41,26 @@ const store = createStore({
     setMenuData(state, data) {
       state.menuData = data;
     },
+    setBaseParentNodes(state, data) {
+      state.baseParentNodes = data;
+    },
   },
   actions: {
     GetBasePermissionData({ commit }, loginAccountId) {
       return new Promise((resolve, reject) => {
         api.getPermisiionData({ loginAccountId }).then((e) => {
-          function exchange(data) {
+          let data = e.data.result;
+          let arr = [];
+          function getParentNodes(data) {
             for (let i of data) {
-              i.status = true;
               if (i.children.length) {
-                exchange(i.children);
+                arr.push(i.code);
+                getParentNodes(i.children);
               }
             }
-            return data;
           }
-          let data = exchange(e.data.result);
+          getParentNodes(data);
+          commit("setBaseParentNodes", arr);
           commit("setBasePermissionData", data);
         });
       });

+ 34 - 11
src/views/authManage/addRole.vue

@@ -27,7 +27,6 @@
       :props="defaultProps"
       :default-checked-keys="checkedNodes"
       style="display: flex; justify-content: space-between"
-      @check="getTree"
     />
     <div class="df aic jcfe mt50">
       <el-button type="primary" @click="addRole">{{
@@ -122,14 +121,8 @@ const defaultProps = {
 };
 
 let basePermissionData = computed(() => store.state.basePermissionData);
-let permissionCodes = ref([]);
+let baseParentNodes = computed(() => store.state.baseParentNodes);
 let checkedNodes = ref([]);
-function getTree(checked, checkedKeys) {
-  permissionCodes.value = [
-    ...checkedKeys.checkedKeys,
-    ...checkedKeys.halfCheckedKeys,
-  ];
-}
 
 async function getRoleDetail(roleId) {
   let res = await api.getRoleDetail({
@@ -137,20 +130,50 @@ async function getRoleDetail(roleId) {
     roleId,
   });
   if (res.data.status == 0) {
-    let { code, roleName, permission } = res.data.result;
+    let { code, roleName, permission, cargoLimit, proxyLimit } =
+      res.data.result;
     ruleForm.value = {
       roleCode: code,
       roleName,
     };
-    checkedNodes.value = permission.split(",");
+    let c = cargoLimit.split(",");
+    let cargoLimitArr = [];
+    for (let i of c) {
+      cargoLimitArr.push(`CARGO_${i}`);
+    }
+    let p = proxyLimit.split(",");
+    let proxyLimitArr = [];
+    for (let i of p) {
+      proxyLimitArr.push(`PROXY_${i}`);
+    }
+    let arr = permission.split(",");
+    baseParentNodes.value.forEach((item) => {
+      for (let i of arr) {
+        if (i == item) {
+          let index = arr.indexOf(i);
+          arr.splice(index, 1);
+        }
+      }
+    });
+    checkedNodes.value = [...arr, ...cargoLimitArr, ...proxyLimitArr];
   }
 }
 
 async function addRole() {
+  let fullChecked = treeRef.value.getCheckedNodes();
+  let halfCHecked = treeRef.value.getHalfCheckedNodes();
+  let permissionCodes = [];
+  for (let i of fullChecked) {
+    permissionCodes.push(i.code);
+  }
+  for (let i of halfCHecked) {
+    permissionCodes.push(i.code);
+  }
+
   let postData = {
     loginAccountId: loginAccountId.value,
     ...ruleForm.value,
-    permissionCodes: permissionCodes.value.join(","),
+    permissionCodes: permissionCodes.join(","),
   };
   if (roleId.value) {
     postData.roleId = roleId.value;