index.tsx 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  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. sysAdgroupId?: number
  15. }
  16. const AdModal: React.FC<Props> = (props) => {
  17. /**********************/
  18. const { visible, onClose, onChange, promotedObjectType, sysAdgroupId } = 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 (sysAdgroupId) {
  26. setSelectedRowKeys([sysAdgroupId])
  27. }
  28. }, [sysAdgroupId])
  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 (sysAdgroupId) {
  47. console.log('sysAdgroupIdsysAdgroupId',sysAdgroupId,selectedRowKeys)
  48. if (selectedRowKeys?.indexOf(sysAdgroupId) === -1) {
  49. onChange && onChange(selectedRowKeys.toString())
  50. } else {
  51. onClose && onClose()
  52. }
  53. } else {
  54. onChange && onChange(selectedRowKeys.toString())
  55. }
  56. } else {
  57. message.error('请选择广告')
  58. }
  59. }
  60. return <Modal title={`选择广告`} bodyStyle={{ padding: 0 }} width={1000} open={visible} onOk={handleOk} onCancel={() => { onClose && onClose() }}>
  61. <TableData
  62. hoverable={false}
  63. columns={tableConfig}
  64. ajax={sysAdgroupsList}
  65. dataSource={sysAdgroupsList?.data?.records}
  66. loading={sysAdgroupsList?.loading}
  67. scroll={{ y: 550 }}
  68. total={sysAdgroupsList?.data?.total}
  69. page={sysAdgroupsList?.data?.current}
  70. pageSize={sysAdgroupsList?.data?.size}
  71. rowSelection={{
  72. type: 'radio',
  73. selectedRowKeys: selectedRowKeys,
  74. onChange: (selectedRowKeys: React.Key[]) => {
  75. setSelectedRowKeys(selectedRowKeys)
  76. }
  77. }}
  78. leftChild={<>
  79. <Row gutter={[10, 10]}>
  80. <Col>
  81. <Input
  82. placeholder='广告名称'
  83. allowClear
  84. onBlur={(e) => {
  85. let value = e.target.value
  86. getList({ pageNum: 1, pageSize: 20, adgroupName: value })
  87. }}
  88. onKeyDownCapture={(e: any) => {
  89. let key = e.key
  90. if (key === 'Enter') {
  91. let value = e.target.value
  92. getList({ pageNum: 1, pageSize: 20, adgroupName: value })
  93. }
  94. }}
  95. onChange={(e) => {
  96. let value = e.target.value
  97. if (!value) {
  98. getList({ pageNum: 1, pageSize: 20, adgroupName: value })
  99. }
  100. }}
  101. />
  102. </Col>
  103. </Row>
  104. </>}
  105. onChange={(props: any) => {
  106. let { sortData, pagination } = props
  107. let { current, pageSize } = pagination
  108. getList({ pageNum: current, pageSize })
  109. }}
  110. />
  111. </Modal>
  112. }
  113. export default React.memo(AdModal)