index.tsx 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. import { useAjax } from '@/Hook/useAjax'
  2. import { CampaignTypeEnum, ConfiguredStatusEnum, PromotedObjectType } from '@/services/launchAdq/enum'
  3. import { Col, Row, Input, Select, message, Button } from 'antd'
  4. import React, { useEffect, useCallback, useState } from 'react'
  5. import TableData from '../../components/TableData'
  6. import tableConfig from './tableConfig'
  7. import { getAdqCampaignList, putAdqCampaignPage, putAdqCampaignConfigStatus } from '@/services/launchAdq/adq'
  8. type Props = {
  9. accountId: string,
  10. adAccountId: string,
  11. userId: string,
  12. queryParmas: {
  13. accountId?: string,//账户ID
  14. campaignId?: string,//计划ID
  15. adgroupId?: string,//广告ID
  16. adcreativeId?: string,//创意ID
  17. pageId?: string,//落地页ID
  18. targetingId?: string,//定向ID}
  19. },
  20. tableIdClick: (props: {
  21. activeKey: string,
  22. parma: {
  23. accountId?: string,//账户ID
  24. campaignId?: string,//计划ID
  25. adgroupId?: string,//广告ID
  26. adcreativeId?: string,//创意ID
  27. pageId?: string,//落地页ID
  28. targetingId?: string,//定向ID
  29. }
  30. }) => void
  31. }
  32. function Campaign(props: Props) {
  33. let { accountId, adAccountId, userId, queryParmas, tableIdClick } = props
  34. // api方法
  35. const listAjax = useAjax((params) => getAdqCampaignList(params), { formatResult: true })
  36. const syncAjax = useAjax((adAccountId) => putAdqCampaignPage(adAccountId))
  37. const switchAjax = useAjax((params) => putAdqCampaignConfigStatus(params))
  38. const [queryFrom, set_queryFrom] = useState<{
  39. pageNum: number;
  40. pageSize: number;
  41. userId?: string;//用户ID
  42. accountId?: string;//账号本地ID
  43. campaignName?: string;//计划名称
  44. campaignId?: string;//计划ID
  45. configuredStatus?: string;//计划状态
  46. campaignType?: string;//计划类型
  47. promotedObjectType?: string;//推广目标类型
  48. }>({ pageNum: 1, pageSize: 20 })
  49. console.log('计划=====》')
  50. useEffect(() => {
  51. getList({ pageSize: 20, pageNum: 1, accountId: queryParmas.accountId, campaignId: queryParmas.campaignId })
  52. }, [userId, queryParmas.accountId, queryParmas.campaignId])
  53. // 获取列表
  54. const getList = useCallback((params: any) => {
  55. // if (!params.campaignName || params.campaignName !== listAjax?.params[0]?.adcreativeName) {
  56. // !params.campaignName && delete params.campaignName
  57. // }
  58. listAjax.run({ ...params, userId })
  59. }, [userId, listAjax,])
  60. // 同步
  61. const sync = useCallback(() => {
  62. if (!adAccountId) {
  63. message.error('请先选择要同步的广点通账号!')
  64. return
  65. }
  66. syncAjax.run(adAccountId).then(res => {
  67. console.log(res)
  68. res && listAjax.refresh()
  69. res ? message.success('同步成功!') : message.error('同步失败!')
  70. })
  71. }, [adAccountId, listAjax])
  72. // 启停
  73. const switchHandle = useCallback((data, checked) => {
  74. let { accountId, campaignId } = data
  75. let configuredStatus = checked ? 'AD_STATUS_NORMAL' : 'AD_STATUS_SUSPEND'
  76. switchAjax.run({ accountId, campaignId, configuredStatus }).then(res => {
  77. res && listAjax.refresh()
  78. res ? message.success(checked ? '开启计划成功!' : '关闭计划成功!') : message.error(checked ? '开启计划失败' : '关闭计划失败!')
  79. })
  80. }, [])
  81. return <div>
  82. <TableData
  83. isCard={false}
  84. columns={() => tableConfig(switchHandle, tableIdClick)}
  85. ajax={listAjax}
  86. syncAjax={sync}
  87. dataSource={listAjax?.data?.data?.records}
  88. loading={listAjax?.loading || syncAjax?.loading}
  89. scroll={{ x: 2000, y: 550 }}
  90. total={listAjax?.data?.data?.total}
  91. page={listAjax?.data?.data?.current}
  92. pageSize={listAjax?.data?.data?.size}
  93. myKey={'campaignId'}
  94. leftChild={<>
  95. <Row gutter={[10, 10]}>
  96. <Col>
  97. <Input
  98. placeholder='广告账号'
  99. allowClear
  100. style={{ width: 150 }}
  101. onChange={(e) => {
  102. let value = e.target.value
  103. set_queryFrom({ ...queryFrom, accountId: value })
  104. tableIdClick({ activeKey: '1', parma: { accountId: '' } })
  105. }}
  106. />
  107. </Col>
  108. <Col>
  109. <Input
  110. placeholder='计划名称'
  111. allowClear
  112. style={{ width: 150 }}
  113. onChange={(e) => {
  114. let value = e.target.value
  115. set_queryFrom({ ...queryFrom, campaignName: value })
  116. }}
  117. />
  118. </Col>
  119. <Col>
  120. <Input
  121. placeholder='计划ID'
  122. allowClear
  123. style={{ width: 150 }}
  124. onChange={(e) => {
  125. let value = e.target.value
  126. set_queryFrom({ ...queryFrom, campaignId: value })
  127. tableIdClick({ activeKey: '2', parma: { campaignId: '' } })
  128. }}
  129. />
  130. </Col>
  131. <Col>
  132. <Select placeholder='推广目标选择' style={{ minWidth: 150 }} showSearch filterOption={(input: any, option: any) =>
  133. (option!.children as unknown as string).toLowerCase().includes(input.toLowerCase())
  134. } allowClear onChange={(value: any) => {
  135. set_queryFrom({ ...queryFrom, promotedObjectType: value })
  136. }}>
  137. {
  138. Object.keys(PromotedObjectType).map(key => {
  139. // let obj = JSON.parse(PromotedObjectType[key])
  140. return <Select.Option value={key} key={key}>{PromotedObjectType[key]}</Select.Option>
  141. })
  142. }
  143. </Select>
  144. </Col>
  145. <Col>
  146. <Select placeholder='计划状态' style={{ minWidth: 150 }} showSearch filterOption={(input: any, option: any) =>
  147. (option!.children as unknown as string).toLowerCase().includes(input.toLowerCase())
  148. } allowClear onChange={(value: any) => {
  149. set_queryFrom({ ...queryFrom, configuredStatus: value })
  150. }}>
  151. {
  152. Object.keys(ConfiguredStatusEnum).map(key => {
  153. // let obj = JSON.parse(PromotedObjectType[key])
  154. return <Select.Option value={key} key={key}>{ConfiguredStatusEnum[key]}</Select.Option>
  155. })
  156. }
  157. </Select>
  158. </Col>
  159. <Col>
  160. <Select placeholder='计划类型' style={{ minWidth: 150 }} showSearch filterOption={(input: any, option: any) =>
  161. (option!.children as unknown as string).toLowerCase().includes(input.toLowerCase())
  162. } allowClear onChange={(value: any) => {
  163. set_queryFrom({ ...queryFrom, campaignType: value })
  164. }}>
  165. {
  166. Object.keys(CampaignTypeEnum).map(key => {
  167. // let obj = JSON.parse(PromotedObjectType[key])
  168. console.log(key)
  169. return <Select.Option value={key} key={key}>{CampaignTypeEnum[key]}</Select.Option>
  170. })
  171. }
  172. </Select>
  173. </Col>
  174. <Col>
  175. <Button type='primary' onClick={() => { getList({ ...queryFrom, pageNum: 1 }) }}>搜索</Button>
  176. </Col>
  177. </Row>
  178. </>}
  179. onChange={(props: any) => {
  180. let { sortData, pagination } = props
  181. let { current, pageSize } = pagination
  182. set_queryFrom({ ...queryFrom, pageNum: current, pageSize })
  183. getList({ ...queryFrom, pageNum: current, pageSize })
  184. }}
  185. />
  186. </div>
  187. }
  188. export default Campaign