permission.js 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. import Vue from 'vue'
  2. import router from './router'
  3. import store from './store'
  4. import NProgress from 'nprogress' // progress bar
  5. import '@/components/NProgress/nprogress.less' // progress bar custom style
  6. import notification from 'ant-design-vue/es/notification'
  7. import { setDocumentTitle, domTitle } from '@/utils/domUtil'
  8. import { ACCESS_TOKEN } from '@/store/mutation-types'
  9. NProgress.configure({ showSpinner: false }) // NProgress Configuration
  10. // const whiteList = ['login', 'register', 'registerResult', 'EvaluationPlan', 'EvaluationItem', 'tenantsList'] // no redirect whitelist
  11. const whiteList = ['login', 'register', 'registerResult'] // no redirect whitelist
  12. const defaultRoutePath = '/home'
  13. router.beforeEach((to, from, next) => {
  14. NProgress.start() // start progress bar
  15. to.meta && (typeof to.meta.title !== 'undefined' && setDocumentTitle(`${to.meta.title} - ${domTitle}`))
  16. let token = store.state.user.token || sessionStorage.getItem(ACCESS_TOKEN)
  17. token = token != 'undefined' ? token : ''
  18. // console.log(token)
  19. // 已登录
  20. if (token) {
  21. /* has token */
  22. if (to.path === '/user/login') {
  23. next({ path: defaultRoutePath })
  24. NProgress.done()
  25. } else {
  26. const userInfo = Vue.ls.get('userName')
  27. console.log(userInfo)
  28. if (userInfo) {
  29. store.dispatch('SetInfo', userInfo)
  30. } else {
  31. store.dispatch('Logout').then(() => {
  32. next({ path: '/user/login', query: { redirect: to.fullPath } })
  33. })
  34. }
  35. console.log(store.getters.roles)
  36. if (store.getters.roles.permissionList.length === 0) {
  37. store
  38. .dispatch('GetInfo', token)
  39. .then(res => {
  40. const roles = res
  41. console.log(roles, 'roles')
  42. if (roles.permissionList.length == 0 || !roles) {
  43. store.dispatch('Logout').then(() => {
  44. store.dispatch('ResetRoutes').then(() => {
  45. next({ path: '/user/login', query: { redirect: to.fullPath } })
  46. })
  47. })
  48. } else {
  49. store.dispatch('GenerateRoutes', { roles }).then(() => {
  50. // 根据roles权限生成可访问的路由表
  51. // 动态添加可访问路由表
  52. // router.addRoutes(store.getters.addRouters)
  53. const redirect = decodeURIComponent(from.query.redirect || to.path)
  54. if (to.path === redirect) {
  55. // hack方法 确保addRoutes已完成 ,set the replace: true so the navigation will not leave a history record
  56. next({ ...to, replace: true })
  57. } else {
  58. // 跳转到目的路由
  59. next({ path: redirect })
  60. }
  61. })
  62. }
  63. })
  64. .catch(() => {
  65. notification.error({
  66. message: '错误',
  67. description: '请求用户信息失败,请重试'
  68. })
  69. store.dispatch('Logout').then(() => {
  70. next({ path: '/user/login', query: { redirect: to.fullPath } })
  71. })
  72. })
  73. } else {
  74. next()
  75. }
  76. }
  77. } else {
  78. // 未登录
  79. if (whiteList.includes(to.name)) {
  80. // 在免登录白名单,直接进入
  81. next()
  82. } else {
  83. next({ path: '/user/login', query: { redirect: to.fullPath } })
  84. NProgress.done() // if current page is login will not trigger afterEach hook, so manually handle it
  85. }
  86. }
  87. })
  88. router.afterEach(() => {
  89. NProgress.done() // finish progress bar
  90. })