合并菜单项
This commit is contained in:
parent
3537289f7d
commit
73f70b5b4b
|
|
@ -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
|
||||
|
|
@ -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>
|
||||
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
//}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue