Vue3 + Vite + Vue Router 4后端返回路由配置动态路由权限管理
25-04-07 05:15
902
0
动态路由
// 路由递归处理 const AllRouter = import.meta.glob("@/views/**/*.vue"); interface RouterItem { path: string; name: string; component: () => any; children?: RouterItem[]; meta: { title: string; icon: string; }; } const routerFormat = (routerList: any): RouterItem[] => { if (!routerList || !Array.isArray(routerList)) return []; return routerList.map((item: any) => { return { ...item, component: AllRouter[`/src/views/${item["component"]}`], children: routerFormat(item["children"]) }; }); }; // 动态路由挂载 const addDynamicRoutes = (layoutRoute: RouteRecordRaw | undefined, page: RouteLocationNormalizedLoaded) => { const newRouteStr = localStorage.getItem("routerList"); if (layoutRoute && newRouteStr && layoutRoute.children!.length < 1) { const newRouteArr = routerFormat(JSON.parse(newRouteStr) as RouteRecordRaw[]); layoutRoute.children = newRouteArr; router.addRoute(layoutRoute); router.push(page); } };
路由守卫
// 路由守卫 router.beforeEach(async (to, from, next) => { // 每次请求判断动态路由是否挂载 const layoutRoute: RouteRecordRaw | undefined = router.options.routes.find(route => route.name === "Layout"); addDynamicRoutes(layoutRoute, to); // 路由拦截规则 const TOKEN_STATIC: string | null = localStorage.getItem("session"); if (to.path === "/login" && TOKEN_STATIC) { next("/Layout"); } else { !TOKEN_STATIC && to.path !== "/login" ? next("/login") : next(); } });
Login 获取路由信息
// 路由递归处理 const routerFormat = (routerList: any[]): any[] => { if (!routerList) return []; return routerList.map((item: any) => { return { path: item["url"], name: item["title"], component: item["component"], children: routerFormat(item["children"]), meta: { title: item["title"], icon: item["ico"] } }; }); }; // 获取用户信息 const getUserInfoFn = async (session: any) => { localStorage.setItem("session", session); const res = await getUserInfo(); if (res.code == 0) { const routerList = routerFormat(res.data.router_list); localStorage.setItem("userInfo", JSON.stringify(res.data.user_info)); localStorage.setItem("routerList", JSON.stringify(routerList)); router.push({ name: "Layout" }); } };
-
微信快速查看未读消息清理小红点
面对繁忙的日常,错过微信消息在所难免。当你收到很多微信消息,怎么清理都发现还有小红点时,这个技巧可以帮你快速定位到未读... 1008 0 25-06-22 -
Maven实战
2007年的时候,我加入了一个新成立的开发团队,我们一起做一个新的项目。经验较丰富的同事习惯性地开始编写Ant脚本,也有人希望能尝试一下M... 1080 0 24-05-24 -
Windows11轻松设置,系统优化必备神器
Windows11轻松设置是一款针对Windows 11操作系统的优化设置工具。该软件提供了丰富的功能,使用户能够轻松地对Windows 11进行个性化设置... 722 0 25-04-26 -
呼吸系统疾病
呼吸系统由哪些器官或组织组成?主要由鼻腔、口腔、咽、喉、气管、支气管、肺、胸膜等组成。呼吸系统疾病是什么?呼吸系统疾病泛指发生在呼... 1319 0 24-06-18 -
移动端选项卡切换
457 0 21-06-02 -
微商工具箱 - 专门为微商从业者的研发打造的工具app
微商工具箱免费版是一个专门为微商从业者的研发打造的工具app,它为我们带来了很多微商工具,提供了无打扰检测非好友、添加好友、转发朋友... 1440 0 24-12-18 -
21年新东方大学英语六级考前点睛
01.四六级大纲.pdf02.六级语法讲义.pdf03.六级词汇讲义-导学和高频词汇前两单元.pdf21年6月新东方六级写译讲义.pdf21年6月新东方六级历年真... 999 0 24-08-18 -
中学教师资格考试综合素质模拟卷
2022下半年全国教师资格统考体育与健康《学科知识与教学能力》模拟卷一(初级中学).pdf.pdf2022下半年全国教师资格统考体育与健康《学科知... 1821 0 24-08-20
发表我的评论
共0条评论
- 这篇文章还没有收到评论,赶紧来抢沙发吧~