Ver código fonte

完善角色权限分配

汪钰 3 anos atrás
pai
commit
2f04d5b43f

+ 2 - 2
ele-admin-template/package-lock.json

@@ -2032,7 +2032,7 @@
       "dependencies": {
         "@vue/vue-loader-v15": {
           "version": "npm:vue-loader@15.10.1",
-          "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.10.1.tgz",
+          "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-15.10.1.tgz",
           "integrity": "sha512-SaPHK1A01VrNthlix6h1hq4uJu7S/z0kdLUb6klubo738NeQoLbS6V9/d8Pv19tU0XdQKju3D1HSKuI8wJ5wMA==",
           "dev": true,
           "requires": {
@@ -2045,7 +2045,7 @@
           "dependencies": {
             "hash-sum": {
               "version": "1.0.2",
-              "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz",
+              "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz",
               "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==",
               "dev": true
             }

+ 9 - 10
ele-admin-template/src/api/system/role/index.js

@@ -30,8 +30,8 @@ export async function putRoles(params) {
  * @param params 查询条件
  */
 export async function listRoles(params) {
-  let par = new URLSearchParams(params)
-  const res = await request.get(`/sys/role/page?`+par, {});
+  let par = new URLSearchParams(params);
+  const res = await request.get(`/sys/role/page?` + par, {});
   if (res.data.code == 0) {
     return res.data.data;
   }
@@ -78,7 +78,6 @@ export async function removeRole(id, f) {
     });
   }
 
-  console.log(res);
   if (res.data.code == 0) {
     return res.data.message;
   }
@@ -103,9 +102,9 @@ export async function removeRoles(data) {
  * 获取角色分配的菜单
  * @param roleId 角色id
  */
-export async function listRoleMenus(roleId) {
-  const res = await request.get('/system/role-menu/' + roleId);
-  if (res.data.code === 0) {
+export async function listRoleMenus(id) {
+  const res = await request.get(`/sys/role/getByRoleId/${id}`);
+  if (res.data.code == 0) {
     return res.data.data;
   }
   return Promise.reject(new Error(res.data.message));
@@ -116,10 +115,10 @@ export async function listRoleMenus(roleId) {
  * @param roleId 角色id
  * @param data 菜单id集合
  */
-export async function updateRoleMenus(roleId, data) {
-  const res = await request.put('/system/role-menu/' + roleId, data);
-  if (res.data.code === 0) {
-    return res.data.message;
+export async function updateRoleMenus(data) {
+  const res = await request.post('/sys/role/ResourceGrant', data);
+  if (res.data.code == 0) {
+    return res.data;
   }
   return Promise.reject(new Error(res.data.message));
 }

+ 39 - 24
ele-admin-template/src/views/system/role/components/role-auth.vue

@@ -15,17 +15,17 @@
         ref="tree"
         show-checkbox
         :data="authData"
-        node-key="menuId"
+        node-key="id"
         :default-expand-all="true"
-        :props="{ label: 'title' }"
+        :props="{ label: 'name' }"
         :default-checked-keys="checkedKeys"
       >
-        <template v-slot="{ data }">
+        <!-- <template v-slot="{ data }">
           <span>
             <i :class="data.icon"></i>
-            <span> {{ data.title }}</span>
+            <span> {{ data.name }}</span>
           </span>
-        </template>
+        </template> -->
       </el-tree>
     </el-scrollbar>
     <template v-slot:footer>
@@ -39,6 +39,7 @@
 
 <script>
   import { listRoleMenus, updateRoleMenus } from '@/api/system/role';
+  import { listMenus } from '@/api/system/menu';
 
   export default {
     props: {
@@ -56,35 +57,44 @@
         // 提交状态
         loading: false,
         // 角色权限选中的keys
-        checkedKeys: []
+        checkedKeys: [],
+        ids: []
       };
     },
     methods: {
+      async getMenus() {
+        this.authData = [];
+        const res = await listMenus();
+        this.authData = this.$util.toTreeData({
+          data: res,
+          idKey: 'id',
+          pidKey: 'parentId'
+        });
+        // 回显选中的数据;
+        const cks = [];
+        this.$util.eachTreeData(this.authData, (d) => {
+          let falg = this.ids.indexOf(d.id) >= 0; // 检查是否选中该数据; 选中则保留flg=
+          if (falg && !d.children?.length) {
+            cks.push(d.id);
+          }
+        });
+        this.checkedKeys = cks;
+      },
       /* 查询权限数据 */
       query() {
-        this.authData = [];
-        this.checkedKeys = [];
         if (!this.data) {
           return;
         }
         this.authLoading = true;
-        listRoleMenus(this.data.roleId)
+        listRoleMenus(this.data.id)
           .then((data) => {
+            this.ids = [];
+            if (data && data.length > 0) {
+              this.ids = data.map((item) => item.resourceId);
+            }
+            this.getMenus();
             this.authLoading = false;
             // 转成树形结构的数据
-            this.authData = this.$util.toTreeData({
-              data: data,
-              idKey: 'menuId',
-              pidKey: 'parentId'
-            });
-            // 回显选中的数据
-            const cks = [];
-            this.$util.eachTreeData(this.authData, (d) => {
-              if (d.checked && !d.children?.length) {
-                cks.push(d.menuId);
-              }
-            });
-            this.checkedKeys = cks;
           })
           .catch((e) => {
             this.authLoading = false;
@@ -97,10 +107,15 @@
         const ids = this.$refs.tree
           .getCheckedKeys()
           .concat(this.$refs.tree.getHalfCheckedKeys());
-        updateRoleMenus(this.data.roleId, ids)
+        console.log(ids);
+
+        updateRoleMenus({
+          roleId: this.data.id,
+          resourceIds: ids
+        })
           .then((msg) => {
             this.loading = false;
-            this.$message.success(msg);
+            this.$message.success(msg.data);
             this.updateVisible(false);
           })
           .catch((e) => {

+ 2 - 2
ele-admin-template/src/views/system/role/index.vue

@@ -53,14 +53,14 @@
           >
             修改
           </el-link>
-          <!-- <el-link
+          <el-link
             type="primary"
             :underline="false"
             icon="el-icon-finished"
             @click="openAuth(row)"
           >
             分配权限
-          </el-link> -->
+          </el-link>
           <el-popconfirm
             class="ele-action"
             title="确定要删除此角色吗?"