12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import { useMemo } from 'react'
  2. import Taro from '@tarojs/taro'
  3. import { useModel } from '@/store'
  4. import { getQueryString } from '@/utils'
  5. import useRouter from '@/utils/hooks/useRouter'
  6. import useTrackPage from '@/utils/hooks/useTrackPage'
  7. import Loading from './Loading'
  8. import { getPageBy, getIndexPageOf } from '../routes'
  9. export default (Child) => (props) => {
  10. const location = Taro.getStorageSync('location')
  11. const { person } = useModel('person')
  12. const router = useRouter()
  13. // 埋点页面访问
  14. const trackPageData = {
  15. page: router.path,
  16. params: getQueryString(router.params),
  17. location,
  18. }
  19. useTrackPage(trackPageData)
  20. // 确保人员信息到位
  21. const loading = !person?.personRole;
  22. // 校验人员角色及页面是否对应
  23. const jumpPage = useMemo(() => {
  24. const personRole = person?.personRole;
  25. if (!personRole) return;
  26. const isNormalPerson = personRole === 'normal'
  27. const currentPage = getPageBy(router.path)
  28. let indexPage = getIndexPageOf(personRole)
  29. if (!isNormalPerson) {
  30. indexPage = `${personRole}/${indexPage.page}`
  31. } else {
  32. indexPage = `pages/index/index`
  33. }
  34. const isMatched = isNormalPerson ?
  35. // 如果是普通客户, page.root 应该是空的
  36. !currentPage.root :
  37. // 其他角色, 应该是对应的
  38. currentPage.root === personRole
  39. // 如果对应上, 就不跳转
  40. return isMatched ? personRole : indexPage
  41. }, [router.path, person?.personRole])
  42. if (jumpPage) {
  43. // 注意此处跳转是没有加上原来的页面参数的
  44. Taro.reLaunch({
  45. url: `/${jumpPage}`,
  46. })
  47. }
  48. return loading ? <Loading /> : <Child {...props} person={person} router={router} location={location} />
  49. }