index.tsx 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. import React, { useCallback, useEffect, useState } from 'react'
  2. import styles from './index.module.scss'
  3. import MyTable from '@/components/MyTable'
  4. import { A3DictRowType, A3DictType } from './data'
  5. import { useDispatch, useSelector } from 'react-redux'
  6. import { A3_APIdel, A3_APIgetList } from '@/store/action/A3dict'
  7. import { A3tableC } from '@/utils/tableData'
  8. import { Button } from 'antd'
  9. import MyPopconfirm from '@/components/MyPopconfirm'
  10. import { MessageFu } from '@/utils/message'
  11. import { RootState } from '@/store'
  12. import A3add from './A3add'
  13. const titArr: { name: string; type: A3DictRowType }[] = [
  14. {
  15. name: '附件用途',
  16. type: 'effect'
  17. },
  18. {
  19. name: '维护类型',
  20. type: 'maintain'
  21. },
  22. {
  23. name: '乡镇',
  24. type: 'village'
  25. }
  26. ]
  27. function A3dict() {
  28. const dispatch = useDispatch()
  29. const getListFu = useCallback(async () => {
  30. dispatch(A3_APIgetList())
  31. }, [dispatch])
  32. useEffect(() => {
  33. getListFu()
  34. }, [getListFu])
  35. // 表格相关---------------
  36. const listObj = useSelector((state: RootState) => state.A3dict.listObj)
  37. // 新增编辑
  38. const [addInfo, setAddInfo] = useState({} as A3DictType)
  39. // 点击删除
  40. const delTableFu = useCallback(
  41. async (id: number) => {
  42. const res = await A3_APIdel(id)
  43. if (res.code === 0) {
  44. MessageFu.success('删除成功!')
  45. getListFu()
  46. }
  47. },
  48. [getListFu]
  49. )
  50. const tableLastBtn = useCallback(
  51. (type: A3DictRowType) => {
  52. return [
  53. {
  54. title: '操作',
  55. render: (item: A3DictType) =>
  56. item.name === '其他' ? (
  57. '-'
  58. ) : (
  59. <>
  60. <Button size='small' type='text' onClick={() => setAddInfo(item)}>
  61. 编辑
  62. </Button>
  63. <MyPopconfirm txtK='删除' onConfirm={() => delTableFu(item.id)} />
  64. </>
  65. )
  66. }
  67. ]
  68. },
  69. [delTableFu]
  70. )
  71. return (
  72. <div className={styles.A3dict}>
  73. <div className='pageTitle'>字典管理</div>
  74. {titArr.map(item => (
  75. <div className='A3box' key={item.name}>
  76. <div className='A3Tit'>
  77. <h3>{item.name}</h3>
  78. <Button
  79. type='primary'
  80. onClick={() => setAddInfo({ type: item.type, id: -1 } as A3DictType)}
  81. >
  82. 新增
  83. </Button>
  84. </div>
  85. <MyTable
  86. classKey={`A3box${item.type}`}
  87. yHeight={672}
  88. list={listObj[item.type]}
  89. columnsTemp={A3tableC}
  90. lastBtn={tableLastBtn(item.type)}
  91. pagingInfo={false}
  92. />
  93. </div>
  94. ))}
  95. {/* 新增和编辑 */}
  96. {addInfo.id ? (
  97. <A3add sInfo={addInfo} closeFu={() => setAddInfo({} as A3DictType)} upTableFu={getListFu} />
  98. ) : null}
  99. </div>
  100. )
  101. }
  102. const MemoA3dict = React.memo(A3dict)
  103. export default MemoA3dict