From 73f70b5b4b51569305e4dd225af12e592b3047aa Mon Sep 17 00:00:00 2001 From: xielue Date: Tue, 9 May 2023 16:38:12 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=88=E5=B9=B6=E8=8F=9C=E5=8D=95=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.development | 4 +- src/components/login/loginActions.vue | 13 ++-- src/router/Middle/Mes/basic/router.map.js | 5 +- src/utils/routerUtil.js | 77 ++++++++++++++++++----- 4 files changed, 75 insertions(+), 24 deletions(-) diff --git a/.env.development b/.env.development index b2a96a4..3d6274a 100644 --- a/.env.development +++ b/.env.development @@ -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 \ No newline at end of file diff --git a/src/components/login/loginActions.vue b/src/components/login/loginActions.vue index ecd196c..8f1f461 100644 --- a/src/components/login/loginActions.vue +++ b/src/components/login/loginActions.vue @@ -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 { } - + \ No newline at end of file diff --git a/src/router/Middle/Mes/basic/router.map.js b/src/router/Middle/Mes/basic/router.map.js index 22b5be6..747da5b 100644 --- a/src/router/Middle/Mes/basic/router.map.js +++ b/src/router/Middle/Mes/basic/router.map.js @@ -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 diff --git a/src/utils/routerUtil.js b/src/utils/routerUtil.js index 8911bfc..673e00f 100644 --- a/src/utils/routerUtil.js +++ b/src/utils/routerUtil.js @@ -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) //} }