Vue3 + Vite + Vue Router 4后端返回路由配置动态路由权限管理
25-04-07 05:15
785
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" }); } };
-
百思不得姐小程序
百思不得姐是一款备受欢迎的娱乐社交应用,其微信小程序版本为用户提供了一个便捷的平台,让用户在微信环境中也能享受到各种有趣的短视频和... 778 0 24-09-16 -
Git客户端 v2.26.1.1官方汉化版
Git客户端是免费、开源的分布式版本控制系统,用于Linux内核开发的版本控制工具,GUI的方便快捷,也不用记忆冗杂的命令,这里为大家分享的是W... 362 0 21-07-06 -
word文档提取目录
某提案汇总文档没有做目录,wps、word自带的功能也不能正确提取目录,就用python写了一个提取word文档目录的代码。使用前需安装库:pip in... 953 0 25-04-08 -
纪妖(原名知妖)古今中外妖怪百科全书
纪妖-古今中外妖怪百科全书,堪称妖界的花名册,开启摸鱼新姿势,网站上说的是中国古今妖怪收集录,但是我看了下也有国外的。这个网站收集... 1463 0 24-07-10 -
仁怀酱酒宝:酒类商城模板
仁怀酱酒宝小程序模板为酒类销售提供一站式在线购酒体验,集成商品展示、购物车、订单管理、用户互动等功能。通过清晰的商品介绍、高效的结... 796 0 24-10-27 -
Java 线程
什么是线程?几乎每种操作系统都支持进程的概念 -- 进程就是在某种程度上相互隔离的、独立运行的程序。线程化是允许多个活动共存于一个进... 1079 0 24-05-28 -
六西格玛管理统计指南
六西格玛管理方法是20世纪80年代中期由美国摩托罗拉公司最先提出来的,当初该方法主要用于改进产品质量。后来,杰克·韦尔奇(Jack Welch... 851 0 24-05-24 -
三味·小学必背古诗文三四五六年级
1005 0 24-07-13
发表我的评论
共0条评论
- 这篇文章还没有收到评论,赶紧来抢沙发吧~