index.tsx 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
  2. import styles from './index.module.scss'
  3. import { Button, DatePicker, Input, Select } from 'antd'
  4. import { A2_APIgetList } from '@/store/action/A2business'
  5. import { RouterTypeRow } from '@/types'
  6. import tabLeftArr from '@/pages/Layout/data'
  7. import { selectObj } from '@/utils/select'
  8. import { LogListType } from '@/pages/Y_goodsDetails/Y1cathet/Y44com'
  9. import MyTable from '@/components/MyTable'
  10. import { A2tableC } from '@/utils/tableData'
  11. import { openGoodsInfoFu } from '@/utils/history'
  12. import { MessageFu } from '@/utils/message'
  13. const { RangePicker } = DatePicker
  14. const btnArr = [
  15. { name: '我发起的', key: '1' },
  16. { name: '待我审批', key: '4' },
  17. { name: '抄送我的', key: '3' }
  18. ]
  19. function A2table() {
  20. // 路由信息过滤过来
  21. const typePageArr = useMemo(() => {
  22. const arr: RouterTypeRow[] = []
  23. tabLeftArr.forEach(v1 => {
  24. v1.son.forEach(v2 => {
  25. if (v2.isLog) arr.push(v2)
  26. })
  27. })
  28. return arr
  29. }, [])
  30. const [formData, setFormData] = useState({
  31. pageNum: 1,
  32. pageSize: 10,
  33. name: '',
  34. num: '',
  35. startTime: '',
  36. endTime: '',
  37. status: '',
  38. userType: '1'
  39. })
  40. const getListFu = useCallback(async () => {
  41. const res = await A2_APIgetList(formData)
  42. if (res.code === 0) {
  43. setTableObj({ list: res.data.records || [], total: res.data.total })
  44. }
  45. }, [formData])
  46. useEffect(() => {
  47. getListFu()
  48. }, [getListFu])
  49. // 时间选择器改变
  50. const timeChange = useCallback(
  51. (date: any, dateString: any) => {
  52. let startTime = ''
  53. let endTime = ''
  54. if (dateString[0] && dateString[1]) {
  55. startTime = dateString[0] + ' 00:00:00'
  56. endTime = dateString[1] + ' 23:59:59'
  57. }
  58. setFormData({ ...formData, startTime, endTime, pageNum: 1 })
  59. },
  60. [formData]
  61. )
  62. // 页码变化
  63. const paginationChange = useCallback(
  64. (pageNum: number, pageSize: number) => {
  65. setFormData({ ...formData, pageNum, pageSize })
  66. },
  67. [formData]
  68. )
  69. // 输入框的输入
  70. const timeRef = useRef(-1)
  71. const txtChangeFu = useCallback(
  72. (e: React.ChangeEvent<HTMLInputElement>, key: 'num') => {
  73. clearTimeout(timeRef.current)
  74. timeRef.current = window.setTimeout(() => {
  75. setFormData({
  76. ...formData,
  77. [key]: e.target.value.replaceAll("'", ''),
  78. pageNum: 1
  79. })
  80. }, 500)
  81. },
  82. [formData]
  83. )
  84. const [tableObj, setTableObj] = useState<{ list: LogListType[]; total: number }>({
  85. list: [],
  86. total: 0
  87. })
  88. // 点击查看 新窗口打开
  89. const lookPage = useCallback(
  90. (name: string, id: number) => {
  91. const obj = typePageArr.find(v => v.name === name)
  92. if (obj) openGoodsInfoFu(id, 120, `#${obj.path}_edit/4/`)
  93. else MessageFu.warning('业务类型错误')
  94. },
  95. [typePageArr]
  96. )
  97. const tableLastBtn = useMemo(() => {
  98. return [
  99. {
  100. title: '操作',
  101. render: (item: any) => {
  102. return (
  103. <Button size='small' type='text' onClick={() => lookPage(item.typeName, item.id)}>
  104. 查看
  105. </Button>
  106. )
  107. }
  108. }
  109. ]
  110. }, [lookPage])
  111. return (
  112. <div className={styles.A2table}>
  113. <div className='A2Ttop'>
  114. <div>
  115. {btnArr.map(v => (
  116. <Button
  117. onClick={() => setFormData({ ...formData, userType: v.key, pageNum: 1 })}
  118. key={v.key}
  119. type={formData.userType === v.key ? 'primary' : 'default'}
  120. >
  121. {v.name}
  122. </Button>
  123. ))}
  124. </div>
  125. <div className='A2TtopRR'>
  126. <div>
  127. <span>业务类型:</span>
  128. <Select
  129. allowClear={true}
  130. placeholder='全部'
  131. style={{ width: 120 }}
  132. value={formData.name ? formData.name : null}
  133. onChange={e => setFormData({ ...formData, name: e, pageNum: 1 })}
  134. options={typePageArr.map(v => ({ value: v.name, label: v.name }))}
  135. />
  136. </div>
  137. <div>
  138. <span>业务编号:</span>
  139. <Input
  140. style={{ width: 150 }}
  141. placeholder='请输入业务编号'
  142. maxLength={30}
  143. onChange={e => txtChangeFu(e, 'num')}
  144. />
  145. </div>
  146. <div>
  147. <span>发起日期范围:</span>
  148. <RangePicker style={{ width: 220 }} onChange={timeChange} />
  149. </div>
  150. <div>
  151. <span>申请状态:</span>
  152. <Select
  153. allowClear={true}
  154. placeholder='全部'
  155. style={{ width: 120 }}
  156. value={formData.status ? formData.status : null}
  157. onChange={e => setFormData({ ...formData, status: e, pageNum: 1 })}
  158. options={selectObj['申请状态'].filter(v => v.label !== '待盘点')}
  159. />
  160. </div>
  161. </div>
  162. </div>
  163. {/* 表格 */}
  164. <MyTable
  165. emptyText={true}
  166. list={tableObj.list}
  167. columnsTemp={A2tableC}
  168. lastBtn={tableLastBtn}
  169. pageNum={formData.pageNum}
  170. pageSize={formData.pageSize}
  171. total={tableObj.total}
  172. onChange={(pageNum, pageSize) => paginationChange(pageNum, pageSize)}
  173. />
  174. </div>
  175. )
  176. }
  177. const MemoA2table = React.memo(A2table)
  178. export default MemoA2table