index.tsx 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. import { FnAjax, useAjax } from '@/Hook/useAjax'
  2. import { ListData, } from '@/services/launchAdq'
  3. import { PromotedObjectType } from '@/services/launchAdq/enum'
  4. import { createSysAdcreative, getSysAdcreativeList } from '@/services/launchAdq/creative'
  5. import { Col, Row, Input, Select, Button } from 'antd'
  6. import React, { useEffect, useState, useCallback } from 'react'
  7. import TableData from '../../../components/TableData'
  8. import AdModal from './modal'
  9. import tableConfig from './tableConfig'
  10. export interface ModalConfig {
  11. visible: boolean;
  12. title?: string;
  13. }
  14. function Creative() {
  15. // 变量
  16. const [modalConfig, setModalConfig] = useState<ModalConfig>({
  17. visible: false,
  18. title: '新建'
  19. })
  20. const [oldsearchData, setOldsearchData] = useState<any>(null)
  21. // api方法
  22. const sysAdcreativeList: FnAjax<ListData<any>|any> = useAjax((params) => getSysAdcreativeList(params),{formatResult:true})
  23. const createSysAdgroup = useAjax((params) => createSysAdcreative(params))
  24. // 初始获取列表
  25. useEffect(() => {
  26. getList({ pageSize: 20, pageNum: 1 })
  27. }, [])
  28. // 获取列表
  29. const getList = useCallback((arg: { pageSize: number, pageNum: number, adcreativeName?: string, promotedObjectType?: string }) => {
  30. Object.keys(arg).forEach(key => {
  31. !arg[key] && delete arg[key]
  32. })
  33. if (JSON.stringify(arg) !== JSON.stringify(oldsearchData)) {
  34. setOldsearchData(arg)
  35. sysAdcreativeList.run(arg)
  36. }
  37. }, [oldsearchData])
  38. // 设置变量
  39. const handleModalConfig = useCallback((arg: ModalConfig) => {
  40. setModalConfig({ ...modalConfig, ...arg })
  41. }, [modalConfig])
  42. // submit
  43. const submit = useCallback((arg: any) => {
  44. console.log(arg)
  45. createSysAdgroup.run(arg).then(res => {
  46. if (res) {
  47. sysAdcreativeList.refresh()
  48. handleModalConfig({ visible: false })
  49. }
  50. })
  51. }, [sysAdcreativeList])
  52. console.log(sysAdcreativeList)
  53. return <div>
  54. <TableData
  55. columns={tableConfig}
  56. ajax={sysAdcreativeList}
  57. dataSource={sysAdcreativeList?.data?.data?.records}
  58. loading={sysAdcreativeList?.loading}
  59. scroll={{ y: 600 }}
  60. total={sysAdcreativeList?.data?.data?.total}
  61. page={sysAdcreativeList?.data?.data?.current}
  62. pageSize={sysAdcreativeList?.data?.data?.size}
  63. leftChild={<>
  64. <Row gutter={[10, 10]}>
  65. <Col span={24}><Button type='primary' onClick={() => {
  66. handleModalConfig({ visible: true })
  67. }}>新建创意模板</Button></Col>
  68. <Col>
  69. <Input
  70. placeholder='创意名称'
  71. allowClear
  72. onBlur={(e) => {
  73. let value = e.target.value
  74. getList({ pageNum: 1, pageSize: 20, adcreativeName: value })
  75. }}
  76. onKeyDownCapture={(e: any) => {
  77. let key = e.key
  78. if (key === 'Enter') {
  79. let value = e.target.value
  80. getList({ pageNum: 1, pageSize: 20, adcreativeName: value })
  81. }
  82. }}
  83. onChange={(e) => {
  84. let value = e.target.value
  85. if (!value) {
  86. getList({ pageNum: 1, pageSize: 20, adcreativeName: value })
  87. }
  88. }}
  89. />
  90. </Col>
  91. <Col>
  92. <Select placeholder='推广目标选择' style={{ minWidth: 200 }} showSearch filterOption={(input: any, option: any) =>
  93. (option!.children as unknown as string).toLowerCase().includes(input.toLowerCase())
  94. } allowClear onChange={(value: any) => {
  95. getList({ pageNum: 1, pageSize: 20, promotedObjectType: value as any })
  96. }}>
  97. {
  98. Object.keys(PromotedObjectType).map(key => {
  99. // let obj = JSON.parse(PromotedObjectType[key])
  100. return <Select.Option value={key} key={key}>{PromotedObjectType[key]}</Select.Option>
  101. })
  102. }
  103. </Select>
  104. </Col>
  105. </Row>
  106. </>}
  107. onChange={(props: any) => {
  108. let { sortData, pagination } = props
  109. let { current, pageSize } = pagination
  110. getList({ pageNum: current, pageSize })
  111. }}
  112. />
  113. {modalConfig.visible && <AdModal visible={modalConfig.visible} title={modalConfig.title} PupFn={handleModalConfig} callback={submit} confirmLoading={createSysAdgroup.loading} />}
  114. </div>
  115. }
  116. export default Creative