index.tsx 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. import { FnAjax, useAjax } from "@/Hook/useAjax"
  2. import { ListData, SysAdgroupsDTO } from "@/services/launchAdq"
  3. import { getSysAdgroupsList } from "@/services/launchAdq/localAd"
  4. import { Col, Input, Modal, Row } from "antd"
  5. import React, { useCallback, useEffect, useState } from "react"
  6. import TableData from "../TableData"
  7. import tableConfig from "./tableConfig"
  8. /** 广告选择 */
  9. interface Props {
  10. promotedObjectType: string,
  11. visible?: boolean,
  12. onClose?: () => void,
  13. onChange?: (data: any) => void,
  14. }
  15. const AdModal: React.FC<Props> = (props) => {
  16. /**********************/
  17. const { visible, onClose, onChange, promotedObjectType } = props
  18. const [oldsearchData, setOldsearchData] = useState<any>(null)
  19. const sysAdgroupsList: FnAjax<ListData<SysAdgroupsDTO>> = useAjax((params) => getSysAdgroupsList(params))
  20. const [selectedRowKeys, setSelectedRowKeys] = useState<React.Key[]>([])
  21. /**********************/
  22. // 初始获取列表
  23. useEffect(() => {
  24. getList({ pageSize: 20, pageNum: 1, promotedObjectType })
  25. }, [])
  26. // 获取列表
  27. const getList = useCallback((arg: { pageSize: number, pageNum: number, adgroupName?: string, promotedObjectType?: string }) => {
  28. Object.keys(arg).forEach(key => {
  29. !arg[key] && delete arg[key]
  30. })
  31. if (JSON.stringify(arg) !== JSON.stringify(oldsearchData)) {
  32. setOldsearchData(arg)
  33. sysAdgroupsList.run(arg)
  34. }
  35. }, [oldsearchData])
  36. // 确定
  37. const handleOk = () => {
  38. onChange && onChange(selectedRowKeys.toString())
  39. }
  40. return <Modal title={`选择广告`} bodyStyle={{ padding: 0 }} width={1000} visible={visible} onOk={handleOk} onCancel={() => { onClose && onClose() }}>
  41. <TableData
  42. hoverable={false}
  43. columns={tableConfig}
  44. ajax={sysAdgroupsList}
  45. dataSource={sysAdgroupsList?.data?.records}
  46. loading={sysAdgroupsList?.loading}
  47. scroll={{ y: 600 }}
  48. total={sysAdgroupsList?.data?.total}
  49. page={sysAdgroupsList?.data?.current}
  50. pageSize={sysAdgroupsList?.data?.size}
  51. rowSelection={{
  52. type: 'radio',
  53. selectedRowKeys: selectedRowKeys,
  54. onChange: (selectedRowKeys: React.Key[]) => {
  55. setSelectedRowKeys(selectedRowKeys)
  56. }
  57. }}
  58. leftChild={<>
  59. <Row gutter={[10, 10]}>
  60. <Col>
  61. <Input
  62. placeholder='广告名称'
  63. allowClear
  64. onBlur={(e) => {
  65. let value = e.target.value
  66. getList({ pageNum: 1, pageSize: 20, adgroupName: value })
  67. }}
  68. onKeyDownCapture={(e: any) => {
  69. let key = e.key
  70. if (key === 'Enter') {
  71. let value = e.target.value
  72. getList({ pageNum: 1, pageSize: 20, adgroupName: value })
  73. }
  74. }}
  75. onChange={(e) => {
  76. let value = e.target.value
  77. if (!value) {
  78. getList({ pageNum: 1, pageSize: 20, adgroupName: value })
  79. }
  80. }}
  81. />
  82. </Col>
  83. </Row>
  84. </>}
  85. onChange={(props: any) => {
  86. let { sortData, pagination } = props
  87. let { current, pageSize } = pagination
  88. getList({ pageNum: current, pageSize })
  89. }}
  90. />
  91. </Modal>
  92. }
  93. export default React.memo(AdModal)