index.tsx 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
  2. import styles from './index.module.scss'
  3. import { useDispatch, useSelector } from 'react-redux'
  4. import {
  5. B2_APIdel,
  6. B2_APIgetList,
  7. B2_APIgetNumAll,
  8. B2_APIupdate
  9. } from '@/store/action/B2exhiLog'
  10. import { RootState } from '@/store'
  11. import { MessageFu } from '@/utils/message'
  12. import { B2FromDataType, B2tableType } from './type'
  13. import { Button, DatePicker, Input, Select, Switch } from 'antd'
  14. import MyPopconfirm from '@/components/MyPopconfirm'
  15. import MyTable from '@/components/MyTable'
  16. import { B2tableC } from '@/utils/tableData'
  17. import B2look from './B2look'
  18. import { B2selectArr } from './data'
  19. import LocStat from '../A6record/LocStat'
  20. const { RangePicker } = DatePicker
  21. const fromDataBase: B2FromDataType = {
  22. searchKey: '',
  23. status: '',
  24. pageNum: 1,
  25. pageSize: 10,
  26. startTime: '',
  27. endTime: ''
  28. }
  29. function B2exhiLog() {
  30. const dispatch = useDispatch()
  31. const [fromData, setFromData] = useState(fromDataBase)
  32. // 总人数
  33. const [numAll, setNumAll] = useState(0)
  34. const getListFu = useCallback(async () => {
  35. dispatch(B2_APIgetList(fromData))
  36. const res = await B2_APIgetNumAll(fromData)
  37. if (res.code === 0) {
  38. setNumAll(res.data)
  39. }
  40. }, [dispatch, fromData])
  41. useEffect(() => {
  42. getListFu()
  43. }, [getListFu])
  44. const [inputKey, setInputKey] = useState(1)
  45. // 输入框的输入
  46. const timeRef = useRef(-1)
  47. const txtChangeFu = useCallback(
  48. (e: React.ChangeEvent<HTMLInputElement>, key: 'searchKey') => {
  49. clearTimeout(timeRef.current)
  50. timeRef.current = window.setTimeout(() => {
  51. setFromData({
  52. ...fromData,
  53. [key]: e.target.value.replaceAll("'", ''),
  54. pageNum: 1
  55. })
  56. }, 500)
  57. },
  58. [fromData]
  59. )
  60. // 点击重置
  61. const resetSelectFu = useCallback(() => {
  62. setInputKey(Date.now())
  63. setFromData(fromDataBase)
  64. }, [])
  65. // 时间选择器改变
  66. const timeChange = useCallback(
  67. (date: any, dateString: any) => {
  68. let startTime = ''
  69. let endTime = ''
  70. if (dateString[0] && dateString[1]) {
  71. startTime = dateString[0] + ' 00:00:00'
  72. endTime = dateString[1] + ' 23:59:59'
  73. }
  74. setFromData({ ...fromData, startTime, endTime, pageNum: 1 })
  75. },
  76. [fromData]
  77. )
  78. const { tableInfo } = useSelector((state: RootState) => state.B2exhiLog)
  79. // 点击删除
  80. const delTableFu = useCallback(
  81. async (id: number) => {
  82. const res = await B2_APIdel(id)
  83. if (res.code === 0) {
  84. MessageFu.success('删除成功!')
  85. getListFu()
  86. }
  87. },
  88. [getListFu]
  89. )
  90. // 核销
  91. const updateFu = useCallback(
  92. async (id: number, status: 0 | 1) => {
  93. const res = await B2_APIupdate(id, status)
  94. if (res.code === 0) {
  95. MessageFu.success('操作成功!')
  96. getListFu()
  97. }
  98. },
  99. [getListFu]
  100. )
  101. const tableLastBtn = useMemo(() => {
  102. return [
  103. {
  104. title: '核销状态',
  105. render: (item: B2tableType) => (
  106. <Switch
  107. checkedChildren='已核销'
  108. unCheckedChildren='未核销'
  109. value={item.status === 1}
  110. onChange={() => updateFu(item.id, item.status === 1 ? 0 : 1)}
  111. />
  112. )
  113. },
  114. {
  115. title: '操作',
  116. render: (item: B2tableType) => (
  117. <>
  118. <Button size='small' type='text' onClick={() => setLookId(item.id)}>
  119. 查看
  120. </Button>
  121. <MyPopconfirm txtK='删除' onConfirm={() => delTableFu(item.id)} />
  122. </>
  123. )
  124. }
  125. ]
  126. }, [delTableFu, updateFu])
  127. // 点击查看
  128. const [lookId, setLookId] = useState(0)
  129. // 点击地区统计
  130. const [locShow, setLocShow] = useState(false)
  131. return (
  132. <div className={styles.B2exhiLog}>
  133. <div className='pageTitle'>展馆预约记录</div>
  134. <div className='B2top'>
  135. <div className='B2top1'>
  136. <div className='B2topRow'>
  137. <span>搜索:</span>
  138. <Input
  139. key={inputKey}
  140. maxLength={50}
  141. style={{ width: 200 }}
  142. placeholder='请输入姓名/联系电话'
  143. allowClear
  144. onChange={e => txtChangeFu(e, 'searchKey')}
  145. />
  146. </div>
  147. <div className='B2topRow'>
  148. <span>核销状态:</span>
  149. <Select
  150. style={{ width: 200 }}
  151. value={fromData.status}
  152. onChange={e => setFromData({ ...fromData, pageNum: 1, status: e })}
  153. options={B2selectArr}
  154. />
  155. </div>
  156. <div className='B2topRow'>
  157. <span>预约日期:</span>
  158. <RangePicker key={inputKey} onChange={timeChange} />
  159. </div>
  160. </div>
  161. <div className='B2top1'>
  162. <Button onClick={() => setLocShow(true)}>地区统计</Button>&emsp;
  163. <Button onClick={resetSelectFu}>重置</Button>
  164. </div>
  165. </div>
  166. <MyTable
  167. yHeight={626}
  168. list={tableInfo.list}
  169. columnsTemp={B2tableC}
  170. lastBtn={tableLastBtn}
  171. pageNum={fromData.pageNum}
  172. pageSize={fromData.pageSize}
  173. total={tableInfo.total}
  174. onChange={(pageNum, pageSize) => setFromData({ ...fromData, pageNum, pageSize })}
  175. />
  176. {/* 总人数 */}
  177. <div className='B2numAll'>总人数:{numAll}</div>
  178. {/* 点击查看 */}
  179. {lookId ? <B2look sId={lookId} closeFu={() => setLookId(0)} /> : null}
  180. {/* 点击地区统计 */}
  181. {locShow ? (
  182. <LocStat type='展馆' apiObj={fromData} closeFu={() => setLocShow(false)} />
  183. ) : null}
  184. </div>
  185. )
  186. }
  187. const MemoB2exhiLog = React.memo(B2exhiLog)
  188. export default MemoB2exhiLog