index.tsx 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
  2. import styles from './index.module.scss'
  3. import { C1InputKeyArr1 } from '../../C1ledger/data'
  4. import { Button, Cascader, Input, Select } from 'antd'
  5. import { C8baseFormData } from './data'
  6. import { openGoodsInfoFu } from '@/utils/history'
  7. import classNames from 'classnames'
  8. import { C1InputKeyType } from '../../C1ledger/type'
  9. import MyTable from '@/components/MyTable'
  10. import { C1tableC } from '@/utils/tableData'
  11. import Y1cathet from '@/pages/Y_goodsDetails/Y1cathet'
  12. import MyPopconfirm from '@/components/MyPopconfirm'
  13. import { useDispatch, useSelector } from 'react-redux'
  14. import { C8_APIgetList, C8_APIrecover } from '@/store/action/C8recycleBin'
  15. import { MessageFu } from '@/utils/message'
  16. import { RootState } from '@/store'
  17. type Props = {
  18. menuId: number
  19. closeFu: (falg: boolean) => void
  20. }
  21. function C8recycleBin({ menuId, closeFu }: Props) {
  22. const dispatch = useDispatch()
  23. const [formData, setFormData] = useState(C8baseFormData)
  24. const formDataRef = useRef(C8baseFormData)
  25. useEffect(() => {
  26. formDataRef.current = formData
  27. }, [formData])
  28. // 点击搜索的 时间戳
  29. const [timeKey, setTimeKey] = useState(0)
  30. // 点击搜索
  31. const clickSearch = useCallback(() => {
  32. setFormData({ ...formData, pageNum: 1 })
  33. setTimeout(() => {
  34. setTimeKey(Date.now())
  35. }, 50)
  36. }, [formData])
  37. // 封装发送请求的函数
  38. const getListFu = useCallback(() => {
  39. dispatch(C8_APIgetList(formDataRef.current))
  40. }, [dispatch])
  41. useEffect(() => {
  42. getListFu()
  43. }, [getListFu, timeKey])
  44. // 输入框的改变
  45. const txtChangeFu = useCallback(
  46. (txt: string, key: C1InputKeyType) => {
  47. setFormData({
  48. ...formData,
  49. [key]: txt
  50. })
  51. },
  52. [formData]
  53. )
  54. // 点击重置
  55. const resetSelectFu = useCallback(() => {
  56. setFormData(C8baseFormData)
  57. setTimeout(() => {
  58. setTimeKey(Date.now())
  59. }, 50)
  60. }, [])
  61. // 页码变化
  62. const paginationChange = useCallback(
  63. (pageNum: number, pageSize: number) => {
  64. setFormData({ ...formData, pageNum, pageSize })
  65. setTimeout(() => {
  66. setTimeKey(Date.now())
  67. }, 50)
  68. },
  69. [formData]
  70. )
  71. const changeRef = useRef(false)
  72. const regainFu = useCallback(
  73. async (id: number) => {
  74. const res = await C8_APIrecover(id)
  75. if (res.code === 0) {
  76. changeRef.current = true
  77. MessageFu.success('恢复成功')
  78. getListFu()
  79. }
  80. },
  81. [getListFu]
  82. )
  83. const tableLastBtn = useMemo(() => {
  84. return [
  85. {
  86. title: '操作',
  87. render: (item: any) => {
  88. return (
  89. <>
  90. <Button size='small' type='text' onClick={() => openGoodsInfoFu(item.id, 9)}>
  91. 查看
  92. </Button>
  93. <MyPopconfirm txtK='恢复' onConfirm={() => regainFu(item.id)} />
  94. </>
  95. )
  96. }
  97. }
  98. ]
  99. }, [regainFu])
  100. // 打开侧边栏
  101. const [cathet, setCathet] = useState(0)
  102. const startBtn = useMemo(() => {
  103. return [
  104. {
  105. title: '藏品编号',
  106. render: (item: any) => {
  107. return (
  108. <span
  109. onClick={() => setCathet(item.id)}
  110. className={classNames('D1GtNum', item.id === cathet ? 'D1GtNumAc' : '')}
  111. >
  112. {item.num || '(空)'}
  113. </span>
  114. )
  115. }
  116. }
  117. ]
  118. }, [cathet])
  119. // 顶部筛选
  120. const searchDom = useCallback(
  121. (arr: any[]) => {
  122. return arr.map(item => {
  123. return (
  124. <div key={item.name}>
  125. <span>{item.name}:</span>
  126. {item.type === '输入框' ? (
  127. <Input
  128. placeholder='请输入'
  129. maxLength={30}
  130. value={formData[item.key as 'num']}
  131. onChange={e => txtChangeFu(e.target.value, item.key)}
  132. />
  133. ) : item.type === '下拉框' ? (
  134. <Select
  135. options={item.data}
  136. placeholder='全部'
  137. allowClear={true}
  138. value={formData[item.key as 'num'] ? formData[item.key as 'num'] : null}
  139. onChange={e => setFormData({ ...formData, [item.key]: e })}
  140. />
  141. ) : (
  142. <Cascader
  143. options={item.data}
  144. placeholder='全部'
  145. fieldNames={{ label: 'name', value: 'id', children: 'children' }}
  146. allowClear={true}
  147. value={
  148. formData[item.key as 'num']
  149. ? (formData[item.key as 'num'] as string).split(',')
  150. : []
  151. }
  152. onChange={e => setFormData({ ...formData, [item.key]: e ? e.join(',') : '' })}
  153. />
  154. )}
  155. </div>
  156. )
  157. })
  158. },
  159. [formData, txtChangeFu]
  160. )
  161. // 从仓库拿数据
  162. const tableInfo = useSelector((state: RootState) => state.C8recycleBin.tableInfo)
  163. return (
  164. <div className={styles.C8recycleBin}>
  165. {/* <div className='pageTitle'>回收站</div> */}
  166. <div className='C8top'>
  167. <div className='C8topll'>{searchDom(C1InputKeyArr1)}</div>
  168. <div className='C8toprr'>
  169. <Button type='primary' onClick={clickSearch}>
  170. 查询
  171. </Button>
  172. &emsp;
  173. <Button onClick={resetSelectFu}>重置</Button>
  174. &emsp;
  175. <Button onClick={() => closeFu(changeRef.current)}>返回</Button>
  176. </div>
  177. </div>
  178. {/* 表格 */}
  179. <MyTable
  180. classKey='C8recycleBin'
  181. yHeight={586}
  182. list={tableInfo.list}
  183. columnsTemp={[...C1tableC, ['txt', '删除日期', 'updateTime']]}
  184. lastBtn={tableLastBtn}
  185. startBtn={startBtn}
  186. pageNum={formData.pageNum}
  187. pageSize={formData.pageSize}
  188. total={tableInfo.total}
  189. onChange={(pageNum, pageSize) => paginationChange(pageNum, pageSize)}
  190. />
  191. {/* 打开侧边栏 */}
  192. <Y1cathet sId={cathet} menuId={menuId} closeFu={() => setCathet(0)} />
  193. </div>
  194. )
  195. }
  196. const MemoC8recycleBin = React.memo(C8recycleBin)
  197. export default MemoC8recycleBin