permission.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import router from './router'
  2. import store from './store'
  3. import NProgress from 'nprogress'
  4. import 'nprogress/nprogress.css'
  5. import auth from '@/utils/auth'
  6. NProgress.configure({
  7. showSpinner: false
  8. })
  9. const whiteList = ['/login', '/auth-redirect', '/bind', '/register']
  10. router.beforeEach((to, from, next) => {
  11. NProgress.start()
  12. if (auth.getToken()) {
  13. console.log(to, 'to')
  14. if (typeof (to.meta) == "object" && to.meta.hasOwnProperty("isWideScreen")) {
  15. store.commit('SET_IS_WIDESCREEN', to.meta.isWideScreen)
  16. } else {
  17. store.commit('SET_IS_WIDESCREEN', false)
  18. }
  19. /* has token*/
  20. // if (to.path === '/login') {
  21. // next({ path: '/' })
  22. // NProgress.done()
  23. // } else {
  24. // TODO: hht 22.1.5 这里暂时判断有无有效路由,没有就尝试重构。
  25. // 这样不太合适,没有充分利用缓存。
  26. if (!store.getters.permission_routes?.length) {
  27. // 判断当前用户是否已拉取完user_info信息
  28. store.dispatch('GetInfo').then(() => {
  29. store.dispatch('GenerateRoutes').then(accessRoutes => {
  30. // 根据roles权限生成可访问的路由表
  31. router.addRoutes(accessRoutes) // 动态添加可访问路由表
  32. next({
  33. ...to,
  34. replace: true
  35. }) // hack方法 确保addRoutes已完成
  36. })
  37. }).catch(err => {
  38. console.log('force logout with error', err);
  39. store.dispatch('LogOut').then(() => {
  40. //Message.error(err)
  41. next({
  42. path: '/'
  43. })
  44. })
  45. })
  46. } else {
  47. next()
  48. }
  49. // }
  50. } else {
  51. // 没有token
  52. if (whiteList.indexOf(to.path) !== -1) {
  53. // 在免登录白名单,直接进入
  54. next()
  55. } else {
  56. // next()
  57. next(`/login?redirect=${to.fullPath}`) // 否则全部重定向到登录页
  58. NProgress.done()
  59. }
  60. }
  61. })
  62. router.afterEach(() => {
  63. NProgress.done()
  64. })