import { RouteRecordRaw } from "vue-router";
//privateRoutes 前端配置好的JS菜单,权限控制由前端控制,【后端省事】
import { constantRoutes, privateRoutes } from "@/router";
import { store } from "@/store";
import router from "@/router";import MenuAPI, { type RouteVO } from "@/api/system/menu";
import { MenuInfo } from "@/api/auth";
const modules = import.meta.glob("../../views/**/**.vue");
const Layout = () => import("@/layout/index.vue");const menuList = useStorage<MenuInfo[]>("menuList", []);export const usePermissionStore = defineStore("permission", () => {// 储所有路由,包括静态路由和动态路由const routes = ref<RouteRecordRaw[]>([]);// 混合模式左侧菜单路由const mixedLayoutLeftRoutes = ref<RouteRecordRaw[]>([]);// 路由是否加载完成const isRoutesLoaded = ref(false);// 筛选出有权限的菜单const filterPrivateRoutes = ref<RouteRecordRaw[]>([]);function generateRoutes() {return new Promise<RouteRecordRaw[]>((resolve, reject) => {console.log("menuList", menuList);//过滤出有权限的菜单privateRoutes.forEach((item) => {// code 是新增的字段,不好定义VO,没办法做到 IDEA 不提示红色【不影响使用】if (menuList.value.find((p) => p.Code === item.code)) {console.log("item.code", item.code);filterPrivateRoutes.value.push(item);}});console.log("filterPrivateRoutes", filterPrivateRoutes.value);//要测试时再放开//routes.value = [...constantRoutes, ...privateRoutes];routes.value = [...constantRoutes, ...filterPrivateRoutes.value];isRoutesLoaded.value = true;resolve(privateRoutes);//不从服务器获取// MenuAPI.getRoutes()// .then((data) => {// const dynamicRoutes = parseDynamicRoutes(data);// routes.value = [...constantRoutes, ...dynamicRoutes, ...privateRoutes];// //routes.value = [...constantRoutes, ...privateRoutes]; //去掉 dynamicRoutes 隐藏 原始菜单// isRoutesLoaded.value = true;// resolve(dynamicRoutes);// })// .catch((error) => {// reject(error);// });});}
Vue 根据权限过滤菜单
本文来自博客园,作者:VipSoft 转载请注明原文链接:https://www.cnblogs.com/vipsoft/p/19053185
