permission.ts 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import router from '@/router'
  2. import useStore from '@/store'
  3. import NProgress from 'nprogress'
  4. import 'nprogress/nprogress.css'
  5. import { ls, $log } from '@/utils'
  6. NProgress.configure({ showSpinner: false }) // 进度环显示/隐藏
  7. // 白名单路由
  8. const whiteList = ['/recordPoint'] // todo 白名单过滤列表
  9. // eslint-disable-next-line
  10. // @ts-ignore
  11. router.beforeEach(async (to, from, next) => {
  12. NProgress.start()
  13. // 白名单不做拦截
  14. if (whiteList.indexOf(to.path) !== -1) {
  15. next()
  16. return NProgress.done()
  17. }
  18. const { user, permission } = useStore()
  19. // const hasToken = user.token
  20. const hasToken = ls.get('token')
  21. // 登录页特殊处理
  22. if (to.path === '/login') {
  23. // 登录成功,跳转到首页(特)
  24. hasToken ? next({ path: '/' }) : next()
  25. return NProgress.done()
  26. }
  27. // 业务路由跳转
  28. if (hasToken) {
  29. const isLogin = user.isLogin
  30. if (isLogin) {
  31. next()
  32. } else {
  33. try {
  34. await user.getUserInfo()
  35. // const roles = user.roles
  36. // const accessRoutes: any = await permission.queryMenuList(roles)
  37. const accessRoutes: any = await permission.queryMenuList([])
  38. // 单独处理 菜单实体路径
  39. accessRoutes.forEach((route: any) => {
  40. // console.error(route, 'route....', route.meta?.parentName)
  41. if (route.meta?.parentName) {
  42. router.addRoute(route.meta.parentName, route)
  43. } else {
  44. router.addRoute(route)
  45. }
  46. })
  47. /*router.addRoute('testLayout', {
  48. // 管理员管理
  49. path: 'adminManage1',
  50. name: 'adminManage1',
  51. // component: 'demo/adminManage/index',
  52. // component: 'demo/adminManage/index',
  53. component: modules[`/src/views/${'demo/adminManage/index'}.vue`],
  54. // const = modules[`/src/views/${tmp.component}.vue`] as any
  55. // if (component) {
  56. // tmp.component = component
  57. meta: { title: 'demo_adminManage' }
  58. })*/
  59. next({ ...to, replace: true })
  60. } catch (error) {
  61. // 移除 token 并跳转登录页
  62. await user.resetToken()
  63. $log(error, 'getUserInfo&queryMenuList: error')
  64. next(`/login?redirect=${to.path}`)
  65. }
  66. NProgress.done()
  67. }
  68. } else {
  69. // 跳转登录页添加登录完成重定向path
  70. next(`/login?redirect=${to.path}`)
  71. NProgress.done()
  72. }
  73. })
  74. /**
  75. * @description 路由跳转错误
  76. * */
  77. router.onError(error => {
  78. NProgress.done()
  79. console.error('路由错误:', error)
  80. })
  81. /**
  82. * @description 路由跳转结束
  83. * */
  84. router.afterEach(() => {
  85. NProgress.done()
  86. })