tablePlanListConfig.tsx 58 KB

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