tableConfig.tsx 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. import WidthEllipsis from "@/components/widthEllipsis"
  2. import { Progress, Statistic } from "antd"
  3. import React from "react"
  4. import { AdUnitType_Enum, PRODUCT_TYPE_ENUM } from "../../../const"
  5. import style from './index.less'
  6. import moment from "moment"
  7. import { ACCOUNTTYPE, APPTYPE } from "@/pages/iaaSystem/manage/const"
  8. function columns12(): { label: string, fieldSHow?: { label: string, saveField: string, defaultValue: any[], data: any[] }, data: any[] }[] {
  9. const defaultIndex = 23
  10. const trend = [...Array(90).fill(1).map((i,e)=>e+1),100, 110, 120, 130, 140, 150, 160, 170, 180, 365].map((index, count) => {
  11. const dataIndex = `da${index}`
  12. return {
  13. title: `D${index}`, dataIndex, label: '基本信息', default: defaultIndex + count, width: 250,
  14. render: (_: any, b: any) => {
  15. if (moment().subtract(1, 'days') >= moment(b.dt === '总计' ? b.costDayBegin : b.dt).add(index - 1, 'days')) {
  16. const data = b?.[dataIndex]?.split('/')
  17. return <div style={{ display: "grid", gridTemplateColumns: '1fr 1fr' }}>
  18. <div className={style.newbox} >
  19. <span style={{ color: '#1890ff', fontWeight: 600, }}>人数:<span><Statistic value={data?.[0] || 0} /></span></span>
  20. <span style={{ color: '#1890ff', fontWeight: 600, }}>次数:<span><Statistic value={data?.[1] || 0} /></span></span>
  21. <span style={{ color: '#1890ff', fontWeight: 600, }}>新收:<span><Statistic value={data?.[2] || 0} precision={2} /></span></span>
  22. <span style={{ color: '#1890ff', fontWeight: 600, }}>累收:<span><Statistic value={data?.[3] || 0} precision={2} /></span></span>
  23. {index < 8 && <span style={{ color: '#1890ff', fontWeight: 600 }}>价值:<span><Statistic value={data?.[9] || 0} precision={2} valueStyle={{color:'#e41d35'}}/></span></span>}
  24. </div>
  25. <div className={style.newbox}>
  26. <span style={{ color: '#9C27B0', fontWeight: 600, }}>ARPU:<span><Statistic value={data?.[7] || 0} precision={2} /></span></span>
  27. <span style={{ color: '#9C27B0', fontWeight: 600, }}>ARPPU:<span><Statistic value={data?.[8] || 0} precision={2} /></span></span>
  28. <span style={{ color: '#9C27B0', fontWeight: 600, }}>增:<span><Statistic value={data?.[4] ? data?.[4] * 100 : 0} precision={2} valueStyle={!data?.[4] ? {} : data?.[4] >= 0.5 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" /></span></span>
  29. <span style={{ color: '#9C27B0', fontWeight: 600, }}>回:<span><Statistic value={data?.[5] ? data?.[5] * 100 : 0} precision={2} valueStyle={!data?.[5] ? {} : data?.[5] >= 0.5 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" /></span></span>
  30. <span style={{ color: '#9C27B0', fontWeight: 600, }}>倍:<span><Statistic value={data?.[6] || 0} precision={2} valueStyle={{color:"#e41d35"}}/></span></span>
  31. </div>
  32. </div>
  33. }
  34. return <div style={{ height: 102, width: '100%', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>--</div>
  35. }
  36. }
  37. })
  38. return [
  39. {
  40. label: '基本信息',
  41. data: [
  42. {
  43. title: '日期', dataIndex: 'dt', label: '基本信息', align: 'center', width: 80, default: 1,
  44. render: (a: string) => (<WidthEllipsis value={a} />)
  45. },
  46. {
  47. title: '应用', dataIndex: 'appName', label: '基本信息', align: 'center', width: 120, default: 2,
  48. render: (a: string) => (<WidthEllipsis value={a} />)
  49. },
  50. {
  51. title: '应用ID', dataIndex: 'iaaAppId', label: '基本信息', align: 'center', width: 80,
  52. render: (a: string) => (<WidthEllipsis value={a} />)
  53. },
  54. {
  55. title: '小程序名称', dataIndex: 'mpName', label: '基本信息', align: 'center', width: 85, default: 3,
  56. render: (a: string) => (<WidthEllipsis value={a} />)
  57. },
  58. {
  59. title: '小程序ID', dataIndex: 'mpId', label: '基本信息', align: 'center', width: 80,
  60. render: (a: string) => (<WidthEllipsis value={a} />)
  61. },
  62. {
  63. title: '账号归属', dataIndex: 'adUnitType', label: '基本信息', align: 'center', width: 80,
  64. render: (a: string) => (<WidthEllipsis value={AdUnitType_Enum[a as keyof typeof AdUnitType_Enum]} />)
  65. },
  66. {
  67. title: '业务类型', dataIndex: 'productType', label: '基本信息', align: 'center', width: 80, default: 4,
  68. render: (a: string) => (<WidthEllipsis value={PRODUCT_TYPE_ENUM[a as keyof typeof PRODUCT_TYPE_ENUM]} />)
  69. },
  70. {
  71. title: '应用类型', dataIndex: 'appType', label: '基本信息', align: 'center', width: 80, default: 5,
  72. render: (a: string) => (<WidthEllipsis value={APPTYPE[a as keyof typeof APPTYPE]?.text} />)
  73. },
  74. {
  75. title: '消耗', dataIndex: 'cost', label: '基本信息', align: 'right', width: 125, default: 6, sorter: true,
  76. className: 'padding_0',
  77. render: (a: number) => <div style={{ height: 107, position: 'relative' }}>
  78. <Progress
  79. strokeColor={{
  80. from: '#ff5900',
  81. to: '#ffd380',
  82. }}
  83. status="active"
  84. showInfo={false}
  85. percent={a ? a / 20000 * 100 : 0}
  86. />
  87. <span style={{ position: 'absolute', left: '50%', top: '50%', width: '100%', padding: '0 5px', transform: 'translate(-50%, -50%)' }}><Statistic value={a || 0} precision={2} valueStyle={a >= 20000 ? { color: '#000', fontWeight: 'bold' } : { fontWeight: 'bold' }} /></span>
  88. </div>
  89. },
  90. {
  91. title: '广告变现成本', dataIndex: 'adMonetizationCost', label: '基本信息', align: 'right', width: 110, default: 7, sorter: true,
  92. render: (a: number) => <Statistic value={a || 0} precision={2} />
  93. },
  94. {
  95. title: '广告变现人数', dataIndex: 'appAdPayingUsers', label: '基本信息', align: 'center', width: 110, default: 8, sorter: true,
  96. render: (a: number) => <Statistic value={a || 0} />
  97. },
  98. {
  99. title: '广告变现arpu', dataIndex: 'arpu', label: '基本信息', align: 'center', width: 110, default: 9, sorter: true,
  100. render: (a: number) => <Statistic value={a || 0} precision={2} />
  101. },
  102. {
  103. title: '广告变现arppu', dataIndex: 'arppu', label: '基本信息', align: 'center', width: 120, default: 10, sorter: true,
  104. render: (a: number) => <Statistic value={a || 0} precision={2} />
  105. },
  106. {
  107. title: '广告变现金额', dataIndex: 'appAdPayingAmount', label: '基本信息', align: 'center', width: 110, default: 11, sorter: true,
  108. render: (a: number) => <Statistic value={a || 0} precision={2} />
  109. },
  110. {
  111. title: '广告变现roi', dataIndex: 'appAdPayingRoi', label: '基本信息', align: 'center', width: 105, default: 12, sorter: true,
  112. render: (a: number) => <Statistic value={a ? (a * 100).toFixed(2) : 0} precision={2} valueStyle={!a ? {} : a >= 0.5 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
  113. },
  114. {
  115. title: '注册人数', dataIndex: 'regDedupPv', label: '基本信息', align: 'center', width: 80, default: 13, sorter: true,
  116. render: (a: number, b: any) => <Statistic value={a || 0} />
  117. },
  118. ...trend
  119. ]
  120. }
  121. ]
  122. }
  123. export default columns12