tablePlanListConfig.tsx 57 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610
  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_rate_total',
  1459. key: 'reg_rate_total',
  1460. align: 'center',
  1461. width: 110,
  1462. sorter: true,
  1463. render: (a: any, b: any) => {
  1464. if (b?.reg_rate_total !== undefined && b?.reg_rate_total !== null) {
  1465. return <Statistic value={a ? (a * 100) : 0} precision={2} valueStyle={{ color: '#3f8600' }} suffix="%" />
  1466. } else {
  1467. return '--'
  1468. }
  1469. }
  1470. },
  1471. {
  1472. title: '注册次数(平台上报)',
  1473. dataIndex: 'reg_pla_pv_total',
  1474. key: 'reg_pla_pv_total',
  1475. align: 'center',
  1476. width: 110,
  1477. sorter: true,
  1478. render: (a: any, b: any) => {
  1479. return <StatisticNull data={b} field='reg_pla_pv_total' />
  1480. }
  1481. },
  1482. {
  1483. title: '注册人数(平台上报+广告主上报)',
  1484. dataIndex: 'reg_all_dedup_pv_total',
  1485. key: 'reg_all_dedup_pv_total',
  1486. align: 'center',
  1487. width: 110,
  1488. sorter: true,
  1489. render: (a: any, b: any) => {
  1490. return <StatisticNull data={b} field='reg_all_dedup_pv_total' />
  1491. }
  1492. },
  1493. {
  1494. title: '注册成本(平台上报+广告主上报)',
  1495. dataIndex: 'reg_cost_pla_total',
  1496. key: 'reg_cost_pla_total',
  1497. align: 'center',
  1498. width: 110,
  1499. sorter: true,
  1500. render: (a: any, b: any) => {
  1501. return <StatisticNull data={b} field='reg_cost_pla_total' />
  1502. }
  1503. },
  1504. {
  1505. title: '注册率(平台上报+广告主上报)',
  1506. dataIndex: 'reg_click_rate_pla_total',
  1507. key: 'reg_click_rate_pla_total',
  1508. align: 'center',
  1509. width: 110,
  1510. sorter: true,
  1511. render: (a: any, b: any) => {
  1512. if (b?.reg_click_rate_pla_total !== undefined && b?.reg_click_rate_pla_total !== null) {
  1513. return <Statistic value={a ? (a * 100) : 0} precision={2} valueStyle={{ color: '#3f8600' }} suffix="%" />
  1514. } else {
  1515. return '--'
  1516. }
  1517. }
  1518. },
  1519. {
  1520. title: '激活注册率',
  1521. dataIndex: 'activate_register_rate_total',
  1522. key: 'activate_register_rate_total',
  1523. align: 'center',
  1524. width: 110,
  1525. sorter: true,
  1526. render: (a: any, b: any) => {
  1527. if (b?.activate_register_rate_total !== undefined && b?.activate_register_rate_total !== null) {
  1528. return <Statistic value={a ? (a * 100) : 0} precision={2} valueStyle={{ color: '#3f8600' }} suffix="%" />
  1529. } else {
  1530. return '--'
  1531. }
  1532. }
  1533. },
  1534. {
  1535. title: '次日留存人数',
  1536. dataIndex: 'mini_game_retention_d1_total',
  1537. key: 'mini_game_retention_d1_total',
  1538. align: 'center',
  1539. width: 110,
  1540. sorter: true,
  1541. render: (a: any, b: any) => {
  1542. return <StatisticNull data={b} field='mini_game_retention_d1_total' />
  1543. }
  1544. },
  1545. {
  1546. title: '次日留存成本',
  1547. dataIndex: 'retention_cost_total',
  1548. key: 'retention_cost_total',
  1549. align: 'center',
  1550. width: 110,
  1551. sorter: true,
  1552. render: (a: any, b: any) => {
  1553. return <StatisticNull data={b} field='retention_cost_total' />
  1554. }
  1555. },
  1556. {
  1557. title: '关键页面次日留存率',
  1558. dataIndex: 'app_key_page_retention_rate_total',
  1559. key: 'app_key_page_retention_rate_total',
  1560. align: 'center',
  1561. width: 110,
  1562. sorter: true,
  1563. render: (a: any, b: any) => {
  1564. if (b?.app_key_page_retention_rate_total !== undefined && b?.app_key_page_retention_rate_total !== null) {
  1565. return <Statistic value={a ? (a * 100) : 0} precision={2} valueStyle={{ color: '#3f8600' }} suffix="%" />
  1566. } else {
  1567. return '--'
  1568. }
  1569. }
  1570. },
  1571. {
  1572. title: '小游戏次日留存率',
  1573. dataIndex: 'mini_game_retention_d1_rate_total',
  1574. key: 'mini_game_retention_d1_rate_total',
  1575. align: 'center',
  1576. width: 110,
  1577. sorter: true,
  1578. render: (a: any, b: any) => {
  1579. if (b?.mini_game_retention_d1_rate_total !== undefined && b?.mini_game_retention_d1_rate_total !== null) {
  1580. return <Statistic value={a ? (a * 100) : 0} precision={2} valueStyle={{ color: '#3f8600' }} suffix="%" />
  1581. } else {
  1582. return '--'
  1583. }
  1584. }
  1585. },
  1586. {
  1587. title: '小游戏次日留存成本',
  1588. dataIndex: 'mini_game_retention_d1_cost_total',
  1589. key: 'mini_game_retention_d1_cost_total',
  1590. align: 'center',
  1591. width: 110,
  1592. sorter: true,
  1593. render: (a: any, b: any) => {
  1594. return <StatisticNull data={b} field='mini_game_retention_d1_cost_total' />
  1595. }
  1596. },
  1597. ]
  1598. return [
  1599. ...adArr,
  1600. ...adDataArr,
  1601. ...iaaDataArr
  1602. ]
  1603. }
  1604. export default tablePlanConfig