index.tsx 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. import React, { useCallback, useEffect, useMemo, useState } from 'react'
  2. import styles from './index.module.scss'
  3. import { Button, Input, Select } from 'antd'
  4. import { useDispatch, useSelector } from 'react-redux'
  5. import { A1EditInfoType } from './data'
  6. import { A7_APIdel, A7_APIgetList, A7_APIpublish } from '@/store/action/A7collection'
  7. import { RootState } from '@/store'
  8. import { MessageFu } from '@/utils/message'
  9. import { A7tableType } from '@/types/api/A7collection'
  10. import MyPopconfirm from '@/components/MyPopconfirm'
  11. import MyTable from '@/components/MyTable'
  12. import { A7tableC } from '@/utils/tableData'
  13. import A7add from './A7add'
  14. import { handleCopyClick } from '@/utils/copyTxt'
  15. import { editPreview } from '@/store/action/layout'
  16. import { baseURL } from '@/utils/http'
  17. const pageDataBase = {
  18. pageNum: 1,
  19. pageSize: 10
  20. }
  21. function A7collection() {
  22. const dispatch = useDispatch()
  23. const [pageData, setPageData] = useState(pageDataBase)
  24. const [title, setTitle] = useState('')
  25. const [type, setType] = useState(0)
  26. const getListFu = useCallback(
  27. (title?: string) => {
  28. // status: -1 全部 0 未发布 1 已发布
  29. dispatch(A7_APIgetList({ ...pageData, status: -1, title, type }))
  30. },
  31. [dispatch, pageData, type]
  32. )
  33. useEffect(() => {
  34. getListFu()
  35. }, [getListFu])
  36. // 点击重置
  37. const resetSelectFu = useCallback(() => {
  38. setPageData({ ...pageDataBase })
  39. }, [])
  40. const tableInfo = useSelector((state: RootState) => state.A7collection.tableInfo)
  41. const delTableFu = useCallback(
  42. async (id: number) => {
  43. const res = await A7_APIdel(id)
  44. if (res.code === 0) {
  45. MessageFu.success('删除成功!')
  46. if (tableInfo.list.length === 1 && pageData.pageNum > 1) {
  47. setPageData({ ...pageData, pageNum: pageData.pageNum - 1 })
  48. }
  49. getListFu()
  50. }
  51. },
  52. [getListFu, pageData, tableInfo.list.length]
  53. )
  54. const publishFu = useCallback(
  55. async (id: number) => {
  56. const res = await A7_APIpublish(id)
  57. if (res.code === 0) {
  58. MessageFu.success('发布成功!')
  59. getListFu()
  60. }
  61. },
  62. [getListFu]
  63. )
  64. const tableLastBtn = useMemo(() => {
  65. return [
  66. {
  67. title: '操作',
  68. render: (item: A7tableType) => (
  69. <>
  70. <Button
  71. size='small'
  72. type='text'
  73. onClick={() =>
  74. handleCopyClick(
  75. item.status === 1
  76. ? `${baseURL}/mini/#/collectDetail?id=${item.artifactId}&isFrom=weixin`
  77. : `${baseURL}/mini/#/collectDetail?id=${item.artifactId}&preview=1`
  78. )
  79. }
  80. >
  81. 复制地址
  82. </Button>
  83. {item.status === 0 && (
  84. <Button
  85. size='small'
  86. type='text'
  87. onClick={() =>
  88. dispatch(
  89. editPreview({
  90. isOpenPreview: true,
  91. src: `/collectDetail?id=${item.artifactId}&preview=1`
  92. })
  93. )
  94. }
  95. >
  96. 预览
  97. </Button>
  98. )}
  99. <Button
  100. size='small'
  101. type='text'
  102. onClick={() => setEditInfo({ id: item.artifactId, txt: '编辑' })}
  103. >
  104. 编辑
  105. </Button>
  106. {item.status === 0 && (
  107. <Button size='small' type='text' onClick={() => publishFu(item.artifactId)}>
  108. 发布
  109. </Button>
  110. )}
  111. <MyPopconfirm txtK='删除' onConfirm={() => delTableFu(item.artifactId)} />
  112. </>
  113. )
  114. }
  115. ]
  116. }, [delTableFu, dispatch, publishFu])
  117. //新增、编辑
  118. const [editInfo, setEditInfo] = useState<A1EditInfoType>({
  119. id: 0,
  120. txt: ''
  121. })
  122. return (
  123. <div className={styles.A7collection}>
  124. <div className='pageTitle'>克博典藏 {editInfo.id ? ` - ${editInfo.txt}` : ''}</div>
  125. {/* 顶部筛选 */}
  126. <div className='A7top'>
  127. <div className='A7topLeft'>
  128. <Input
  129. style={{ width: 200 }}
  130. placeholder='请输入标题'
  131. onChange={e => setTitle(e.target.value)}
  132. value={title}
  133. />
  134. <Button type='primary' onClick={() => getListFu(title)}>
  135. 搜索
  136. </Button>
  137. <Button
  138. type='primary'
  139. onClick={() => {
  140. resetSelectFu()
  141. setTitle('')
  142. }}
  143. >
  144. 重置
  145. </Button>
  146. <div className='rowItem'>
  147. 类别:
  148. <Select
  149. style={{ width: 120 }}
  150. defaultValue={0}
  151. options={[
  152. { label: '全部', value: 0 },
  153. { label: '棉麻丝绸', value: 1 },
  154. { label: '铁器、其他金属器', value: 2 },
  155. { label: '文物、宣传品', value: 3 },
  156. { label: '其他', value: 4 }
  157. ]}
  158. onChange={value => setType(value)}
  159. />
  160. </div>
  161. </div>
  162. <Button type='primary' onClick={() => setEditInfo({ id: -1, txt: '新增' })}>
  163. 新增
  164. </Button>
  165. </div>
  166. {/* 表格主体 */}
  167. <div className='A7tableBox'>
  168. <MyTable
  169. myKey='artifactId'
  170. yHeight={625}
  171. list={tableInfo.list}
  172. columnsTemp={A7tableC}
  173. lastBtn={tableLastBtn}
  174. pageNum={pageData.pageNum}
  175. pageSize={pageData.pageSize}
  176. total={tableInfo.total}
  177. onChange={(pageNum, pageSize) => setPageData({ ...pageData, pageNum, pageSize })}
  178. />
  179. </div>
  180. {/* 新增 / 编辑 */}
  181. {editInfo.id ? (
  182. <A7add
  183. editInfo={editInfo}
  184. closeFu={() => setEditInfo({ id: 0, txt: '新增' })}
  185. addTableFu={resetSelectFu}
  186. editTableFu={getListFu}
  187. />
  188. ) : null}
  189. </div>
  190. )
  191. }
  192. const MemoA7collection = React.memo(A7collection)
  193. export default MemoA7collection