index.tsx 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  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, message, 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. sysAdgroupsId?: number
  15. }
  16. const AdModal: React.FC<Props> = (props) => {
  17. /**********************/
  18. const { visible, onClose, onChange, promotedObjectType, sysAdgroupsId } = props
  19. const [oldsearchData, setOldsearchData] = useState<any>(null)
  20. const sysAdgroupsList: FnAjax<ListData<SysAdgroupsDTO>> = useAjax((params) => getSysAdgroupsList(params))
  21. const [selectedRowKeys, setSelectedRowKeys] = useState<React.Key[]>([])
  22. /**********************/
  23. // 回填
  24. useEffect(() => {
  25. if (sysAdgroupsId) {
  26. setSelectedRowKeys([sysAdgroupsId])
  27. }
  28. }, [sysAdgroupsId])
  29. // 初始获取列表
  30. useEffect(() => {
  31. getList({ pageSize: 20, pageNum: 1, promotedObjectType })
  32. }, [])
  33. // 获取列表
  34. const getList = useCallback((arg: { pageSize: number, pageNum: number, adgroupName?: string, promotedObjectType?: string }) => {
  35. Object.keys(arg).forEach(key => {
  36. !arg[key] && delete arg[key]
  37. })
  38. if (JSON.stringify(arg) !== JSON.stringify(oldsearchData)) {
  39. setOldsearchData(arg)
  40. sysAdgroupsList.run(arg)
  41. }
  42. }, [oldsearchData])
  43. // 确定
  44. const handleOk = () => {
  45. if (selectedRowKeys?.length) {
  46. if (sysAdgroupsId) {
  47. if (selectedRowKeys?.indexOf(sysAdgroupsId) === -1) {
  48. onChange && onChange(selectedRowKeys.toString())
  49. } else {
  50. onClose && onClose()
  51. }
  52. } else {
  53. onChange && onChange(selectedRowKeys.toString())
  54. }
  55. } else {
  56. message.error('请选择广告')
  57. }
  58. }
  59. return <Modal title={`选择广告`} bodyStyle={{ padding: 0 }} width={1000} visible={visible} onOk={handleOk} onCancel={() => { onClose && onClose() }}>
  60. <TableData
  61. hoverable={false}
  62. columns={tableConfig}
  63. ajax={sysAdgroupsList}
  64. dataSource={sysAdgroupsList?.data?.records}
  65. loading={sysAdgroupsList?.loading}
  66. scroll={{ y: 600 }}
  67. total={sysAdgroupsList?.data?.total}
  68. page={sysAdgroupsList?.data?.current}
  69. pageSize={sysAdgroupsList?.data?.size}
  70. rowSelection={{
  71. type: 'radio',
  72. selectedRowKeys: selectedRowKeys,
  73. onChange: (selectedRowKeys: React.Key[]) => {
  74. setSelectedRowKeys(selectedRowKeys)
  75. }
  76. }}
  77. leftChild={<>
  78. <Row gutter={[10, 10]}>
  79. <Col>
  80. <Input
  81. placeholder='广告名称'
  82. allowClear
  83. onBlur={(e) => {
  84. let value = e.target.value
  85. getList({ pageNum: 1, pageSize: 20, adgroupName: value })
  86. }}
  87. onKeyDownCapture={(e: any) => {
  88. let key = e.key
  89. if (key === 'Enter') {
  90. let value = e.target.value
  91. getList({ pageNum: 1, pageSize: 20, adgroupName: value })
  92. }
  93. }}
  94. onChange={(e) => {
  95. let value = e.target.value
  96. if (!value) {
  97. getList({ pageNum: 1, pageSize: 20, adgroupName: value })
  98. }
  99. }}
  100. />
  101. </Col>
  102. </Row>
  103. </>}
  104. onChange={(props: any) => {
  105. let { sortData, pagination } = props
  106. let { current, pageSize } = pagination
  107. getList({ pageNum: current, pageSize })
  108. }}
  109. />
  110. </Modal>
  111. }
  112. export default React.memo(AdModal)