tableConfig.tsx 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525
  1. import { TYPE, gameClassifyEnum } from "@/components/QueryForm/const"
  2. import WidthEllipsis from "@/components/widthEllipsis"
  3. import { Statistic } from "antd"
  4. import React from "react"
  5. import { ADSTATUSEnum, LANDINGTYPEEnum, PRICINGEnum } from './const'
  6. import './index.less'
  7. function columns12(): { label: string, fieldSHow?: { label: string, saveField: string, defaultValue: any[], data: any[] }, data: any[] }[] {
  8. const data = [{ lable: '次日', value: 2 }, { lable: 'D3', value: 3 }, { lable: 'D7', value: 7 }, { lable: 'D15', value: 15 }]
  9. let date = data.map(item => {
  10. let field = `d${item.value}Trend`
  11. return {
  12. title: item.lable,
  13. dataIndex: `D${item.value}`,
  14. label: '付费数据',
  15. align: 'center',
  16. width: 85,
  17. className: 'payDataBackColorClass',
  18. children: [
  19. {
  20. title: 'ROI',
  21. dataIndex: 'roi',
  22. key: 'roi',
  23. width: 60,
  24. align: 'center',
  25. render: (_: any, b: any) => {
  26. let data: any = {}
  27. if (b?.[field]) {
  28. data = b?.[field]
  29. return <Statistic value={data?.roi ? data?.roi * 100 : 0} precision={2} valueStyle={data?.roi >= 1 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  30. }
  31. return '--'
  32. }
  33. },
  34. {
  35. title: '付费',
  36. dataIndex: 'rechargeMoney',
  37. key: 'rechargeMoney',
  38. width: 60,
  39. align: 'center',
  40. render: (_: any, b: any) => {
  41. let data: any = {}
  42. if (b?.[field]) {
  43. data = b?.[field]
  44. return <Statistic value={data?.rechargeMoney || 0} />
  45. }
  46. return '--'
  47. }
  48. },
  49. {
  50. title: '倍数',
  51. dataIndex: 'multiples',
  52. key: 'multiples',
  53. width: 40,
  54. align: 'center',
  55. render: (_: any, b: any) => {
  56. let data: any = {}
  57. if (b?.[field]) {
  58. data = b?.[field]
  59. return <span>{data?.multiples || 0}</span>
  60. }
  61. return '--'
  62. }
  63. },
  64. ]
  65. }
  66. })
  67. return [
  68. {
  69. label: '账户信息',
  70. data: [
  71. {
  72. title: '推广账号名称', dataIndex: 'accountName', label: '账户信息', align: 'center', width: 100, default: 1,
  73. render: (a: string, b: any) => (<WidthEllipsis value={a} />)
  74. },
  75. {
  76. title: '推广账号ID', dataIndex: 'accountId', label: '账户信息', align: 'center', width: 120, default: 2,
  77. render: (a: string, b: any) => (<WidthEllipsis isCopy value={a} />)
  78. },
  79. {
  80. title: '备注', dataIndex: 'notes', label: '账户信息', align: 'center', width: 120,
  81. render: (a: string, b: any) => (<WidthEllipsis value={a} />)
  82. },
  83. {
  84. title: '投手', dataIndex: 'pitcherName', label: '账户信息', align: 'center', width: 70,
  85. render: (a: string, b: any) => (<WidthEllipsis value={a} />)
  86. },
  87. {
  88. title: '投放渠道', dataIndex: 'agentName', label: '账户信息', align: 'center', width: 75, default: 3,
  89. render: (a: string, b: any) => (<WidthEllipsis value={a} />)
  90. },
  91. {
  92. title: '服务商', dataIndex: 'service', label: '账户信息', align: 'center', width: 95,
  93. render: (a: string, b: any) => (<WidthEllipsis value={a} />)
  94. },
  95. {
  96. title: '投放媒体', dataIndex: 'accountType', label: '账户信息', align: 'center', width: 70,
  97. render: (a: string, b: any) => (<WidthEllipsis value={TYPE[a]} />)
  98. },
  99. {
  100. title: '余额', dataIndex: 'balance', label: '账户信息', align: 'center', width: 70,
  101. render: (a: string, b: any) => (<WidthEllipsis value={a} />)
  102. }
  103. ]
  104. },
  105. {
  106. label: '推广内容',
  107. data: [
  108. {
  109. title: '推广游戏名称', dataIndex: 'gameName', label: '推广内容', align: 'center', width: 70,
  110. render: (a: string, b: any) => (<WidthEllipsis value={a} />)
  111. },
  112. {
  113. title: '推广游戏应用类型', dataIndex: 'classify', label: '推广内容', align: 'center', width: 95,
  114. render: (a: string) => (<span>{gameClassifyEnum[a]}</span>)
  115. }
  116. ]
  117. },
  118. {
  119. label: '广告信息',
  120. data: [
  121. {
  122. title: '推广广告名称', dataIndex: 'promotionName', label: '广告信息', align: 'center', width: 130, default: 4,
  123. render: (a: string, b: any) => (<WidthEllipsis isCopy value={a} />)
  124. },
  125. {
  126. title: '广告ID', dataIndex: 'promotionId', label: '广告信息', align: 'center', width: 90, default: 5,
  127. render: (a: string, b: any) => (<WidthEllipsis isCopy value={a} />)
  128. },
  129. {
  130. title: '推广计划名称', dataIndex: 'projectName', label: '广告信息', align: 'center', width: 130,
  131. render: (a: string, b: any) => (<WidthEllipsis isCopy value={a} />)
  132. },
  133. {
  134. title: '计划ID', dataIndex: 'projectId', label: '广告信息', align: 'center', width: 90,
  135. render: (a: string, b: any) => (<WidthEllipsis isCopy value={a} />)
  136. },
  137. {
  138. title: '广告状态', dataIndex: 'status', label: '广告信息', align: 'left', width: 120, default: 6,
  139. render: (a: string, b: any) => (<WidthEllipsis value={ADSTATUSEnum[a]} />)
  140. },
  141. {
  142. title: '推广目标', dataIndex: 'landingType', label: '广告信息', align: 'center', width: 80,
  143. render: (a: string, b: any) => (<WidthEllipsis value={LANDINGTYPEEnum[a]} />)
  144. },
  145. {
  146. title: '出价方式', dataIndex: 'pricing', label: '广告信息', align: 'center', width: 100, default: 7,
  147. render: (a: string, b: any) => (<WidthEllipsis value={PRICINGEnum[a]} />)
  148. },
  149. {
  150. title: '当前出价', dataIndex: 'cpaBid', label: '广告信息', align: 'center', width: 70, default: 8,
  151. render: (a: any) => <Statistic value={a || '--'} />
  152. },
  153. {
  154. title: '深度转化ROI系数', dataIndex: 'roiGoal', label: '广告信息', align: 'center', width: 65,
  155. render: (a: any) => <Statistic value={a || 0} />
  156. },
  157. {
  158. title: '日预算', dataIndex: 'budget', label: '广告信息', align: 'center', width: 70, default: 9,
  159. render: (a: string, b: any) => (<WidthEllipsis value={a} />)
  160. },
  161. {
  162. title: '投放时间', dataIndex: 'scheduleTime', label: '广告信息', align: 'center', width: 135, default: 10,
  163. render: (a: string, b: any) => (<WidthEllipsis value={a} />)
  164. }
  165. ]
  166. },
  167. {
  168. label: '消耗',
  169. data: [
  170. {
  171. title: '今日消耗', dataIndex: 'todayCost', label: '消耗', align: 'center', width: 85, sorter: true, default: 11,
  172. render: (a: any) => <Statistic valueStyle={{ fontWeight: 'bold', fontSize: 14 }} value={a || 0} />
  173. },
  174. {
  175. title: '总消耗', dataIndex: 'promotionTotalCost', label: '消耗', align: 'center', width: 100,
  176. render: (a: any) => <Statistic value={a || 0} />
  177. }
  178. ]
  179. },
  180. {
  181. label: '广告媒体端数据',
  182. data: [
  183. {
  184. title: '曝光量', dataIndex: 'showCount', label: '广告媒体端数据', align: 'center', width: 60, sorter: true, default: 12, className: "adDataBackColorClass",
  185. render: (a: any) => <Statistic value={a || 0} />
  186. },
  187. {
  188. title: '千次曝光成本', dataIndex: 'thousandDisplayPrice', label: '广告媒体端数据', align: 'center', width: 65, sorter: true, className: "adDataBackColorClass", default: 14,
  189. render: (a: any) => <Statistic value={a || 0} />
  190. },
  191. {
  192. title: '点击量', dataIndex: 'clickCount', label: '广告媒体端数据', align: 'center', width: 60, sorter: true, className: "adDataBackColorClass", default: 13,
  193. render: (a: any) => <Statistic value={a || 0} />
  194. },
  195. {
  196. title: '点击均价', dataIndex: 'avgClickCost', label: '广告媒体端数据', align: 'center', width: 60, sorter: true, className: "adDataBackColorClass", default: 15,
  197. render: (a: any) => <Statistic value={a || 0} />
  198. },
  199. {
  200. title: '点击率', dataIndex: 'ctr', label: '广告媒体端数据', align: 'center', width: 60, sorter: true, className: "adDataBackColorClass", default: 16,
  201. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={a >= 1 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  202. },
  203. {
  204. title: '转化目标', dataIndex: 'convertTarget', label: '广告媒体端数据', align: 'center', className: "adDataBackColorClass", width: 70,
  205. render: (a: string, b: any) => (<WidthEllipsis value={a} />)
  206. },
  207. {
  208. title: '转化目标量', dataIndex: 'convertCount', label: '广告媒体端数据', align: 'center', className: "adDataBackColorClass", width: 60, sorter: true,
  209. render: (a: any) => <Statistic value={a || 0} />
  210. },
  211. {
  212. title: '转化目标成本', dataIndex: 'convertCost', label: '广告媒体端数据', align: 'center', className: "adDataBackColorClass", width: 85, sorter: true,
  213. render: (a: any) => <Statistic value={a || 0} valueStyle={a > 700 ? { color: 'red', fontWeight: 'bold' } : {}} />
  214. },
  215. {
  216. title: '目标转化率', dataIndex: 'convertRate', label: '广告媒体端数据', align: 'center', className: "adDataBackColorClass", width: 60, sorter: true,
  217. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={a >= 1 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  218. },
  219. {
  220. title: '注册人数(广告)', dataIndex: 'active', label: '广告媒体端数据', align: 'center', className: "adDataBackColorClass", width: 70, sorter: true, default: 17,
  221. render: (a: any) => <Statistic value={a || 0} />
  222. },
  223. {
  224. title: '注册成本(广告)', dataIndex: 'activeCost', label: '广告媒体端数据', align: 'center', className: "adDataBackColorClass", width: 70, sorter: true, default: 18,
  225. render: (a: any) => <Statistic value={a || 0} />
  226. },
  227. {
  228. title: '首日转化数(广告)', dataIndex: 'firstConvertCount', label: '广告媒体端数据', align: 'center', className: "adDataBackColorClass", width: 70, sorter: true, default: 19,
  229. render: (a: any) => <Statistic value={a || 0} />
  230. },
  231. {
  232. title: '首日转化成本(广告)', dataIndex: 'firstConvertCost', label: '广告媒体端数据', align: 'center', className: "adDataBackColorClass", width: 70, sorter: true, default: 20,
  233. render: (a: any) => <Statistic value={a || 0} />
  234. },
  235. {
  236. title: '首次付费率(广告)', dataIndex: 'firstActivePayRate', label: '广告媒体端数据', align: 'center', className: "adDataBackColorClass", width: 70, sorter: true, default: 21,
  237. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={a >= 1 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  238. },
  239. {
  240. title: '首日付费金额(广告)', dataIndex: 'firstAttributionGameInAppLtv1day', label: '广告媒体端数据', align: 'center', className: "adDataBackColorClass", width: 70, sorter: true, default: 22,
  241. render: (a: any) => <Statistic value={a || 0} />
  242. },
  243. {
  244. title: '首日付费ROI(广告)', dataIndex: 'firstAttributionGameInAppRoi1day', label: '广告媒体端数据', align: 'center', className: "adDataBackColorClass", width: 85, sorter: true, default: 23,
  245. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={a >= 1 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  246. },
  247. {
  248. title: '付费次数(广告)', dataIndex: 'gamePayCount', label: '广告媒体端数据', align: 'center', className: "adDataBackColorClass", width: 70, sorter: true, default: 24,
  249. render: (a: any) => <Statistic value={a || 0} />
  250. },
  251. {
  252. title: '付费次数成本(广告)', dataIndex: 'gamePayCountCost', label: '广告媒体端数据', align: 'center', className: "adDataBackColorClass", width: 80,
  253. render: (a: any) => <Statistic value={a || 0} />
  254. }
  255. ]
  256. },
  257. {
  258. label: '用户数据',
  259. data: [
  260. {
  261. title: '注册人数',
  262. tips: '新增用户数(首次注册用户)',
  263. dataIndex: 'regNum',
  264. label: '用户数据',
  265. align: 'center',
  266. width: 70,
  267. sorter: true,
  268. default: 29,
  269. render: (a: any) => <Statistic value={a || 0} />
  270. },
  271. {
  272. title: '总注册人数', dataIndex: 'regTotalNum', label: '用户数据', align: 'center', width: 70, tips: '广告的总注册人数',
  273. render: (a: any) => <Statistic value={a || 0} />
  274. },
  275. {
  276. title: '首日创角人数', dataIndex: 'firstRoleNum', label: '用户数据', align: 'center', width: 60, sorter: true, default: 31,
  277. render: (a: any) => <Statistic value={a || 0} />
  278. },
  279. {
  280. title: '新用户累计创角人数', dataIndex: 'newUserTotalRoleNum', label: '用户数据', align: 'center', width: 70, sorter: true,
  281. render: (a: any) => <Statistic value={a || 0} />
  282. },
  283. {
  284. title: '总创角人数', dataIndex: 'roleTotalNum', label: '用户数据', align: 'center', width: 60,
  285. render: (a: any) => <Statistic value={a || 0} />
  286. },
  287. {
  288. title: '注册成本', dataIndex: 'regCost', label: '用户数据', align: 'center', width: 70, sorter: true, default: 30,
  289. render: (a: any) => <Statistic value={a || 0} />
  290. },
  291. {
  292. title: '总注册成本', dataIndex: 'regTotalCost', label: '用户数据', align: 'center', width: 70,
  293. render: (a: any) => <Statistic value={a || 0} />
  294. },
  295. {
  296. title: '首日创角成本', dataIndex: 'firstRoleCost', label: '用户数据', align: 'center', width: 60, sorter: true, default: 32,
  297. render: (a: any) => <Statistic value={a || 0} />
  298. },
  299. {
  300. title: '新用户创角成本', dataIndex: 'newUserTotalRoleCost', label: '用户数据', align: 'center', width: 65, sorter: true,
  301. render: (a: any) => <Statistic value={a || 0} />
  302. },
  303. {
  304. title: '总创角成本', dataIndex: 'roleTotalCost', label: '用户数据', align: 'center', width: 60,
  305. render: (a: any) => <Statistic value={a || 0} />
  306. },
  307. {
  308. title: '首日创角率', dataIndex: 'firstRoleRate', label: '用户数据', align: 'center', width: 70, sorter: true, default: 33,
  309. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={a >= 1 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  310. },
  311. {
  312. title: '新用户创角率', dataIndex: 'newUserTotalRoleRate', label: '用户数据', align: 'center', width: 70, sorter: true,
  313. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={a >= 1 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  314. },
  315. {
  316. title: '总创角率', dataIndex: 'roleTotalRate', label: '用户数据', align: 'center', width: 80,
  317. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={a >= 1 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  318. },
  319. ]
  320. },
  321. {
  322. label: '付费数据',
  323. data: [
  324. {
  325. title: '首日充值次数', tips: "新增付费次数(首次注册并充值的总次数)", dataIndex: 'firstNewUserAmountCount', label: '付费数据', align: 'center', width: 80, sorter: true, className: 'payDataBackColorClass', default: 25,
  326. render: (a: any) => <Statistic value={a || 0} />
  327. },
  328. {
  329. title: '首日充值人数', tips: '新增付费人数(首次注册并充值人数)', dataIndex: 'firstNewUserAmountNum', label: '付费数据', align: 'center', width: 80, sorter: true, className: 'payDataBackColorClass', default: 26,
  330. render: (a: any) => <Statistic value={a || 0} />
  331. },
  332. {
  333. title: '首日充值金额', tips: '新增付费金额(首次注册并充值金额)', dataIndex: 'firstNewUserAmount', label: '付费数据', align: 'center', width: 90, sorter: true, className: 'payDataBackColorClass', default: 27,
  334. render: (a: any) => <Statistic value={a || 0} />
  335. },
  336. {
  337. title: '至今付费次数', dataIndex: 'newUserTotalAmountCount', label: '付费数据', align: 'center', width: 60, sorter: true, className: 'payDataBackColorClass',
  338. render: (a: any) => <Statistic value={a || 0} />
  339. },
  340. {
  341. title: '至今付费人数', dataIndex: 'newUserTotalAmountNum', label: '付费数据', align: 'center', width: 60, sorter: true, className: 'payDataBackColorClass',
  342. render: (a: any) => <Statistic value={a || 0} />
  343. },
  344. {
  345. title: '至今付费金额', dataIndex: 'newUserTotalAmount', label: '付费数据', align: 'center', width: 80, sorter: true, className: 'payDataBackColorClass',
  346. render: (a: any) => <Statistic value={a || 0} />
  347. },
  348. {
  349. title: '新用户24小时充值金额', dataIndex: 'twentyFourHoursAmount', label: '付费数据', align: 'center', width: 80, sorter: true, className: 'payDataBackColorClass',
  350. render: (a: any) => <Statistic value={a || 0} />
  351. },
  352. {
  353. title: '总充值次数', dataIndex: 'totalAmountCount', label: '付费数据', align: 'center', width: 50, className: 'payDataBackColorClass',
  354. render: (a: any) => <Statistic value={a || 0} />
  355. },
  356. {
  357. title: '总充值人数', dataIndex: 'totalAmountNum', label: '付费数据', align: 'center', width: 50, className: 'payDataBackColorClass',
  358. render: (a: any) => <Statistic value={a || 0} />
  359. },
  360. {
  361. title: '总充值金额', dataIndex: 'totalAmount', label: '付费数据', align: 'center', width: 70, className: 'payDataBackColorClass',
  362. render: (a: any) => <Statistic value={a || 0} />
  363. },
  364. {
  365. title: '首日ROI', dataIndex: 'firstRoi', label: '付费数据', align: 'center', width: 65, sorter: true, default: 34, className: 'payDataBackColorClass',
  366. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={a >= 1 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  367. },
  368. {
  369. title: '24小时ROI', dataIndex: 'twentyFourHoursRoi', label: '付费数据', align: 'center', width: 70, sorter: true, default: 35, className: 'payDataBackColorClass',
  370. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={a >= 1 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  371. },
  372. {
  373. title: '总ROI', dataIndex: 'totalRoi', label: '付费数据', align: 'center', width: 70, sorter: true, className: 'payDataBackColorClass',
  374. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={a >= 1 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  375. },
  376. {
  377. title: '广告总ROI', dataIndex: 'promotionTotalRoi', label: '付费数据', align: 'center', width: 70, className: 'payDataBackColorClass',
  378. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={a >= 1 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  379. },
  380. {
  381. title: '首日充值成本', tips: '新增付费成本(首次注册并充值的用户成本)', dataIndex: 'firstNewUserRechargeCost', label: '付费数据', align: 'center', width: 80, sorter: true, default: 28, className: 'payDataBackColorClass',
  382. render: (a: any) => <Statistic value={a || 0} />
  383. },
  384. {
  385. title: '至今付费成本', dataIndex: 'newUserTotalRechargeCost', label: '付费数据', align: 'center', width: 70, sorter: true, className: 'payDataBackColorClass',
  386. render: (a: any) => <Statistic value={a || 0} />
  387. },
  388. {
  389. title: '总付费成本', tips: '总付费成本(广告总付费用户成本)', dataIndex: 'totalRechargeCost', label: '付费数据', align: 'center', width: 70, className: 'payDataBackColorClass',
  390. render: (a: any) => <Statistic value={a || 0} />
  391. },
  392. {
  393. title: '首日付费用户ARPPU', tips: '首日充值金额/首日充值人数', dataIndex: 'firstNewUserArppu', label: '付费数据', align: 'center', width: 70, sorter: true, default: 37, className: 'payDataBackColorClass',
  394. render: (a: any) => <Statistic value={a || 0} />
  395. },
  396. {
  397. title: '至今付费ARPPU', dataIndex: 'newUserTotalAmountArppu', label: '付费数据', align: 'center', width: 60, sorter: true, className: 'payDataBackColorClass',
  398. render: (a: any) => <Statistic value={a || 0} />
  399. },
  400. {
  401. title: '首日付费100+用户数', tips: '首次注册并在注册当天单笔充值金额大于100的用户人数', dataIndex: 'firstNewUserHundredUserNum', label: '付费数据', align: 'center', width: 90, sorter: true, className: 'payDataBackColorClass',
  402. render: (a: any) => <Statistic value={a || 0} />
  403. },
  404. {
  405. title: '首日付费100+用户付费成本', tips: '今日消耗/首日付费100+用户数', dataIndex: 'firstNewUserHundredUserCost', label: '付费数据', align: 'center', width: 95, sorter: true, className: 'payDataBackColorClass',
  406. render: (a: any) => <Statistic value={a || 0} />
  407. },
  408. {
  409. title: '至今付费100+用户付费成本', dataIndex: 'newUserTotalHundredUserCost', label: '付费数据', align: 'center', width: 85, sorter: true, className: 'payDataBackColorClass',
  410. render: (a: any) => <Statistic value={a || 0} />
  411. },
  412. {
  413. title: '首充50~100元用户数', dataIndex: 'firstRechargeFiftyHundredNum', label: '付费数据', align: 'center', width: 80, sorter: true, className: 'payDataBackColorClass',
  414. render: (a: any) => <Statistic value={a || 0} />
  415. },
  416. {
  417. title: '首充50~100元占比', dataIndex: 'firstRechargeFiftyHundredRate', label: '付费数据', align: 'center', width: 70, sorter: true, className: 'payDataBackColorClass',
  418. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={a >= 1 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  419. },
  420. {
  421. title: '首日付费200+人数', tips: '首次注册并在注册当天单笔充值金额大于200的用户人数', dataIndex: 'firstNewUserTwoHundredUserNum', label: '付费数据', align: 'center', width: 90, sorter: true, className: 'payDataBackColorClass',
  422. render: (a: any) => <Statistic value={a || 0} />
  423. },
  424. {
  425. title: '首日付费200+用户付费成本', tips: '今日消耗/首日付费200+用户数', dataIndex: 'firstNewUserTwoHundredUserCost', label: '付费数据', align: 'center', width: 95, sorter: true, className: 'payDataBackColorClass',
  426. render: (a: any) => <Statistic value={a || 0} />
  427. },
  428. {
  429. title: '至今付费100+用户数', dataIndex: 'newUserTotalHundredUserNum', label: '付费数据', align: 'center', width: 80, sorter: true, className: 'payDataBackColorClass',
  430. render: (a: any) => <Statistic value={a || 0} />
  431. },
  432. {
  433. title: '首日IOS付费次数', dataIndex: 'firstIosAmountCount', label: '付费数据', align: 'center', width: 75, sorter: true, className: 'payDataBackColorClass',
  434. render: (a: any) => <Statistic value={a || 0} />
  435. },
  436. {
  437. title: '首日IOS付费人数', dataIndex: 'firstIosAmountNum', label: '付费数据', align: 'center', width: 75, sorter: true, className: 'payDataBackColorClass',
  438. render: (a: any) => <Statistic value={a || 0} />
  439. },
  440. {
  441. title: '首日IOS付费金额', dataIndex: 'firstIosAmount', label: '付费数据', align: 'center', width: 75, sorter: true, className: 'payDataBackColorClass',
  442. render: (a: any) => <Statistic value={a || 0} />
  443. },
  444. {
  445. title: '首日IOS付费人数占比', dataIndex: 'firstIosAmountNumRate', label: '付费数据', align: 'center', width: 75, sorter: true, className: 'payDataBackColorClass',
  446. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={a >= 1 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  447. },
  448. {
  449. title: '首日IOS付费金额占比', dataIndex: 'firstIosAmountRate', label: '付费数据', align: 'center', width: 75, sorter: true, className: 'payDataBackColorClass',
  450. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={a >= 1 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  451. },
  452. {
  453. title: '首日IOS付费ROI', dataIndex: 'firstIosAmountRoi', label: '付费数据', align: 'center', width: 75, sorter: true, className: 'payDataBackColorClass',
  454. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={a >= 1 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  455. },
  456. {
  457. title: '首日Android付费次数', dataIndex: 'firstAndroidAmountCount', label: '付费数据', align: 'center', width: 78, sorter: true, className: 'payDataBackColorClass',
  458. render: (a: any) => <Statistic value={a || 0} />
  459. },
  460. {
  461. title: '首日Android付费人数', dataIndex: 'firstAndroidAmountNum', label: '付费数据', align: 'center', width: 78, sorter: true, className: 'payDataBackColorClass',
  462. render: (a: any) => <Statistic value={a || 0} />
  463. },
  464. {
  465. title: '首日Android付费金额', dataIndex: 'firstAndroidAmount', label: '付费数据', align: 'center', width: 78, sorter: true, className: 'payDataBackColorClass',
  466. render: (a: any) => <Statistic value={a || 0} />
  467. },
  468. {
  469. title: '首日Android付费人数占比', dataIndex: 'firstAndroidAmountNumRate', label: '付费数据', align: 'center', width: 95, sorter: true, className: 'payDataBackColorClass',
  470. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={a >= 1 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  471. },
  472. {
  473. title: '首日Android付费金额占比', dataIndex: 'firstAndroidAmountRate', label: '付费数据', align: 'center', width: 95, sorter: true, className: 'payDataBackColorClass',
  474. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={a >= 1 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  475. },
  476. {
  477. title: '首日Android付费ROI', dataIndex: 'firstAndroidAmountRoi', label: '付费数据', align: 'center', width: 80, sorter: true, className: 'payDataBackColorClass',
  478. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={a >= 1 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  479. },
  480. {
  481. title: '首日付费率', dataIndex: 'firstAmountRate', label: '付费数据', align: 'center', width: 70, sorter: true, default: 36, className: 'payDataBackColorClass',
  482. render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={a >= 1 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  483. },
  484. {
  485. title: '首日客单价', tips: '首日客单价(数新增客单价)=首日新用户充值金额/首日新用户充值次', dataIndex: 'firstNewUserAvgPrice', label: '付费数据', align: 'center', width: 70, sorter: true, className: 'payDataBackColorClass',
  486. render: (a: any) => <Statistic value={a || 0} />
  487. },
  488. {
  489. title: '至今客单价', dataIndex: 'newUserTotalAvgPrice', label: '付费数据', align: 'center', width: 60, sorter: true, className: 'payDataBackColorClass',
  490. render: (a: any) => <Statistic value={a || 0} />
  491. },
  492. {
  493. title: 'ltv1', dataIndex: 'ltvDay1', label: '付费数据', align: 'center', width: 60, sorter: true, default: 38, className: 'payDataBackColorClass',
  494. render: (a: any) => <Statistic value={a || 0} />
  495. },
  496. {
  497. title: '每日扣单数', dataIndex: 'subOrderNum', label: '付费数据', align: 'center', width: 60, sorter: true, default: 39, className: 'payDataBackColorClass',
  498. render: (a: any) => <Statistic value={a || 0} />
  499. },
  500. {
  501. title: '每日扣单金额', dataIndex: 'subOrderAmount', label: '付费数据', align: 'center', width: 60, sorter: true, default: 40, className: 'payDataBackColorClass',
  502. render: (a: any) => <Statistic value={a || 0} />
  503. },
  504. {
  505. title: '总充值次数成本', dataIndex: 'totalAmountCountCost', label: '付费数据', align: 'center', width: 70, sorter: true, className: 'payDataBackColorClass',
  506. render: (a: any) => <Statistic value={a || 0} />
  507. },
  508. {
  509. title: '新增付费次数成本', dataIndex: 'firstNewUserAmountCountCost', label: '付费数据', align: 'center', width: 70, sorter: true, className: 'payDataBackColorClass',
  510. render: (a: any) => <Statistic value={a || 0} />
  511. },
  512. {
  513. title: '至今付费次数成本', dataIndex: 'newUserTotalAmountCountCost', label: '付费数据', align: 'center', width: 70, sorter: true, className: 'payDataBackColorClass',
  514. render: (a: any) => <Statistic value={a || 0} />
  515. },
  516. ...date
  517. ]
  518. }
  519. ]
  520. }
  521. export default columns12