index.tsx 3.9 KB

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