index.tsx 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. import React, { useCallback, useEffect, useMemo, useState } from 'react'
  2. import styles from './index.module.scss'
  3. import { Button } from 'antd'
  4. import { useDispatch, useSelector } from 'react-redux'
  5. import { A1EditInfoType } from './data'
  6. import { A1_APIdel, A1_APIgetList, A1_APIpublish } from '@/store/action/A1banner'
  7. import { RootState } from '@/store'
  8. import { MessageFu } from '@/utils/message'
  9. import { A1tbType } from '@/types'
  10. import MyPopconfirm from '@/components/MyPopconfirm'
  11. import MyTable from '@/components/MyTable'
  12. import { A1tableC } from '@/utils/tableData'
  13. import A1add from './A1add'
  14. import { editPreview } from '@/store/action/layout'
  15. const pageDataBase = {
  16. pageNum: 1,
  17. pageSize: 10
  18. }
  19. function A1banner() {
  20. const dispatch = useDispatch()
  21. const [pageData, setPageData] = useState(pageDataBase)
  22. const getListFu = useCallback(() => {
  23. // status: -1 全部 0 未发布 1 已发布
  24. dispatch(A1_APIgetList({ ...pageData, status: -1 }))
  25. }, [dispatch, pageData])
  26. useEffect(() => {
  27. getListFu()
  28. }, [getListFu])
  29. // 点击重置
  30. const resetSelectFu = useCallback(() => {
  31. setPageData({ ...pageDataBase })
  32. }, [])
  33. const tableInfo = useSelector((state: RootState) => state.A1banner.tableInfo)
  34. const delTableFu = useCallback(
  35. async (id: number) => {
  36. const res = await A1_APIdel(id)
  37. if (res.code === 0) {
  38. MessageFu.success('删除成功!')
  39. getListFu()
  40. }
  41. },
  42. [getListFu]
  43. )
  44. const publishFu = useCallback(
  45. async (id: number) => {
  46. const res = await A1_APIpublish(id)
  47. if (res.code === 0) {
  48. MessageFu.success('发布成功!')
  49. getListFu()
  50. }
  51. },
  52. [getListFu]
  53. )
  54. const tableLastBtn = useMemo(() => {
  55. return [
  56. {
  57. title: '操作',
  58. render: (item: A1tbType) => (
  59. <>
  60. {item.status === 0 && (
  61. <Button
  62. size='small'
  63. type='text'
  64. onClick={() => {
  65. dispatch(
  66. editPreview({
  67. isOpenPreview: true,
  68. src: 'https://sit-kelamayi.4dage.com/mini/#/indexPage?preview=1'
  69. })
  70. )
  71. }}
  72. >
  73. 预览
  74. </Button>
  75. )}
  76. <Button
  77. size='small'
  78. type='text'
  79. onClick={() => setEditInfo({ id: item.carouselId, txt: '编辑' })}
  80. >
  81. 编辑
  82. </Button>
  83. {item.status === 0 && (
  84. <Button size='small' type='text' onClick={() => publishFu(item.carouselId)}>
  85. 发布
  86. </Button>
  87. )}
  88. <MyPopconfirm txtK='删除' onConfirm={() => delTableFu(item.carouselId)} />
  89. </>
  90. )
  91. }
  92. ]
  93. }, [delTableFu, dispatch, publishFu])
  94. //新增、编辑
  95. const [editInfo, setEditInfo] = useState<A1EditInfoType>({
  96. id: 0,
  97. txt: ''
  98. })
  99. return (
  100. <>
  101. <div className={styles.A1banner}>
  102. <div className='pageTitle'>首页轮播图 {editInfo.id ? ` - ${editInfo.txt}` : ''}</div>
  103. {/* 顶部筛选 */}
  104. <div className='A1top'>
  105. <Button type='primary' onClick={() => setEditInfo({ id: -1, txt: '新增' })}>
  106. 新增
  107. </Button>
  108. </div>
  109. {/* 表格主体 */}
  110. <div className='A1tableBox'>
  111. <MyTable
  112. myKey='carouselId'
  113. yHeight={625}
  114. list={tableInfo.list}
  115. columnsTemp={A1tableC}
  116. lastBtn={tableLastBtn}
  117. pageNum={pageData.pageNum}
  118. pageSize={pageData.pageSize}
  119. total={tableInfo.total}
  120. onChange={(pageNum, pageSize) => setPageData({ ...pageData, pageNum, pageSize })}
  121. />
  122. </div>
  123. {/* 新增 / 编辑 */}
  124. {editInfo.id ? (
  125. <A1add
  126. editInfo={editInfo}
  127. closeFu={() => setEditInfo({ id: 0, txt: '新增' })}
  128. addTableFu={resetSelectFu}
  129. editTableFu={getListFu}
  130. ></A1add>
  131. ) : null}
  132. </div>
  133. </>
  134. )
  135. }
  136. const MemoA1banner = React.memo(A1banner)
  137. export default MemoA1banner