tablePlanListConfig.tsx 50 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402
  1. import { BidModeEnum, BidStrategyEnum, OptimizationGoalEnum } from '@/services/launchAdq/enum'
  2. import React from 'react'
  3. import { Badge, Dropdown, Menu, Space, Statistic } from 'antd'
  4. import { ReactComponent as RocketSvg } from '@/assets/rocket.svg'
  5. import '../../launchSystemNew/adq/index.less'
  6. import { copy } from '@/utils/utils'
  7. import { ColumnsType } from 'antd/lib/table'
  8. import StatisticNull from '@/components/StatisticNull'
  9. import { DownOutlined } from '@ant-design/icons'
  10. import TimeSeriesLook from '../../launchSystemNew/adq/ad/timeSeriesLook'
  11. import SwitchStatus from '../adqv3/ad/switchStatus'
  12. import CreativePreview from './CreativePreview'
  13. import { ADGROUP_STATUS } from '@/pages/adMonitor/adMonitorList/data'
  14. function tablePlanConfig(
  15. onChange: () => void,
  16. details: (data: any) => void,
  17. log: (data: any) => void,
  18. handleTag: (data: any) => void,
  19. delTag: (data: any) => void,
  20. ): ColumnsType<any> {
  21. let adArr: ColumnsType<any> = [
  22. {
  23. title: '启停',
  24. dataIndex: 'configured_status',
  25. key: 'configured_status',
  26. align: 'center',
  27. width: 40,
  28. fixed: 'left',
  29. render: (a: string, b: any) => {
  30. if (b?.account_id === '总计') {
  31. return '--'
  32. }
  33. return <SwitchStatus configuredStatus={a} isDeleted={b?.is_deleted} adgroupId={b?.adgroup_id} accountId={b?.account_id} onChange={onChange} />
  34. }
  35. },
  36. {
  37. title: '所属账号',
  38. dataIndex: 'account_id',
  39. key: 'account_id',
  40. align: 'center',
  41. width: 80,
  42. ellipsis: true,
  43. render: (a: string) => {
  44. return <Space>
  45. <a onClick={() => copy(a)} >{a}</a>
  46. </Space>
  47. }
  48. },
  49. {
  50. title: '腾讯备注',
  51. dataIndex: 'memo',
  52. key: 'memo',
  53. align: 'center',
  54. width: 80,
  55. ellipsis: true,
  56. render(value, record) {
  57. if (record?.account_id === '总计') {
  58. return '--'
  59. }
  60. return value
  61. },
  62. },
  63. {
  64. title: '本地备注',
  65. dataIndex: 'remark',
  66. key: 'remark',
  67. align: 'center',
  68. width: 80,
  69. ellipsis: true,
  70. render(value, record) {
  71. if (record?.account_id === '总计') {
  72. return '--'
  73. }
  74. return value
  75. },
  76. },
  77. {
  78. title: '广告ID',
  79. dataIndex: 'adgroup_id',
  80. key: 'adgroup_id',
  81. align: 'center',
  82. width: 100,
  83. ellipsis: true,
  84. render: (a: string, b: any) => {
  85. if (b?.account_id === '总计') {
  86. return '--'
  87. }
  88. return <Space>
  89. <a onClick={() => copy(a)} >{a}</a>
  90. </Space>
  91. }
  92. },
  93. {
  94. title: '投手',
  95. dataIndex: 'put_user_name',
  96. key: 'put_user_name',
  97. align: 'center',
  98. width: 70,
  99. ellipsis: true,
  100. render(value, record) {
  101. if (record?.account_id === '总计') return '--';
  102. return value
  103. },
  104. },
  105. {
  106. title: '广告名称',
  107. dataIndex: 'adgroup_name',
  108. key: 'adgroup_name',
  109. width: 280,
  110. ellipsis: true,
  111. render: (a: string, b: any) => {
  112. if (b?.account_id === '总计') return '--';
  113. return a
  114. }
  115. },
  116. {
  117. title: '投放日期',
  118. dataIndex: 'begin_date',
  119. key: 'begin_date',
  120. align: 'center',
  121. width: 150,
  122. ellipsis: true,
  123. sorter: true,
  124. render: (a: string, b: { end_date: string, account_id: any }) => {
  125. if (b?.account_id === '总计') return '--';
  126. return b?.end_date && b?.end_date !== '1970-01-01' ? a + '~' + b.end_date : a + '~' + '长期投放'
  127. }
  128. },
  129. {
  130. title: '投放时间',
  131. dataIndex: 'time_series',
  132. key: 'time_series',
  133. align: 'center',
  134. width: 55,
  135. render: (a: string, b: { endDate: string, account_id: string }) => {
  136. if (b?.account_id === '总计') return '--';
  137. return <TimeSeriesLook timeSeries={a} />
  138. }
  139. },
  140. {
  141. title: '首日开始投放时间',
  142. dataIndex: 'first_day_begin_time',
  143. key: 'first_day_begin_time',
  144. align: 'center',
  145. width: 70,
  146. render(value, record) {
  147. if (record?.account_id === '总计') return '--';
  148. return value
  149. },
  150. },
  151. {
  152. title: '出价',
  153. dataIndex: 'bid_amount',
  154. key: 'bid_amount',
  155. width: 140,
  156. ellipsis: true,
  157. sorter: true,
  158. render: (a: string, b: { bid_mode: string, optimization_goal: string, account_id: any }) => {
  159. if (b?.account_id === '总计') return '--';
  160. return `${b?.bid_mode ? BidModeEnum[b?.bid_mode as keyof typeof BidModeEnum] : ''} ${a}元/${b?.bid_mode === 'BID_MODE_CPM' ? '千次曝光' : b?.bid_mode === 'BID_MODE_CPC' ? '点击' : OptimizationGoalEnum[b?.optimization_goal as keyof typeof OptimizationGoalEnum]}`
  161. }
  162. },
  163. {
  164. title: '深度优化出价',
  165. dataIndex: 'deep_conversion_behavior_bid',
  166. key: 'deep_conversion_behavior_bid',
  167. width: 70,
  168. align: 'center',
  169. render: (a: string, b: { deep_conversion_spec_json: any, deep_conversion_worth_rate: number, account_id: any }) => {
  170. if (b?.account_id === '总计') return '--';
  171. if (b?.deep_conversion_spec_json) {
  172. return b?.deep_conversion_worth_rate
  173. } else {
  174. return '--'
  175. }
  176. }
  177. },
  178. {
  179. title: '出价类型',
  180. dataIndex: 'smart_bid_type',
  181. key: 'smart_bid_type',
  182. align: 'center',
  183. width: 80,
  184. ellipsis: true,
  185. render: (a: string, b) => {
  186. if (b?.account_id === '总计') return '--';
  187. return a === 'SMART_BID_TYPE_CUSTOM' ? '手动出价' : '自动出价'
  188. }
  189. },
  190. {
  191. title: '出价策略',
  192. dataIndex: 'bid_strategy',
  193. key: 'bid_strategy',
  194. align: 'center',
  195. width: 70,
  196. ellipsis: true,
  197. render: (a: string, b) => {
  198. if (b?.account_id === '总计') return '--';
  199. return BidStrategyEnum[a as keyof typeof BidStrategyEnum]
  200. }
  201. },
  202. {
  203. title: '广告组日预算(元)',
  204. dataIndex: 'daily_budget',
  205. key: 'daily_budget',
  206. align: 'center',
  207. width: 70,
  208. sorter: true,
  209. render: (a: string, b: any) => {
  210. if (b?.account_id === '总计') return '--';
  211. return a
  212. }
  213. },
  214. {
  215. title: '是否开启自动版位功能',
  216. dataIndex: 'automatic_site_enabled',
  217. key: 'automatic_site_enabled',
  218. align: 'center',
  219. width: 80,
  220. render: (a: any, b: any) => {
  221. if (b?.account_id === '总计') return '--';
  222. return a ? '开' : '关'
  223. }
  224. },
  225. {
  226. title: '定向条件描述',
  227. dataIndex: 'targeting_translation',
  228. key: 'targeting_translation',
  229. align: 'center',
  230. width: 80,
  231. ellipsis: true,
  232. render: (a: any) => {
  233. return a || '--'
  234. }
  235. },
  236. {
  237. title: '创建时间',
  238. dataIndex: 'created_time',
  239. key: 'created_time',
  240. align: 'center',
  241. width: 140,
  242. ellipsis: true,
  243. render(value, record) {
  244. if (record?.account_id === '总计') return '--';
  245. return value
  246. },
  247. },
  248. {
  249. title: '是否已删除',
  250. dataIndex: 'is_deleted',
  251. key: 'is_deleted',
  252. align: 'center',
  253. width: 60,
  254. render: (a: any, b: any) => {
  255. if (b?.account_id === '总计') return '--';
  256. return <Badge status={!a ? "processing" : "error"} text={a ? '是' : '否'} />
  257. }
  258. },
  259. {
  260. title: '广告状态',
  261. dataIndex: 'system_status',
  262. key: 'system_status',
  263. align: 'center',
  264. width: 100,
  265. ellipsis: true,
  266. render: (a: string) => {
  267. return ADGROUP_STATUS[a as keyof typeof ADGROUP_STATUS]
  268. }
  269. },
  270. {
  271. title: '标记备注',
  272. dataIndex: 'tag_remark',
  273. key: 'tag_remark',
  274. align: 'center',
  275. width: 100,
  276. ellipsis: true,
  277. render(value, b) {
  278. if (b?.account_id === '总计') return '--';
  279. return value || '--'
  280. },
  281. },
  282. {
  283. title: '广告详情',
  284. dataIndex: 'cost_speed',
  285. key: 'cost_speed',
  286. align: 'center',
  287. width: 80,
  288. className: 'padding2',
  289. render: (a: any, b: any) => {
  290. if (b?.account_id === '总计') return '--';
  291. return <div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center', lineHeight: 'normal', fontSize: 14 }}>
  292. <RocketSvg /> <a onClick={() => details(b)} style={{ marginLeft: 10 }}>详情</a>
  293. </div>
  294. }
  295. },
  296. {
  297. title: '创意预览',
  298. dataIndex: 'creative_ids',
  299. key: 'creative_ids',
  300. width: 140,
  301. ellipsis: true,
  302. render: (_: any, b: any) => {
  303. // return <BoxOther creativeComponents={b?.creative_preview?.[0] || {}} />
  304. return <CreativePreview creativePreview={b?.creative_preview || []} deliveryMode={b?.delivery_mode} />
  305. }
  306. },
  307. {
  308. title: '操作',
  309. dataIndex: 'cz',
  310. key: 'cz',
  311. width: 130,
  312. align: 'center',
  313. render: (a: any, b: any) => {
  314. if (b?.account_id === '总计') return '--';
  315. let items = [
  316. { label: <a style={{ fontSize: 12 }} onClick={() => log(b)}>告警日志</a>, key: '1' },
  317. { label: <a style={{ fontSize: 12 }} onClick={() => handleTag(b)}>打标记</a>, key: '2' }
  318. ]
  319. if (b?.tag_value) {
  320. items.push({ label: <a style={{ color: 'red', fontSize: 12 }} onClick={() => delTag(b)}>删除标记</a>, key: '3' })
  321. }
  322. return <Space>
  323. <Dropdown menu={{ items }}>
  324. <a><Space size={2}>更多 <DownOutlined /></Space></a>
  325. </Dropdown>
  326. <a style={{ color: '#1890ff' }} onClick={() => window.open(`https://ad.qq.com/atlas/${b?.account_id}/admanage/index?tab=adgroup&query={%22operation_status%22:[%22CALCULATE_STATUS_EXCLUDE_DEL%22],%22system_status%22:[],%22search_name%22:%22${b.adgroup_id}%22}`)} target="_blank">腾讯广告</a>
  327. </Space>
  328. }
  329. }
  330. ]
  331. let adDataArr: ColumnsType<any> = [
  332. {
  333. title: '消耗',
  334. dataIndex: 'cost_total',
  335. key: 'cost_total',
  336. align: 'center',
  337. width: 110,
  338. sorter: true,
  339. render: (a: any, b: any) => {
  340. return <StatisticNull data={b} field='cost_total' />
  341. }
  342. },
  343. {
  344. title: '曝光量',
  345. dataIndex: 'view_total',
  346. key: 'view_total',
  347. align: 'center',
  348. width: 100,
  349. sorter: true,
  350. render: (a: any, b: any) => {
  351. return <StatisticNull data={b} field='view_total' />
  352. }
  353. },
  354. {
  355. title: '千次曝光成本',
  356. dataIndex: 'thousand_display_price_total',
  357. key: 'thousand_display_price_total',
  358. align: 'center',
  359. width: 110,
  360. sorter: true,
  361. render: (a: any, b: any) => {
  362. return <StatisticNull data={b} field='thousand_display_price_total' precision={2} />
  363. }
  364. },
  365. {
  366. title: '点击量',
  367. dataIndex: 'click_total',
  368. key: 'click_total',
  369. align: 'center',
  370. width: 110,
  371. sorter: true,
  372. render: (a: any, b: any) => {
  373. return <StatisticNull data={b} field='click_total' />
  374. }
  375. },
  376. {
  377. title: '点击率',
  378. dataIndex: 'ctr_total',
  379. key: 'ctr_total',
  380. align: 'center',
  381. width: 110,
  382. sorter: true,
  383. render: (a: any, b: any) => {
  384. if (b?.ctr_total !== undefined && b?.ctr_total !== null) {
  385. return <Statistic value={a ? (a * 100) : 0} precision={2} valueStyle={{ color: '#3f8600' }} suffix="%" />
  386. } else {
  387. return '--'
  388. }
  389. }
  390. },
  391. {
  392. title: '点击均价',
  393. dataIndex: 'cpc_total',
  394. key: 'cpc_total',
  395. align: 'center',
  396. width: 110,
  397. sorter: true,
  398. render: (a: any, b: any) => {
  399. return <StatisticNull data={b} field='cpc_total' />
  400. }
  401. },
  402. {
  403. title: '不感兴趣点击次数',
  404. dataIndex: 'no_interest_count_total',
  405. key: 'no_interest_count_total',
  406. align: 'center',
  407. width: 110,
  408. sorter: true,
  409. render: (a: any, b: any) => {
  410. return <StatisticNull data={b} field='no_interest_count_total' />
  411. }
  412. },
  413. // {
  414. // title: '朋友圈视频播放次数',
  415. // dataIndex: 'video_play_count_total',
  416. // key: 'video_play_count_total',
  417. // align: 'center',
  418. // width: 110,
  419. // sorter: true,
  420. // render: (a: any, b: any) => {
  421. // return <StatisticNull data={b} field='video_play_count_total' />
  422. // }
  423. // },
  424. {
  425. title: '下载次数',
  426. dataIndex: 'download_count_total',
  427. key: 'download_count_total',
  428. align: 'center',
  429. width: 110,
  430. sorter: true,
  431. render: (a: any, b: any) => {
  432. return <StatisticNull data={b} field='download_count_total' />
  433. }
  434. },
  435. {
  436. title: '安装次数',
  437. dataIndex: 'install_count_total',
  438. key: 'install_count_total',
  439. align: 'center',
  440. width: 110,
  441. sorter: true,
  442. render: (a: any, b: any) => {
  443. return <StatisticNull data={b} field='install_count_total' />
  444. }
  445. },
  446. {
  447. title: '激活次数',
  448. dataIndex: 'activated_count_total',
  449. key: 'activated_count_total',
  450. align: 'center',
  451. width: 110,
  452. sorter: true,
  453. render: (a: any, b: any) => {
  454. return <StatisticNull data={b} field='activated_count_total' />
  455. }
  456. },
  457. {
  458. title: '公众号关注人数',
  459. dataIndex: 'mp_follow_uv_total',
  460. key: 'mp_follow_uv_total',
  461. align: 'center',
  462. width: 110,
  463. sorter: true,
  464. render: (a: any, b: any) => {
  465. return <StatisticNull data={b} field='mp_follow_uv_total' />
  466. }
  467. },
  468. {
  469. title: '公众号关注成本',
  470. dataIndex: 'mp_follow_cost_total',
  471. key: 'mp_follow_cost_total',
  472. align: 'center',
  473. width: 110,
  474. sorter: true,
  475. render: (a: any, b: any) => {
  476. return <StatisticNull data={b} field='mp_follow_cost_total' />
  477. }
  478. },
  479. {
  480. title: '公众号关注率',
  481. dataIndex: 'mp_follow_rate_total',
  482. key: 'mp_follow_rate_total',
  483. align: 'center',
  484. width: 110,
  485. sorter: true,
  486. render: (a: any, b: any) => {
  487. if (b?.mp_follow_rate_total !== undefined && b?.mp_follow_rate_total !== null) {
  488. return <Statistic value={a ? (a * 100) : 0} precision={2} valueStyle={{ color: '#3f8600' }} suffix="%" />
  489. } else {
  490. return '--'
  491. }
  492. }
  493. },
  494. {
  495. title: '公众号关注次数',
  496. dataIndex: 'mp_follow_pv_total',
  497. key: 'mp_follow_pv_total',
  498. align: 'center',
  499. width: 110,
  500. sorter: true,
  501. render: (a: any, b: any) => {
  502. return <StatisticNull data={b} field='mp_follow_pv_total' />
  503. }
  504. },
  505. {
  506. title: '公众号关注次数成本',
  507. dataIndex: 'mp_follow_pv_cost_total',
  508. key: 'mp_follow_pv_cost_total',
  509. align: 'center',
  510. width: 120,
  511. sorter: true,
  512. render: (a: any, b: any) => {
  513. return <StatisticNull data={b} field='mp_follow_pv_cost_total' precision={2} />
  514. }
  515. },
  516. {
  517. title: '快应用添加次数',
  518. dataIndex: 'add_quick_app_pv_total',
  519. key: 'add_quick_app_pv_total',
  520. align: 'center',
  521. width: 110,
  522. sorter: true,
  523. render: (a: any, b: any) => {
  524. return <StatisticNull data={b} field='add_quick_app_pv_total' />
  525. }
  526. },
  527. {
  528. title: '快应用添加成本',
  529. dataIndex: 'add_quick_app_cost_total',
  530. key: 'add_quick_app_cost_total',
  531. align: 'center',
  532. width: 110,
  533. sorter: true,
  534. render: (a: any, b: any) => {
  535. return <StatisticNull data={b} field='add_quick_app_cost_total' />
  536. }
  537. },
  538. {
  539. title: '快应用添加率',
  540. dataIndex: 'add_quick_app_rate_total',
  541. key: 'add_quick_app_rate_total',
  542. align: 'center',
  543. width: 110,
  544. sorter: true,
  545. render: (a: any, b: any) => {
  546. if (b?.add_quick_app_rate_total !== undefined && b?.add_quick_app_rate_total !== null) {
  547. return <Statistic value={a ? (a * 100) : 0} precision={2} valueStyle={{ color: '#3f8600' }} suffix="%" />
  548. } else {
  549. return '--'
  550. }
  551. }
  552. },
  553. {
  554. title: '加企业微信客服人数',
  555. dataIndex: 'scan_follow_uv_total',
  556. key: 'scan_follow_uv_total',
  557. align: 'center',
  558. width: 120,
  559. sorter: true,
  560. render: (a: any, b: any) => {
  561. return <StatisticNull data={b} field='scan_follow_uv_total' />
  562. }
  563. },
  564. {
  565. title: '加企业微信客服成本',
  566. dataIndex: 'scan_follow_cost_total',
  567. key: 'scan_follow_cost_total',
  568. align: 'center',
  569. width: 120,
  570. sorter: true,
  571. render: (a: any, b: any) => {
  572. return <StatisticNull data={b} field='scan_follow_cost_total' precision={2} />
  573. }
  574. },
  575. {
  576. title: '加企业微信客服率',
  577. dataIndex: 'scan_follow_rate_total',
  578. key: 'scan_follow_rate_total',
  579. align: 'center',
  580. width: 120,
  581. sorter: true,
  582. render: (a: any, b: any) => {
  583. if (b?.scan_follow_rate_total !== undefined && b?.scan_follow_rate_total !== null) {
  584. return <Statistic value={a ? (a * 100) : 0} precision={2} valueStyle={{ color: '#3f8600' }} suffix="%" />
  585. } else {
  586. return '--'
  587. }
  588. }
  589. },
  590. {
  591. title: '首日新增下单量',
  592. dataIndex: 'first_day_order_count_total',
  593. key: 'first_day_order_count_total',
  594. align: 'center',
  595. width: 110,
  596. sorter: true,
  597. render: (a: any, b: any) => {
  598. return <StatisticNull data={b} field='first_day_order_count_total' />
  599. }
  600. },
  601. {
  602. title: '首日新增下单金额',
  603. dataIndex: 'first_day_order_amount_total',
  604. key: 'first_day_order_amount_total',
  605. align: 'center',
  606. width: 110,
  607. sorter: true,
  608. render: (a: any, b: any) => {
  609. return <StatisticNull data={b} field='first_day_order_amount_total' />
  610. }
  611. },
  612. {
  613. title: '首日新增下单ROI',
  614. dataIndex: 'first_day_order_roi_total',
  615. key: 'first_day_order_roi_total',
  616. align: 'center',
  617. width: 110,
  618. sorter: true,
  619. render: (a: any, b: any) => {
  620. if (b?.first_day_order_roi_total !== undefined && b?.first_day_order_roi_total !== null) {
  621. return <Statistic value={a ? (a * 100) : 0} precision={2} valueStyle={{ color: '#3f8600' }} suffix="%" />
  622. } else {
  623. return '--'
  624. }
  625. }
  626. },
  627. {
  628. title: '订单量',
  629. dataIndex: 'order_count_total',
  630. key: 'order_count_total',
  631. align: 'center',
  632. width: 110,
  633. sorter: true,
  634. render: (a: any, b: any) => {
  635. return <StatisticNull data={b} field='order_count_total' />
  636. }
  637. },
  638. {
  639. title: '订单金额',
  640. dataIndex: 'order_amount_total',
  641. key: 'order_amount_total',
  642. align: 'center',
  643. width: 110,
  644. sorter: true,
  645. render: (a: any, b: any) => {
  646. return <StatisticNull data={b} field='order_amount_total' />
  647. }
  648. },
  649. {
  650. title: '下单成本',
  651. dataIndex: 'order_cost_total',
  652. key: 'order_cost_total',
  653. align: 'center',
  654. width: 110,
  655. sorter: true,
  656. render: (a: any, b: any) => {
  657. return <StatisticNull data={b} field='order_cost_total' precision={2} />
  658. }
  659. },
  660. {
  661. title: '下单率',
  662. dataIndex: 'order_rate_total',
  663. key: 'order_rate_total',
  664. align: 'center',
  665. width: 110,
  666. sorter: true,
  667. render: (a: any, b: any) => {
  668. if (b?.order_rate_total !== undefined && b?.order_rate_total !== null) {
  669. return <Statistic value={a ? (a * 100) : 0} precision={2} valueStyle={{ color: '#3f8600' }} suffix="%" />
  670. } else {
  671. return '--'
  672. }
  673. }
  674. },
  675. {
  676. title: '下单ROI',
  677. dataIndex: 'order_roi_total',
  678. key: 'order_roi_total',
  679. align: 'center',
  680. width: 110,
  681. sorter: true,
  682. render: (a: any, b: any) => {
  683. if (b?.order_roi_total !== undefined && b?.order_roi_total !== null) {
  684. return <Statistic value={a ? (a * 100) : 0} precision={2} valueStyle={{ color: '#3f8600' }} suffix="%" />
  685. } else {
  686. return '--'
  687. }
  688. }
  689. },
  690. {
  691. title: '客单价',
  692. dataIndex: 'atv_total',
  693. key: 'atv_total',
  694. align: 'center',
  695. width: 110,
  696. sorter: true,
  697. render: (a: any, b: any) => {
  698. return <StatisticNull data={b} field='atv_total' precision={2} />
  699. }
  700. },
  701. {
  702. title: '转化量',
  703. dataIndex: 'conversions_count_total',
  704. key: 'conversions_count_total',
  705. align: 'center',
  706. width: 110,
  707. sorter: true,
  708. render: (a: any, b: any) => {
  709. return <StatisticNull data={b} field='conversions_count_total' />
  710. }
  711. },
  712. {
  713. title: '转化成本',
  714. dataIndex: 'conversions_cost_total',
  715. key: 'conversions_cost_total',
  716. align: 'center',
  717. width: 110,
  718. sorter: true,
  719. render: (a: any, b: any) => {
  720. return <StatisticNull data={b} field='conversions_cost_total' precision={2} />
  721. }
  722. },
  723. {
  724. title: '深度转化',
  725. dataIndex: 'deep_conversions_count_total',
  726. key: 'deep_conversions_count_total',
  727. align: 'center',
  728. width: 110,
  729. sorter: true,
  730. render: (a: any, b: any) => {
  731. return <StatisticNull data={b} field='deep_conversions_count_total' />
  732. }
  733. },
  734. {
  735. title: '转化率',
  736. dataIndex: 'conversions_rate_total',
  737. key: 'conversions_rate_total',
  738. align: 'center',
  739. width: 110,
  740. sorter: true,
  741. render: (a: any, b: any) => {
  742. if (b?.conversions_rate_total !== undefined && b?.conversions_rate_total !== null) {
  743. return <Statistic value={a ? (a * 100) : 0} precision={2} valueStyle={{ color: '#3f8600' }} suffix="%" />
  744. } else {
  745. return '--'
  746. }
  747. }
  748. },
  749. {
  750. title: '加粉数',
  751. dataIndex: 'add_fans_count_total',
  752. key: 'add_fans_count_total',
  753. align: 'center',
  754. width: 110,
  755. sorter: true,
  756. render: (a: any, b: any) => {
  757. return <StatisticNull data={b} field='add_fans_count_total' />
  758. }
  759. },
  760. {
  761. title: '加粉成本',
  762. dataIndex: 'add_fans_cost_total',
  763. key: 'add_fans_cost_total',
  764. align: 'center',
  765. width: 110,
  766. sorter: true,
  767. render: (a: any, b: any) => {
  768. return <StatisticNull data={b} field='add_fans_cost_total' precision={2} />
  769. }
  770. },
  771. ]
  772. let iaaDataArr: ColumnsType<any> = [
  773. {
  774. title: '激活首24小时广告变现ARPPU(平台上报)',
  775. dataIndex: 'first_day_ad_pur_arppu_cost24h_pla_total',
  776. key: 'first_day_ad_pur_arppu_cost24h_pla_total',
  777. align: 'center',
  778. width: 110,
  779. sorter: true,
  780. render: (a: any, b: any) => {
  781. return <StatisticNull data={b} field='first_day_ad_pur_arppu_cost24h_pla_total' />
  782. }
  783. },
  784. {
  785. title: '激活首24小时广告变现ROI(平台上报)',
  786. dataIndex: 'income_roi124h_pla_total',
  787. key: 'income_roi124h_pla_total',
  788. align: 'center',
  789. width: 110,
  790. sorter: true,
  791. render: (a: any, b: any) => {
  792. if (b?.income_roi124h_pla_total !== undefined && b?.income_roi124h_pla_total !== null) {
  793. return <Statistic value={a ? (a * 100) : 0} precision={2} valueStyle={{ color: '#3f8600' }} suffix="%" />
  794. } else {
  795. return '--'
  796. }
  797. }
  798. },
  799. {
  800. title: '激活首24小时广告变现次数(平台上报)',
  801. dataIndex: 'income_pv24h_pla_total',
  802. key: 'income_pv24h_pla_total',
  803. align: 'center',
  804. width: 110,
  805. sorter: true,
  806. render: (a: any, b: any) => {
  807. return <StatisticNull data={b} field='income_pv24h_pla_total' />
  808. }
  809. },
  810. {
  811. title: '激活首日广告变现次数(平台上报)',
  812. dataIndex: 'income_pv1d_pla_total',
  813. key: 'income_pv1d_pla_total',
  814. align: 'center',
  815. width: 110,
  816. sorter: true,
  817. render: (a: any, b: any) => {
  818. return <StatisticNull data={b} field='income_pv1d_pla_total' />
  819. }
  820. },
  821. {
  822. title: '激活3日广告变现次数(平台上报)',
  823. dataIndex: 'ad_monetization_pla_dedup_active3d_pv_total',
  824. key: 'ad_monetization_pla_dedup_active3d_pv_total',
  825. align: 'center',
  826. width: 110,
  827. sorter: true,
  828. render: (a: any, b: any) => {
  829. return <StatisticNull data={b} field='ad_monetization_pla_dedup_active3d_pv_total' />
  830. }
  831. },
  832. {
  833. title: '激活7日广告变现次数(平台上报)',
  834. dataIndex: 'minigame7d_income_count_total',
  835. key: 'minigame7d_income_count_total',
  836. align: 'center',
  837. width: 110,
  838. sorter: true,
  839. render: (a: any, b: any) => {
  840. return <StatisticNull data={b} field='minigame_7d_income_count' />
  841. }
  842. },
  843. {
  844. title: '注册3日广告变现次数(平台上报)',
  845. dataIndex: 'minigame3d_income_count_total',
  846. key: 'minigame3d_income_count_total',
  847. align: 'center',
  848. width: 110,
  849. sorter: true,
  850. render: (a: any, b: any) => {
  851. return <StatisticNull data={b} field='minigame3d_income_count_total' />
  852. }
  853. },
  854. {
  855. title: '激活首24小时广告变现金额(平台上报)',
  856. dataIndex: 'income_val24h_pla_total',
  857. key: 'income_val24h_pla_total',
  858. align: 'center',
  859. width: 110,
  860. sorter: true,
  861. render: (a: any, b: any) => {
  862. return <StatisticNull data={b} field='income_val24h_pla_total' />
  863. }
  864. },
  865. {
  866. title: '注册首日广告变现金额(平台上报)',
  867. dataIndex: 'mini_game_first_day_ad_monetization_amount_total',
  868. key: 'mini_game_first_day_ad_monetization_amount_total',
  869. align: 'center',
  870. width: 110,
  871. sorter: true,
  872. render: (a: any, b: any) => {
  873. return <StatisticNull data={b} field='mini_game_first_day_ad_monetization_amount_total' />
  874. }
  875. },
  876. {
  877. title: '激活7日广告变现金额(平台上报)',
  878. dataIndex: 'mini_game_ad_monetization_amount_d7_total',
  879. key: 'mini_game_ad_monetization_amount_d7_total',
  880. align: 'center',
  881. width: 110,
  882. sorter: true,
  883. render: (a: any, b: any) => {
  884. return <StatisticNull data={b} field='mini_game_ad_monetization_amount_d7_total' />
  885. }
  886. },
  887. {
  888. title: '激活14日广告变现金额(平台上报)',
  889. dataIndex: 'mini_game_ad_monetization_amount_d14_total',
  890. key: 'mini_game_ad_monetization_amount_d14_total',
  891. align: 'center',
  892. width: 110,
  893. sorter: true,
  894. render: (a: any, b: any) => {
  895. return <StatisticNull data={b} field='mini_game_ad_monetization_amount_d14_total' />
  896. }
  897. },
  898. {
  899. title: '广告变现金额(平台上报)',
  900. dataIndex: 'mini_game_ad_monetization_amount_total',
  901. key: 'mini_game_ad_monetization_amount_total',
  902. align: 'center',
  903. width: 110,
  904. sorter: true,
  905. render: (a: any, b: any) => {
  906. return <StatisticNull data={b} field='mini_game_ad_monetization_amount_total' />
  907. }
  908. },
  909. {
  910. title: '激活首24小时广告变现人数(平台上报)',
  911. dataIndex: 'ad_paying_users24h_pla_total',
  912. key: 'ad_paying_users24h_pla_total',
  913. align: 'center',
  914. width: 110,
  915. sorter: true,
  916. render: (a: any, b: any) => {
  917. return <StatisticNull data={b} field='ad_paying_users24h_pla_total' />
  918. }
  919. },
  920. {
  921. title: '激活首日广告变现人数(平台上报)',
  922. dataIndex: 'ad_monetization_pla_dedup_active1d_pv_total',
  923. key: 'ad_monetization_pla_dedup_active1d_pv_total',
  924. align: 'center',
  925. width: 110,
  926. sorter: true,
  927. render: (a: any, b: any) => {
  928. return <StatisticNull data={b} field='ad_monetization_pla_dedup_active1d_pv_total' />
  929. }
  930. },
  931. {
  932. title: '激活7日变现人数(平台上报)',
  933. dataIndex: 'ad_monetization_pla_dedup_active7d_pv_total',
  934. key: 'ad_monetization_pla_dedup_active7d_pv_total',
  935. align: 'center',
  936. width: 110,
  937. sorter: true,
  938. render: (a: any, b: any) => {
  939. return <StatisticNull data={b} field='ad_monetization_pla_dedup_active7d_pv_total' />
  940. }
  941. },
  942. {
  943. title: '激活首24小时广告变现ARPPU',
  944. dataIndex: 'first_day_ad_pur_arppu_cost24h_total',
  945. key: 'first_day_ad_pur_arppu_cost24h_total',
  946. align: 'center',
  947. width: 110,
  948. sorter: true,
  949. render: (a: any, b: any) => {
  950. return <StatisticNull data={b} field='first_day_ad_pur_arppu_cost24h_total' />
  951. }
  952. },
  953. {
  954. title: '激活首日广告变现ARPPU',
  955. dataIndex: 'first_day_ad_pur_arppu_cost_total',
  956. key: 'first_day_ad_pur_arppu_cost_total',
  957. align: 'center',
  958. width: 110,
  959. sorter: true,
  960. render: (a: any, b: any) => {
  961. return <StatisticNull data={b} field='first_day_ad_pur_arppu_cost_total' />
  962. }
  963. },
  964. {
  965. title: '广告变现ARPPU',
  966. dataIndex: 'ad_monetization_arppu_total',
  967. key: 'ad_monetization_arppu_total',
  968. align: 'center',
  969. width: 110,
  970. sorter: true,
  971. render: (a: any, b: any) => {
  972. return <StatisticNull data={b} field='ad_monetization_arppu_total' />
  973. }
  974. },
  975. {
  976. title: '激活首24小时广告变现ROI',
  977. dataIndex: 'income_roi124h_total',
  978. key: 'income_roi124h_total',
  979. align: 'center',
  980. width: 110,
  981. sorter: true,
  982. render: (a: any, b: any) => {
  983. if (b?.income_roi124h_total !== undefined && b?.income_roi124h_total !== null) {
  984. return <Statistic value={a ? (a * 100) : 0} precision={2} valueStyle={{ color: '#3f8600' }} suffix="%" />
  985. } else {
  986. return '--'
  987. }
  988. }
  989. },
  990. {
  991. title: '激活首日广告变现ROI',
  992. dataIndex: 'income_roi1_total',
  993. key: 'income_roi1_total',
  994. align: 'center',
  995. width: 110,
  996. sorter: true,
  997. render: (a: any, b: any) => {
  998. if (b?.income_roi1_total !== undefined && b?.income_roi1_total !== null) {
  999. return <Statistic value={a ? (a * 100) : 0} precision={2} valueStyle={{ color: '#3f8600' }} suffix="%" />
  1000. } else {
  1001. return '--'
  1002. }
  1003. }
  1004. },
  1005. {
  1006. title: '激活3日广告变现ROI',
  1007. dataIndex: 'income_roi3_total',
  1008. key: 'income_roi3_total',
  1009. align: 'center',
  1010. width: 110,
  1011. sorter: true,
  1012. render: (a: any, b: any) => {
  1013. if (b?.income_roi3_total !== undefined && b?.income_roi3_total !== null) {
  1014. return <Statistic value={a ? (a * 100) : 0} precision={2} valueStyle={{ color: '#3f8600' }} suffix="%" />
  1015. } else {
  1016. return '--'
  1017. }
  1018. }
  1019. },
  1020. {
  1021. title: '激活7日广告变现ROI',
  1022. dataIndex: 'income_roi7_total',
  1023. key: 'income_roi7_total',
  1024. align: 'center',
  1025. width: 110,
  1026. sorter: true,
  1027. render: (a: any, b: any) => {
  1028. if (b?.income_roi7_total !== undefined && b?.income_roi7_total !== null) {
  1029. return <Statistic value={a ? (a * 100) : 0} precision={2} valueStyle={{ color: '#3f8600' }} suffix="%" />
  1030. } else {
  1031. return '--'
  1032. }
  1033. }
  1034. },
  1035. {
  1036. title: '激活14日广告变现ROI',
  1037. dataIndex: 'income_roi14_total',
  1038. key: 'income_roi14_total',
  1039. align: 'center',
  1040. width: 110,
  1041. sorter: true,
  1042. render: (a: any, b: any) => {
  1043. if (b?.income_roi14_total !== undefined && b?.income_roi14_total !== null) {
  1044. return <Statistic value={a ? (a * 100) : 0} precision={2} valueStyle={{ color: '#3f8600' }} suffix="%" />
  1045. } else {
  1046. return '--'
  1047. }
  1048. }
  1049. },
  1050. {
  1051. title: '广告变现ROI',
  1052. dataIndex: 'ad_monetization_roi_total',
  1053. key: 'ad_monetization_roi_total',
  1054. align: 'center',
  1055. width: 110,
  1056. sorter: true,
  1057. render: (a: any, b: any) => {
  1058. if (b?.ad_monetization_roi_total !== undefined && b?.ad_monetization_roi_total !== null) {
  1059. return <Statistic value={a ? (a * 100) : 0} precision={2} valueStyle={{ color: '#3f8600' }} suffix="%" />
  1060. } else {
  1061. return '--'
  1062. }
  1063. }
  1064. },
  1065. {
  1066. title: '激活首日广告变现成本(人数)',
  1067. dataIndex: 'ad_paying_cost_d1_total',
  1068. key: 'ad_paying_cost_d1_total',
  1069. align: 'center',
  1070. width: 110,
  1071. sorter: true,
  1072. render: (a: any, b: any) => {
  1073. return <StatisticNull data={b} field='ad_paying_cost_d1_total' />
  1074. }
  1075. },
  1076. {
  1077. title: '广告变现成本',
  1078. dataIndex: 'ad_monetization_cost_total',
  1079. key: 'ad_monetization_cost_total',
  1080. align: 'center',
  1081. width: 110,
  1082. sorter: true,
  1083. render: (a: any, b: any) => {
  1084. return <StatisticNull data={b} field='ad_monetization_cost_total' />
  1085. }
  1086. },
  1087. {
  1088. title: '激活3日广告变现次数',
  1089. dataIndex: 'ad_monetization_active3d_pv_total',
  1090. key: 'ad_monetization_active3d_pv_total',
  1091. align: 'center',
  1092. width: 110,
  1093. sorter: true,
  1094. render: (a: any, b: any) => {
  1095. return <StatisticNull data={b} field='ad_monetization_active3d_pv_total' />
  1096. }
  1097. },
  1098. {
  1099. title: '激活7日广告变现次数',
  1100. dataIndex: 'ad_monetization_active7d_pv_total',
  1101. key: 'ad_monetization_active7d_pv_total',
  1102. align: 'center',
  1103. width: 110,
  1104. sorter: true,
  1105. render: (a: any, b: any) => {
  1106. return <StatisticNull data={b} field='ad_monetization_active7d_pv_total' />
  1107. }
  1108. },
  1109. {
  1110. title: '广告变现次数(平台上报)',
  1111. dataIndex: 'income_pv_pla_total',
  1112. key: 'income_pv_pla_total',
  1113. align: 'center',
  1114. width: 110,
  1115. sorter: true,
  1116. render: (a: any, b: any) => {
  1117. return <StatisticNull data={b} field='income_pv_pla_total' />
  1118. }
  1119. },
  1120. {
  1121. title: '激活首24小时广告变现金额',
  1122. dataIndex: 'income_val24h_total',
  1123. key: 'income_val24h_total',
  1124. align: 'center',
  1125. width: 110,
  1126. sorter: true,
  1127. render: (a: any, b: any) => {
  1128. return <StatisticNull data={b} field='income_val24h_total' />
  1129. }
  1130. },
  1131. {
  1132. title: '激活首日广告变现金额',
  1133. dataIndex: 'income_val1_total',
  1134. key: 'income_val1_total',
  1135. align: 'center',
  1136. width: 110,
  1137. sorter: true,
  1138. render: (a: any, b: any) => {
  1139. return <StatisticNull data={b} field='income_val1_total' />
  1140. }
  1141. },
  1142. {
  1143. title: '激活3日广告变现金额',
  1144. dataIndex: 'income_val3_total',
  1145. key: 'income_val3_total',
  1146. align: 'center',
  1147. width: 110,
  1148. sorter: true,
  1149. render: (a: any, b: any) => {
  1150. return <StatisticNull data={b} field='income_val3_total' />
  1151. }
  1152. },
  1153. {
  1154. title: '激活7日广告变现金额',
  1155. dataIndex: 'income_val7_total',
  1156. key: 'income_val7_total',
  1157. align: 'center',
  1158. width: 110,
  1159. sorter: true,
  1160. render: (a: any, b: any) => {
  1161. return <StatisticNull data={b} field='income_val7_total' />
  1162. }
  1163. },
  1164. {
  1165. title: '激活14日广告变现金额',
  1166. dataIndex: 'income_val14_total',
  1167. key: 'income_val14_total',
  1168. align: 'center',
  1169. width: 110,
  1170. sorter: true,
  1171. render: (a: any, b: any) => {
  1172. return <StatisticNull data={b} field='income_val14_total' />
  1173. }
  1174. },
  1175. {
  1176. title: '广告变现金额',
  1177. dataIndex: 'ad_monetization_amount_total',
  1178. key: 'ad_monetization_amount_total',
  1179. align: 'center',
  1180. width: 110,
  1181. sorter: true,
  1182. render: (a: any, b: any) => {
  1183. return <StatisticNull data={b} field='ad_monetization_amount_total' />
  1184. }
  1185. },
  1186. {
  1187. title: '激活首24小时广告变现人数',
  1188. dataIndex: 'ad_paying_users24h_total',
  1189. key: 'ad_paying_users24h_total',
  1190. align: 'center',
  1191. width: 110,
  1192. sorter: true,
  1193. render: (a: any, b: any) => {
  1194. return <StatisticNull data={b} field='ad_paying_users24h_total' />
  1195. }
  1196. },
  1197. {
  1198. title: '激活首日广告变现人数',
  1199. dataIndex: 'ad_paying_users_d1_total',
  1200. key: 'ad_paying_users_d1_total',
  1201. align: 'center',
  1202. width: 110,
  1203. sorter: true,
  1204. render: (a: any, b: any) => {
  1205. return <StatisticNull data={b} field='ad_paying_users_d1_total' />
  1206. }
  1207. },
  1208. {
  1209. title: '激活3日广告变现人数',
  1210. dataIndex: 'ad_monetization_dedup_active3d_pv_total',
  1211. key: 'ad_monetization_dedup_active3d_pv_total',
  1212. align: 'center',
  1213. width: 110,
  1214. sorter: true,
  1215. render: (a: any, b: any) => {
  1216. return <StatisticNull data={b} field='ad_monetization_dedup_active3d_pv_total' />
  1217. }
  1218. },
  1219. {
  1220. title: '激活7日广告变现人数',
  1221. dataIndex: 'ad_monetization_dedup_active7d_pv_total',
  1222. key: 'ad_monetization_dedup_active7d_pv_total',
  1223. align: 'center',
  1224. width: 110,
  1225. sorter: true,
  1226. render: (a: any, b: any) => {
  1227. return <StatisticNull data={b} field='ad_monetization_dedup_active7d_pv_total' />
  1228. }
  1229. },
  1230. {
  1231. title: '小游戏注册首日广告变现ARPU(平台上报)',
  1232. dataIndex: 'mini_game_first_day_ad_paying_arpu_total',
  1233. key: 'mini_game_first_day_ad_paying_arpu_total',
  1234. align: 'center',
  1235. width: 110,
  1236. sorter: true,
  1237. render: (a: any, b: any) => {
  1238. return <StatisticNull data={b} field='mini_game_first_day_ad_paying_arpu_total' />
  1239. }
  1240. },
  1241. {
  1242. title: '小游戏广告变现ARPU(平台上报)',
  1243. dataIndex: 'mini_game_ad_monetization_arpu_total',
  1244. key: 'mini_game_ad_monetization_arpu_total',
  1245. align: 'center',
  1246. width: 110,
  1247. sorter: true,
  1248. render: (a: any, b: any) => {
  1249. return <StatisticNull data={b} field='mini_game_ad_monetization_arpu_total' />
  1250. }
  1251. },
  1252. {
  1253. title: '小游戏注册首日广告变现ROI(平台上报)',
  1254. dataIndex: 'mini_game_income_roi1_total',
  1255. key: 'mini_game_income_roi1_total',
  1256. align: 'center',
  1257. width: 110,
  1258. sorter: true,
  1259. render: (a: any, b: any) => {
  1260. if (b?.mini_game_income_roi1_total !== undefined && b?.mini_game_income_roi1_total !== null) {
  1261. return <Statistic value={a ? (a * 100) : 0} precision={2} valueStyle={{ color: '#3f8600' }} suffix="%" />
  1262. } else {
  1263. return '--'
  1264. }
  1265. }
  1266. },
  1267. {
  1268. title: '小游戏注册3日广告变现ROI(平台上报)',
  1269. dataIndex: 'minigame3d_income_roi_total',
  1270. key: 'minigame3d_income_roi_total',
  1271. align: 'center',
  1272. width: 110,
  1273. sorter: true,
  1274. render: (a: any, b: any) => {
  1275. if (b?.minigame3d_income_roi_total !== undefined && b?.minigame3d_income_roi_total !== null) {
  1276. return <Statistic value={a ? (a * 100) : 0} precision={2} valueStyle={{ color: '#3f8600' }} suffix="%" />
  1277. } else {
  1278. return '--'
  1279. }
  1280. }
  1281. },
  1282. {
  1283. title: '小游戏注册7日广告变现ROI(平台上报)',
  1284. dataIndex: 'minigame7d_income_roi_total',
  1285. key: 'minigame7d_income_roi_total',
  1286. align: 'center',
  1287. width: 110,
  1288. sorter: true,
  1289. render: (a: any, b: any) => {
  1290. if (b?.minigame7d_income_roi_total !== undefined && b?.minigame7d_income_roi_total !== null) {
  1291. return <Statistic value={a ? (a * 100) : 0} precision={2} valueStyle={{ color: '#3f8600' }} suffix="%" />
  1292. } else {
  1293. return '--'
  1294. }
  1295. }
  1296. },
  1297. {
  1298. title: '小游戏广告变现ROI(平台上报)',
  1299. dataIndex: 'mini_game_ad_monetization_roi_total',
  1300. key: 'mini_game_ad_monetization_roi_total',
  1301. align: 'center',
  1302. width: 110,
  1303. sorter: true,
  1304. render: (a: any, b: any) => {
  1305. if (b?.mini_game_ad_monetization_roi_total !== undefined && b?.mini_game_ad_monetization_roi_total !== null) {
  1306. return <Statistic value={a ? (a * 100) : 0} precision={2} valueStyle={{ color: '#3f8600' }} suffix="%" />
  1307. } else {
  1308. return '--'
  1309. }
  1310. }
  1311. },
  1312. {
  1313. title: '小游戏注册首日广告变现成本(平台上报)',
  1314. dataIndex: 'mini_game_first_day_ad_paying_cost_total',
  1315. key: 'mini_game_first_day_ad_paying_cost_total',
  1316. align: 'center',
  1317. width: 110,
  1318. sorter: true,
  1319. render: (a: any, b: any) => {
  1320. return <StatisticNull data={b} field='mini_game_first_day_ad_paying_cost_total' />
  1321. }
  1322. },
  1323. {
  1324. title: '小游戏广告变现成本(平台上报)',
  1325. dataIndex: 'mini_game_ad_monetization_cost_total',
  1326. key: 'mini_game_ad_monetization_cost_total',
  1327. align: 'center',
  1328. width: 110,
  1329. sorter: true,
  1330. render: (a: any, b: any) => {
  1331. return <StatisticNull data={b} field='mini_game_ad_monetization_cost_total' />
  1332. }
  1333. },
  1334. {
  1335. title: '小游戏注册3日广告变现金额(平台上报)',
  1336. dataIndex: 'mini_game_ad_monetization_amount_d3_total',
  1337. key: 'mini_game_ad_monetization_amount_d3_total',
  1338. align: 'center',
  1339. width: 110,
  1340. sorter: true,
  1341. render: (a: any, b: any) => {
  1342. return <StatisticNull data={b} field='mini_game_ad_monetization_amount_d3_total' />
  1343. }
  1344. },
  1345. {
  1346. title: '小游戏注册首日广告变现人数(平台上报)',
  1347. dataIndex: 'mini_game_first_day_ad_monetization_users_total',
  1348. key: 'mini_game_first_day_ad_monetization_users_total',
  1349. align: 'center',
  1350. width: 110,
  1351. sorter: true,
  1352. render: (a: any, b: any) => {
  1353. return <StatisticNull data={b} field='mini_game_first_day_ad_monetization_users_total' />
  1354. }
  1355. },
  1356. {
  1357. title: '小游戏注册3日广告变现人数(平台上报)',
  1358. dataIndex: 'minigame3d_income_uv_total',
  1359. key: 'minigame3d_income_uv_total',
  1360. align: 'center',
  1361. width: 110,
  1362. sorter: true,
  1363. render: (a: any, b: any) => {
  1364. return <StatisticNull data={b} field='minigame3d_income_uv_total' />
  1365. }
  1366. },
  1367. {
  1368. title: '小游戏注册7日广告变现人数(平台上报)',
  1369. dataIndex: 'minigame7d_income_uv_total',
  1370. key: 'minigame7d_income_uv_total',
  1371. align: 'center',
  1372. width: 110,
  1373. sorter: true,
  1374. render: (a: any, b: any) => {
  1375. return <StatisticNull data={b} field='minigame7d_income_uv_total' />
  1376. }
  1377. },
  1378. {
  1379. title: '小游戏广告变现人数(平台上报)',
  1380. dataIndex: 'mini_game_ad_monetization_users_total',
  1381. key: 'mini_game_ad_monetization_users_total',
  1382. align: 'center',
  1383. width: 110,
  1384. sorter: true,
  1385. render: (a: any, b: any) => {
  1386. return <StatisticNull data={b} field='mini_game_ad_monetization_users_total' />
  1387. }
  1388. },
  1389. ]
  1390. return [
  1391. ...adArr,
  1392. ...adDataArr,
  1393. ...iaaDataArr
  1394. ]
  1395. }
  1396. export default tablePlanConfig