vue2+antd——实现动态菜单路由功能——基础积累

vue2+antd------实现动态菜单路由功能------基础积累

最近在写后台管理系统,遇到一个需求就是要将之前的静态路由改为动态路由,使用的后台框架是: vue-antd-admin

实现的需求:

复制代码
在页面开始登录时,通过路由接口可以获取到所有有权限的菜单数据。

然后通过loadRoutes方法来实现异步动态路由。

效果图:

登录接口处添加以下代码

如上图所示,需要在登录接口调用成功后,书写以下的代码:
import { loadRoutes } from '@/utils/routerUtil.js';

js 复制代码
//调用异步动态路由接口
//接口返回的数据格式如下:
loadRoutes(
	{router:this.$router,store:this.$store,i18n:this.$18n},
	[
		{
			router:'root',
			children:[
				{
					router:'default',
					name:'工作台',
					component:()=>import('@/pages/dashboard/index')
				},
				{
					router:'/memberManage',
					name:'客户管理',
					component:()=>import('@/layouts/BlankView'),
					children:[
						{
							router:'list',
							path:'/company/list',
							name:'企业管理',
							component:()=>import('@/pages/Member/Company/list')
						},
						{
							router:'detail',
							path:'/company/detail',
							name:'企业详情',
							invisible:true,
							component:()=>import('@/pages/Member/Company/detail')
						}
					]
				},
				{
					router:'/member',
					name:'用户管理',
					component:()=>import('@/layouts/BlankView'),
					redirect:'/member/list',
					children:[
						{
							router:'list',
							name:'用户管理',
							path:'/member/list',
							component:()=>import('@/pages/Member/Member/list')
						},{
							router:'detail',
							name:'用户详情',
							path:'/member/detail',
							invisible:true,
							component:()=>import('@/pages/Member/Member/detail')
						}
					]
				},{
					router:'/system',
					name:'系统管理',
					component:()=>import('@/layouts/PageView'),
					children:[
						{
							router:'role',
							name:'角色管理',
							path:'/system/role',
							component:()=>import('@/pages/identity/RoleList'),
						},{
							router:'organization',
							name:'部门组织',
							path:'/system/organizaition',
							component:()=>import('@/pages/organization/organizationUnits')
						},{
							router:'user',
							name:'用户管理',
							path:'/system/user',
							component:()=>import('@/pages/identity/UserList')
						},{
							router:'dataDictionary',
							name:'数据字典',
							path:'/system/dataDictionary',
							component:()=>import('@/pages/dataDictionary/DataDictionary')
						},{
							router:'openApi',
							name:'客户端管理',
							path:'/system/openApi',
							component:()=>import('@/pages/OpenAPI/index')
						},{
							router:'httpApi',
							name:'HttpApi日志',
							path:'/system/httpApi',
							component:()=>import('@/pages/system/httpApi')
						},{
							router:'auditLog',
							name:'审计日志',
							path:'/system/auditLog',
							component:()=>import('@/pages/system/auditLog')
						},{
							router:'cache',
							name:'缓存列表',
							path:'/system/cache',
							component:()=>import('@/pages/system/cache')
						}
					]
				}
			]
		}
	]
)

loadRoutes方法内容如下:

js 复制代码
function loadRoutes(routesConfig){
	if(arguments.length>0){
		const arg0 = arguments[0];
		if(arg0.router ||arg0.i18n||arg0.store){
			routesConfig = arguments[i];
			console.error('the usage of signature loadRoutes({router,store,i18n},routesConfig) is out of date,please use the new signature:loadRoutes(routesConfig)')
			connsole.error('方法签名 loadRoutes({router,store,i18n},routesConfig)的用法已过时,请使用新的方法签名loadRoutes(routesConfig)')
		}
	}
	//应用配置
	const {router,store,i18n} = appOptions;
	//如果routesConfig有值,则更新到本地,否则从本地获取
	if(routesConfig){
		store.commit('account/setRoutesConfig',routesConfig);
	}else{
		routesConfig = store.getters['account/routesConfig']
	}
	//如果开启了异步路由,则加载异步路由配置
	//const asyncRoutes = store.state.setting.asyncRoutes
	const asyncRoutes = true;
	if(asyncRoutes){
		if(routesConfig&&routesConfig.length>0){
			const routes = parseRoutes(routesConfig,routerMap);
			const finalRoutes = mergeRoutes(basicOptions.routes,routes);
			formatRoutes(finalRoutes);
			router.options = {...router.options,routes:finalRoutes};
			router.matcher = new Router({...router.options,routes:[]}).matcher;
			router.addRoutes(finalRoutes);
		}
	}
	mergeI18nFromRoutes(i18n,router.options.routes);
	//初始化admin后台菜单数据
	const rootRoute = router.options.routes.find(item=>item.path==='/');
	const menuRoutes = rootRoute&&rootRoute.children;
	if(menuRoutes){
		store.commit('setting/setMenuData',menuRoutes);
	}
}
相关推荐
老王的笔记v5 小时前
46期 Windows超级管理器 垃圾清理 预装卸载与系统优化工具箱
windows·系统架构
张人玉6 小时前
基于 C# / .NET 8 + Windows Forms + SQLite 的桌面银行业务演示系统——华夏示范银行管理系统
windows·sqlite·c#·.net
Mr-Apple8 小时前
系统找不到指定的文件-CreateInstance/CreateVm/HCS/ERROR_FILE_NOT_FOUND
linux·windows·ubuntu·wsl
JSUITDLWXL9 小时前
jitsi-windows-local-translation
windows
点亮~黑夜11 小时前
远程连接浏览无桌面服务器上的图片
windows·软件构建
Albart57512 小时前
Docker Desktop 增量更新失败终极排查:Failed to apply delta update 反复回滚怎么办?
windows·docker·容器·docker部署大模型
Patrick在香港12 小时前
Claude + Python 数据管道:一次字段改名,786 行历史数据被静默重写
开发语言·windows·python·claude·数据工程·数据校验·数据管道
Tiny21412 小时前
解决VMware中win10虚拟机无法上网
网络·windows·vmware
tryxr13 小时前
Chat2Excel 文件服务模块剩余功能开发
java·服务器·windows·java项目·文件服务
kakakahahahaha13 小时前
Windows DRIVER_IRQL_NOT_LESS_OR_EQUAL NETIO.SYS 蓝屏排查流程
windows·电脑·笔记本电脑·内容运营·软件需求