index.tsx 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  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 { A3FromDataType, A3Selct_1 } from './data'
  5. import { A3_APIdel, A3_APIgetList } from '@/store/action/A3holding'
  6. import { RootState } from '@/store'
  7. import { MessageFu } from '@/utils/message'
  8. import { A3tableType } from '@/types'
  9. import { Button, Input, Select } from 'antd'
  10. import MyPopconfirm from '@/components/MyPopconfirm'
  11. import { A1EditInfoType, A1Selct } from '../A1event/data'
  12. import MyTable from '@/components/MyTable'
  13. import { A3tableC } from '@/utils/tableData'
  14. import { A8_APIgetList } from '@/store/action/A8dict'
  15. import A3add from './A3add'
  16. function A3holding() {
  17. const dispatch = useDispatch()
  18. const [fromData, setFromData] = useState<A3FromDataType>({
  19. pageNum: 1,
  20. pageSize: 10,
  21. searchKey: '',
  22. type: '',
  23. dictAgeId: '',
  24. display: ''
  25. })
  26. const getListFu = useCallback(() => {
  27. dispatch(A3_APIgetList(fromData))
  28. }, [dispatch, fromData])
  29. useEffect(() => {
  30. getListFu()
  31. }, [getListFu])
  32. const [inputKey, setInputKey] = useState(1)
  33. // 标题的输入
  34. const timeRef = useRef(-1)
  35. const fromKeyChangeFu = useCallback(
  36. (e: React.ChangeEvent<HTMLInputElement>, key: 'searchKey') => {
  37. clearTimeout(timeRef.current)
  38. timeRef.current = window.setTimeout(() => {
  39. setFromData({ ...fromData, [key]: e.target.value, pageNum: 1 })
  40. }, 500)
  41. },
  42. [fromData]
  43. )
  44. // 点击重置
  45. const resetSelectFu = useCallback(() => {
  46. setInputKey(Date.now())
  47. setFromData({
  48. pageNum: 1,
  49. pageSize: 10,
  50. searchKey: '',
  51. type: '',
  52. dictAgeId: '',
  53. display: ''
  54. })
  55. }, [])
  56. const tableInfo = useSelector((state: RootState) => state.A3holding.tableInfo)
  57. const delTableFu = useCallback(
  58. async (id: number) => {
  59. const res = await A3_APIdel(id)
  60. if (res.code === 0) {
  61. MessageFu.success('删除成功!')
  62. getListFu()
  63. }
  64. },
  65. [getListFu]
  66. )
  67. const tableLastBtn = useMemo(() => {
  68. return [
  69. {
  70. title: '操作',
  71. render: (item: A3tableType) => (
  72. <>
  73. <Button
  74. size='small'
  75. type='text'
  76. onClick={() => setEditInfo({ id: item.id, txt: '查看' })}
  77. >
  78. 查看
  79. </Button>
  80. <Button
  81. size='small'
  82. type='text'
  83. onClick={() => setEditInfo({ id: item.id, txt: '编辑' })}
  84. >
  85. 编辑
  86. </Button>
  87. <MyPopconfirm txtK='删除' onConfirm={() => delTableFu(item.id)} />
  88. </>
  89. )
  90. }
  91. ]
  92. }, [delTableFu])
  93. //查看、新增、编辑
  94. const [editInfo, setEditInfo] = useState<A1EditInfoType>({
  95. id: 0,
  96. txt: ''
  97. })
  98. useEffect(() => {
  99. dispatch(A8_APIgetList())
  100. }, [dispatch])
  101. const A8tableList = useSelector((state: RootState) => state.A8dict.list)
  102. const selectAgeArr = useMemo(() => {
  103. return [{ value: '', label: '全部' }, ...A8tableList.map(v => ({ value: v.id, label: v.name }))]
  104. }, [A8tableList])
  105. return (
  106. <div className={styles.A3holding}>
  107. <div className='pageTitle'>馆藏管理{editInfo.id ? ` - ${editInfo.txt}` : ''}</div>
  108. {/* 顶部筛选 */}
  109. <div className='A3top'>
  110. <div className='A3topLeft'>
  111. <div>
  112. <span>名称:</span>
  113. <Input
  114. key={inputKey}
  115. maxLength={200}
  116. showCount
  117. style={{ width: 300 }}
  118. placeholder='请输入关键字'
  119. allowClear
  120. onChange={e => fromKeyChangeFu(e, 'searchKey')}
  121. />
  122. </div>
  123. <div>
  124. <span>类别:</span>
  125. <Select
  126. placeholder='请选择'
  127. style={{ width: 200 }}
  128. value={fromData.type}
  129. onChange={e => setFromData({ ...fromData, pageNum: 1, type: e })}
  130. options={A3Selct_1}
  131. />
  132. </div>
  133. <div>
  134. <span>年代:</span>
  135. <Select
  136. placeholder='请选择'
  137. style={{ width: 200 }}
  138. value={fromData.dictAgeId}
  139. onChange={e => setFromData({ ...fromData, pageNum: 1, dictAgeId: e })}
  140. options={selectAgeArr}
  141. />
  142. </div>
  143. <div>
  144. <span>状态:</span>
  145. <Select
  146. placeholder='请选择'
  147. style={{ width: 100 }}
  148. value={fromData.display}
  149. onChange={e => setFromData({ ...fromData, pageNum: 1, display: e })}
  150. options={A1Selct}
  151. />
  152. </div>
  153. </div>
  154. <div>
  155. <Button type='primary' onClick={() => setEditInfo({ id: -1, txt: '新增' })}>
  156. 新增
  157. </Button>
  158. &emsp;
  159. <Button onClick={resetSelectFu}>重置</Button>
  160. </div>
  161. </div>
  162. {/* 表格主体 */}
  163. <div className='A3tableBox'>
  164. <MyTable
  165. yHeight={625}
  166. list={tableInfo.list}
  167. columnsTemp={A3tableC}
  168. lastBtn={tableLastBtn}
  169. pageNum={fromData.pageNum}
  170. pageSize={fromData.pageSize}
  171. total={tableInfo.total}
  172. onChange={(pageNum, pageSize) => setFromData({ ...fromData, pageNum, pageSize })}
  173. />
  174. </div>
  175. {/* 新增 编辑 查看 */}
  176. {editInfo.id ? (
  177. <A3add
  178. editInfo={editInfo}
  179. selectAgeArr={selectAgeArr}
  180. closeFu={() => setEditInfo({ id: 0, txt: '' })}
  181. editTableFu={() => getListFu()}
  182. addTableFu={() => resetSelectFu()}
  183. />
  184. ) : null}
  185. </div>
  186. )
  187. }
  188. const MemoA3holding = React.memo(A3holding)
  189. export default MemoA3holding