index.tsx 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. import { FnAjax, useAjax } from "@/Hook/useAjax"
  2. import { ListData } from "@/services/launchAdq"
  3. import { getSysAdcreativeList } from "@/services/launchAdq/creative"
  4. import { Col, Input, Modal, Row, Select } from "antd"
  5. import React, { useCallback, useEffect, useState } from "react"
  6. import { adcreativeTemplate } from "../../launchManage/createAd/adcreativeCol"
  7. import TableData from "../TableData"
  8. import tableConfig from "./tableConfig"
  9. interface Props {
  10. promotedObjectType: string,
  11. siteSet: string[],
  12. visible?: boolean,
  13. onClose?: () => void,
  14. onChange?: (data: any) => void,
  15. sysAdcreativeId?: number
  16. }
  17. /**
  18. * 选择创意
  19. * @returns
  20. */
  21. const CreativeModal: React.FC<Props> = (props) => {
  22. /****************************/
  23. const { visible, onClose, onChange, sysAdcreativeId, promotedObjectType, siteSet } = props
  24. const sysAdcreativeList: FnAjax<ListData<any> | any> = useAjax((params) => getSysAdcreativeList(params), { formatResult: true })
  25. const [selectedRowKeys, setSelectedRowKeys] = useState<React.Key[]>([])
  26. const [oldsearchData, setOldsearchData] = useState<any>(null)
  27. /****************************/
  28. // 回填
  29. useEffect(() => {
  30. if (sysAdcreativeId) {
  31. setSelectedRowKeys([sysAdcreativeId])
  32. }
  33. }, [sysAdcreativeId])
  34. // 初始获取列表
  35. useEffect(() => {
  36. getList({ pageSize: 20, pageNum: 1, promotedObjectType, siteSet })
  37. }, [])
  38. // 获取列表
  39. const getList = useCallback((arg: { pageSize: number, pageNum: number, adcreativeName?: string, promotedObjectType?: string, siteSet?: string[], adcreativeTemplateIds?: number[] }) => {
  40. Object.keys(arg).forEach(key => {
  41. !arg[key] && delete arg[key]
  42. })
  43. if (JSON.stringify(arg) !== JSON.stringify(oldsearchData)) {
  44. setOldsearchData(arg)
  45. sysAdcreativeList.run(arg)
  46. }
  47. }, [oldsearchData])
  48. const handleOk = () => {
  49. onChange && onChange(selectedRowKeys.toString())
  50. }
  51. return <Modal title={`选择创意`} bodyStyle={{ padding: 0 }} width={1000} open={visible} onOk={handleOk} onCancel={() => { onClose && onClose() }}>
  52. <TableData
  53. hoverable={false}
  54. columns={tableConfig}
  55. ajax={sysAdcreativeList}
  56. dataSource={sysAdcreativeList?.data?.data?.records}
  57. loading={sysAdcreativeList?.loading}
  58. scroll={{ y: 550}}
  59. total={sysAdcreativeList?.data?.data?.total}
  60. page={sysAdcreativeList?.data?.data?.current}
  61. pageSize={sysAdcreativeList?.data?.data?.size}
  62. rowSelection={{
  63. type: 'radio',
  64. selectedRowKeys: selectedRowKeys,
  65. onChange: (selectedRowKeys: React.Key[]) => {
  66. setSelectedRowKeys(selectedRowKeys)
  67. }
  68. }}
  69. leftChild={<>
  70. <Row gutter={[10, 10]}>
  71. <Col>
  72. <Input
  73. placeholder='创意名称'
  74. allowClear
  75. onBlur={(e) => {
  76. let value = e.target.value
  77. getList({ pageNum: 1, pageSize: 20, adcreativeName: value, promotedObjectType, siteSet })
  78. }}
  79. onKeyDownCapture={(e: any) => {
  80. let key = e.key
  81. if (key === 'Enter') {
  82. let value = e.target.value
  83. getList({ pageNum: 1, pageSize: 20, promotedObjectType, siteSet, adcreativeName: value })
  84. }
  85. }}
  86. onChange={(e) => {
  87. let value = e.target.value
  88. if (!value) {
  89. getList({ pageNum: 1, pageSize: 20, promotedObjectType, siteSet, adcreativeName: value })
  90. }
  91. }}
  92. />
  93. </Col>
  94. <Col>
  95. <Select style={{ minWidth: 180 }} mode='multiple' placeholder='请选择创意形式' maxTagCount={1} onChange={(e) => { getList({ pageNum: 1, pageSize: 20, promotedObjectType, siteSet, adcreativeTemplateIds: e }) }}>
  96. {adcreativeTemplate?.map(item => <Select.Option value={item.adcreativeTemplateId} key={item.adcreativeTemplateId}>{item.adcreativeTemplateAppellation}</Select.Option>)}
  97. </Select>
  98. </Col>
  99. {/* adcreativeTemplate */}
  100. </Row>
  101. </>}
  102. onChange={(props: any) => {
  103. let { sortData, pagination } = props
  104. let { current, pageSize } = pagination
  105. getList({ pageNum: current, pageSize, promotedObjectType, siteSet })
  106. }}
  107. />
  108. </Modal>
  109. }
  110. export default React.memo(CreativeModal)