permission.ts 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import router from './router/index'
  2. import NProgress from 'nprogress'
  3. import 'nprogress/nprogress.css'
  4. import { Message } from 'element-ui'
  5. import { Route } from 'vue-router'
  6. import { UserModule } from '@/store/modules/user'
  7. NProgress.configure({ showSpinner: false })
  8. const whiteList = ['/login']
  9. router.beforeEach(async(to: Route, _: Route, next: any) => {
  10. // Start progress bar
  11. NProgress.start()
  12. // Determine whether the user has logged in
  13. if (UserModule.token) {
  14. if (to.path === '/login') {
  15. // If is logged in, redirect to the home page
  16. next({ path: '/' })
  17. NProgress.done()
  18. } else {
  19. // Check whether the user has obtained his permission roles
  20. if (UserModule.roles.length === 0) {
  21. try {
  22. // Get user info, including roles
  23. await UserModule.GetUserInfo()
  24. // Set the replace: true, so the navigation will not leave a history record
  25. next({ ...to, replace: true })
  26. } catch (err) {
  27. // Remove token and redirect to login page
  28. UserModule.ResetToken()
  29. Message.error(err || 'Has Error')
  30. next(`/login?redirect=${to.path}`)
  31. NProgress.done()
  32. }
  33. } else {
  34. next()
  35. }
  36. }
  37. } else {
  38. // Has no token
  39. if (whiteList.indexOf(to.path) !== -1) {
  40. // In the free login whitelist, go directly
  41. next()
  42. } else {
  43. // Other pages that do not have permission to access are redirected to the login page.
  44. next(`/login?redirect=${to.path}`)
  45. NProgress.done()
  46. }
  47. }
  48. })
  49. router.afterEach((to: Route) => {
  50. // Finish progress bar
  51. NProgress.done()
  52. // set page title
  53. document.title = to.meta.title
  54. })