Vue3 + Vite + Vue Router 4后端返回路由配置动态路由权限管理
25-04-07 05:15
788
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" }); } };
-
微信小程序原生wx.request简单封装
调用方法import { get, post } from "../../request/request"; // GET请求 const _res = await get("https://api.vvhan.com/api/ian"); co... 764 0 25-04-07 -
仿美团外卖小程序
该压缩包文件“仿美团外卖.zip”包含了一个微信小程序的模板源码,是纯前端的静态小程序源码,适用于学生进行毕业设计、程序员学习研究以及... 1209 0 24-09-18 -
Python网络编程
经过20年来的严谨创新,Python在引人了诸如上下文管理器(contextmanager)、生成器( generator)以及推导式(comprehension)等特性的同时,仍... 930 0 24-05-29 -
停车被堵如何挪车
挪车方式:最温柔:用“交管12123”APP,选择“一键挪车”功能,输入车牌号,系统会发送短信给车主个人感觉最快:市长热线12345说车牌号和... 1126 0 24-11-18 -
jquery获取当前年月日时间和星期
jquery实时获取当前年月日时间和星期,时间显示秒针<p>本地时间:<span id=localtime></span> 490 0 21-06-02 -
mysql数据库优化
优化数据库的方法1、选取最适用的字段属性MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会... 658 0 21-07-27 -
Bandicam高清 录制视频软件汉化破解版
Bandicam 破解版是一款功能强大的视频录制工具,可以录制各种游戏高清视频。Bandicam视频录制工具可在电脑上进行任意定制录制区域位置及大... 404 0 21-07-07 -
从源头屏蔽各种骚扰来电
相信很多 iPhone 用户跟我一样,每天被各种银行推销、税务办理相关的电话骚扰,之前考虑过电话静音、屏蔽通讯录外的电话,但确认会错过一... 1007 0 24-11-18
发表我的评论
共0条评论
- 这篇文章还没有收到评论,赶紧来抢沙发吧~