permission.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import router from './router'
  2. import store from './store'
  3. import NProgress from 'nprogress' // progress bar
  4. import 'nprogress/nprogress.css' // progress bar style
  5. NProgress.configure({ showSpinner: false }) // NProgress Configuration
  6. const whiteList = ['/login', '/examineDialog','/versionInstr','/updateDate'] // no redirect whitelist
  7. router.beforeEach(async (to, from, next) => {
  8. // start progress bar
  9. NProgress.start()
  10. const hasToken = store.getters.token
  11. if (hasToken) {
  12. if (to.path === '/login') {
  13. // 如果已登录,重定向到主页
  14. next({ path: '/' })
  15. NProgress.done()
  16. } else {
  17. const userinfo = store.getters.userinfo && Object.keys(store.getters.userinfo).length > 0
  18. if (userinfo) {
  19. next()
  20. } else {
  21. try {
  22. // 获取用户信息
  23. const data = await store.dispatch('user/getInfo')
  24. await store.commit('user/SET_USERINFO', data)
  25. next({ ...to, replace: true })
  26. } catch (error) {
  27. // 如果获取用户信息失败,重置 token 并重定向到登录页面
  28. await store.dispatch('user/resetToken')
  29. next(`/login?redirect=${to.path}`)
  30. NProgress.done()
  31. }
  32. }
  33. }
  34. } else {
  35. // 没有 token
  36. if (whiteList.indexOf(to.path) !== -1) {
  37. // 在免登录白名单中,直接进入
  38. next()
  39. } else {
  40. // 其他没有权限访问的页面重定向到登录页面
  41. next(`/login?redirect=${to.path}`)
  42. NProgress.done()
  43. }
  44. }
  45. })
  46. router.afterEach(() => {
  47. // finish progress bar
  48. NProgress.done()
  49. })