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);
	}
}
相关推荐
偷偷小野猪1 小时前
想要自动删除浏览器历史记录吗?这样设置就对了
windows·edge浏览器
充值内卷6 小时前
WPF入门教学四 WPF控件概述
windows·ui·wpf
程序猿小D19 小时前
第二百三十五节 JPA教程 - JPA Lob列示例
java·数据库·windows·oracle·jdk·jpa
iummature21 小时前
ZLMediaKit Windows编译以及使用
windows
周伯通*1 天前
Windows上,使用远程桌面连接Ubuntu
linux·windows·ubuntu
GDAL1 天前
GNU力量注入Windows:打造高效跨平台开发新纪元
服务器·windows·gnu
小徐敲java1 天前
Windows本地制作java证书(与jeecgboot配置本地证书ssl问题)
java·windows·ssl
春蕾夏荷_7282977251 天前
electron nsis打包windows应用程序
javascript·windows·electron·nsis
偷偷小野猪1 天前
Windows 常用的键盘快捷键总结
windows
Splashtop高性能远程控制软件1 天前
centos远程桌面连接windows
linux·windows·centos·远程控制·远程桌面