Bladeren bron

菜单隐藏

ith5 3 maanden geleden
bovenliggende
commit
71e94ff9a9
1 gewijzigde bestanden met toevoegingen van 130 en 104 verwijderingen
  1. 130 104
      src/store/modules/user.js

+ 130 - 104
src/store/modules/user.js

@@ -1,83 +1,109 @@
-import { defineStore } from 'pinia'
-import loginApi from '@/api/login'
-import tool from '@/utils/tool'
-import router from '@/router'
-import webRouter from '@/router/webRouter'
-import { isUndefined } from 'lodash'
-import { homePage } from '@/router/homePageRoutes'
-import { useAppStore, useTagStore, useDictStore } from '@/store'
-
-const useUserStore = defineStore('user', {
+import { defineStore } from "pinia";
+import loginApi from "@/api/login";
+import tool from "@/utils/tool";
+import router from "@/router";
+import webRouter from "@/router/webRouter";
+import { isUndefined } from "lodash";
+import { homePage } from "@/router/homePageRoutes";
+import { useAppStore, useTagStore, useDictStore } from "@/store";
+
+const useUserStore = defineStore("user", {
   state: () => ({
     codes: undefined,
     roles: undefined,
     routers: undefined,
     user: undefined,
-    menus: undefined
+    menus: undefined,
   }),
 
   getters: {
     getState() {
-      return { ...this.$state }
-    }
+      return { ...this.$state };
+    },
   },
 
   actions: {
     setToken(token) {
-      tool.local.set(import.meta.env.VITE_APP_TOKEN_PREFIX, token)
+      tool.local.set(import.meta.env.VITE_APP_TOKEN_PREFIX, token);
     },
 
     getToken() {
-      return tool.local.get(import.meta.env.VITE_APP_TOKEN_PREFIX)
+      return tool.local.get(import.meta.env.VITE_APP_TOKEN_PREFIX);
     },
 
     clearToken() {
-      tool.local.remove(import.meta.env.VITE_APP_TOKEN_PREFIX)
+      tool.local.remove(import.meta.env.VITE_APP_TOKEN_PREFIX);
     },
 
     setInfo(data) {
-      this.$patch(data)
+      this.$patch(data);
     },
 
     resetUserInfo() {
-      this.$reset()
+      this.$reset();
     },
 
     setMenu(data) {
-      const routers = flatAsyncRoutes(filterAsyncRouter(data))
+      const routers = flatAsyncRoutes(filterAsyncRouter(data));
       routers.map((item) => {
         if (isUndefined(item.meta.layout)) {
-          router.addRoute('layout', item)
+          router.addRoute("layout", item);
         } else {
           if (item.meta.layout) {
-            router.addRoute('layout', item)
+            router.addRoute("layout", item);
           } else {
-            router.addRoute(item)
+            router.addRoute(item);
           }
         }
-      })
+      });
     },
 
     requestUserInfo() {
       return new Promise((resolve, reject) => {
         loginApi.getInfo().then(async (response) => {
           if (!response || !response.data) {
-            this.clearToken()
-            await router.push({ name: 'login' })
-            reject(false)
+            this.clearToken();
+            await router.push({ name: "login" });
+            reject(false);
           } else {
-            this.setInfo(response.data)
-            const dictStore = useDictStore()
-            await dictStore.initData()
+            // 如果当前用户不在 VITE_APP_KAIFA 列表中,递归过滤掉"系统工具"菜单
+            let routers = response.data.routers;
+            let kaifaIds = import.meta.env.VITE_APP_KAIFA.split(",");
+            let isKaifa = kaifaIds.includes(String(response.data.user.id));
+            console.log("isKaifa", isKaifa);
+
+            if (!isKaifa) {
+              // 递归过滤函数
+              const filterSystemTool = (routes) => {
+                return routes.filter((item) => {
+                  // 过滤掉标题为"系统工具"的菜单项
+                  if (item.meta && item.meta.title === "系统工具") {
+                    return false;
+                  }
+                  // 递归处理子菜单
+                  if (item.children && item.children.length > 0) {
+                    item.children = filterSystemTool(item.children);
+                  }
+                  return true;
+                });
+              };
+
+              routers = filterSystemTool(routers);
+            }
+            response.data.routers = routers;
+
+            this.setInfo(response.data);
+            const dictStore = useDictStore();
+            await dictStore.initData();
             // homePage.children = webRouter[0].children
-            this.setMenu(this.routers)
-            this.routers = removeButtonMenu(this.routers)
-            this.routers.unshift(homePage)
-            await this.setApp()
-            resolve(response.data)
+            this.setMenu(this.routers);
+            this.routers = removeButtonMenu(this.routers);
+            this.routers.unshift(homePage);
+            await this.setApp();
+            resolve(response.data);
           }
-        })
-      })
+        });
+      });
     },
 
     login(form) {
@@ -85,87 +111,87 @@ const useUserStore = defineStore('user', {
         .login(form)
         .then((r) => {
           if (r.code === 200) {
-            this.setToken(r.data.access_token)
-            return true
+            this.setToken(r.data.access_token);
+            return true;
           } else {
-            return false
+            return false;
           }
         })
         .catch((e) => {
-          console.error(e)
-          return false
-        })
+          console.error(e);
+          return false;
+        });
     },
 
     async logout() {
       // await loginApi.logout()
-      const tagStore = useTagStore()
-      tool.local.remove('tags')
-      tagStore.clearTags()
-      this.clearToken()
-      this.resetUserInfo()
+      const tagStore = useTagStore();
+      tool.local.remove("tags");
+      tagStore.clearTags();
+      this.clearToken();
+      this.resetUserInfo();
     },
 
     async setApp() {
-      const appStore = useAppStore()
+      const appStore = useAppStore();
       const setting =
-        typeof this.user.backend_setting === 'string'
+        typeof this.user.backend_setting === "string"
           ? JSON.parse(this.user.backend_setting)
-          : this.user.backend_setting
-      appStore.toggleMode(setting?.mode ?? appStore.mode)
-      appStore.toggleMenu(setting?.menuCollapse ?? appStore.menuCollapse)
-      appStore.toggleTag(setting?.tag ?? appStore.tag)
-      appStore.toggleRound(setting?.roundOpen ?? appStore.roundOpen)
-      appStore.toggleWs(setting?.ws ?? appStore.ws)
-      appStore.changeMenuWidth(setting?.menuWidth ?? appStore.menuWidth)
-      appStore.changeLayout(setting?.layout ?? appStore.layout)
-      appStore.useSkin(setting?.skin ?? appStore.skin)
-      appStore.changeColor(setting?.color ?? appStore.color)
-      appStore.toggleWater(setting?.waterMark ?? appStore.waterMark)
+          : this.user.backend_setting;
+      appStore.toggleMode(setting?.mode ?? appStore.mode);
+      appStore.toggleMenu(setting?.menuCollapse ?? appStore.menuCollapse);
+      appStore.toggleTag(setting?.tag ?? appStore.tag);
+      appStore.toggleRound(setting?.roundOpen ?? appStore.roundOpen);
+      appStore.toggleWs(setting?.ws ?? appStore.ws);
+      appStore.changeMenuWidth(setting?.menuWidth ?? appStore.menuWidth);
+      appStore.changeLayout(setting?.layout ?? appStore.layout);
+      appStore.useSkin(setting?.skin ?? appStore.skin);
+      appStore.changeColor(setting?.color ?? appStore.color);
+      appStore.toggleWater(setting?.waterMark ?? appStore.waterMark);
       appStore.changeWaterContent(
         setting?.waterContent ?? appStore.waterContent
-      )
-    }
-  }
-})
+      );
+    },
+  },
+});
 
 //路由扁平化
 const flatAsyncRoutes = (routes, breadcrumb = []) => {
-  let res = []
+  let res = [];
   routes.forEach((route) => {
-    const tmp = { ...route }
+    const tmp = { ...route };
     if (tmp.children) {
-      let childrenBreadcrumb = [...breadcrumb]
-      childrenBreadcrumb.push(route)
-      let tmpRoute = { ...route }
-      tmpRoute.meta.breadcrumb = childrenBreadcrumb
-      delete tmpRoute.children
-      res.push(tmpRoute)
-      let childrenRoutes = flatAsyncRoutes(tmp.children, childrenBreadcrumb)
+      let childrenBreadcrumb = [...breadcrumb];
+      childrenBreadcrumb.push(route);
+      let tmpRoute = { ...route };
+      tmpRoute.meta.breadcrumb = childrenBreadcrumb;
+      delete tmpRoute.children;
+      res.push(tmpRoute);
+      let childrenRoutes = flatAsyncRoutes(tmp.children, childrenBreadcrumb);
       childrenRoutes.map((item) => {
-        res.push(item)
-      })
+        res.push(item);
+      });
     } else {
-      let tmpBreadcrumb = [...breadcrumb]
-      tmpBreadcrumb.push(tmp)
-      tmp.meta.breadcrumb = tmpBreadcrumb
-      res.push(tmp)
+      let tmpBreadcrumb = [...breadcrumb];
+      tmpBreadcrumb.push(tmp);
+      tmp.meta.breadcrumb = tmpBreadcrumb;
+      res.push(tmp);
     }
-  })
-  return res
-}
+  });
+  return res;
+};
 
