合并菜单项

This commit is contained in:
xielue 2023-05-09 16:38:12 +08:00
parent 3537289f7d
commit 73f70b5b4b
4 changed files with 75 additions and 24 deletions

View File

@ -1,5 +1,5 @@
VUE_APP_API_BASE_URL=http://zxx4.f3322.net:46000
VUE_APP_USER_MODEL=AdminUser
VUE_APP_USER_MODEL2=BaseAdmin
VUE_APP_USER_MODEL2=AdminUser
VUE_APP_USER_MODEL=BaseAdmin
VUE_APP_BEID=1

View File

@ -71,7 +71,12 @@ export default {
getRoutesConfig().then(result => { //
if (result.data.data != null) {
const routesConfig = result.data.data
const routesConfig = result.data.data;
this.setRoutesConfig(routesConfig)
loadRoutes([routesConfig])
@ -79,7 +84,7 @@ export default {
this.$closeOthers(pushTo)
} else {
this.$router.push(pushTo)
}
}
this.$message.success(msg, 3)
}
@ -104,7 +109,5 @@ export default {
}
</script>
<style lang="less" scoped>
</style>
<style lang="less" scoped></style>

View File

@ -21,7 +21,7 @@ routerMap['basic']= {
permission: [],
}
};
/*
routerMap['basic_materials']= {
name: '基础档案',
icon: 'idcard',
@ -47,5 +47,6 @@ routerMap['basic_unit']= {
permission: [],
}
};
*/
export default {}
export default routerMap

View File

@ -29,7 +29,7 @@ function setAppOptions(options) { // 设置应用配置
*/
function parseRoutes(routesConfig, routerMap) { // 解析路由
let routes = [] // 初始化路由为空数组
routesConfig.forEach(item => { // 遍历路由配置
// 获取注册在 routerMap 中的 router初始化 routeCfg
let router = undefined, routeCfg = {} // 初始化路由和路由配置
@ -69,7 +69,7 @@ function parseRoutes(routesConfig, routerMap) { // 解析路由
}
})
Object.assign(meta, cfgMeta) // 合并路由元信息和路由配置元信息
const route = {
path: routeCfg.path || router.path || routeCfg.router, // 路由路径
name: routeCfg.name || router.name, // 路由名称
@ -92,7 +92,7 @@ function parseRoutes(routesConfig, routerMap) { // 解析路由
// 根据权限过滤路由
function filterRoutesConfig(routes, permissions) {
const res = []
routes.forEach(route => {
const tmp = { ...route }
if (hasPermission(permissions, tmp)) {
@ -107,7 +107,7 @@ function filterRoutesConfig(routes, permissions) {
// 判断是否有权限
function hasPermission(permissions, route) {
if (route.meta && route.meta.authority && route.meta.authority.permission) {
if (route.meta && route.meta.authority && route.meta.authority.permission) {
return permissions.some(permission => {
return route.meta.authority.permission === '' || route.meta.authority.permission === permission
})
@ -116,6 +116,50 @@ function hasPermission(permissions, route) {
}
}
//合并菜单项
function mergeMenus(routesConfig) {
if (!routesConfig) return routesConfig;
let root = routesConfig[0];
let routes = [];
let groups = ['basic']; //要合并的菜单项
let appendedGroups = []; //已经处理的菜单项
let children = JSON.parse(JSON.stringify(root.children));
console.log(children)
root.children.forEach(item => {
if (appendedGroups.filter(a => a == item.router).length) {
return;
}
if (groups.filter(a => a == item.router).length) {
let newItem = {
authority: item.authority,
icon: item.icon,
name: item.name,
router: item.router,
children: []
};
children.forEach(subitem => {
if (subitem.router == item.router) {
subitem.children = subitem.children || [];
newItem.children = [...newItem.children, ...subitem.children]; //合并子菜单项
}
});
routes.push(newItem);
appendedGroups.push(item.router);
} else {
routes.push(item);
}
});
root.children = routes;
return [root];
}
/**
* 加载路由
@ -137,6 +181,12 @@ function loadRoutes(routesConfig) { // 加载路由
// }
/*************** 兼容 version < v0.6.1 *****************/
console.log(routesConfig)
routesConfig = mergeMenus(routesConfig);
if (!routesConfig) {
return;
}
// 应用配置
const { router, store, i18n } = appOptions
@ -153,27 +203,24 @@ function loadRoutes(routesConfig) { // 加载路由
// console.log("=====filteredRoutesConfig:", filteredRoutesConfig)
filteredRoutesConfig
// routesConfig = filteredRoutesConfig // 路由配置等于过滤后的路由配置
// 如果开启了异步路由,则加载异步路由配置
const asyncRoutes = store.state.setting.asyncRoutes // 获取store的setting模块的asyncRoutes
if (asyncRoutes) { // 如果动态路由存在
console.log("routesConfig && routesConfig.length > 0", routesConfig.length > 0)
if (asyncRoutes) { // 如果动态路由存在
if (routesConfig && routesConfig.length > 0) { // 如果本地路由配置存在 并且 数量大于0
const routes = parseRoutes(routesConfig, routerMap) // 解析路由
// 合并路由 生成路由表
const finalRoutes = mergeRoutes(basicOptions.routes, routes)
// 格式化路由
formatRoutes(finalRoutes)
console.log('最终路由表finalRoutes:', finalRoutes) // 最终路由表
router.options = { ...router.options, routes: finalRoutes } // 路由配置
console.log(router.options)
router.options = { ...router.options, routes: finalRoutes } // 路由配置
router.matcher = new Router({ ...router.options, routes: [] }).matcher // 重置路由
router.addRoutes(finalRoutes) // 添加路由
router.addRoutes(finalRoutes) // 添加路由
//for (let x of finalRoutes) {
//for (let x of finalRoutes) {
// router.addRoute(x)
//}
}