activity.ts 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import { get } from 'radash'
  2. import { Activity, StudyTour } from '../core/libs/models'
  3. import { getActivityStatusButtonText } from '../core/utils/common'
  4. import dayjs from 'dayjs'
  5. import { useUserStore } from '../store'
  6. import { storeToRefs } from 'pinia'
  7. /**
  8. * 游学活动
  9. */
  10. export const useActivity = (options: Partial<Activity | StudyTour>) => {
  11. const userStore = useUserStore()
  12. const { userInfo } = storeToRefs(userStore)
  13. const applyStartAt = options?.applyStartTime || options?.planApplyStartTime
  14. const applyEndAt = options?.applyEndTime || options?.planApplyEndTime
  15. const startAt = options?.activityStartTime || options?.studyStartTime
  16. const endAt = options?.activityEndTime || options?.studyEndTime
  17. const listItemButtonText = ref(getActivityStatusButtonText(applyStartAt, applyEndAt))
  18. const tooltipShow = ref(true)
  19. const difference = computed(() =>
  20. options?.needPointsType === '1' ? options?.needPointsCount - userInfo.value?.level?.point : 0,
  21. )
  22. const getActivityStatus = () => {
  23. const now = new Date()
  24. if (dayjs(now).isBefore(dayjs(applyStartAt))) {
  25. return 'waiting'
  26. } else if (dayjs(now).isAfter(dayjs(applyStartAt)) && dayjs(now).isBefore(dayjs(applyEndAt))) {
  27. return 'registering'
  28. } else if (dayjs(now).isAfter(dayjs(applyEndAt)) && dayjs(now).isBefore(dayjs(startAt))) {
  29. return 'closed'
  30. } else if (dayjs(now).isAfter(dayjs(startAt)) && dayjs(now).isBefore(dayjs(endAt))) {
  31. return 'running'
  32. } else {
  33. return 'overdue'
  34. }
  35. }
  36. const getActivityStatusText = () =>
  37. ({
  38. waiting: '未开始',
  39. registering: '报名中',
  40. closed: '报名已结束',
  41. running: '活动进行中',
  42. overdue: '活动已结束',
  43. })[getActivityStatus()]
  44. const status = ref(getActivityStatus())
  45. const statusText = ref(getActivityStatusText())
  46. const detailButtonText = ref()
  47. const refresh = () => {
  48. listItemButtonText.value = getActivityStatusButtonText(applyStartAt, applyEndAt)
  49. status.value = getActivityStatus()
  50. statusText.value = getActivityStatusText()
  51. }
  52. return {
  53. getActivityStatusButtonText: () =>
  54. getActivityStatusButtonText(
  55. options?.applyStartTime || options?.planApplyStartTime,
  56. options?.applyEndTime || options?.planApplyEndTime,
  57. ),
  58. getActivityStatusText: () => getActivityStatusText(),
  59. status,
  60. listItemButtonText,
  61. statusText,
  62. tooltipShow,
  63. difference,
  64. refresh,
  65. }
  66. }