/** * @author chuzhixin 1204505056@qq.com (不想保留author可删除) * @description 路由守卫,目前两种模式:all模式与intelligence模式 */ import router from '@/router' import store from '@/store' import VabProgress from 'nprogress' import 'nprogress/nprogress.css' import getPageTitle from '@/utils/pageTitle' import { authentication, loginInterception, progressBar, recordRoute, routesWhiteList, } from '@/config' VabProgress.configure({ easing: 'ease', speed: 500, trickleSpeed: 200, showSpinner: false, }) router.beforeResolve(async (to, from, next) => { if (progressBar) VabProgress.start() let hasToken = store.getters['user/accessToken'] if (!loginInterception) hasToken = true if (hasToken) { if (to.path === '/login') { next({ path: '/' }) if (progressBar) VabProgress.done() } else { const hasPermissions = store.getters['user/permissions'] && store.getters['user/permissions'].length > 0 if (hasPermissions) { next() } else { try { let permissions if (!loginInterception) { //settings.js loginInterception为false时,创建虚拟权限 await store.dispatch('user/setPermissions', ['admin']) permissions = ['admin'] } else { permissions = await store.dispatch('user/getUserInfo') } let accessRoutes = [] if (authentication === 'intelligence') { accessRoutes = await store.dispatch('routes/setRoutes', permissions) } else if (authentication === 'all') { accessRoutes = await store.dispatch('routes/setAllRoutes') } accessRoutes.forEach((item) => { router.addRoute(item) }) next({ ...to, replace: true }) } catch { await store.dispatch('user/resetAccessToken') if (progressBar) VabProgress.done() } } } } else { if (routesWhiteList.indexOf(to.path) !== -1) { next() } else { if (recordRoute) { next(`/login?redirect=${to.path}`) } else { next('/login') } if (progressBar) VabProgress.done() } } document.title = getPageTitle(to.meta.title) }) router.afterEach(() => { if (progressBar) VabProgress.done() })