permission.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import router from './router'
  2. import store from './store'
  3. import { Message } from 'element-ui'
  4. import { getToken } from '@/utils/auth'
  5. import NProgress from 'nprogress' // progress bar
  6. import 'nprogress/nprogress.css'// progress bar style
  7. // import { getToken } from '@/utils/auth' // getToken from cookie
  8. NProgress.configure({ showSpinner: false })// NProgress Configuration
  9. const whiteList = ['/login', '/config', '/', '/editor', '/posTool']// no redirect whitelist
  10. router.beforeEach((to, from, next) => {
  11. NProgress.start() // start progress bar
  12. if (getToken()) {
  13. if (to.path === '/login') {
  14. next({ path: '/index/dashboard' })
  15. NProgress.done()
  16. } else {
  17. // if (!store.getters.addRouters.length) {
  18. // store.dispatch('GenerateRoutes', {}).then(() => { // 根据roles权限生成可访问的路由表
  19. // router.addRoutes(store.getters.addRouters) // 动态添加可访问路由表
  20. // next({ ...to, replace: true }) // hack方法 确保addRoutes已完成 ,set the replace: true so the navigation will not leave a history record
  21. // })
  22. // } else {
  23. // next()
  24. // }
  25. // 根据权限加载路由
  26. if (!store.getters.addRouters.length) {
  27. store.dispatch('GetInfo').then(res => {
  28. store.dispatch('GenerateRoutes', res.data).then(() => { // 根据roles权限生成可访问的路由表
  29. router.addRoutes(store.getters.addRouters) // 动态添加可访问路由表
  30. next({ ...to, replace: true }) // hack方法 确保addRoutes已完成 ,set the replace: true so the navigation will not leave a history record
  31. }).catch((err) => {
  32. store.dispatch('LogOut').then(() => {
  33. Message.error(err || 'Verification failed, please login again')
  34. next({ path: '/login' })
  35. })
  36. })
  37. })
  38. } else {
  39. next()
  40. }
  41. }
  42. } else {
  43. if (whiteList.indexOf(to.path) > -1) {
  44. next()
  45. } else {
  46. next({ path: '/login' })
  47. NProgress.done()
  48. }
  49. }
  50. })
  51. router.afterEach(() => {
  52. NProgress.done() // finish progress bar
  53. })