index.tsx 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. import React, { useCallback, useEffect, useState } from 'react'
  2. import styles from './index.module.scss'
  3. import TopCom from '@/components/TopCom'
  4. import classNames from 'classnames'
  5. import MyPopconfirm from '@/components/MyPopconfirm'
  6. import succImg from '@/assets/img/my/succ.png'
  7. import errImg from '@/assets/img/my/err.png'
  8. import succImg2 from '@/assets/img/my/succ2.png'
  9. import errImg2 from '@/assets/img/my/err2.png'
  10. import { A6_APIcancelAuth, A6_APIgetListRenZheng, A6_APIgetListYuYue } from '@/store/action/all'
  11. import { A6tableType1, A6tableType2 } from './type'
  12. import { FileType } from '@/types'
  13. import { baseURL } from '@/utils/http'
  14. import { MessageFu } from '@/utils/message'
  15. import history, { wxDownFu } from '@/utils/history'
  16. import { ImageViewer } from 'antd-mobile'
  17. import useWxXcx from '@/components/AownUse/useWxXcx'
  18. function A6my() {
  19. // 是否是微信小程序
  20. const { isWXxcx } = useWxXcx()
  21. const [topAc, setTopAc] = useState(
  22. window.location.hash.includes('?m=1') ? '认证申请' : '预约申请'
  23. )
  24. const [list1, setList1] = useState<A6tableType1[]>([])
  25. const [loding1, setLoding1] = useState(false)
  26. // 获取预约申请
  27. const getList1 = useCallback(async () => {
  28. const res = await A6_APIgetListYuYue()
  29. if (res.code === 0) {
  30. setLoding1(true)
  31. setList1(res.data)
  32. }
  33. }, [])
  34. const [list2, setList2] = useState<A6tableType2[]>([])
  35. const [loding2, setLoding2] = useState(false)
  36. // 获取认证申请
  37. const getList2 = useCallback(async () => {
  38. const res = await A6_APIgetListRenZheng()
  39. if (res.code === 0) {
  40. setLoding2(true)
  41. setList2(res.data)
  42. }
  43. }, [])
  44. useEffect(() => {
  45. getList1()
  46. getList2()
  47. }, [getList1, getList2])
  48. // 点击撤回
  49. const recallFu = useCallback(
  50. async (id: number, type: 'apply' | 'auth') => {
  51. const res = await A6_APIcancelAuth(id, type)
  52. if (res.code === 0) {
  53. MessageFu.success('撤回申请成功!')
  54. if (type === 'apply') getList1()
  55. else getList2()
  56. }
  57. },
  58. [getList1, getList2]
  59. )
  60. const lookImgFu = useCallback((url: string) => {
  61. MessageFu.info('可长按图片保存')
  62. ImageViewer.show({ image: baseURL + url })
  63. }, [])
  64. return (
  65. <div className={styles.A6my}>
  66. <TopCom txt='我的申请' backFu={() => history.push('/')} />
  67. <div className='A6main'>
  68. <div className='A6top'>
  69. {['预约申请', '认证申请'].map(item => (
  70. <div
  71. onClick={() => setTopAc(item)}
  72. className={classNames('A6tRow', topAc === item ? 'A6tRowAc' : '')}
  73. key={item}
  74. >
  75. {item}
  76. </div>
  77. ))}
  78. </div>
  79. {/* 预约申请 */}
  80. <div className='A6list' hidden={topAc !== '预约申请'}>
  81. {list1.length ? (
  82. <>
  83. {list1.map(item => (
  84. <div className='A6row' key={item.id}>
  85. <div className='A6row1'>
  86. {[3, 0].includes(item.status) ? (
  87. <div
  88. className='A6row1_1'
  89. style={{
  90. borderColor: item.status === 3 ? '#aeaeae' : '#f45151',
  91. color: item.status === 3 ? '#fff' : '#f45151',
  92. backgroundColor: item.status === 3 ? '#aeaeae' : ''
  93. }}
  94. >
  95. {item.status === 3 ? '已失效' : '待审核'}
  96. </div>
  97. ) : (
  98. <img src={item.status === 1 ? succImg : errImg} alt='' />
  99. )}
  100. <p>
  101. <span>预约日期:</span>
  102. {item.bookDate}
  103. {item.bookTime === 'am' ? '上午' : '下午'}
  104. </p>
  105. <p>
  106. <span>预约课程:</span>
  107. {item.subjectName}
  108. </p>
  109. </div>
  110. <div className='A6row2'>
  111. <div className='A6row2Tit'>负责人信息:</div>
  112. <p>
  113. <span>负责人姓名:</span>
  114. {item.name}
  115. </p>
  116. <p>
  117. <span>联系方式:</span>
  118. {item.phone}
  119. </p>
  120. <p>
  121. <span>{item.papers || '证件号码'}:</span>
  122. {item.identity}
  123. </p>
  124. </div>
  125. <div className='A6row2'>
  126. <div className='A6row2Tit'>团队信息:</div>
  127. <div className='A6row2_1 mySorrl'>
  128. <p>
  129. <span>参团学生人数:</span>
  130. {item.pcsStudent}
  131. </p>
  132. <p>
  133. <span>随堂老师人数:</span>
  134. {item.pcsTeacher || 0}
  135. </p>
  136. <div>
  137. <span>所属机构:</span>
  138. {item.unit}
  139. </div>
  140. {item.remark ? (
  141. <div>
  142. <span>团队描述:</span>
  143. {item.remark}
  144. </div>
  145. ) : null}
  146. <div>
  147. <span>来自地区:</span>
  148. {item.province + '-' + item.city}
  149. </div>
  150. </div>
  151. </div>
  152. <div className={classNames('A6row3', item.status !== 0 ? 'A6row3No' : '')}>
  153. <MyPopconfirm
  154. txtK='撤回'
  155. onConfirm={() => recallFu(item.id, 'apply')}
  156. Dom={<div>撤回申请</div>}
  157. />
  158. </div>
  159. </div>
  160. ))}
  161. <div className='B2dian' hidden>
  162. 联系方式:17722062600
  163. </div>
  164. </>
  165. ) : (
  166. <div className='A6No' hidden={!loding1}>
  167. 暂无预约申请
  168. </div>
  169. )}
  170. </div>
  171. {/* 认证申请 */}
  172. <div className='A6list' hidden={topAc !== '认证申请'}>
  173. {list2.length ? (
  174. <>
  175. {list2.map(item => (
  176. <div className='A6_2row' key={item.id}>
  177. <div className='A6_2Top'>
  178. <p style={{ opacity: 0 }}>认证单位</p>
  179. <div style={{ opacity: 0 }}>
  180. {item.type === 'neighbour'
  181. ? '澳门街坊会联合总会广东办事处'
  182. : '横琴粤澳深度合作区民生事务局'}
  183. </div>
  184. {[3, 0].includes(item.status) ? (
  185. <div
  186. className='A6row1_1'
  187. style={{
  188. borderColor: item.status === 3 ? '#aeaeae' : '#fff',
  189. backgroundColor: item.status === 3 ? '#aeaeae' : ''
  190. }}
  191. >
  192. {item.status === 3 ? '已失效' : '待审核'}
  193. </div>
  194. ) : (
  195. <img src={item.status === 1 ? succImg2 : errImg2} alt='' />
  196. )}
  197. </div>
  198. <div className='A6_2main'>
  199. <div className='A6_2tit'>负责人信息:</div>
  200. <p>
  201. <span>负责人姓名:</span>
  202. {item.name}
  203. </p>
  204. <p>
  205. <span>联系方式:</span>
  206. {item.phone}
  207. </p>
  208. <div>
  209. <span>单位名称:</span>
  210. <p>{item.unit}</p>
  211. </div>
  212. </div>
  213. <div className='A6_2file'>
  214. <div className='A6_2file1'>
  215. <div className='A6_2file1_1'>授权或同意文件:</div>
  216. {item.file.map((item2: FileType) => (
  217. <div key={item2.id} className='A6_2fileRow'>
  218. <div className='A6_2filell'>{item2.fileName}</div>
  219. {item2.fileName.endsWith('.pdf') || item2.fileName.endsWith('.PDF') ? (
  220. isWXxcx ? (
  221. <div className='A6_2filerr' onClick={() => wxDownFu(item2.filePath)}>
  222. 下载
  223. </div>
  224. ) : (
  225. <a
  226. href={baseURL + item2.filePath}
  227. className='A6_2filerr'
  228. download={item2.fileName}
  229. >
  230. 下载
  231. </a>
  232. )
  233. ) : (
  234. <div className='A6_2filerr' onClick={() => lookImgFu(item2.filePath)}>
  235. 查看
  236. </div>
  237. )}
  238. </div>
  239. ))}
  240. </div>
  241. </div>
  242. <div className={classNames('A6_2btn', item.status !== 0 ? 'A6_2btnNo' : '')}>
  243. <MyPopconfirm
  244. txtK='撤回'
  245. onConfirm={() => recallFu(item.id, 'auth')}
  246. Dom={<div>撤回申请</div>}
  247. />
  248. </div>
  249. </div>
  250. ))}
  251. </>
  252. ) : (
  253. <div className='A6No' hidden={!loding2}>
  254. 暂无认证申请
  255. </div>
  256. )}
  257. </div>
  258. </div>
  259. </div>
  260. )
  261. }
  262. const MemoA6my = React.memo(A6my)
  263. export default MemoA6my