TabDynamic.tsx 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. import { getDynamicCreativeMonitorListApi, GetDynamicCreativeMonitorProps } from "@/services/adMonitor/adMonitor"
  2. import { Button, Card, Col, message, Row, Space } from "antd"
  3. import moment from "moment"
  4. import FilterDynamicQuery from "./FilterDynamicQuery"
  5. import React, { useEffect, useRef, useState } from "react"
  6. import { dynamicConfig } from "./config"
  7. import { useAjax } from "@/Hook/useAjax"
  8. import TableData from "@/pages/launchSystemNew/components/TableData"
  9. import tableDynamicConfig from "./tableDynamicConfig"
  10. import { PauseCircleOutlined, PlayCircleOutlined } from "@ant-design/icons"
  11. import { updateBatchDynamicCreativesInfoApi } from "@/services/launchAdq/adqv3"
  12. const configName = '创意列表3.0'
  13. /**
  14. * 创意数据
  15. * @returns
  16. */
  17. const TabDynamic: React.FC = () => {
  18. /***********************************/
  19. const [queryForm, setQueryForm] = useState<GetDynamicCreativeMonitorProps>({ pageNum: 1, pageSize: 20, columns: [], isDeleted: false, dataTimeMin: moment().subtract(7, 'days').format('YYYY-MM-DD'), dataTimeMax: moment().format('YYYY-MM-DD') })
  20. const [filterForm, setFilterForm] = useState<GetDynamicCreativeMonitorProps>()
  21. const [selectedRows, setSelectedRows] = useState<any[]>([])
  22. const getDynamicCreativeMonitorList = useAjax((params) => getDynamicCreativeMonitorListApi(params), { formatResult: true })
  23. const updateBatchDynamicCreativesInfo = useAjax((params) => updateBatchDynamicCreativesInfoApi(params))
  24. /***********************************/
  25. useEffect(() => {
  26. getList()
  27. }, [filterForm, queryForm])
  28. const getList = () => {
  29. let message = localStorage.getItem(`myAdMonitorConfig1.0.1_${configName}`)
  30. if (message) {
  31. message = JSON.parse(message)
  32. }
  33. let columns: string[] = []
  34. if (message && Array.isArray(message)) {
  35. message.forEach((item: { serverIndex: any; dataIndex: string; }) => {
  36. if (!['cz'].includes(item.dataIndex) && item?.serverIndex) {
  37. columns.push(item?.serverIndex)
  38. }
  39. })
  40. } else {
  41. dynamicConfig.forEach((item: any) => {
  42. item?.data?.forEach((d: { default: any, serverIndex: string, dataIndex: string }) => {
  43. if (d.default && !['cz'].includes(d.dataIndex) && d?.serverIndex) {
  44. columns.push(d?.serverIndex)
  45. }
  46. })
  47. })
  48. }
  49. let params: any = { ...queryForm, ...filterForm, columns }
  50. if (Object.keys(queryForm).includes('isDeleted') && typeof queryForm.isDeleted === 'boolean') {
  51. params.isDeleted = [params.isDeleted]
  52. }
  53. getDynamicCreativeMonitorList.run(params)
  54. }
  55. const dynamicHandle = (type: '删除' | '启动' | '暂停', data?: any) => {
  56. let accountAdgroupMaps = data ? [data.account_id + ',' + data.dynamic_creative_id] : [...new Set(selectedRows?.map(item => item.account_id + ',' + item.dynamic_creative_id))]
  57. let hide: any
  58. if (data) {
  59. hide = message.loading(`正在设置...`, 0, () => {
  60. message.success('设置成功');
  61. });
  62. }
  63. switch (type) {
  64. case '启动':
  65. case '暂停':
  66. updateBatchDynamicCreativesInfo.run({ accountAdgroupMaps, suspend: type === '暂停' }).then(res => {
  67. if (res?.failIdList?.length === 0) {
  68. message.success(`修改操作完成!`)
  69. getDynamicCreativeMonitorList.refresh()
  70. setSelectedRows([])
  71. } else {
  72. // setFailIdList(res?.list || [])
  73. // setFailVisible(true)
  74. }
  75. if (hide) {
  76. hide()
  77. }
  78. })
  79. break
  80. }
  81. }
  82. return <Card>
  83. <Row gutter={[6, 6]} align='middle' style={{ marginBottom: 10 }}>
  84. <FilterDynamicQuery
  85. queryForm={queryForm}
  86. setQueryForm={setQueryForm}
  87. onChange={(value) => {
  88. setFilterForm({ ...value })
  89. }}
  90. />
  91. </Row>
  92. <div className='expandClassname'>
  93. <TableData
  94. refreshData={getList}
  95. isCard={false}
  96. className='expendTable'
  97. columns={() => tableDynamicConfig((data, type) => dynamicHandle(type, data))}
  98. ajax={getDynamicCreativeMonitorList}
  99. fixed={{ left: 2, right: 2 }}
  100. dataSource={getDynamicCreativeMonitorList?.data?.data?.records}
  101. loading={getDynamicCreativeMonitorList?.loading}
  102. scroll={{ y: 560 }}
  103. total={getDynamicCreativeMonitorList?.data?.data?.total}
  104. page={getDynamicCreativeMonitorList?.data?.data?.current}
  105. pageSize={getDynamicCreativeMonitorList?.data?.data?.size}
  106. myKey={'dynamic_creative_id'}
  107. gutter={[0, 10]}
  108. config={dynamicConfig}
  109. configName={configName}
  110. rowClassName={(record) => {
  111. if (record?.tag_value === 100) {
  112. return 'row_error'
  113. } else if (record?.tag_value === 90) {
  114. return 'row_warning'
  115. } else {
  116. return ''
  117. }
  118. }}
  119. leftChild={<Space direction='vertical'>
  120. <Row gutter={[10, 10]} align='middle'>
  121. <Col><Button type='primary' style={{ background: '#67c23a', borderColor: '#67c23a' }} loading={updateBatchDynamicCreativesInfo.loading} icon={<PlayCircleOutlined />} disabled={selectedRows.length === 0} onClick={() => dynamicHandle('启动')}>启动</Button></Col>
  122. <Col><Button type='primary' style={{ background: '#e6a23c', borderColor: '#e6a23c' }} loading={updateBatchDynamicCreativesInfo.loading} icon={<PauseCircleOutlined />} disabled={selectedRows.length === 0} onClick={() => dynamicHandle('暂停')}>暂停</Button></Col>
  123. </Row>
  124. </Space>}
  125. rowSelection={{
  126. selectedRowKeys: selectedRows.map(item => item.dynamic_creative_id.toString()),
  127. getCheckboxProps: (record: any) => ({
  128. disabled: record.status === 'STATUS_DELETED'
  129. }),
  130. onSelect: (record: { dynamic_creative_id: number, mpName: string }, selected: boolean) => {
  131. if (selected) {
  132. selectedRows.push({ ...record })
  133. setSelectedRows([...selectedRows])
  134. } else {
  135. let newSelectAccData = selectedRows.filter((item: { dynamic_creative_id: number }) => item.dynamic_creative_id !== record.dynamic_creative_id)
  136. setSelectedRows([...newSelectAccData])
  137. }
  138. },
  139. onSelectAll: (selected: boolean, selectedRowss: { dynamic_creative_id: number }[], changeRows: { dynamic_creative_id: number }[]) => {
  140. if (selected) {
  141. let newSelectAccData = [...selectedRows]
  142. changeRows.forEach((item: { dynamic_creative_id: number }) => {
  143. let index = newSelectAccData.findIndex((ite: { dynamic_creative_id: number }) => ite.dynamic_creative_id === item.dynamic_creative_id)
  144. if (index === -1) {
  145. newSelectAccData.push({ ...item })
  146. }
  147. })
  148. setSelectedRows([...newSelectAccData])
  149. } else {
  150. let newSelectAccData = selectedRows.filter((item: { dynamic_creative_id: number }) => {
  151. let index = changeRows.findIndex((ite: { dynamic_creative_id: number }) => ite.dynamic_creative_id === item.dynamic_creative_id)
  152. if (index !== -1) {
  153. return false
  154. } else {
  155. return true
  156. }
  157. })
  158. setSelectedRows([...newSelectAccData])
  159. }
  160. }
  161. }}
  162. onChange={(props: any) => {
  163. let { sortData, pagination } = props
  164. let { current, pageSize } = pagination
  165. let newQueryForm = JSON.parse(JSON.stringify(queryForm))
  166. newQueryForm.pageNum = current
  167. newQueryForm.pageSize = pageSize
  168. if (sortData && JSON.stringify('sortData') !== '{}') {
  169. let { field, order } = sortData // descend 降序 大到小 ascend 升序 小到大
  170. if (order) {
  171. newQueryForm.sortColumn = field
  172. newQueryForm.sortAsc = order === 'ascend'
  173. } else {
  174. Object.keys(newQueryForm).forEach(key => {
  175. if (key === 'sortColumn' || key === 'sortAsc') {
  176. delete newQueryForm[key]
  177. }
  178. })
  179. }
  180. } else {
  181. Object.keys(newQueryForm).forEach(key => {
  182. if (key === 'sortField' || key === 'sort') {
  183. delete newQueryForm[key]
  184. }
  185. })
  186. }
  187. setQueryForm({ ...newQueryForm })
  188. }}
  189. />
  190. </div>
  191. </Card>
  192. }
  193. export default TabDynamic