permission.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import router from './router'
  2. import store from './store'
  3. import NProgress from 'nprogress' // Progress 进度条
  4. import 'nprogress/nprogress.css'// Progress 进度条样式
  5. import { Message } from 'element-ui'
  6. import { getToken } from '@/utils/auth' // 验权
  7. const whiteList = ['/login'] // 不重定向白名单
  8. router.beforeEach((to, from, next) => {
  9. NProgress.start()
  10. if (getToken()) {
  11. if (to.path === '/login') {
  12. next({ path: '/' })
  13. NProgress.done() // if current page is dashboard will not trigger afterEach hook, so manually handle it
  14. } else {
  15. if (store.getters.roles.length === 0) {
  16. store.dispatch('GetInfo').then(res => { // 拉取用户信息
  17. let menus=res.data.menus;
  18. let username=res.data.username;
  19. store.dispatch('GenerateRoutes', { menus,username }).then(() => { // 生成可访问的路由表
  20. router.addRoutes(store.getters.addRouters); // 动态添加可访问路由表
  21. next({ ...to, replace: true })
  22. })
  23. }).catch((err) => {
  24. store.dispatch('FedLogOut').then(() => {
  25. Message.error(err || 'Verification failed, please login again')
  26. next({ path: '/' })
  27. })
  28. })
  29. } else {
  30. next()
  31. }
  32. }
  33. } else {
  34. if (whiteList.indexOf(to.path) !== -1) {
  35. next()
  36. } else {
  37. next('/login')
  38. NProgress.done()
  39. }
  40. }
  41. })
  42. router.afterEach(() => {
  43. NProgress.done() // 结束Progress
  44. })