tableConfig.tsx 64 KB

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