use-user.ts 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import { usePageVisibility } from '@vant/use'
  2. import { watch } from 'vue'
  3. import AppState from '/src/state'
  4. import detailState from '/src/pages/detail/state'
  5. import request from '/src/helpers/request'
  6. import { useOriginSearch } from '.'
  7. import { permissionPopup } from '../popups/permission/permission'
  8. import { browser, getRequestHostname } from '/src/helpers/utils'
  9. const search = useOriginSearch()
  10. const browserInfo = browser()
  11. export type ClientType = 'student' | 'teacher' | 'web'
  12. export const useClientType = (): ClientType => {
  13. const search = useOriginSearch()
  14. // console.log("🚀 ~ search", search)
  15. if (search.client) return (search.client as ClientType)
  16. /**
  17. * pathname 不可能是student | teacher
  18. */
  19. let pathnameStudent = location.pathname.indexOf('/orchestra-student/') === 0 || browserInfo.isStudent
  20. let pathnameTeacher = location.pathname.indexOf('/orchestra-teacher/') === 0 || browserInfo.isTeacher
  21. if (pathnameStudent) {
  22. return 'student'
  23. }
  24. if (pathnameTeacher) {
  25. return 'teacher'
  26. }
  27. return 'web'
  28. }
  29. // 除学生短外,其他平台无视会员权限信息
  30. const MemberDefaultData = {
  31. membershipDays: 1,
  32. }
  33. export const useUpdateMember = () => {
  34. const prefix = getRequestHostname()
  35. request
  36. .get(`/musicSheet/detail/${search.id}`, {
  37. prefix: prefix,
  38. })
  39. .then((res) => {
  40. if (detailState.activeDetail) {
  41. detailState.activeDetail.orderStatus = res.data.orderStatus
  42. detailState.activeDetail.play = res.data.play
  43. }
  44. })
  45. }
  46. export const useUser = () => {
  47. const status = usePageVisibility()
  48. const getUser = async () => {
  49. try {
  50. const client = useClientType()
  51. if (client === 'student') {
  52. const { data } = await request.get('/appLoginUser/getUserInfo')
  53. AppState.user = data
  54. }
  55. if (client === 'teacher') {
  56. const { data } = await request.get('/appLoginUser/getUserInfo', {
  57. prefix: '/api-teacher',
  58. })
  59. AppState.user = {
  60. ...MemberDefaultData,
  61. ...data,
  62. }
  63. }
  64. if (client === 'web') {
  65. AppState.user = {
  66. ...MemberDefaultData,
  67. }
  68. }
  69. } catch (error) {}
  70. }
  71. getUser()
  72. watch(status, async (value) => {
  73. permissionPopup.show = false
  74. if (value === 'visible' && AppState.user?.membershipDays === 0) {
  75. getUser()
  76. }
  77. if (value === 'visible' && detailState.activeDetail?.orderStatus !== 'PAID') {
  78. useUpdateMember()
  79. }
  80. })
  81. }