index.tsx 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. import { FnAjax, useAjax } from '@/Hook/useAjax'
  2. import { Data, ListData, SysAdgroupsDTO } from '@/services/launchAdq'
  3. import { PromotedObjectType } from '@/services/launchAdq/enum'
  4. import { createSysAdgroups, getSysAdgroupsInfo, getSysAdgroupsList } from '@/services/launchAdq/localAd'
  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. type?:'add'|'look'|'edit',
  14. dataInfo?:null
  15. }
  16. function Ad() {
  17. // 变量
  18. const [modalConfig, setModalConfig] = useState<ModalConfig>({
  19. visible: false,
  20. type:'add'
  21. })
  22. const [oldsearchData, setOldsearchData] = useState<any>(null)
  23. // api方法
  24. const sysAdgroupsList: FnAjax<ListData<SysAdgroupsDTO> | any> = useAjax((params) => getSysAdgroupsList(params),{formatResult:true})
  25. const getSysAdgroupsInfos:any = useAjax((adgroupsId) => getSysAdgroupsInfo(adgroupsId),{formatResult:true})
  26. const createSysAdgroup = useAjax((params) => createSysAdgroups(params))
  27. // 初始获取列表
  28. useEffect(() => {
  29. getList({ pageSize: 20, pageNum: 1 })
  30. }, [])
  31. // 获取列表
  32. const getList = useCallback((arg: { pageSize: number, pageNum: number, adgroupName?: string, promotedObjectType?: string }) => {
  33. Object.keys(arg).forEach(key => {
  34. !arg[key] && delete arg[key]
  35. })
  36. if (JSON.stringify(arg) !== JSON.stringify(oldsearchData)) {
  37. setOldsearchData(arg)
  38. sysAdgroupsList.run(arg)
  39. }
  40. }, [oldsearchData])
  41. // 设置变量
  42. const handleModalConfig = useCallback((arg: ModalConfig) => {
  43. setModalConfig({ ...modalConfig, ...arg })
  44. }, [modalConfig])
  45. // submit
  46. const submit = useCallback((arg: any) => {
  47. console.log(arg)
  48. createSysAdgroup.run(arg).then(res => {
  49. if (res) {
  50. sysAdgroupsList.refresh()
  51. handleModalConfig({ visible: false,dataInfo:null,type:'add' })
  52. }
  53. })
  54. }, [sysAdgroupsList])
  55. // 获取详情
  56. const getInfo = useCallback((adgroupsId,type)=>{
  57. getSysAdgroupsInfos.run(adgroupsId).then((res: any)=>{
  58. setModalConfig({...modalConfig,visible:true,type,dataInfo:res.data})
  59. })
  60. },[modalConfig])
  61. // 回调
  62. const callback=useCallback((data,type)=>{
  63. getInfo(data.id,type)
  64. },[])
  65. return <div>
  66. <TableData
  67. columns={()=>tableConfig(callback)}
  68. ajax={sysAdgroupsList}
  69. dataSource={sysAdgroupsList?.data?.data?.records}
  70. loading={sysAdgroupsList?.loading}
  71. // scroll={{ y: 600 }}
  72. total={sysAdgroupsList?.data?.data?.total}
  73. page={sysAdgroupsList?.data?.data?.current}
  74. pageSize={sysAdgroupsList?.data?.data?.size}
  75. leftChild={<>
  76. <Row gutter={[10, 10]}>
  77. <Col span={24}><Button type='primary' onClick={() => {
  78. handleModalConfig({ visible: true })
  79. }}>新建广告模板</Button></Col>
  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. <Col>
  104. <Select placeholder='推广目标选择' style={{ minWidth: 200 }} showSearch filterOption={(input, option) =>
  105. (option!.children as unknown as string).toLowerCase().includes(input.toLowerCase())
  106. } allowClear onChange={(value) => {
  107. getList({ pageNum: 1, pageSize: 20, promotedObjectType: value })
  108. }}>
  109. {
  110. Object.keys(PromotedObjectType).map(key => {
  111. // let obj = JSON.parse(PromotedObjectType[key])
  112. return <Select.Option value={key} key={key}>{PromotedObjectType[key]}</Select.Option>
  113. })
  114. }
  115. </Select>
  116. </Col>
  117. </Row>
  118. </>}
  119. onChange={(props: any) => {
  120. let { sortData, pagination } = props
  121. let { current, pageSize } = pagination
  122. getList({pageNum:current,pageSize})
  123. }}
  124. // config={guanggao}
  125. // configName={'广告模板列表'}
  126. />
  127. {modalConfig.visible && <AdModal visible={modalConfig.visible} PupFn={handleModalConfig} callback={submit} confirmLoading={createSysAdgroup.loading} type={modalConfig.type} dataInfo={modalConfig.dataInfo}/>}
  128. </div>
  129. }
  130. export default Ad