import router from '@/router' import store from '@/store' import Progress from 'nprogress' import 'nprogress/nprogress.css' import getPageTitle from '@/utils/pageTitle' import { authentication, loginInterception, progressBar, recordRoute, routesWhiteList } from '@/config' Progress.configure({ easing: 'ease', speed: 500, trickleSpeed: 200, showSpinner: false }) router.beforeResolve(async(to, from, next) => { if (progressBar) Progress.start() let hasToken = store.getters['user/accessToken'] if (!loginInterception) hasToken = true if (hasToken) { if (to.path === '/login') { next({ path: '/' }) if (progressBar) Progress.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') if (!permissions) { await store.dispatch('user/resetAccessToken') if (progressBar) Progress.done() } } 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) Progress.done() } } } } else { // 没有登录 // 先判断是否是白名单 if (routesWhiteList.indexOf(to.path) !== -1) { next() } else { // 重定向到登录页 if (recordRoute) { next(`/login?redirect=${to.path}`) } else { next('/login') } if (progressBar) Progress.done() } } // 获取跳转页面名称 document.title = getPageTitle(to.meta.title) }) router.afterEach(() => { if (progressBar) Progress.done() })