permission.js 1.5 KB

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