permission.js 2.1 KB

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