import { hasAuthority } from '@/utils/authorityUtil'; import { loginIgnore } from '@/router/index'; import { checkAuthorization } from '@/utils/requestUtil'; import NProgress from 'nprogress'; NProgress.configure({ showSpinner: false }); /** * 进度条开始 * @param to * @param form * @param next */ const progressStart = (to, from, next) => { // start progress bar if (!NProgress.isStarted()) { NProgress.start(); } next(); }; /** * 登录守卫 * @param to * @param form * @param next * @param options */ const loginGuard = (to, from, next, options) => { const { message } = options; if (!loginIgnore.includes(to) && !checkAuthorization()) { message.warning('登录已失效,请重新登录'); next({ path: '/login' }); } else { next(); } }; /** * 权限守卫 * @param to * @param form * @param next * @param options */ const authorityGuard = (to, from, next, options) => { const { store, message } = options; const permissions = store.getters['accountModule/permissions']; const roles = store.getters['accountModule/roles']; if (!hasAuthority(to, permissions, roles)) { message.warning(`对不起,您无权访问页面: ${to.fullPath},请联系管理员`); next({ path: '/403' }); // NProgress.done() } else { next(); } }; /** * 混合导航模式下一级菜单跳转重定向 * @param to * @param from * @param next * @param options * @returns {*} */ const redirectGuard = (to, from, next, options) => { const { store } = options; const getFirstChild = routes => { const route = routes[0]; if (!route.children || route.children.length === 0) { return route; } return getFirstChild(route.children); }; if (store.state.settingModule.layout === 'mix') { const firstMenu = store.getters['settingModule/firstMenu']; if (firstMenu.find(item => item.fullPath === to.fullPath)) { store.commit('settingModule/setActivatedFirst', to.fullPath); const subMenu = store.getters['settingModule/subMenu']; if (subMenu.length > 0) { const redirect = getFirstChild(subMenu); return next({ path: redirect.fullPath }); } } } next(); }; /** * 进度条结束 * @param to * @param form * @param options */ const progressDone = () => { // finish progress bar NProgress.done(); }; export default { beforeEach: [progressStart, loginGuard, authorityGuard, redirectGuard], afterEach: [progressDone], };