index.tsx 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  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 [selectedRows, setSelectedRows] = useState<any[]>([])
  39. const [queryFrom, set_queryFrom] = useState<{
  40. pageNum: number;
  41. pageSize: number;
  42. userId?: string;//用户ID
  43. accountId?: string;//账号本地ID
  44. campaignName?: string;//计划名称
  45. campaignId?: string;//计划ID
  46. configuredStatus?: string;//计划状态
  47. campaignType?: string;//计划类型
  48. promotedObjectType?: string;//推广目标类型
  49. }>({ pageNum: 1, pageSize: 20 })
  50. console.log('计划=====》')
  51. useEffect(() => {
  52. getList({ pageSize: 20, pageNum: 1, accountId: queryParmas.accountId, campaignId: queryParmas.campaignId })
  53. }, [userId, queryParmas.accountId, queryParmas.campaignId])
  54. // 获取列表
  55. const getList = useCallback((params: any) => {
  56. // if (!params.campaignName || params.campaignName !== listAjax?.params[0]?.adcreativeName) {
  57. // !params.campaignName && delete params.campaignName
  58. // }
  59. listAjax.run({ ...params, userId })
  60. }, [userId, listAjax,])
  61. // 同步
  62. const sync = useCallback(() => {
  63. // if (selectedRows?.length === 0) {
  64. // message.error('请先勾选要同步的广点通账号!')
  65. // return
  66. // }
  67. let arr = [...new Set(selectedRows?.map(item=>item.accountId))]
  68. syncAjax.run({ accountIdList:arr }).then(res => {
  69. res && listAjax.refresh()
  70. res ? message.success('同步成功!') : message.error('同步失败!')
  71. })
  72. }, [listAjax,selectedRows])
  73. // 启停
  74. const switchHandle = useCallback((data, checked) => {
  75. let { accountId, campaignId } = data
  76. let configuredStatus = checked ? 'AD_STATUS_NORMAL' : 'AD_STATUS_SUSPEND'
  77. switchAjax.run({ accountId, campaignId, configuredStatus }).then(res => {
  78. res && listAjax.refresh()
  79. res ? message.success(checked ? '开启计划成功!' : '关闭计划成功!') : message.error(checked ? '开启计划失败' : '关闭计划失败!')
  80. })
  81. }, [])
  82. return <div>
  83. <TableData
  84. isCard={false}
  85. columns={() => tableConfig(switchHandle, tableIdClick)}
  86. ajax={listAjax}
  87. syncAjax={sync}
  88. dataSource={listAjax?.data?.data?.records}
  89. loading={listAjax?.loading || syncAjax?.loading}
  90. scroll={{ x: 2000, y: 550 }}
  91. total={listAjax?.data?.data?.total}
  92. page={listAjax?.data?.data?.current}
  93. pageSize={listAjax?.data?.data?.size}
  94. myKey={'campaignId'}
  95. leftChild={<>
  96. <Row gutter={[10, 10]}>
  97. <Col>
  98. <Input
  99. placeholder='广告账号'
  100. allowClear
  101. style={{ width: 150 }}
  102. onChange={(e) => {
  103. let value = e.target.value
  104. set_queryFrom({ ...queryFrom, accountId: value })
  105. tableIdClick({ activeKey: '1', parma: { accountId: '' } })
  106. }}
  107. />
  108. </Col>
  109. <Col>
  110. <Input
  111. placeholder='计划名称'
  112. allowClear
  113. style={{ width: 150 }}
  114. onChange={(e) => {
  115. let value = e.target.value
  116. set_queryFrom({ ...queryFrom, campaignName: value })
  117. }}
  118. />
  119. </Col>
  120. <Col>
  121. <Input
  122. placeholder='计划ID'
  123. allowClear
  124. style={{ width: 150 }}
  125. onChange={(e) => {
  126. let value = e.target.value
  127. set_queryFrom({ ...queryFrom, campaignId: value })
  128. tableIdClick({ activeKey: '2', parma: { campaignId: '' } })
  129. }}
  130. />
  131. </Col>
  132. <Col>
  133. <Select placeholder='推广目标选择' style={{ minWidth: 150 }} showSearch filterOption={(input: any, option: any) =>
  134. (option!.children as unknown as string).toLowerCase().includes(input.toLowerCase())
  135. } allowClear onChange={(value: any) => {
  136. set_queryFrom({ ...queryFrom, promotedObjectType: value })
  137. }}>
  138. {
  139. Object.keys(PromotedObjectType).map(key => {
  140. // let obj = JSON.parse(PromotedObjectType[key])
  141. return <Select.Option value={key} key={key}>{PromotedObjectType[key]}</Select.Option>
  142. })
  143. }
  144. </Select>
  145. </Col>
  146. <Col>
  147. <Select placeholder='计划状态' style={{ minWidth: 150 }} showSearch filterOption={(input: any, option: any) =>
  148. (option!.children as unknown as string).toLowerCase().includes(input.toLowerCase())
  149. } allowClear onChange={(value: any) => {
  150. set_queryFrom({ ...queryFrom, configuredStatus: value })
  151. }}>
  152. {
  153. Object.keys(ConfiguredStatusEnum).map(key => {
  154. // let obj = JSON.parse(PromotedObjectType[key])
  155. return <Select.Option value={key} key={key}>{ConfiguredStatusEnum[key]}</Select.Option>
  156. })
  157. }
  158. </Select>
  159. </Col>
  160. <Col>
  161. <Select placeholder='计划类型' style={{ minWidth: 150 }} showSearch filterOption={(input: any, option: any) =>
  162. (option!.children as unknown as string).toLowerCase().includes(input.toLowerCase())
  163. } allowClear onChange={(value: any) => {
  164. set_queryFrom({ ...queryFrom, campaignType: value })
  165. }}>
  166. {
  167. Object.keys(CampaignTypeEnum).map(key => {
  168. // let obj = JSON.parse(PromotedObjectType[key])
  169. console.log(key)
  170. return <Select.Option value={key} key={key}>{CampaignTypeEnum[key]}</Select.Option>
  171. })
  172. }
  173. </Select>
  174. </Col>
  175. <Col>
  176. <Button type='primary' onClick={() => { getList({ ...queryFrom, pageNum: 1 }) }}>搜索</Button>
  177. </Col>
  178. </Row>
  179. </>}
  180. onChange={(props: any) => {
  181. let { sortData, pagination } = props
  182. let { current, pageSize } = pagination
  183. set_queryFrom({ ...queryFrom, pageNum: current, pageSize })
  184. getList({ ...queryFrom, pageNum: current, pageSize })
  185. }}
  186. rowSelection={{
  187. selectedRowKeys: selectedRows?.map(item => item?.campaignId?.toString()),
  188. onChange: (selectedRowKeys: any, selectedRows: any) => {
  189. setSelectedRows(selectedRows)
  190. }
  191. }}
  192. />
  193. </div>
  194. }
  195. export default Campaign