From 9df2666304ff5cc9340e6d945e93992dd94cc88c Mon Sep 17 00:00:00 2001 From: chenghongxing <1126263215@qq.com> Date: Mon, 28 Sep 2020 21:11:47 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20problem=20that=20old=20routes=20configur?= =?UTF-8?q?ation=20not=20clearing=20when=20merging=20async=20routes;=20:bu?= =?UTF-8?q?g:=20=E4=BF=AE=E5=A4=8D=EF=BC=9A=E5=90=88=E5=B9=B6=E5=BC=82?= =?UTF-8?q?=E6=AD=A5=E8=B7=AF=E7=94=B1=E6=97=B6=EF=BC=8C=E6=97=A7=E7=9A=84?= =?UTF-8?q?=E8=B7=AF=E7=94=B1=E9=85=8D=E7=BD=AE=E6=9C=AA=E5=8F=8A=E6=97=B6?= =?UTF-8?q?=E6=B8=85=E9=99=A4=E7=9A=84=E9=97=AE=E9=A2=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- src/bootstrap.js | 7 ++++-- src/pages/login/Login.vue | 2 +- src/utils/authority-utils.js | 4 ++- src/utils/routerUtil.js | 47 ++++++++++++++++++++++++++++++------ 5 files changed, 49 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index b49289a..3112105 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "vue-antd-admin", - "version": "0.6.0", + "version": "0.6.1", "homepage": "https://iczer.github.io/vue-antd-admin", "private": true, "scripts": { diff --git a/src/bootstrap.js b/src/bootstrap.js index a101681..8c53146 100644 --- a/src/bootstrap.js +++ b/src/bootstrap.js @@ -1,4 +1,4 @@ -import {loadRoutes, loadGuards} from '@/utils/routerUtil' +import {loadRoutes, loadGuards, setAppOptions} from '@/utils/routerUtil' import {loadInterceptors} from '@/utils/request' import guards from '@/router/guards' import interceptors from '@/utils/axios-interceptors' @@ -9,12 +9,15 @@ import interceptors from '@/utils/axios-interceptors' * @param router 应用的路由实例 * @param store 应用的 vuex.store 实例 * @param i18n 应用的 vue-i18n 实例 + * @param i18n 应用的 message 实例 */ function bootstrap({router, store, i18n, message}) { + // 设置应用配置 + setAppOptions({router, store, i18n}) // 加载 axios 拦截器 loadInterceptors(interceptors, {router, store, i18n, message}) // 加载路由 - loadRoutes({router, store, i18n}) + loadRoutes() // 加载路由守卫 loadGuards(guards, {router, store, i18n, message}) } diff --git a/src/pages/login/Login.vue b/src/pages/login/Login.vue index b405d35..888665d 100644 --- a/src/pages/login/Login.vue +++ b/src/pages/login/Login.vue @@ -120,7 +120,7 @@ export default { // 获取路由配置 getRoutesConfig().then(result => { const routesConfig = result.data.data - loadRoutes({router: this.$router, store: this.$store, i18n: this.$i18n}, routesConfig) + loadRoutes(routesConfig) this.$router.push('/dashboard/workplace') this.$message.success(loginRes.message, 3) }) diff --git a/src/utils/authority-utils.js b/src/utils/authority-utils.js index a08c474..71516b7 100644 --- a/src/utils/authority-utils.js +++ b/src/utils/authority-utils.js @@ -71,7 +71,9 @@ function hasAuthority(route, permissions, roles) { function filterMenu(menuData, permissions, roles) { menuData.forEach(menu => { if (menu.meta && menu.meta.invisible === undefined) { - menu.meta.invisible = !hasAuthority(menu, permissions, roles) + if (!hasAuthority(menu, permissions, roles)) { + menu.meta.invisible = true + } if (menu.children && menu.children.length > 0) { filterMenu(menu.children, permissions, roles) } diff --git a/src/utils/routerUtil.js b/src/utils/routerUtil.js index ce573c7..8cd719a 100644 --- a/src/utils/routerUtil.js +++ b/src/utils/routerUtil.js @@ -2,6 +2,25 @@ import routerMap from '@/router/async/router.map' import {mergeI18nFromRoutes} from '@/utils/i18n' import Router from 'vue-router' import deepMerge from 'deepmerge' +import basicOptions from '@/router/async/config.async' + +//应用配置 +let appOptions = { + router: undefined, + i18n: undefined, + store: undefined +} + +/** + * 设置应用配置 + * @param options + */ +function setAppOptions(options) { + const {router, store, i18n} = options + appOptions.router = router + appOptions.store = store + appOptions.i18n = i18n +} /** * 根据 路由配置 和 路由组件注册 解析路由 @@ -49,12 +68,24 @@ function parseRoutes(routesConfig, routerMap) { /** * 加载路由 - * @param router 应用路由实例 - * @param store 应用的 vuex.store 实例 - * @param i18n 应用的 vue-i18n 实例 - * @param routesConfig 路由配置 + * @param routesConfig {RouteConfig[]} 路由配置 */ -function loadRoutes({router, store, i18n}, routesConfig) { +function loadRoutes(routesConfig) { + //兼容 0.6.1 以下版本 + /*************** 兼容 version < v0.6.1 *****************/ + if (arguments.length > 0) { + const arg0 = arguments[0] + if (arg0.router || arg0.i18n || arg0.store) { + routesConfig = arguments[1] + console.error('the usage of signature loadRoutes({router, store, i18n}, routesConfig) is out of date, please use the new signature: loadRoutes(routesConfig).') + console.error('方法签名 loadRoutes({router, store, i18n}, routesConfig) 的用法已过时, 请使用新的方法签名 loadRoutes(routesConfig)。') + } + } + /*************** 兼容 version < v0.6.1 *****************/ + + // 应用配置 + const {router, store, i18n} = appOptions + // 如果 routesConfig 有值,则更新到本地,否则从本地获取 if (routesConfig) { store.commit('account/setRoutesConfig', routesConfig) @@ -66,8 +97,8 @@ function loadRoutes({router, store, i18n}, routesConfig) { if (asyncRoutes) { if (routesConfig && routesConfig.length > 0) { const routes = parseRoutes(routesConfig, routerMap) - formatRoutes(routes) - const finalRoutes = mergeRoutes(router.options.routes, routes) + 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) @@ -216,4 +247,4 @@ function loadGuards(guards, options) { }) } -export {parseRoutes, loadRoutes, formatAuthority, getI18nKey, loadGuards, deepMergeRoutes, formatRoutes} +export {parseRoutes, loadRoutes, formatAuthority, getI18nKey, loadGuards, deepMergeRoutes, formatRoutes, setAppOptions}