index.tsx 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. import React, { useCallback, useEffect, useState } from 'react'
  2. import styles from './index.module.scss'
  3. import TopCom from '@/components/TopCom'
  4. import ZFlooBtn from '@/components/ZFlooBtn'
  5. import classNames from 'classnames'
  6. import history from '@/utils/history'
  7. import { A3ListApiType, A3ListType } from './type'
  8. import getWeekList from '@/utils/timeChange'
  9. import { A3timeChageObj } from './data'
  10. import { A3_APIgetInfoByDay } from '@/store/action/all'
  11. import dayjs from 'dayjs'
  12. import { MessageFu } from '@/utils/message'
  13. // 待完善后端接口没有(还应该在 当该时间段存在已通过/待审核的申请 把num变成0)
  14. const baseList: A3ListApiType[] = [
  15. {
  16. createTime: '2024-04-16 17:02:48',
  17. creatorId: 1,
  18. creatorName: '',
  19. friday: 1,
  20. id: 1,
  21. monday: 1,
  22. saturday: 1,
  23. sunday: 1,
  24. thursday: 1,
  25. time: 'am',
  26. tuesday: 1,
  27. updateTime: '2024-12-14 16:22:25',
  28. wednesday: 0
  29. },
  30. {
  31. createTime: '2024-04-16 18:07:02',
  32. creatorId: 1,
  33. creatorName: '',
  34. friday: 0,
  35. id: 2,
  36. monday: 0,
  37. saturday: 1,
  38. sunday: 1,
  39. thursday: 0,
  40. time: 'pm',
  41. tuesday: 1,
  42. updateTime: '2024-12-14 17:40:03',
  43. wednesday: 0
  44. }
  45. ]
  46. function A3selectDay() {
  47. const [list, setList] = useState<A3ListType[]>([])
  48. const [loding, setLoding] = useState(false)
  49. // 获取日期信息(过滤掉不可预约日期)
  50. const getTimeRes = useCallback(async () => {
  51. const res = await A3_APIgetInfoByDay(dayjs().format('YYYY-MM-DD'))
  52. if (res.code === 0) {
  53. let noTime: string = res.data.stopDate
  54. noTime = noTime.replaceAll('月', '-').replaceAll('日', '')
  55. const noTimeArr = noTime.split(',')
  56. setTimeout(() => {
  57. setLoding(true)
  58. const arr: A3ListType[] = []
  59. const arrTime = getWeekList('MM-DD')
  60. // 上午obj
  61. const AMobj = baseList[0]
  62. // 下午obj
  63. const PMobj = baseList[1]
  64. arrTime.forEach(v => {
  65. if (!noTimeArr.includes(v.date)) {
  66. arr.push({
  67. id: v.timeStamp,
  68. time: v.date,
  69. txt: v.name,
  70. shangNum: Reflect.get(AMobj, Reflect.get(A3timeChageObj, v.name)),
  71. xiaNum: Reflect.get(PMobj, Reflect.get(A3timeChageObj, v.name))
  72. })
  73. }
  74. })
  75. // if(dayjs())
  76. const noeXisoShi = Number(dayjs(Date.now()).format('HH'))
  77. if (noeXisoShi >= 12) arr[0].shangNum = -1
  78. if (noeXisoShi >= 17) arr[0].xiaNum = -1
  79. setList(arr)
  80. }, 100)
  81. }
  82. }, [])
  83. useEffect(() => {
  84. getTimeRes()
  85. }, [getTimeRes])
  86. const [acObj, setAcObj] = useState({
  87. id: 0,
  88. AmPm: ''
  89. })
  90. // 点击上午和下午
  91. // 待完善 接口返回的 usable字段 含义不明确
  92. const AmPmclick = useCallback(async (idCuo: number, val: 'am' | 'pm') => {
  93. const time = dayjs(idCuo).format('YYYY-MM-DD')
  94. const res = await A3_APIgetInfoByDay(time)
  95. if (res.code === 0) {
  96. const flag = res.data.time.usable
  97. if (flag === 0) setAcObj({ id: idCuo, AmPm: val })
  98. else MessageFu.info('当前预约时段已满')
  99. }
  100. }, [])
  101. return (
  102. <div className={styles.A3selectDay}>
  103. <TopCom txt='选择日期' />
  104. <div className={classNames('A3main', acObj.id ? '' : 'A3mainNoBtn')}>
  105. <div className='A3list'>
  106. {list.length ? (
  107. <div className='mySorrl'>
  108. {list.map(item => (
  109. <div
  110. className='A3row'
  111. key={item.id}
  112. hidden={item.shangNum <= 0 && item.xiaNum <= 0}
  113. >
  114. <div className='A3R1'>
  115. {item.time} {item.txt}
  116. </div>
  117. <div className='A3R2'>
  118. <div
  119. onClick={() => AmPmclick(item.id, 'am')}
  120. className={classNames(
  121. item.id === acObj.id && acObj.AmPm === 'am' ? 'A3ac' : '',
  122. item.shangNum > 0 ? '' : 'myBtnNo'
  123. )}
  124. >
  125. {item.shangNum < 0 ? '上午已超时' : '上午'}
  126. {item.shangNum ? '' : '(已满)'}
  127. </div>
  128. <div
  129. onClick={() => AmPmclick(item.id, 'pm')}
  130. className={classNames(
  131. item.id === acObj.id && acObj.AmPm === 'pm' ? 'A3ac' : '',
  132. item.xiaNum > 0 ? '' : 'myBtnNo'
  133. )}
  134. >
  135. 下午{item.xiaNum ? '' : '(已满)'}
  136. </div>
  137. </div>
  138. </div>
  139. ))}
  140. </div>
  141. ) : (
  142. <div className='A3listNo' hidden={!loding}>
  143. 暂无可约日期
  144. </div>
  145. )}
  146. </div>
  147. <ZFlooBtn
  148. txt={acObj.id ? '下一步' : '请选择日期'}
  149. clickFu={() => history.push(`/selectCourse/${acObj.id}/${acObj.AmPm}`)}
  150. />
  151. </div>
  152. </div>
  153. )
  154. }
  155. const MemoA3selectDay = React.memo(A3selectDay)
  156. export default MemoA3selectDay