permission.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import router from './router'
  2. import { useNProgress } from '@/hooks/web/useNProgress'
  3. import { useTitle } from '@/hooks/web/useTitle'
  4. import { getToken, getEnterpriseToken, removeToken } from '@/utils/auth'
  5. import { useDictStore } from '@/store/dict'
  6. const { start, done } = useNProgress()
  7. // loginType:1.enterprise: 企业路由
  8. // 2.personal: 个人路由
  9. // 3.personalCommon: 无需登录也能访问的页面,但登录企业不能访问
  10. // 路由守卫
  11. router.beforeEach(async (to, from, next) => {
  12. start()
  13. // loadStart()
  14. if (getToken()) {
  15. if (to.path === '/login') {
  16. if (getEnterpriseToken()) next({ path: '/enterprise' }) // 已登录企业
  17. else next({ path: '/recruitHome' }) // 已登录个人账号
  18. } else {
  19. // 获取字典信息
  20. const dictStore = useDictStore()
  21. dictStore.getDictTypeData()
  22. const type = localStorage.getItem('loginType')
  23. // 判断企业路由和个人路由,防止互串
  24. if (!type) { removeToken(); next(`/login?redirect=${to.fullPath}`) }
  25. else if (to.meta?.loginType === 'common') next()
  26. else if (type === 'enterprise' && to.meta?.loginType === 'personalCommon') next({ path: `/${type}` }) // 企业端不能访问任何个人端路由
  27. else if (type === 'personal' && to.meta?.loginType === 'personalCommon') next()
  28. else if (to.meta?.loginType === type) next()
  29. else next({ path: `/${type}` })
  30. // next()
  31. }
  32. } else {
  33. if (to.meta?.loginType === 'personalCommon' || to.meta?.loginType === 'common') { // 路由不重定向
  34. next()
  35. } else {
  36. next(`/login?redirect=${to.fullPath}`) // 否则全部重定向到登录页
  37. }
  38. }
  39. })
  40. router.afterEach((to) => {
  41. useTitle(to?.meta?.title)
  42. done() // 结束Progress
  43. // loadDone()
  44. })