import router from './router' import store from './store' import NProgress from 'nprogress' // progress bar import 'nprogress/nprogress.css' // progress bar style NProgress.configure({ showSpinner: false }) // NProgress Configuration const whiteList = ['/login', '/examineDialog','/versionInstr','/updateDate'] // no redirect whitelist router.beforeEach(async (to, from, next) => { // start progress bar NProgress.start() const hasToken = store.getters.token if (hasToken) { if (to.path === '/login') { // 如果已登录,重定向到主页 next({ path: '/' }) NProgress.done() } else { const userinfo = store.getters.userinfo && Object.keys(store.getters.userinfo).length > 0 if (userinfo) { next() } else { try { // 获取用户信息 const data = await store.dispatch('user/getInfo') await store.commit('user/SET_USERINFO', data) next({ ...to, replace: true }) } catch (error) { // 如果获取用户信息失败,重置 token 并重定向到登录页面 await store.dispatch('user/resetToken') next(`/login?redirect=${to.path}`) NProgress.done() } } } } else { // 没有 token if (whiteList.indexOf(to.path) !== -1) { // 在免登录白名单中,直接进入 next() } else { // 其他没有权限访问的页面重定向到登录页面 next(`/login?redirect=${to.path}`) NProgress.done() } } }) router.afterEach(() => { // finish progress bar NProgress.done() })