index.tsx 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. import { useEffect, useRef, useState } from 'react'
  2. import HeaderFilter from './components/HeaderFilter'
  3. import ContentTable from './components/ContentTable'
  4. import CreateModal from './components/CreateModal'
  5. import { useGlobalStateUpdate } from '@src/store/globalStates/loadingState'
  6. import {
  7. createAd as createAdRequest,
  8. getAdList,
  9. openAd,
  10. clsoeAd,
  11. getAllAppList
  12. } from './request'
  13. import type {
  14. RowDataType,
  15. PaginationParamsType,
  16. } from './components/ContentTable/types'
  17. import type {
  18. RefType,
  19. FormDataType
  20. } from './components/CreateModal/types'
  21. import type { AllAppListItemType } from './types'
  22. export function AdManage(){
  23. const [tableData, setTableData] = useState<RowDataType[]>([])
  24. const [total, setTotal] = useState(0)
  25. const [paginationParams, setPaginationParams] = useState<PaginationParamsType>({ pageNumber:1, pageSize:10})
  26. const [allAppList, setAllAppList] = useState<AllAppListItemType[]>([])
  27. const createModalRef = useRef<RefType>()
  28. const setloading = useGlobalStateUpdate()
  29. useEffect(()=>{
  30. getAllAppList().then(res=>{
  31. if (res) {
  32. setAllAppList(res)
  33. }
  34. })
  35. },[])
  36. useEffect(()=>{
  37. getTableData()
  38. },[paginationParams])
  39. const getTableData = async () => {
  40. setloading(true)
  41. const {pageNumber,pageSize} = paginationParams
  42. const data = await getAdList({
  43. pageSize,
  44. currentPage: pageNumber,
  45. })
  46. if (data) {
  47. setTableData(data.objs)
  48. setTotal(data.totalSize)
  49. }
  50. setloading(false)
  51. }
  52. const onPaginationChange =async (params:PaginationParamsType) => {
  53. setPaginationParams(params)
  54. }
  55. const onCreate = () => {
  56. createModalRef.current?.open()
  57. }
  58. const onSwitchStatus = async ({row, checked}:{row:RowDataType, checked:boolean}) => {
  59. setloading(true)
  60. const res = checked ? await openAd(row.id) : await clsoeAd(row.id)
  61. setloading(false)
  62. if (res) {
  63. getTableData()
  64. }
  65. }
  66. const createAd = async (form:FormDataType, cb:EventFunctionType<[]>) => {
  67. setloading(true)
  68. const res = await createAdRequest(form)
  69. setloading(false)
  70. if (res) {
  71. getTableData()
  72. cb() // 关闭modal
  73. }
  74. }
  75. const updateAd = (form:RowDataType, cb:EventFunctionType<[]>) => {
  76. console.log('更新',form)
  77. // TODO 更新接口
  78. cb()
  79. }
  80. return (
  81. <>
  82. <HeaderFilter onCreate={onCreate} />
  83. <ContentTable
  84. total={total}
  85. pageNumber={paginationParams.pageNumber}
  86. pageSize={paginationParams.pageSize}
  87. tableData={tableData}
  88. onPaginationChange = {onPaginationChange}
  89. onSwitchStatus={onSwitchStatus}
  90. />
  91. <CreateModal
  92. ref={createModalRef}
  93. allAppList={allAppList}
  94. onCreate={createAd}
  95. onUpdate={updateAd}
  96. />
  97. </>
  98. )
  99. }