index.tsx 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. import { FnAjax, useAjax } from '@/Hook/useAjax'
  2. import { ListData, } from '@/services/launchAdq'
  3. import { createsysTargeting, getsysTargetingInfo, getsysTargetingList } from '@/services/launchAdq/targeting'
  4. import { Col, Row, Input, Button } from 'antd'
  5. import React, { useEffect, useState, useCallback } from 'react'
  6. import TableData from '../../../components/TableData'
  7. import AdModal from './modal'
  8. import tableConfig from './tableConfig'
  9. export interface ModalConfig {
  10. visible: boolean;
  11. type?:'add'|'look'|'edit',
  12. dataInfo?:null
  13. }
  14. function Targeting() {
  15. // 变量
  16. const [modalConfig, setModalConfig] = useState<ModalConfig>({
  17. visible: false,
  18. type:'add'
  19. })
  20. const [oldsearchData, setOldsearchData] = useState<any>(null)
  21. // api方法
  22. const list: FnAjax<ListData<any>|any> = useAjax((params) => getsysTargetingList(params),{formatResult:true})
  23. const create = useAjax((params) => createsysTargeting(params))
  24. const targetingInfo = useAjax((params) => getsysTargetingInfo(params),{formatResult:true})
  25. // 初始获取列表
  26. useEffect(() => {
  27. getList({ pageSize: 20, pageNum: 1 })
  28. }, [])
  29. // 获取列表
  30. const getList = useCallback((arg: { pageSize: number, pageNum: number, targetingName?: string, promotedObjectType?: string }) => {
  31. Object.keys(arg).forEach(key => {
  32. !arg[key] && delete arg[key]
  33. })
  34. if (JSON.stringify(arg) !== JSON.stringify(oldsearchData)) {
  35. setOldsearchData(arg)
  36. list.run(arg)
  37. }
  38. }, [oldsearchData])
  39. // 设置变量
  40. const handleModalConfig = useCallback((arg: ModalConfig) => {
  41. setModalConfig({ ...modalConfig, ...arg })
  42. }, [modalConfig])
  43. // submit
  44. const submit = useCallback((arg: any) => {
  45. console.log(arg)
  46. create.run(arg).then(res => {
  47. if (res) {
  48. list.refresh()
  49. handleModalConfig({ visible: false,dataInfo:null,type:'add' })
  50. }
  51. })
  52. }, [list])
  53. // 获取详情
  54. const getInfo = useCallback((adgroupsId,type)=>{
  55. targetingInfo.run(adgroupsId).then((res: any)=>{
  56. setModalConfig({...modalConfig,visible:true,type,dataInfo:res.data})
  57. })
  58. },[modalConfig])
  59. // 回调
  60. const callback=useCallback((data,type)=>{
  61. getInfo(data.id,type)
  62. },[])
  63. return <div>
  64. <TableData
  65. columns={()=>tableConfig(callback)}
  66. ajax={list}
  67. dataSource={list?.data?.data?.records}
  68. loading={list?.loading}
  69. // scroll={{ y: 600 }}
  70. total={list?.data?.data?.total}
  71. page={list?.data?.data?.current}
  72. pageSize={list?.data?.data?.size}
  73. leftChild={<>
  74. <Row gutter={[10, 10]}>
  75. <Col span={24}><Button type='primary' onClick={() => {
  76. handleModalConfig({ visible: true })
  77. }}>新建定向模板</Button></Col>
  78. <Col>
  79. <Input
  80. placeholder='定向名称'
  81. allowClear
  82. onBlur={(e) => {
  83. let value = e.target.value
  84. getList({ pageNum: 1, pageSize: 20, targetingName: value })
  85. }}
  86. onKeyDownCapture={(e: any) => {
  87. let key = e.key
  88. if (key === 'Enter') {
  89. let value = e.target.value
  90. getList({ pageNum: 1, pageSize: 20, targetingName: value })
  91. }
  92. }}
  93. onChange={(e) => {
  94. let value = e.target.value
  95. if (!value) {
  96. getList({ pageNum: 1, pageSize: 20, targetingName: value })
  97. }
  98. }}
  99. />
  100. </Col>
  101. </Row>
  102. </>}
  103. onChange={(props: any) => {
  104. let { sortData, pagination } = props
  105. let { current, pageSize } = pagination
  106. getList({ pageNum: current, pageSize })
  107. }}
  108. // config={guanggao}
  109. // configName={'广告模板列表'}
  110. />
  111. {modalConfig.visible && <AdModal visible={modalConfig.visible} PupFn={handleModalConfig} callback={submit} confirmLoading={create.loading} type={modalConfig.type} dataInfo={modalConfig.dataInfo}/>}
  112. </div>
  113. }
  114. export default Targeting