tableConfig.tsx 63 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892
  1. import WidthEllipsis from "@/components/widthEllipsis"
  2. import { Badge, Progress, Space, Statistic, Tag } from "antd"
  3. import React from "react"
  4. import { ADGROUP_STATUS, BID_MODE_ENUM, COST_GUARANTEE_STATUS_ENUM, MARKETING_GOAL_ENUM, MARKETING_TARGET_TYPE_ENUM, OPTIMIZATIONGOAL_ENUM, PRODUCT_TYPE_ENUM, SMART_BID_TYPE_ENUM } from "../../../const"
  5. import SwitchStatus from "./switchStatus"
  6. import CreativePreview from "../../../components/CreativePreview"
  7. import TimeSeriesLook from "@/pages/iaaData/components/TimeSeriesLook"
  8. import { AUTO_ACQUISTION_STATUS } from "./const"
  9. function columns12(dayHandle: (data: any) => void, onChange?: () => void): { label: string, fieldSHow?: { label: string, saveField: string, defaultValue: any[], data: any[] }, data: any[], bcColor?: string }[] {
  10. return [
  11. {
  12. label: '广告基本信息',
  13. data: [
  14. {
  15. title: '广告账号', dataIndex: 'accountId', label: '广告基本信息', align: 'center', width: 80, default: 2,
  16. render: (a: string) => (<WidthEllipsis value={a} isCopy />)
  17. },
  18. {
  19. title: '腾讯备注', dataIndex: 'memo', label: '广告基本信息', width: 80, default: 3,
  20. render: (a: string) => (<WidthEllipsis value={a} />)
  21. },
  22. {
  23. title: '本地备注', dataIndex: 'remark', label: '广告基本信息', width: 80, default: 4,
  24. render: (a: string) => (<WidthEllipsis value={a} />)
  25. },
  26. {
  27. title: '业务类型', dataIndex: 'productType', label: '广告基本信息', align: 'center', width: 80, default: 5,
  28. render: (a: string) => (<WidthEllipsis value={PRODUCT_TYPE_ENUM[a as keyof typeof PRODUCT_TYPE_ENUM]} />)
  29. },
  30. {
  31. title: '应用', dataIndex: 'appName', label: '广告基本信息', align: 'center', width: 100, default: 6,
  32. render: (a: string) => (<WidthEllipsis value={a} />)
  33. },
  34. {
  35. title: '小程序ID', dataIndex: 'mpId', label: '广告基本信息', align: 'center', width: 100,
  36. render: (a: string, b: any) => (<WidthEllipsis isCopy value={a} />)
  37. },
  38. {
  39. title: '广告ID', dataIndex: 'adgroupId', label: '广告基本信息', align: 'center', width: 80, default: 7,
  40. render: (a: string) => (<WidthEllipsis value={a} isCopy />)
  41. },
  42. {
  43. title: '公司ID', dataIndex: 'companyId', label: '广告基本信息', width: 100,
  44. render: (a: string) => (<WidthEllipsis value={a} />)
  45. },
  46. {
  47. title: '投手', dataIndex: 'pitcherName', label: '广告基本信息', align: 'center', width: 60, default: 8,
  48. render: (a: string) => (<WidthEllipsis value={a} />)
  49. },
  50. {
  51. title: '广告名称', dataIndex: 'adgroupName', label: '广告基本信息', align: 'center', width: 120, default: 9,
  52. render: (a: string) => (<WidthEllipsis value={a} />)
  53. },
  54. {
  55. title: '投放日期', dataIndex: 'beginDate', label: '广告基本信息', align: 'center', width: 180, default: 10,
  56. render: (a: string, b: any) => (<WidthEllipsis value={b?.accountId === '总计' ? '--' : `${a}-${b?.endDate}`} />)
  57. },
  58. {
  59. title: '投放时间', dataIndex: 'timeSeries', label: '广告基本信息', align: 'center', width: 180, default: 11,
  60. render: (a: string, b: any) => {
  61. if (b?.accountId === '总计') return '--';
  62. return <TimeSeriesLook timeSeries={a} />
  63. }
  64. },
  65. {
  66. title: '首日开始投放时间', dataIndex: 'firstDayBeginTime', label: '广告基本信息', align: 'center', width: 70, default: 12,
  67. render: (a: string) => (<WidthEllipsis value={a} />)
  68. },
  69. {
  70. title: '出价', dataIndex: 'bidAmount', label: '广告基本信息', align: 'right', width: 140, default: 13,
  71. render: (a: string, b: { bidMode: string, optimizationGoal: string, accountId: any }) => {
  72. if (b?.accountId === '总计') return '--';
  73. return `${b?.bidMode ? BID_MODE_ENUM[b?.bidMode as keyof typeof BID_MODE_ENUM] : ''} ${a}元/${b?.bidMode === 'BID_MODE_CPM' ? '千次曝光' : b?.bidMode === 'BID_MODE_CPC' ? '点击' : OPTIMIZATIONGOAL_ENUM[b?.optimizationGoal as keyof typeof OPTIMIZATIONGOAL_ENUM]}`
  74. }
  75. },
  76. {
  77. title: '一键起量', dataIndex: 'autoAcquisitionEnabled', label: '广告基本信息', width: 200, default: 14,
  78. render: (a: boolean, b: any) => {
  79. if (b?.accountId === '总计') return '--';
  80. return <Space size={2}>
  81. {a ? <>
  82. <Tag color="success">开启</Tag>
  83. <Statistic prefix={'¥'} value={b?.autoAcquisitionBudget || 0} precision={2} />
  84. </> : <Tag color="error">关闭</Tag>}
  85. {b?.autoAcquisitionStatus && <div style={{ width: 65, paddingLeft: 4 }}><WidthEllipsis value={AUTO_ACQUISTION_STATUS[b?.autoAcquisitionStatus as keyof typeof AUTO_ACQUISTION_STATUS]} /></div>}
  86. </Space>
  87. }
  88. },
  89. {
  90. title: '深度优化出价', dataIndex: 'deepConversionWorthRate', label: '广告基本信息', align: 'center', width: 70, default: 15,
  91. render: (a: string, b: { accountId: any }) => {
  92. if (b?.accountId === '总计') return '--';
  93. return <Statistic value={a || 0} precision={2} />
  94. }
  95. },
  96. {
  97. title: '出价类型', dataIndex: 'smartBidType', label: '广告基本信息', align: 'center', width: 80, default: 16,
  98. render: (a: string, b: any) => {
  99. if (b?.accountId === '总计') return '--';
  100. return SMART_BID_TYPE_ENUM[a as keyof typeof SMART_BID_TYPE_ENUM]
  101. }
  102. },
  103. {
  104. title: '广告组日预算(元)', dataIndex: 'dailyBudget', label: '广告基本信息', align: 'right', width: 70, sorter: true, default: 17,
  105. render: (a: string, b: any) => {
  106. if (b?.accountId === '总计') return '--';
  107. return <Statistic value={a || 0} precision={2} />
  108. }
  109. },
  110. {
  111. title: '是否开启自动版位功能', dataIndex: 'automaticSiteEnabled', label: '广告基本信息', align: 'center', width: 80, default: 18,
  112. render: (a: string, b: any) => {
  113. if (b?.accountId === '总计') return '--';
  114. return <WidthEllipsis value={a ? '是' : '否'} />
  115. }
  116. },
  117. {
  118. title: '定向条件描述', dataIndex: 'targetingTranslation', label: '广告基本信息', align: 'center', width: 120,
  119. render: (a: string) => (<WidthEllipsis value={a} />)
  120. },
  121. {
  122. title: '是否已删除', dataIndex: 'isDeleted', label: '广告基本信息', align: 'center', width: 60, default: 19,
  123. render: (a: any, b: any) => {
  124. if (b?.accountId === '总计') return '--';
  125. return <Badge status={!a ? "processing" : "error"} text={a ? '是' : '否'} />
  126. }
  127. },
  128. {
  129. title: '广告状态', dataIndex: 'systemStatus', label: '广告基本信息', align: 'center', width: 100, default: 20,
  130. render: (a: string, b: any) => {
  131. if (b?.accountId === '总计') return '--';
  132. return ADGROUP_STATUS[a as keyof typeof ADGROUP_STATUS]
  133. }
  134. },
  135. {
  136. title: '营销目的', dataIndex: 'marketingGoal', label: '广告基本信息', align: 'center', width: 85, default: 21,
  137. render: (a: string) => (<WidthEllipsis value={MARKETING_GOAL_ENUM[a as keyof typeof MARKETING_GOAL_ENUM]} />)
  138. },
  139. {
  140. title: '推广内容资产类型', dataIndex: 'marketingTargetType', label: '广告基本信息', align: 'center', width: 85, default: 22,
  141. render: (a: string) => (<WidthEllipsis value={MARKETING_TARGET_TYPE_ENUM[a as keyof typeof MARKETING_TARGET_TYPE_ENUM]} />)
  142. },
  143. {
  144. title: '书名', dataIndex: 'bookName', label: '广告基本信息', align: 'center', width: 110, default: 23,
  145. render: (a: string) => (<WidthEllipsis value={a} />)
  146. },
  147. {
  148. title: '成本保障状态', dataIndex: 'costGuaranteeStatus', label: '广告基本信息', align: 'center', width: 85,
  149. render: (a: string) => (<WidthEllipsis value={COST_GUARANTEE_STATUS_ENUM[a as keyof typeof COST_GUARANTEE_STATUS_ENUM]} />)
  150. },
  151. {
  152. title: '成本保障赔付金额', dataIndex: 'costGuaranteeMoney', label: '广告基本信息', align: 'right', width: 70, sorter: true,
  153. render: (a: string) => {
  154. return <Statistic value={a || 0} precision={2} />
  155. }
  156. },
  157. {
  158. title: '标记备注', dataIndex: 'tagRemark', label: '广告基本信息', align: 'center', width: 80, default: 24,
  159. render: (a: string) => (<WidthEllipsis value={a} />)
  160. },
  161. {
  162. title: '创意预览', dataIndex: 'dynamicCreativeVOList', label: '腾讯广告列表', width: 150, default: 33,
  163. render: (a: any, b: any) => {
  164. if (b?.accountId === '总计') {
  165. return '--'
  166. }
  167. if (a?.length) {
  168. let deliveryMode: string[] = []
  169. let creativePreview = a?.map((item: { creativeComponents: any, deliveryMode: string }) => {
  170. deliveryMode.push(item.deliveryMode)
  171. return { ...item?.creativeComponents }
  172. })
  173. return <CreativePreview creativePreview={creativePreview} deliveryMode={deliveryMode} />
  174. }
  175. return null
  176. }
  177. }
  178. ]
  179. },
  180. {
  181. label: '广告消耗信息',
  182. data: [
  183. {
  184. title: '真实消耗', dataIndex: 'cost', label: '广告消耗信息', align: 'center', width: 85, default: 25, sorter: true,
  185. className: 'padding_0',
  186. render: (a: number) => <div style={{ height: 27, position: 'relative' }}>
  187. <Progress
  188. strokeColor={{
  189. from: '#ff5900',
  190. to: '#ffd380',
  191. }}
  192. status="active"
  193. showInfo={false}
  194. percent={a ? a / 20000 * 100 : 0}
  195. />
  196. <span style={{ position: 'absolute', left: 0, top: 2, bottom: 0, right: 0, padding: '0 5px' }}><Statistic value={a || 0} valueStyle={a >= 20000 ? { color: '#000', fontWeight: 500 } : { fontWeight: 500 }} /></span>
  197. </div>
  198. },
  199. {
  200. title: '消耗', dataIndex: 'totalCost', label: '广告消耗信息', align: 'center', width: 85, default: 40, sorter: true,
  201. className: 'padding_0',
  202. render: (a: number) => <div style={{ height: 27, position: 'relative' }}>
  203. <Progress
  204. strokeColor={{
  205. from: '#ff5900',
  206. to: '#ffd380',
  207. }}
  208. status="active"
  209. showInfo={false}
  210. percent={a ? a / 20000 * 100 : 0}
  211. />
  212. <span style={{ position: 'absolute', left: 0, top: 2, bottom: 0, right: 0, padding: '0 5px' }}><Statistic value={a || 0} valueStyle={a >= 20000 ? { color: '#000', fontWeight: 500 } : { fontWeight: 500 }} /></span>
  213. </div>
  214. },
  215. {
  216. title: '曝光量', dataIndex: 'viewCount', label: '广告消耗信息', align: 'center', width: 70, default: 26, sorter: true,
  217. render: (a: string) => <Statistic value={a || 0} />
  218. },
  219. {
  220. title: '千次曝光成本', dataIndex: 'thousandDisplayPrice', label: '广告消耗信息', align: 'right', width: 65, default: 27, sorter: true,
  221. render: (a: string) => <Statistic value={a || 0} precision={2} />
  222. },
  223. {
  224. title: '点击量', dataIndex: 'clickCount', label: '广告消耗信息', align: 'center', width: 70, default: 28, sorter: true,
  225. render: (a: string) => <Statistic value={a || 0} />
  226. },
  227. {
  228. title: '点击率', dataIndex: 'ctr', label: '广告消耗信息', align: 'center', width: 70, default: 29, sorter: true,
  229. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 50 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  230. },
  231. {
  232. title: '点击均价', dataIndex: 'cpc', label: '广告消耗信息', align: 'center', width: 65, default: 30, sorter: true,
  233. render: (a: string) => <Statistic value={a || 0} precision={2} />
  234. },
  235. {
  236. title: '不感兴趣点击次数', dataIndex: 'noInterestCount', label: '广告消耗信息', align: 'center', width: 65, default: 31, sorter: true,
  237. render: (a: string) => <Statistic value={a || 0} />
  238. },
  239. {
  240. title: '朋友圈视频播放次数', dataIndex: 'videoPlayCount', label: '广告消耗信息', align: 'center', width: 65, default: 32, sorter: true,
  241. render: (a: string) => <Statistic value={a || 0} />
  242. },
  243. ]
  244. },
  245. {
  246. label: '广告转化信息',
  247. data: [
  248. {
  249. title: '下载次数', dataIndex: 'downloadCount', label: '广告转化信息', align: 'center', width: 80, sorter: true,
  250. render: (a: string) => <Statistic value={a || 0} />
  251. },
  252. {
  253. title: '安装次数', dataIndex: 'installCount', label: '广告转化信息', align: 'center', width: 80, sorter: true,
  254. render: (a: string) => <Statistic value={a || 0} />
  255. },
  256. {
  257. title: '激活次数', dataIndex: 'activatedCount', label: '广告转化信息', align: 'center', width: 80, sorter: true,
  258. render: (a: string) => <Statistic value={a || 0} />
  259. },
  260. {
  261. title: '公众号关注人数', dataIndex: 'followUv', label: '广告转化信息', align: 'center', width: 80, sorter: true,
  262. render: (a: string) => <Statistic value={a || 0} />
  263. },
  264. {
  265. title: '公众号关注成本', dataIndex: 'followCost', label: '广告转化信息', align: 'right', width: 80, sorter: true,
  266. render: (a: string) => <Statistic value={a || 0} precision={2} />
  267. },
  268. {
  269. title: '公众号关注率', dataIndex: 'followRate', label: '广告转化信息', align: 'center', width: 80, sorter: true,
  270. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 50 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  271. },
  272. {
  273. title: '公众号关注次数', dataIndex: 'bizFollowCount', label: '广告转化信息', align: 'center', width: 80, sorter: true,
  274. render: (a: string) => <Statistic value={a || 0} />
  275. },
  276. {
  277. title: '公众号关注次数成本', dataIndex: 'bizFollowCost', label: '广告转化信息', align: 'right', width: 80, sorter: true,
  278. render: (a: string) => <Statistic value={a || 0} precision={2} />
  279. },
  280. {
  281. title: '快应用添加次数', dataIndex: 'addDesktopPv', label: '广告转化信息', align: 'center', width: 80, sorter: true,
  282. render: (a: string) => <Statistic value={a || 0} />
  283. },
  284. {
  285. title: '快应用添加成本', dataIndex: 'addDesktopCost', label: '广告转化信息', align: 'right', width: 80, sorter: true,
  286. render: (a: string) => <Statistic value={a || 0} precision={2} />
  287. },
  288. {
  289. title: '快应用添加率', dataIndex: 'addDesktopRate', label: '广告转化信息', align: 'center', width: 80, sorter: true,
  290. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 50 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  291. },
  292. {
  293. title: '加企业微信客服人数', dataIndex: 'scanFollowUserCount', label: '广告转化信息', align: 'center', width: 80, sorter: true,
  294. render: (a: string) => <Statistic value={a || 0} />
  295. },
  296. {
  297. title: '加企业微信客服成本', dataIndex: 'scanFollowCost', label: '广告转化信息', align: 'right', width: 80, sorter: true,
  298. render: (a: string) => <Statistic value={a || 0} precision={2} />
  299. },
  300. {
  301. title: '加企业微信客服率', dataIndex: 'scanFollowRate', label: '广告转化信息', align: 'center', width: 80, sorter: true,
  302. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 50 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  303. },
  304. ]
  305. },
  306. {
  307. label: '商品转化',
  308. data: [
  309. {
  310. title: '首日新增下单量', dataIndex: 'firstDayOrderCount', label: '商品转化', align: 'center', width: 80, sorter: true,
  311. render: (a: string) => <Statistic value={a || 0} />
  312. },
  313. {
  314. title: '首日新增下单金额', dataIndex: 'firstDayOrderAmount', label: '商品转化', align: 'right', width: 80, sorter: true,
  315. render: (a: string) => <Statistic value={a || 0} precision={2} />
  316. },
  317. {
  318. title: '首日新增下单ROI', dataIndex: 'firstDayOrderRoi', label: '商品转化', align: 'center', width: 80, sorter: true,
  319. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 50 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  320. },
  321. {
  322. title: '订单量', dataIndex: 'orderCount', label: '商品转化', align: 'center', width: 80, sorter: true,
  323. render: (a: string) => <Statistic value={a || 0} />
  324. },
  325. {
  326. title: '订单金额', dataIndex: 'orderAmount', label: '商品转化', align: 'right', width: 80, sorter: true,
  327. render: (a: string) => <Statistic value={a || 0} precision={2} />
  328. },
  329. {
  330. title: '下单成本', dataIndex: 'orderCost', label: '商品转化', align: 'right', width: 80, sorter: true,
  331. render: (a: string) => <Statistic value={a || 0} precision={2} />
  332. },
  333. {
  334. title: '下单率', dataIndex: 'orderRate', label: '商品转化', align: 'center', width: 80, sorter: true,
  335. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 50 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  336. },
  337. {
  338. title: '下单ROI', dataIndex: 'orderRoi', label: '商品转化', align: 'center', width: 80, sorter: true,
  339. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 50 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  340. },
  341. {
  342. title: '客单价', dataIndex: 'atv', label: '商品转化', align: 'right', width: 80, sorter: true,
  343. render: (a: string) => <Statistic value={a || 0} precision={2} />
  344. },
  345. {
  346. title: '转化量', dataIndex: 'conversionsCount', label: '商品转化', align: 'center', width: 80, sorter: true,
  347. render: (a: string) => <Statistic value={a || 0} />
  348. },
  349. {
  350. title: '转化成本', dataIndex: 'conversionsCost', label: '商品转化', align: 'right', width: 80, sorter: true,
  351. render: (a: string) => <Statistic value={a || 0} precision={2} />
  352. },
  353. {
  354. title: '深度转化', dataIndex: 'deepConversionsCount', label: '商品转化', align: 'center', width: 80, sorter: true,
  355. render: (a: string) => <Statistic value={a || 0} />
  356. },
  357. {
  358. title: '转化率', dataIndex: 'conversionsRate', label: '商品转化', align: 'center', width: 80, sorter: true,
  359. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 50 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  360. },
  361. {
  362. title: '加粉数', dataIndex: 'addFansCount', label: '商品转化', align: 'center', width: 80, sorter: true,
  363. render: (a: string) => <Statistic value={a || 0} />
  364. },
  365. {
  366. title: '加粉成本', dataIndex: 'addFansCost', label: '商品转化', align: 'right', width: 80, sorter: true,
  367. render: (a: string) => <Statistic value={a || 0} precision={2} />
  368. },
  369. ]
  370. },
  371. {
  372. label: '其他业务(平台上报指标)',
  373. bcColor: '#f6ffed',
  374. data: [
  375. {
  376. title: '激活首24小时广告变现ARPPU(平台上报)', dataIndex: 'firstDayAdPurArppuCost24hPla', label: '其他业务(平台上报指标)', width: 130, align: 'center', sorter: true, className: 'green2ColorClass',
  377. render: (a: string) => <Statistic value={a || 0} precision={2} />
  378. },
  379. {
  380. title: '激活首24小时广告变现ROI(平台上报)', dataIndex: 'incomeRoi124hPla', label: '其他业务(平台上报指标)', width: 110, align: 'center', sorter: true, className: 'green2ColorClass',
  381. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 50 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  382. },
  383. {
  384. title: '激活首24小时广告变现次数(平台上报)', dataIndex: 'incomePv24hPla', label: '其他业务(平台上报指标)', width: 110, align: 'center', sorter: true, className: 'green2ColorClass',
  385. render: (a: string) => <Statistic value={a || 0} />
  386. },
  387. {
  388. title: '激活首日广告变现次数(平台上报)', dataIndex: 'incomePv1dPla', label: '其他业务(平台上报指标)', width: 110, align: 'center', sorter: true, className: 'green2ColorClass',
  389. render: (a: string) => <Statistic value={a || 0} />
  390. },
  391. {
  392. title: '激活3日广告变现次数(平台上报)', dataIndex: 'adMonetizationPlaDedupActive3dPv', label: '其他业务(平台上报指标)', width: 110, align: 'center', sorter: true, className: 'green2ColorClass',
  393. render: (a: string) => <Statistic value={a || 0} />
  394. },
  395. {
  396. title: '激活7日广告变现次数(平台上报)', dataIndex: 'minigame7dIncomeCount', label: '其他业务(平台上报指标)', width: 110, align: 'center', sorter: true, className: 'green2ColorClass',
  397. render: (a: string) => <Statistic value={a || 0} />
  398. },
  399. {
  400. title: '注册3日广告变现次数(平台上报)', dataIndex: 'minigame3dIncomeCount', label: '其他业务(平台上报指标)', width: 110, align: 'center', sorter: true, className: 'green2ColorClass',
  401. render: (a: string) => <Statistic value={a || 0} />
  402. },
  403. {
  404. title: '激活首24小时广告变现金额(平台上报)', dataIndex: 'incomeVal24hPla', label: '其他业务(平台上报指标)', width: 110, align: 'center', sorter: true, className: 'green2ColorClass',
  405. render: (a: string) => <Statistic value={a || 0} precision={2} />
  406. },
  407. {
  408. title: '注册首日广告变现金额(平台上报)', dataIndex: 'miniGameFirstDayAdMonetizationAmount', label: '其他业务(平台上报指标)', width: 120, align: 'center', sorter: true, className: 'green2ColorClass',
  409. render: (a: string) => <Statistic value={a || 0} precision={2} />
  410. },
  411. {
  412. title: '注册7日广告变现金额(平台上报)', dataIndex: 'miniGameAdMonetizationAmountD7', label: '其他业务(平台上报指标)', width: 110, align: 'center', sorter: true, className: 'green2ColorClass',
  413. render: (a: string) => <Statistic value={a || 0} precision={2} />
  414. },
  415. {
  416. title: '激活14日广告变现金额(平台上报)', dataIndex: 'miniGameAdMonetizationAmountD14', label: '其他业务(平台上报指标)', width: 110, align: 'center', sorter: true, className: 'green2ColorClass',
  417. render: (a: string) => <Statistic value={a || 0} precision={2} />
  418. },
  419. {
  420. title: '广告变现金额(平台上报)', dataIndex: 'miniGameAdMonetizationAmount', label: '其他业务(平台上报指标)', width: 100, align: 'center', sorter: true, className: 'green2ColorClass',
  421. render: (a: string) => <Statistic value={a || 0} precision={2} />
  422. },
  423. {
  424. title: '激活首24小时广告变现人数(平台上报)', dataIndex: 'adPayingUsers24hPla', label: '其他业务(平台上报指标)', width: 115, align: 'center', sorter: true, className: 'green2ColorClass',
  425. render: (a: string) => <Statistic value={a || 0} />
  426. },
  427. {
  428. title: '激活首日广告变现人数(平台上报)', dataIndex: 'adMonetizationPlaDedupActive1dPv', label: '其他业务(平台上报指标)', width: 110, align: 'center', sorter: true, className: 'green2ColorClass',
  429. render: (a: string) => <Statistic value={a || 0} />
  430. },
  431. {
  432. title: '激活7日变现人数(平台上报)', dataIndex: 'adMonetizationPlaDedupActive7dPv', label: '其他业务(平台上报指标)', width: 100, align: 'center', sorter: true, className: 'green2ColorClass',
  433. render: (a: string) => <Statistic value={a || 0} />
  434. }
  435. ]
  436. },
  437. {
  438. label: '其他业务(其他指标)',
  439. bcColor: '#fff2e8',
  440. data: [
  441. {
  442. title: '激活首24小时广告变现ARPPU', dataIndex: 'firstDayAdPurArppuCost24h', label: '其他业务(其他指标)', width: 100, align: 'center', sorter: true, className: 'volcanoColorClass',
  443. render: (a: string) => <Statistic value={a || 0} precision={2} />
  444. },
  445. {
  446. title: '激活首日广告变现ARPPU', dataIndex: 'firstDayAdPurArppuCost', label: '其他业务(其他指标)', width: 90, align: 'center', sorter: true, className: 'volcanoColorClass',
  447. render: (a: string) => <Statistic value={a || 0} precision={2} />
  448. },
  449. {
  450. title: '广告变现ARPPU', dataIndex: 'adMonetizationArppu', label: '其他业务(其他指标)', width: 80, align: 'center', sorter: true, className: 'volcanoColorClass',
  451. render: (a: string) => <Statistic value={a || 0} precision={2} />
  452. },
  453. {
  454. title: '激活首24小时广告变现ROI', dataIndex: 'incomeRoi124h', label: '其他业务(其他指标)', width: 90, align: 'center', sorter: true, className: 'volcanoColorClass',
  455. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 0.8 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  456. },
  457. {
  458. title: '激活首日广告变现ROI', dataIndex: 'incomeRoi1', label: '其他业务(其他指标)', width: 80, align: 'center', sorter: true, className: 'volcanoColorClass',
  459. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 0.75 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  460. },
  461. {
  462. title: '激活3日广告变现ROI', dataIndex: 'incomeRoi3', label: '其他业务(其他指标)', width: 80, align: 'center', sorter: true, className: 'volcanoColorClass',
  463. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 0.84 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  464. },
  465. {
  466. title: '激活7日广告变现ROI', dataIndex: 'incomeRoi7', label: '其他业务(其他指标)', width: 80, align: 'center', sorter: true, className: 'volcanoColorClass',
  467. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 0.5 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  468. },
  469. {
  470. title: '激活14日广告变现ROI', dataIndex: 'incomeRoi14', label: '其他业务(其他指标)', width: 80, align: 'center', sorter: true, className: 'volcanoColorClass',
  471. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 0.5 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  472. },
  473. {
  474. title: '广告变现ROI', dataIndex: 'adMonetizationRoi', label: '其他业务(其他指标)', width: 80, align: 'center', sorter: true, className: 'volcanoColorClass',
  475. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 0.5 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  476. },
  477. {
  478. title: '激活首日广告变现成本(人数)', dataIndex: 'adPayingCostD1', label: '其他业务(其他指标)', width: 100, align: 'center', sorter: true, className: 'volcanoColorClass',
  479. render: (a: string) => <Statistic value={a || 0} precision={2} />
  480. },
  481. {
  482. title: '广告变现成本', dataIndex: 'adMonetizationCost', label: '其他业务(其他指标)', width: 80, align: 'center', sorter: true, className: 'volcanoColorClass',
  483. render: (a: string) => <Statistic value={a || 0} precision={2} />
  484. },
  485. {
  486. title: '激活首24小时广告变现成本', dataIndex: 'adPayingUsers24hCost', label: '其他业务(其他指标)', width: 80, align: 'center', sorter: true, className: 'volcanoColorClass',
  487. render: (a: string) => <Statistic value={a || 0} precision={2} />
  488. },
  489. {
  490. title: '激活首日广告变现成本', dataIndex: 'adPayingUsersD1Cost', label: '其他业务(其他指标)', width: 80, align: 'center', sorter: true, className: 'volcanoColorClass',
  491. render: (a: string) => <Statistic value={a || 0} precision={2} />
  492. },
  493. {
  494. title: '激活3日广告变现成本', dataIndex: 'adMonetizationDedupActive3dPvCost', label: '其他业务(其他指标)', width: 80, align: 'center', sorter: true, className: 'volcanoColorClass',
  495. render: (a: string) => <Statistic value={a || 0} precision={2} />
  496. },
  497. {
  498. title: '激活7日广告变现成本', dataIndex: 'adMonetizationDedupActive7dPvCost', label: '其他业务(其他指标)', width: 80, align: 'center', sorter: true, className: 'volcanoColorClass',
  499. render: (a: string) => <Statistic value={a || 0} precision={2} />
  500. },
  501. {
  502. title: '激活3日广告变现次数', dataIndex: 'adMonetizationActive3dPv', label: '其他业务(其他指标)', width: 80, align: 'center', sorter: true, className: 'volcanoColorClass',
  503. render: (a: string) => <Statistic value={a || 0} />
  504. },
  505. {
  506. title: '激活7日广告变现次数', dataIndex: 'adMonetizationActive7dPv', label: '其他业务(其他指标)', width: 80, align: 'center', sorter: true, className: 'volcanoColorClass',
  507. render: (a: string) => <Statistic value={a || 0} />
  508. },
  509. {
  510. title: '广告变现次数(平台上报)', dataIndex: 'incomePvPla', label: '其他业务(其他指标)', width: 80, align: 'center', sorter: true, className: 'volcanoColorClass',
  511. render: (a: string) => <Statistic value={a || 0} />
  512. },
  513. {
  514. title: '激活首24小时广告变现金额', dataIndex: 'incomeVal24h', label: '其他业务(其他指标)', width: 80, align: 'center', sorter: true, className: 'volcanoColorClass',
  515. render: (a: string) => <Statistic value={a || 0} precision={2} />
  516. },
  517. {
  518. title: '激活首日广告变现金额', dataIndex: 'incomeVal1', label: '其他业务(其他指标)', width: 80, align: 'center', sorter: true, className: 'volcanoColorClass',
  519. render: (a: string) => <Statistic value={a || 0} precision={2} />
  520. },
  521. {
  522. title: '激活3日广告变现金额', dataIndex: 'incomeVal3', label: '其他业务(其他指标)', width: 80, align: 'center', sorter: true, className: 'volcanoColorClass',
  523. render: (a: string) => <Statistic value={a || 0} precision={2} />
  524. },
  525. {
  526. title: '激活7日广告变现金额', dataIndex: 'incomeVal7', label: '其他业务(其他指标)', width: 80, align: 'center', sorter: true, className: 'volcanoColorClass',
  527. render: (a: string) => <Statistic value={a || 0} precision={2} />
  528. },
  529. {
  530. title: '激活14日广告变现金额', dataIndex: 'incomeVal14', label: '其他业务(其他指标)', width: 80, align: 'center', sorter: true, className: 'volcanoColorClass',
  531. render: (a: string) => <Statistic value={a || 0} precision={2} />
  532. },
  533. {
  534. title: '广告变现人数', dataIndex: 'appAdPayingUsers', label: '其他业务(其他指标)', width: 90, align: 'center', sorter: true, className: 'volcanoColorClass',
  535. render: (a: string) => <Statistic value={a || 0} />
  536. },
  537. {
  538. title: '广告变现金额', dataIndex: 'adMonetizationAmount', label: '其他业务(其他指标)', width: 80, align: 'center', sorter: true, className: 'volcanoColorClass',
  539. render: (a: string) => <Statistic value={a || 0} precision={2} />
  540. },
  541. {
  542. title: '激活首24小时广告变现人数', dataIndex: 'adPayingUsers24h', label: '其他业务(其他指标)', width: 90, align: 'center', sorter: true, className: 'volcanoColorClass',
  543. render: (a: string) => <Statistic value={a || 0} />
  544. },
  545. {
  546. title: '激活首日广告变现人数', dataIndex: 'adPayingUsersD1', label: '其他业务(其他指标)', width: 80, align: 'center', sorter: true, className: 'volcanoColorClass',
  547. render: (a: string) => <Statistic value={a || 0} />
  548. },
  549. {
  550. title: '激活3日广告变现人数', dataIndex: 'adMonetizationDedupActive3dPv', label: '其他业务(其他指标)', width: 80, align: 'center', sorter: true, className: 'volcanoColorClass',
  551. render: (a: string) => <Statistic value={a || 0} />
  552. },
  553. {
  554. title: '激活7日广告变现人数', dataIndex: 'adMonetizationDedupActive7dPv', label: '其他业务(其他指标)', width: 80, align: 'center', sorter: true, className: 'volcanoColorClass',
  555. render: (a: string) => <Statistic value={a || 0} />
  556. },
  557. {
  558. title: '注册次数', dataIndex: 'regPv', label: '其他业务(其他指标)', width: 80, align: 'center', sorter: true, className: 'volcanoColorClass',
  559. render: (a: string) => <Statistic value={a || 0} />
  560. },
  561. {
  562. title: '注册人数', dataIndex: 'regDedupPv', label: '其他业务(其他指标)', width: 80, align: 'center', sorter: true, className: 'volcanoColorClass',
  563. render: (a: string) => <Statistic value={a || 0} />
  564. },
  565. {
  566. title: '注册成本', dataIndex: 'regCost', label: '其他业务(其他指标)', width: 80, align: 'center', sorter: true, className: 'volcanoColorClass',
  567. render: (a: string) => <Statistic value={a || 0} precision={2} />
  568. },
  569. {
  570. title: '注册次数成本', dataIndex: 'regPvCost', label: '其他业务(其他指标)', width: 80, align: 'center', sorter: true, className: 'volcanoColorClass',
  571. render: (a: string) => <Statistic value={a || 0} precision={2} />
  572. },
  573. {
  574. title: '注册率', dataIndex: 'regRate', label: '其他业务(其他指标)', width: 110, align: 'center', sorter: true, className: 'volcanoColorClass',
  575. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 0.5 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  576. },
  577. {
  578. title: '激活注册率', dataIndex: 'activateRegisterRate', label: '其他业务(其他指标)', width: 80, align: 'center', sorter: true, className: 'volcanoColorClass',
  579. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 0.5 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  580. },
  581. {
  582. title: '次日留存次数', dataIndex: 'retentionCount', label: '其他业务(其他指标)', width: 80, align: 'center', sorter: true, className: 'volcanoColorClass',
  583. render: (a: string) => <Statistic value={a || 0} />
  584. },
  585. {
  586. title: '次日留存人数', dataIndex: 'miniGameRetentionD1', label: '其他业务(其他指标)', width: 80, align: 'center', sorter: true, className: 'volcanoColorClass',
  587. render: (a: string) => <Statistic value={a || 0} />
  588. },
  589. {
  590. title: '次日留存率', dataIndex: 'retentionRate', label: '其他业务(其他指标)', width: 80, align: 'center', sorter: true, className: 'volcanoColorClass',
  591. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 0.5 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  592. },
  593. {
  594. title: '次日留存成本', dataIndex: 'retentionCost', label: '其他业务(其他指标)', width: 80, align: 'center', sorter: true, className: 'volcanoColorClass',
  595. render: (a: string) => <Statistic value={a || 0} precision={2} />
  596. },
  597. {
  598. title: '关键页面次日留存率', dataIndex: 'appKeyPageRetentionRate', label: '其他业务(其他指标)', width: 80, align: 'center', sorter: true, className: 'volcanoColorClass',
  599. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 0.5 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  600. },
  601. {
  602. title: '小游戏次日留存率', dataIndex: 'miniGameRetentionD1Rate', label: '其他业务(其他指标)', width: 80, align: 'center', sorter: true, className: 'volcanoColorClass',
  603. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 0.5 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  604. },
  605. {
  606. title: '小游戏次日留存成本', dataIndex: 'miniGameRetentionD1Cost', label: '其他业务(其他指标)', width: 80, align: 'center', sorter: true, className: 'volcanoColorClass',
  607. render: (a: string) => <Statistic value={a || 0} precision={2} />
  608. }
  609. ]
  610. },
  611. {
  612. label: '小游戏(平台上报)',
  613. bcColor: '#f9f0ff',
  614. data: [
  615. {
  616. title: '小游戏注册首日广告变现ARPU(平台上报)', dataIndex: 'miniGameFirstDayAdPayingArpu', label: '小游戏(平台上报)', width: 130, align: 'center', sorter: true, className: 'purple1ColorClass',
  617. render: (a: string) => <Statistic value={a || 0} />
  618. },
  619. {
  620. title: '小游戏广告变现ARPU(平台上报)', dataIndex: 'miniGameAdMonetizationArpu', label: '小游戏(平台上报)', width: 110, align: 'center', sorter: true, className: 'purple1ColorClass',
  621. render: (a: string) => <Statistic value={a || 0} />
  622. },
  623. {
  624. title: '小游戏注册首日广告变现ROI(平台上报)', dataIndex: 'miniGame1dIncomeRoi', label: '小游戏(平台上报)', width: 110, align: 'center', sorter: true, className: 'purple1ColorClass',
  625. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 0.5 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  626. },
  627. {
  628. title: '小游戏注册3日广告变现ROI(平台上报)', dataIndex: 'minigame3dIncomeRoi', label: '小游戏(平台上报)', width: 110, align: 'center', sorter: true, className: 'purple1ColorClass',
  629. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 0.5 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  630. },
  631. {
  632. title: '小游戏注册7日广告变现ROI(平台上报)', dataIndex: 'minigame7dIncomeRoi', label: '小游戏(平台上报)', width: 110, align: 'center', sorter: true, className: 'purple1ColorClass',
  633. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 0.5 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  634. },
  635. {
  636. title: '小游戏广告变现ROI(平台上报)', dataIndex: 'miniGameAdMonetizationRoi', label: '小游戏(平台上报)', width: 110, align: 'center', sorter: true, className: 'purple1ColorClass',
  637. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 0.5 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  638. },
  639. {
  640. title: '小游戏注册首日广告变现成本(平台上报)', dataIndex: 'miniGameFirstDayAdPayingCost', label: '小游戏(平台上报)', width: 110, align: 'center', sorter: true, className: 'purple1ColorClass',
  641. render: (a: string) => <Statistic value={a || 0} precision={2} />
  642. },
  643. {
  644. title: '小游戏广告变现成本(平台上报)', dataIndex: 'miniGameAdMonetizationCost', label: '小游戏(平台上报)', width: 110, align: 'center', sorter: true, className: 'purple1ColorClass',
  645. render: (a: string) => <Statistic value={a || 0} precision={2} />
  646. },
  647. {
  648. title: '小游戏注册3日广告变现金额(平台上报)', dataIndex: 'miniGameAdMonetizationAmountD3', label: '小游戏(平台上报)', width: 110, align: 'center', sorter: true, className: 'purple1ColorClass',
  649. render: (a: string) => <Statistic value={a || 0} precision={2} />
  650. },
  651. {
  652. title: '小游戏注册首日广告变现人数(平台上报)', dataIndex: 'miniGameFirstDayAdMonetizationUsers', label: '小游戏(平台上报)', width: 110, align: 'center', sorter: true, className: 'purple1ColorClass',
  653. render: (a: string) => <Statistic value={a || 0} />
  654. },
  655. {
  656. title: '小游戏注册3日广告变现人数(平台上报)', dataIndex: 'minigame3dIncomeUv', label: '小游戏(平台上报)', width: 110, align: 'center', sorter: true, className: 'purple1ColorClass',
  657. render: (a: string) => <Statistic value={a || 0} />
  658. },
  659. {
  660. title: '小游戏注册7日广告变现人数(平台上报)', dataIndex: 'minigame7dIncomeUv', label: '小游戏(平台上报)', width: 110, align: 'center', sorter: true, className: 'purple1ColorClass',
  661. render: (a: string) => <Statistic value={a || 0} />
  662. },
  663. {
  664. title: '小游戏广告变现人数(平台上报)', dataIndex: 'miniGameAdMonetizationUsers', label: '小游戏(平台上报)', width: 110, align: 'center', sorter: true, className: 'purple1ColorClass',
  665. render: (a: string) => <Statistic value={a || 0} />
  666. },
  667. {
  668. title: '注册次数(平台上报)', dataIndex: 'regPlaPv', label: '小游戏(平台上报)', width: 90, align: 'center', sorter: true, className: 'purple1ColorClass',
  669. render: (a: string) => <Statistic value={a || 0} />
  670. },
  671. {
  672. title: '注册人数(平台上报+广告主上报)', dataIndex: 'regAllDedupPv', label: '小游戏(平台上报)', width: 110, align: 'center', sorter: true, className: 'purple1ColorClass',
  673. render: (a: string) => <Statistic value={a || 0} />
  674. },
  675. {
  676. title: '注册成本(平台上报+广告主上报)', dataIndex: 'regCostPla', label: '小游戏(平台上报)', width: 110, align: 'center', sorter: true, className: 'purple1ColorClass',
  677. render: (a: string) => <Statistic value={a || 0} precision={2} />
  678. },
  679. {
  680. title: '注册率(平台上报+广告主上报)', dataIndex: 'regClickRatePla', label: '小游戏(平台上报)', width: 110, align: 'center', sorter: true, className: 'purple1ColorClass',
  681. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 0.5 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  682. },
  683. ]
  684. },
  685. {
  686. label: 'App相关字段',
  687. data: [
  688. {
  689. title: '回流率', dataIndex: 'miniGameRate', label: 'App相关字段', width: 70, align: 'center', sorter: true,
  690. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 0.5 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  691. },
  692. {
  693. title: '回流次日留存人数', dataIndex: 'retentionPlaDedupPv', label: 'App相关字段', width: 80, align: 'center', sorter: true,
  694. render: (a: string) => <Statistic value={a || 0} />
  695. },
  696. {
  697. title: '回流次日留存率', dataIndex: 'retentionPlaDedupRate', label: 'App相关字段', width: 70, align: 'center', sorter: true,
  698. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 0.5 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  699. },
  700. {
  701. title: '回流人数(平台上报)', dataIndex: 'miniGameBfUv', label: 'App相关字段', width: 80, align: 'center', sorter: true,
  702. render: (a: string) => <Statistic value={a || 0} />
  703. },
  704. {
  705. title: '回流成本(平台上报)', dataIndex: 'miniGameBfCost', label: 'App相关字段', width: 80, align: 'center', sorter: true,
  706. render: (a: string) => <Statistic value={a || 0} precision={2} />
  707. },
  708. {
  709. title: '广告变现人数(平台上报)', dataIndex: 'adMonetizationPlaDedupPv', label: 'App相关字段', width: 90, align: 'center', sorter: true,
  710. render: (a: string) => <Statistic value={a || 0} />
  711. },
  712. {
  713. title: '回流广告变现金额(平台上报)', dataIndex: 'miniGameBfIncomeAmount', label: 'App相关字段', width: 100, align: 'center', sorter: true,
  714. render: (a: string) => <Statistic value={a || 0} precision={2} />
  715. },
  716. {
  717. title: '回流首日广告变现金额(平台上报)', dataIndex: 'miniGameBfIncomeD1Amount', label: 'App相关字段', width: 100, align: 'center', sorter: true,
  718. render: (a: string) => <Statistic value={a || 0} precision={2} />
  719. },
  720. {
  721. title: '回流广告变现人数(平台上报)', dataIndex: 'adMonetizationBkPlaDedupPv', label: 'App相关字段', width: 90, align: 'center', sorter: true,
  722. render: (a: string) => <Statistic value={a || 0} />
  723. },
  724. {
  725. title: '回流广告变现ROI(平台上报)', dataIndex: 'miniGameBfIncomePlaRoi', label: 'App相关字段', width: 100, align: 'center', sorter: true,
  726. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 0.5 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  727. },
  728. {
  729. title: '回流广告变现ARPU(平台上报)', dataIndex: 'miniGameBfIncomePlaArpu', label: 'App相关字段', width: 100, align: 'center', sorter: true,
  730. render: (a: string) => <Statistic value={a || 0} />
  731. },
  732. {
  733. title: '回流广告变现成本(平台上报)', dataIndex: 'adMonetizationBkPlaCost', label: 'App相关字段', width: 100, align: 'center', sorter: true,
  734. render: (a: string) => <Statistic value={a || 0} precision={2} />
  735. },
  736. {
  737. title: '回流首日广告变现人数(平台上报)', dataIndex: 'adMonetizationBkPlaDedupActive1dPv', label: 'App相关字段', width: 100, align: 'center', sorter: true,
  738. render: (a: string) => <Statistic value={a || 0} />
  739. },
  740. {
  741. title: '回流首24小时广告变现金额(平台上报)', dataIndex: 'adMonetizationBkPlaActive24hAmount', label: 'App相关字段', width: 110, align: 'center', sorter: true,
  742. render: (a: string) => <Statistic value={a || 0} precision={2} />
  743. },
  744. {
  745. title: '回流首24小时广告变现人数(平台上报)', dataIndex: 'adMonetizationBkPlaDedupActive24hPv', label: 'App相关字段', width: 110, align: 'center', sorter: true,
  746. render: (a: string) => <Statistic value={a || 0} />
  747. },
  748. {
  749. title: '回流首24小时广告变现ROI(平台上报)', dataIndex: 'adMonetizationBkPlaDedupActive24hRoi', label: 'App相关字段', width: 110, align: 'center', sorter: true,
  750. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 0.5 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  751. },
  752. {
  753. title: '回流首24小时广告变现ARPU(平台上报)', dataIndex: 'adMonetizationBkPlaDedupActive24hArpu', label: 'App相关字段', width: 120, align: 'center', sorter: true,
  754. render: (a: string) => <Statistic value={a || 0} />
  755. },
  756. {
  757. title: '回流首24小时广告变现成本(平台上报)', dataIndex: 'adMonetizationBkPlaDedupActive24hCost', label: 'App相关字段', width: 110, align: 'center', sorter: true,
  758. render: (a: string) => <Statistic value={a || 0} precision={2} />
  759. },
  760. {
  761. title: '回流3日广告变现金额(平台上报)', dataIndex: 'adMonetizationBkPlaActive3dAmount', label: 'App相关字段', width: 95, align: 'center', sorter: true,
  762. render: (a: string) => <Statistic value={a || 0} precision={2} />
  763. },
  764. {
  765. title: '回流3日广告变现ROI(平台上报)', dataIndex: 'adMonetizationBkPlaActive3dRoi', label: 'App相关字段', width: 100, align: 'center', sorter: true,
  766. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 0.5 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  767. },
  768. {
  769. title: '回流7日广告变现金额(平台上报)', dataIndex: 'adMonetizationBkPlaActive7dAmount', label: 'App相关字段', width: 95, align: 'center', sorter: true,
  770. render: (a: string) => <Statistic value={a || 0} precision={2} />
  771. },
  772. {
  773. title: '回流7日广告变现ROI(平台上报)', dataIndex: 'adMonetizationBkPlaActive7dRoi', label: 'App相关字段', width: 100, align: 'center', sorter: true,
  774. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 0.5 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  775. },
  776. {
  777. title: '回流14日广告变现金额(平台上报)', dataIndex: 'adMonetizationBkPlaActive14dAmount', label: 'App相关字段', width: 95, align: 'center', sorter: true,
  778. render: (a: string) => <Statistic value={a || 0} precision={2} />
  779. },
  780. {
  781. title: '回流14日广告变现ROI(平台上报)', dataIndex: 'adMonetizationBkPlaActive14dRoi', label: 'App相关字段', width: 110, align: 'center', sorter: true,
  782. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 0.5 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  783. },
  784. {
  785. title: 'APP下载激活率', dataIndex: 'activatedRate', label: 'App相关字段', width: 70, align: 'center', sorter: true,
  786. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 0.5 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  787. },
  788. {
  789. title: 'APP下载率', dataIndex: 'downloadRate', label: 'App相关字段', width: 70, align: 'center', sorter: true,
  790. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 0.5 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  791. },
  792. {
  793. title: 'APP下载成本', dataIndex: 'downloadCost', label: 'App相关字段', width: 70, align: 'center', sorter: true,
  794. render: (a: string) => <Statistic value={a || 0} precision={2} />
  795. },
  796. {
  797. title: 'APP安装率', dataIndex: 'installRate', label: 'App相关字段', width: 70, align: 'center', sorter: true,
  798. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 0.5 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  799. },
  800. {
  801. title: 'APP安装成本', dataIndex: 'installCost', label: 'App相关字段', width: 70, align: 'center', sorter: true,
  802. render: (a: string) => <Statistic value={a || 0} precision={2} />
  803. },
  804. {
  805. title: 'APP激活成本', dataIndex: 'activatedCost', label: 'App相关字段', width: 70, align: 'center', sorter: true,
  806. render: (a: string) => <Statistic value={a || 0} precision={2} />
  807. },
  808. {
  809. title: 'APP点击激活率', dataIndex: 'clickActivatedRate', label: 'App相关字段', width: 70, align: 'center', sorter: true,
  810. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 0.5 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  811. },
  812. {
  813. title: '次日留存率', dataIndex: 'retentionRate', label: 'App相关字段', width: 70, align: 'center', sorter: true,
  814. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 0.5 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  815. },
  816. {
  817. title: '3日留存人数', dataIndex: 'appRetentionD3Uv', label: 'App相关字段', width: 70, align: 'center', sorter: true,
  818. render: (a: string) => <Statistic value={a || 0} />
  819. },
  820. {
  821. title: '3日留存成本(人数)', dataIndex: 'appRetentionD3Cost', label: 'App相关字段', width: 70, align: 'center', sorter: true,
  822. render: (a: string) => <Statistic value={a || 0} precision={2} />
  823. },
  824. {
  825. title: '3日留存率(人数)', dataIndex: 'appRetentionD3Rate', label: 'App相关字段', width: 70, align: 'center', sorter: true,
  826. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 0.5 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  827. },
  828. {
  829. title: '5日留存人数', dataIndex: 'appRetentionD5Uv', label: 'App相关字段', width: 70, align: 'center', sorter: true,
  830. render: (a: string) => <Statistic value={a || 0} />
  831. },
  832. {
  833. title: '5日留存成本(人数)', dataIndex: 'appRetentionD5Cost', label: 'App相关字段', width: 70, align: 'center', sorter: true,
  834. render: (a: string) => <Statistic value={a || 0} precision={2} />
  835. },
  836. {
  837. title: '5日留存率(人数)', dataIndex: 'appRetentionD5Rate', label: 'App相关字段', width: 70, align: 'center', sorter: true,
  838. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 0.5 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  839. },
  840. {
  841. title: '7日留存人数', dataIndex: 'appRetentionD7Uv', label: 'App相关字段', width: 70, align: 'center', sorter: true,
  842. render: (a: string) => <Statistic value={a || 0} />
  843. },
  844. {
  845. title: '7日留存成本(人数)', dataIndex: 'appRetentionD7Cost', label: 'App相关字段', width: 70, align: 'center', sorter: true,
  846. render: (a: string) => <Statistic value={a || 0} precision={2} />
  847. },
  848. {
  849. title: '7日留存率(人数)', dataIndex: 'appRetentionD7Rate', label: 'App相关字段', width: 70, align: 'center', sorter: true,
  850. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 0.5 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  851. }
  852. ]
  853. },
  854. {
  855. label: '操作',
  856. data: [
  857. {
  858. title: '操作', dataIndex: 'cz', label: '操作', align: 'center', width: 150, default: 100,
  859. render: (_: number, b: any) => {
  860. if (b?.accountId === '总计') return '--'
  861. return <Space>
  862. <a onClick={() => dayHandle(b)} style={{ fontSize: 12 }}>广告每日监控</a>
  863. <a onClick={() => {
  864. window.open(`https://ad.qq.com/atlas/${b?.accountId}/admanage/adgroup?tab=adgroup&query={%22operation_status%22:[%22CALCULATE_STATUS_EXCLUDE_DEL%22],%22system_status%22:[],%22search_name%22:%22${b.adgroupId}%22}`)
  865. }} style={{ fontSize: 12 }}>腾讯广告</a>
  866. </Space>
  867. }
  868. },
  869. // {
  870. // title: '启停',
  871. // dataIndex: 'configuredStatus',
  872. // label: '操作',
  873. // align: 'center',
  874. // width: 45,
  875. // default: 1,
  876. // render: (a: string, b: any) => {
  877. // if (b?.accountId === '总计') {
  878. // return '--'
  879. // }
  880. // return <SwitchStatus configuredStatus={a} isDeleted={b?.isDeleted} adgroupId={b?.adgroupId} accountId={b?.accountId} onChange={onChange} />
  881. // }
  882. // }
  883. ]
  884. }
  885. ]
  886. }
  887. export default columns12