-const views = import.meta.glob('../../views/**/**.vue')
-const empty = import.meta.glob('../../layout/empty.vue')
+const views = import.meta.glob("../../views/**/**.vue");
+const empty = import.meta.glob("../../layout/empty.vue");
 
 // 菜单转换路由
 const filterAsyncRouter = (routerMap) => {
-  const accessedRouters = []
+  const accessedRouters = [];
   routerMap.forEach((item) => {
-    if (item.meta.type !== 'B') {
-      if (item.meta.type === 'I') {
-        item.meta.url = item.path
-        item.path = `/maIframe/${item.name}`
+    if (item.meta.type !== "B") {
+      if (item.meta.type === "I") {
+        item.meta.url = item.path;
+        item.path = `/maIframe/${item.name}`;
       }
 
       const route = {
@@ -174,26 +200,26 @@ const filterAsyncRouter = (routerMap) => {
         hidden: item.hidden === 1,
         meta: item.meta,
         children: item.children ? filterAsyncRouter(item.children) : null,
-        component: views[`../../views/${item.component}.vue`]
-      }
-      accessedRouters.push(route)
+        component: views[`../../views/${item.component}.vue`],
+      };
+      accessedRouters.push(route);
     }
-  })
-  return accessedRouters
-}
+  });
+  return accessedRouters;
+};
 
 // 去除按钮菜单
 const removeButtonMenu = (routers) => {
-  let handlerAfterRouters = []
+  let handlerAfterRouters = [];
   routers.forEach((item) => {
-    if (item.meta.type !== 'B' && !item.meta.hidden) {
-      let route = item
+    if (item.meta.type !== "B" && !item.meta.hidden) {
+      let route = item;
       if (item.children && item.children.length > 0) {
-        route.children = removeButtonMenu(item.children)
+        route.children = removeButtonMenu(item.children);
       }
-      handlerAfterRouters.push(route)
+      handlerAfterRouters.push(route);
     }
-  })
-  return handlerAfterRouters
-}
-export default useUserStore
+  });
+  return handlerAfterRouters;
+};
+export default useUserStore;