From 7b8ce4e0ab61b855dc2453ae23011c2c9abfe44d Mon Sep 17 00:00:00 2001
From: yinbangzhong <zhongbangyin@126.com>
Date: 星期二, 06 八月 2024 09:55:34 +0800
Subject: [PATCH] 权限菜单控制

---
 src/store/modules/user/index.ts |    3 ++-
 src/utils/auth.ts               |   11 ++++++++++-
 src/hooks/permission.ts         |   23 +++++++++++++++++------
 3 files changed, 29 insertions(+), 8 deletions(-)

diff --git a/src/hooks/permission.ts b/src/hooks/permission.ts
index 916e3ff..e86bfb7 100644
--- a/src/hooks/permission.ts
+++ b/src/hooks/permission.ts
@@ -1,5 +1,6 @@
-import { RouteLocationNormalized, RouteRecordRaw } from 'vue-router';
-import { useUserStore } from '@/store';
+import { RouteLocationNormalized, RouteRecordRaw } from "vue-router";
+import { useUserStore } from "@/store";
+import { getUserInfo, getUserResources } from "@/utils/auth";
 
 export default function usePermission() {
   const userStore = useUserStore();
@@ -7,8 +8,18 @@
     accessRouter(route: RouteLocationNormalized | RouteRecordRaw) {
       //閬嶅巻userStore.resource
       let isok = false;
+      let user = getUserResources();
+      let jsonObject = {};
+      let resurces: any;
       if (userStore.resources) {
-        userStore.resources.forEach(r => {
+        resurces = userStore.resources;
+      } else {
+        if (user) {
+          resurces = JSON.parse(user);
+        }
+      }
+      if (resurces) {
+        resurces.forEach(r => {
           if ((r.menuType == 0 || r.menuType == 3) && (route.name == r.component || route.path == r.component)) {
             isok = true;
           }
@@ -24,13 +35,13 @@
       }
 
     },
-    findFirstPermissionRoute(_routers: any, role = 'admin') {
+    findFirstPermissionRoute(_routers: any, role = "admin") {
       const cloneRouters = [..._routers];
       while (cloneRouters.length) {
         const firstElement = cloneRouters.shift();
         if (
           firstElement?.meta?.roles?.find((el: string[]) => {
-            return el.includes('*') || el.includes(role);
+            return el.includes("*") || el.includes(role);
           })
         )
           return { name: firstElement.name };
@@ -39,7 +50,7 @@
         }
       }
       return null;
-    },
+    }
     // You can add any rules you want
   };
 }
diff --git a/src/store/modules/user/index.ts b/src/store/modules/user/index.ts
index ca37a8b..245684b 100644
--- a/src/store/modules/user/index.ts
+++ b/src/store/modules/user/index.ts
@@ -5,7 +5,7 @@
   getUserInfo,
   LoginData,
 } from '@/api/user';
-import { setToken, clearToken,setUserInfo } from '@/utils/auth';
+import { setToken, clearToken,setUserInfo,setUserResources } from '@/utils/auth';
 import { removeRouteListener } from '@/utils/route-listener';
 import { UserState } from './types';
 import useAppStore from '../app';
@@ -73,6 +73,7 @@
         };
         this.resources=res.data.resources;
         setUserInfo(JSON.stringify(userInfo));
+        setUserResources(JSON.stringify(this.resources))
       } catch (err) {
         clearToken();
         throw err;
diff --git a/src/utils/auth.ts b/src/utils/auth.ts
index d3f72d2..c92c3cf 100644
--- a/src/utils/auth.ts
+++ b/src/utils/auth.ts
@@ -1,6 +1,7 @@
 const TOKEN_KEY = 'token';
 const Authorization = 'Authorization';
 const UserInfo = 'userInfo';
+const UserResources='userResources'
 
 const isLogin = () => {
   return !!localStorage.getItem(TOKEN_KEY);
@@ -35,4 +36,12 @@
   localStorage.setItem(UserInfo, info);
 };
 
-export { isLogin, getToken, setToken, clearToken,getAuthorization, setAuthorization, getUserInfo, setUserInfo};
+const getUserResources = () => {
+  return localStorage.getItem(UserResources);
+};
+
+const setUserResources = (info: string) => {
+  localStorage.setItem(UserResources, info);
+};
+
+export { isLogin, getToken, setToken, clearToken,getAuthorization, setAuthorization, getUserInfo, setUserInfo,setUserResources,getUserResources};

--
Gitblit v1.8.0