wjx 1 gadu atpakaļ
vecāks
revīzija
1aa193bad9

+ 23 - 5
src/components/QueryForm/index.tsx

@@ -4,7 +4,8 @@ import moment from "moment"
 import { useAjax } from "@/Hook/useAjax"
 import { getAllOfOwnerUserApi, getChannelChoiceListApi, getGameChoiceListApi, getGameChoiceParentListType1Api, getPayListApi, getSubUserWithSelfListApi, getTtAllUserListApi, getUserSystemTypeChoiceListApi } from "@/services/gameData"
 import { PayStatus, TYPE, gameClassifyEnum } from "./const"
-import { ADSTATUSEnum } from "@/pages/gameDataStatistics/adlist/monitor/const"
+import { ADSTATUSEnum as ADSTTTATUSEnum } from "@/pages/gameDataStatistics/adlist/monitor/const"
+import { ADSTATUSEnum } from "@/pages/gameDataStatistics/adlist/tencentMonitor/const"
 
 
 interface Props {
@@ -117,8 +118,10 @@ interface Props {
     isPromotionId?: boolean
     /** 是否开启 广告名称 搜索 */
     isPromotionName?: boolean
-    /** 是否开启 广告状态 搜索 */
-    isAdStatus?: boolean
+    /** 是否开启 头条广告状态 搜索 */
+    isAdTTStatus?: boolean
+    /** 是否开启 腾讯广告状态 搜索 */
+    isAdTXStatus?: boolean
     /** 是否开启 展示数据类型(买量,自然,总) 搜索 */
     isUserEnterType?: boolean
     /** 是否开启 区服名称 搜索 */
@@ -140,7 +143,7 @@ const QueryForm: React.FC<Props> = (props) => {
     const {
         onChange, initialValues, isSource, isAccount, isAccountId, isCompanyId, isAgentKey, isAgentName, isCpId, isCpName, isCpOrderId, isCpStatus, isCreateDay, isDevice, isGameName, isRechargeGameName, isGameId, isOrderGameId, isGameRoleId,
         isGameRoleName, isFirstRecharge, isSwitch, isMerchantNo, isOrderId, isMerchantOrderNo, isPayStatus, isPayWay, isProductName, isRegAgent, isAgentId, isPutAgent, isRegDay, isOs, isParentId, isProjectId, isProjectName, isPromotionId, isPromotionName,
-        isSysUserName, isRechargeDate, isBGGameClassify, isGameUserId, isSysUserId, isUserName, isUserId, isSelectRanking, isGameType, isConsumeDay, rechargeDay, isBeginDay, isType, isAdStatus, isUserEnterType, isServerName, isServerId, isServerDay
+        isSysUserName, isRechargeDate, isBGGameClassify, isGameUserId, isSysUserId, isUserName, isUserId, isSelectRanking, isGameType, isConsumeDay, rechargeDay, isBeginDay, isType, isAdTTStatus, isUserEnterType, isServerName, isServerId, isServerDay, isAdTXStatus
     } = props
     const [form] = Form.useForm()
     const [accountList, setAccountList] = useState<any[]>([])
@@ -442,7 +445,22 @@ const QueryForm: React.FC<Props> = (props) => {
                 <Input placeholder="请输入广告ID" allowClear style={{ width: 140 }} />
             </Form.Item></Col>}
             {/* 广告状态 */}
-            {isAdStatus && <Col><Form.Item name='status'>
+            {isAdTTStatus && <Col><Form.Item name='status'>
+                <Select
+                    maxTagCount={1}
+                    showSearch
+                    style={{ minWidth: 140 }}
+                    allowClear
+                    dropdownMatchSelectWidth={false}
+                    placeholder={'请选择广告状态'}
+                    filterOption={(input, option) =>
+                        (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
+                    }
+                >
+                    {Object.keys(ADSTTTATUSEnum).map(key => <Select.Option value={key} key={key}>{ADSTTTATUSEnum[key]}</Select.Option>)}
+                </Select>
+            </Form.Item></Col>}
+            {isAdTXStatus && <Col><Form.Item name='status'>
                 <Select
                     maxTagCount={1}
                     showSearch

+ 1 - 1
src/pages/gameDataStatistics/adlist/monitor/index.tsx

@@ -72,7 +72,7 @@ const Monitor = () => {
                 isProjectName
                 isPromotionId
                 isPromotionName
-                isAdStatus
+                isAdTTStatus
             />}
             isZj
             totalData={totalData}

+ 1 - 1
src/pages/gameDataStatistics/adlist/tencentMonitor/const.tsx

@@ -3,7 +3,7 @@ import React from "react";
 
 /** 广告状态 */
 export const ADSTATUSEnum = {
-    'STATUS_PENDING': '审核中',
+    'STATUS_PENDING': <Badge status="success" text={<span style={{ fontSize: 12 }}>审核中</span>} />,
     'STATUS_DENIED': <Badge status="error" text={<span style={{ fontSize: 12 }}>审核不通过</span>} />,
     'STATUS_SUSPEND': <Badge status="warning" text={<span style={{ fontSize: 12 }}>暂停中</span>} />,
     'STATUS_READY': <Badge status="default" text={<span style={{ fontSize: 12 }}>未到投放时间</span>} />,

+ 1 - 1
src/pages/gameDataStatistics/adlist/tencentMonitor/index.tsx

@@ -73,7 +73,7 @@ const TencentMonitor: React.FC = () => {
                 isProjectName
                 isPromotionId
                 isPromotionName
-                isAdStatus
+                isAdTXStatus
             />}
             isZj
             totalData={totalData}

+ 12 - 0
src/pages/gameDataStatistics/components/TableData/index.tsx

@@ -103,8 +103,20 @@ function TableData(props: Prosp) {
                         oldItem['fixed'] = 'left'
                     } else if (index > (newArr?.length - Number(fixedData.right) - 1)) {//设置右悬浮
                         oldItem['fixed'] = 'right'
+                        if (oldItem?.children?.length > 0) {
+                            oldItem['children'] = oldItem?.children.map((item: { [x: string]: string }) => {
+                                item['fixed'] = 'right'
+                                return item
+                            })
+                        }
                     } else {
                         oldItem['fixed'] = false
+                        if (oldItem?.children?.length > 0) {
+                            oldItem['children'] = oldItem?.children.map((item: { [x: string]: any }) => {
+                                item['fixed'] = false
+                                return item
+                            })
+                        }
                     }
                     let { label, default: a, tips, title, ...ite } = oldItem
                     if (tips) {

+ 2 - 1
src/pages/gameDataStatistics/gameData/again/index.tsx

@@ -40,7 +40,7 @@ const Again: React.FC = () => {
                 initialValues={{ regDay: [moment(), moment()], sourceSystem: 'ZX_ONE', tableTypes: 'buy' }}
                 onChange={(data: any) => {
                     console.log(data)
-                    const { regStartDay, regEndDay, rechargeDay, ...params } = data
+                    const { regStartDay, gameClassify, regEndDay, rechargeDay, ...params } = data
                     let newQueryForm = JSON.parse(JSON.stringify(queryForm))
                     newQueryForm.pageNum = 1
                     if (regStartDay && regEndDay) {
@@ -50,6 +50,7 @@ const Again: React.FC = () => {
                         delete newQueryForm.registeredBeginDate
                         delete newQueryForm.registeredEndDate
                     }
+                    newQueryForm.classify = gameClassify
                     setQueryForm({ ...newQueryForm, ...params })
                 }}
                 isSource

+ 0 - 1
src/pages/gameDataStatistics/gameData/flowingWater/tableConfig.tsx

@@ -127,7 +127,6 @@ function columns12() {
                         }
                     ]
                 },
-
                 {
                     title: '玩家模板',
                     dataIndex: 'playerTemplateVOS',

+ 2 - 1
src/pages/gameDataStatistics/gameData/ltv/index.tsx

@@ -49,7 +49,7 @@ const Ltv: React.FC = () => {
                 initialValues={{ regDay: [moment(), moment()], sourceSystem: 'ZX_ONE', tableTypes: 'buy' }}
                 onChange={(data: any) => {
                     console.log(data)
-                    const { regStartDay, regEndDay, rechargeDay, ...params } = data
+                    const { regStartDay, gameClassify, regEndDay, rechargeDay, ...params } = data
                     let newQueryForm = JSON.parse(JSON.stringify(queryForm))
                     newQueryForm.pageNum = 1
                     if (regStartDay && regEndDay) {
@@ -59,6 +59,7 @@ const Ltv: React.FC = () => {
                         delete newQueryForm.registeredBeginDate
                         delete newQueryForm.registeredEndDate
                     }
+                    newQueryForm.classify = gameClassify
                     setQueryForm({ ...newQueryForm, ...params })
                 }}
                 isSource

+ 273 - 114
src/pages/gameDataStatistics/gameServer/serverData/tableConfig.tsx

@@ -39,6 +39,194 @@ function columns12(): { label: string, fieldSHow?: { label: string, saveField: s
             label: "D1~Dn",
             align: "center",
             width: 120,
+            children: [{
+                title: `新创角`,
+                dataIndex: field,
+                key: 'newCreate',
+                align: "center",
+                width: 120,
+                render: (a: any, b: any) => {
+                    let date1 = moment()
+                    if (b?.gameName === '总计') {
+                        if (b?.dt) {
+                            date1 = moment(b?.dt)
+                        } else {
+                            date1 = moment()
+                        }
+                    } else {
+                        date1 = moment(b.dt)
+                    }
+                    let dt = moment()
+                    let day = dt.diff(date1, 'day');
+                    let fieldData = getFieldDta()
+                    if (fieldData?.length > 0 && index <= day) {
+                        let data: any = {}
+                        let keyS: string[] = fieldData?.map((item: any) => item.key)
+                        switch (fieldData[0].type) {
+                            case 'D1~Dn':
+                                if (b?.[field]) {
+                                    data = b?.[field]
+                                    return <div className={style.dbox}>
+                                        {keyS?.includes('regNum') && <span style={{ color: '#2f54eb', fontWeight: 600 }}>新用户人:<span>{data?.regNum}</span></span>}
+                                        {keyS?.includes('roleNum') && <span style={{ color: '#722ed1', fontWeight: 600 }}>传角人:<span>{data?.roleNum}</span></span>}
+                                        {keyS?.includes('activeNum') && <span style={{ color: '#eb2f96', fontWeight: 600 }}>活跃人:<span>{data?.activeNum}</span></span>}
+                                        {keyS?.includes('amountNum') && <span style={{ color: '#d81b60', fontWeight: 600 }}>付费人:<span>{data?.amountNum}</span></span>}
+                                        {keyS?.includes('amount') && <span style={{ color: '#0f538a', fontWeight: 600 }}>付金金:<span><Statistic value={data?.amount || 0} valueStyle={{ color: '#0f538a', fontWeight: 600 }} /></span></span>}
+                                    </div>
+                                }
+                                return '--'
+                        }
+                    }
+                    return '--'
+                },
+            }, {
+                title: `滚服`,
+                dataIndex: field,
+                key: 'gf',
+                align: "center",
+                width: 120,
+                render: (a: any, b: any) => {
+                    let date1 = moment()
+                    if (b?.gameName === '总计') {
+                        if (b?.dt) {
+                            date1 = moment(b?.dt)
+                        } else {
+                            date1 = moment()
+                        }
+                    } else {
+                        date1 = moment(b.dt)
+                    }
+                    let dt = moment()
+                    let day = dt.diff(date1, 'day');
+                    let fieldData = getFieldDta()
+                    if (fieldData?.length > 0 && index <= day) {
+                        let data: any = {}
+                        let keyS: string[] = fieldData?.map((item: any) => item.key)
+                        switch (fieldData[0].type) {
+                            case 'D1~Dn':
+                                if (b?.[field]) {
+                                    data = b?.[field]
+                                    return <div className={style.dbox}>
+                                        {keyS?.includes('rollServerNum') && <span style={{ color: '#13c2c2', fontWeight: 600 }}>滚人数:<span>{data?.rollServerNum}</span></span>}
+                                        {keyS?.includes('rollServerAmountNum') && <span style={{ color: '#faad14', fontWeight: 600 }}>滚付费人:<span>{data?.rollServerAmountNum}</span></span>}
+                                        {keyS?.includes('rollServerAmount') && <span style={{ color: '#0f538a', fontWeight: 600 }}>滚付金金:<span><Statistic value={data?.rollServerAmount || 0} valueStyle={{ color: '#0f538a', fontWeight: 600 }} /></span></span>}
+                                        {keyS?.includes('rollServerAmountRate') && <span style={{ color: 'rgb(12,130,16)', fontWeight: 600 }}>滚占比:<span>{(data?.rollServerAmountRate * 100)?.toFixed(2)}%</span></span>}
+                                    </div>
+                                }
+                                return '--'
+                        }
+                    }
+                    return '--'
+                },
+            }]
+        }
+        data['default'] = defaultStart + index
+        return data
+    })
+
+    let defaultStartM = 43
+    let month = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11].map((item, index) => {
+        let field = `m${item}Trend`
+        let data = {
+            title: `M${item}`,
+            dataIndex: field,
+            label: "D1~Dn",
+            children: [{
+                title: `新创角`,
+                dataIndex: field,
+                key: 'newCreate',
+                align: "center",
+                width: 110,
+                render: (a: any, b: any) => {
+                    let date1 = moment()
+                    if (b?.gameName === '总计') {
+                        if (b?.dt) {
+                            date1 = moment(b?.dt)
+                        } else {
+                            date1 = moment()
+                        }
+                    } else {
+                        date1 = moment(b.dt)
+                    }
+                    let dt = moment()
+                    let day = dt.diff(date1, 'day');
+                    let fieldData = getFieldDta()
+                    if (fieldData?.length > 0 && item * 30 <= day) {
+                        let data: any = {}
+                        let keyS: string[] = fieldData?.map((item: any) => item.key)
+                        switch (fieldData[0].type) {
+                            case 'D1~Dn':
+                                if (b?.[field]) {
+                                    data = b?.[field]
+                                    return <div className={style.dbox}>
+                                        {keyS?.includes('regNum') && <span style={{ color: '#2f54eb', fontWeight: 600 }}>新用户人:<span>{data?.regNum}</span></span>}
+                                        {keyS?.includes('roleNum') && <span style={{ color: '#722ed1', fontWeight: 600 }}>传角人:<span>{data?.roleNum}</span></span>}
+                                        {keyS?.includes('activeNum') && <span style={{ color: '#eb2f96', fontWeight: 600 }}>活跃人:<span>{data?.activeNum}</span></span>}
+                                        {keyS?.includes('amountNum') && <span style={{ color: '#d81b60', fontWeight: 600 }}>付费人:<span>{data?.amountNum}</span></span>}
+                                        {keyS?.includes('amount') && <span style={{ color: '#0f538a', fontWeight: 600 }}>付金金:<span><Statistic value={data?.amount || 0} valueStyle={{ color: '#0f538a', fontWeight: 600 }} /></span></span>}
+                                    </div>
+                                }
+                                return '--'
+                        }
+                    }
+                    return '--'
+                },
+            }, {
+                title: `滚服`,
+                dataIndex: field,
+                key: 'gf',
+                align: "center",
+                width: 110,
+                render: (a: any, b: any) => {
+                    let date1 = moment()
+                    if (b?.gameName === '总计') {
+                        if (b?.dt) {
+                            date1 = moment(b?.dt)
+                        } else {
+                            date1 = moment()
+                        }
+                    } else {
+                        date1 = moment(b.dt)
+                    }
+                    let dt = moment()
+                    let day = dt.diff(date1, 'day');
+                    let fieldData = getFieldDta()
+                    if (fieldData?.length > 0 && item * 30 <= day) {
+                        let data: any = {}
+                        let keyS: string[] = fieldData?.map((item: any) => item.key)
+                        switch (fieldData[0].type) {
+                            case 'D1~Dn':
+                                if (b?.[field]) {
+                                    data = b?.[field]
+                                    return <div className={style.dbox}>
+                                        {keyS?.includes('rollServerNum') && <span style={{ color: '#13c2c2', fontWeight: 600 }}>滚人数:<span>{data?.rollServerNum}</span></span>}
+                                        {keyS?.includes('rollServerAmountNum') && <span style={{ color: '#faad14', fontWeight: 600 }}>滚付费人:<span>{data?.rollServerAmountNum}</span></span>}
+                                        {keyS?.includes('rollServerAmount') && <span style={{ color: '#0f538a', fontWeight: 600 }}>滚付金金:<span><Statistic value={data?.rollServerAmount || 0} valueStyle={{ color: '#0f538a', fontWeight: 600 }} /></span></span>}
+                                        {keyS?.includes('rollServerAmountRate') && <span style={{ color: 'rgb(12,130,16)', fontWeight: 600 }}>滚占比:<span>{(data?.rollServerAmountRate * 100)?.toFixed(2)}%</span></span>}
+                                    </div>
+                                }
+                                return '--'
+                        }
+                    }
+                    return '--'
+                },
+            }]
+        }
+        data['default'] = defaultStartM + index
+        return data
+    })
+
+    month.push({
+        title: `Y1`,
+        dataIndex: 'y1Trend',
+        label: "D1~Dn",
+        default: 53,
+        children: [{
+            title: `新创角`,
+            dataIndex: 'y1Trend',
+            align: "center",
+            width: 110,
+            key: 'newCreate',
             render: (a: any, b: any) => {
                 let date1 = moment()
                 if (b?.gameName === '总计') {
@@ -53,44 +241,32 @@ function columns12(): { label: string, fieldSHow?: { label: string, saveField: s
                 let dt = moment()
                 let day = dt.diff(date1, 'day');
                 let fieldData = getFieldDta()
-                if (fieldData?.length > 0 && index <= day) {
+                if (fieldData?.length > 0 && 360 <= day) {
                     let data: any = {}
                     let keyS: string[] = fieldData?.map((item: any) => item.key)
                     switch (fieldData[0].type) {
                         case 'D1~Dn':
-                            if (b?.[field]) {
-                                data = b?.[field]
+                            if (b?.['y1Trend']) {
+                                data = b?.['y1Trend']
                                 return <div className={style.dbox}>
-                                    {keyS?.includes('regNum') && <span style={{ color: '#2f54eb', fontWeight: 600 }}>新人:<span>{data?.regNum}</span></span>}
-                                    {keyS?.includes('roleNum') && <span style={{ color: '#722ed1', fontWeight: 600 }}>创人:<span>{data?.roleNum}</span></span>}
-                                    {keyS?.includes('activeNum') && <span style={{ color: '#eb2f96', fontWeight: 600 }}>活人:<span>{data?.activeNum}</span></span>}
-                                    {keyS?.includes('amountNum') && <span style={{ color: '#d81b60', fontWeight: 600 }}>付人:<span>{data?.amountNum}</span></span>}
-                                    {keyS?.includes('amount') && <span style={{ color: '#0f538a', fontWeight: 600 }}>付金:<span><Statistic value={data?.amount || 0} valueStyle={{ color: '#0f538a', fontWeight: 600 }} /></span></span>}
-                                    {keyS?.includes('rollServerNum') && <span style={{ color: '#13c2c2', fontWeight: 600 }}>滚人:<span>{data?.rollServerNum}</span></span>}
-                                    {keyS?.includes('rollServerAmountNum') && <span style={{ color: '#faad14', fontWeight: 600 }}>滚付人:<span>{data?.rollServerAmountNum}</span></span>}
-                                    {keyS?.includes('rollServerAmount') && <span style={{ color: '#0f538a', fontWeight: 600 }}>滚付金:<span><Statistic value={data?.rollServerAmount || 0} valueStyle={{ color: '#0f538a', fontWeight: 600 }} /></span></span>}
-                                    {keyS?.includes('rollServerAmountRate') && <span style={{ color: 'rgb(12,130,16)', fontWeight: 600 }}>滚比:<span>{(data?.rollServerAmountRate * 100)?.toFixed(2)}%</span></span>}
+                                    {keyS?.includes('regNum') && <span style={{ color: '#2f54eb', fontWeight: 600 }}>新用户人:<span>{data?.regNum}</span></span>}
+                                    {keyS?.includes('roleNum') && <span style={{ color: '#722ed1', fontWeight: 600 }}>传角人:<span>{data?.roleNum}</span></span>}
+                                    {keyS?.includes('activeNum') && <span style={{ color: '#eb2f96', fontWeight: 600 }}>活跃人:<span>{data?.activeNum}</span></span>}
+                                    {keyS?.includes('amountNum') && <span style={{ color: '#d81b60', fontWeight: 600 }}>付费人:<span>{data?.amountNum}</span></span>}
+                                    {keyS?.includes('amount') && <span style={{ color: '#0f538a', fontWeight: 600 }}>付金金:<span><Statistic value={data?.amount || 0} valueStyle={{ color: '#0f538a', fontWeight: 600 }} /></span></span>}
                                 </div>
                             }
                             return '--'
                     }
                 }
                 return '--'
-            },
-        }
-        data['default'] = defaultStart + index
-        return data
-    })
-
-    let defaultStartM = 43
-    let month = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11].map((item, index) => {
-        let field = `m${item}Trend`
-        let data = {
-            title: `M${item}`,
-            dataIndex: field,
-            label: "D1~Dn",
+            }
+        }, {
+            title: `滚服`,
+            dataIndex: 'y1Trend',
             align: "center",
             width: 110,
+            key: 'gf',
             render: (a: any, b: any) => {
                 let date1 = moment()
                 if (b?.gameName === '总计') {
@@ -105,80 +281,26 @@ function columns12(): { label: string, fieldSHow?: { label: string, saveField: s
                 let dt = moment()
                 let day = dt.diff(date1, 'day');
                 let fieldData = getFieldDta()
-                if (fieldData?.length > 0 && item * 30 <= day) {
+                if (fieldData?.length > 0 && 360 <= day) {
                     let data: any = {}
                     let keyS: string[] = fieldData?.map((item: any) => item.key)
                     switch (fieldData[0].type) {
                         case 'D1~Dn':
-                            if (b?.[field]) {
-                                data = b?.[field]
+                            if (b?.['y1Trend']) {
+                                data = b?.['y1Trend']
                                 return <div className={style.dbox}>
-                                    {keyS?.includes('regNum') && <span style={{ color: '#2f54eb', fontWeight: 600 }}>新人:<span>{data?.regNum}</span></span>}
-                                    {keyS?.includes('roleNum') && <span style={{ color: '#722ed1', fontWeight: 600 }}>创人:<span>{data?.roleNum}</span></span>}
-                                    {keyS?.includes('activeNum') && <span style={{ color: '#eb2f96', fontWeight: 600 }}>活人:<span>{data?.activeNum}</span></span>}
-                                    {keyS?.includes('amountNum') && <span style={{ color: '#d81b60', fontWeight: 600 }}>付人:<span>{data?.amountNum}</span></span>}
-                                    {keyS?.includes('amount') && <span style={{ color: '#0f538a', fontWeight: 600 }}>付金:<span><Statistic value={data?.amount || 0} valueStyle={{ color: '#0f538a', fontWeight: 600 }} /></span></span>}
-                                    {keyS?.includes('rollServerNum') && <span style={{ color: '#13c2c2', fontWeight: 600 }}>滚人:<span>{data?.rollServerNum}</span></span>}
-                                    {keyS?.includes('rollServerAmountNum') && <span style={{ color: '#faad14', fontWeight: 600 }}>滚付人:<span>{data?.rollServerAmountNum}</span></span>}
-                                    {keyS?.includes('rollServerAmount') && <span style={{ color: '#0f538a', fontWeight: 600 }}>滚付金:<span><Statistic value={data?.rollServerAmount || 0} valueStyle={{ color: '#0f538a', fontWeight: 600 }} /></span></span>}
-                                    {keyS?.includes('rollServerAmountRate') && <span style={{ color: 'rgb(12,130,16)', fontWeight: 600 }}>滚比:<span>{(data?.rollServerAmountRate * 100)?.toFixed(2)}%</span></span>}
+                                    {keyS?.includes('rollServerNum') && <span style={{ color: '#13c2c2', fontWeight: 600 }}>滚人数:<span>{data?.rollServerNum}</span></span>}
+                                    {keyS?.includes('rollServerAmountNum') && <span style={{ color: '#faad14', fontWeight: 600 }}>滚付费人:<span>{data?.rollServerAmountNum}</span></span>}
+                                    {keyS?.includes('rollServerAmount') && <span style={{ color: '#0f538a', fontWeight: 600 }}>滚付金金:<span><Statistic value={data?.rollServerAmount || 0} valueStyle={{ color: '#0f538a', fontWeight: 600 }} /></span></span>}
+                                    {keyS?.includes('rollServerAmountRate') && <span style={{ color: 'rgb(12,130,16)', fontWeight: 600 }}>滚占比:<span>{(data?.rollServerAmountRate * 100)?.toFixed(2)}%</span></span>}
                                 </div>
                             }
                             return '--'
                     }
                 }
                 return '--'
-            },
-        }
-        data['default'] = defaultStartM + index
-        return data
-    })
-
-    month.push({
-        title: `Y1`,
-        dataIndex: 'y1Trend',
-        label: "D1~Dn",
-        align: "center",
-        width: 70,
-        default: 53,
-        render: (a: any, b: any) => {
-            let date1 = moment()
-            if (b?.gameName === '总计') {
-                if (b?.dt) {
-                    date1 = moment(b?.dt)
-                } else {
-                    date1 = moment()
-                }
-            } else {
-                date1 = moment(b.dt)
-            }
-            let dt = moment()
-            let day = dt.diff(date1, 'day');
-            let fieldData = getFieldDta()
-            if (fieldData?.length > 0 && 360 <= day) {
-                let data: any = {}
-                let keyS: string[] = fieldData?.map((item: any) => item.key)
-                switch (fieldData[0].type) {
-                    case 'D1~Dn':
-                        if (b?.['y1Trend']) {
-                            data = b?.['y1Trend']
-                            return <div className={style.dbox}>
-                                {keyS?.includes('regNum') && <span style={{ color: '#2f54eb', fontWeight: 600 }}>新人:<span>{data?.regNum}</span></span>}
-                                {keyS?.includes('roleNum') && <span style={{ color: '#722ed1', fontWeight: 600 }}>创人:<span>{data?.roleNum}</span></span>}
-                                {keyS?.includes('activeNum') && <span style={{ color: '#eb2f96', fontWeight: 600 }}>活人:<span>{data?.activeNum}</span></span>}
-                                {keyS?.includes('amountNum') && <span style={{ color: '#d81b60', fontWeight: 600 }}>付人:<span>{data?.amountNum}</span></span>}
-                                {keyS?.includes('amount') && <span style={{ color: '#0f538a', fontWeight: 600 }}>付金:<span><Statistic value={data?.amount || 0} valueStyle={{ color: '#0f538a', fontWeight: 600 }} /></span></span>}
-                                {keyS?.includes('rollServerNum') && <span style={{ color: '#13c2c2', fontWeight: 600 }}>滚人:<span>{data?.rollServerNum}</span></span>}
-                                {keyS?.includes('rollServerAmountNum') && <span style={{ color: '#faad14', fontWeight: 600 }}>滚付人:<span>{data?.rollServerAmountNum}</span></span>}
-                                {keyS?.includes('rollServerAmount') && <span style={{ color: '#0f538a', fontWeight: 600 }}>滚付金:<span><Statistic value={data?.rollServerAmount || 0} valueStyle={{ color: '#0f538a', fontWeight: 600 }} /></span></span>}
-                                {keyS?.includes('rollServerAmountRate') && <span style={{ color: 'rgb(12,130,16)', fontWeight: 600 }}>滚比:<span>{(data?.rollServerAmountRate * 100)?.toFixed(2)}%</span></span>}
-                            </div>
-                        }
-                        return '--'
-                }
             }
-            return '--'
-        },
+        }]
     } as any)
 
     month.push({
@@ -186,41 +308,78 @@ function columns12(): { label: string, fieldSHow?: { label: string, saveField: s
         dataIndex: 'totalTrend',
         label: "D1~Dn",
         align: "center",
-        width: 110,
         default: 54,
-        render: (a: any, b: any) => {
-            let fieldData = getFieldDta()
-            if (fieldData?.length > 0) {
-                let data: any = {}
-                let keyS: string[] = fieldData?.map((item: any) => item.key)
-                switch (fieldData[0].type) {
-                    case 'D1~Dn':
-                        if (b?.['totalTrend']) {
-                            data = b?.['totalTrend']
-                            return <div className={style.dbox}>
-                                {keyS?.includes('regNum') && <span style={{ color: '#2f54eb', fontWeight: 600 }}>新人:<span>{data?.regNum}</span></span>}
-                                {keyS?.includes('roleNum') && <span style={{ color: '#722ed1', fontWeight: 600 }}>创人:<span>{data?.roleNum}</span></span>}
-                                {keyS?.includes('activeNum') && <span style={{ color: '#eb2f96', fontWeight: 600 }}>活人:<span>{data?.activeNum}</span></span>}
-                                {keyS?.includes('amountNum') && <span style={{ color: '#d81b60', fontWeight: 600 }}>付人:<span>{data?.amountNum}</span></span>}
-                                {keyS?.includes('amount') && <span style={{ color: '#0f538a', fontWeight: 600 }}>付金:<span><Statistic value={data?.amount || 0} valueStyle={{ color: '#0f538a', fontWeight: 600 }} /></span></span>}
-                                {keyS?.includes('rollServerNum') && <span style={{ color: '#13c2c2', fontWeight: 600 }}>滚人:<span>{data?.rollServerNum}</span></span>}
-                                {keyS?.includes('rollServerAmountNum') && <span style={{ color: '#faad14', fontWeight: 600 }}>滚付人:<span>{data?.rollServerAmountNum}</span></span>}
-                                {keyS?.includes('rollServerAmount') && <span style={{ color: '#0f538a', fontWeight: 600 }}>滚付金:<span><Statistic value={data?.rollServerAmount || 0} valueStyle={{ color: '#0f538a', fontWeight: 600 }} /></span></span>}
-                                {keyS?.includes('rollServerAmountRate') && <span style={{ color: 'rgb(12,130,16)', fontWeight: 600 }}>滚比:<span>{(data?.rollServerAmountRate * 100)?.toFixed(2)}%</span></span>}
-                            </div>
-                        }
-                        return '--'
+        children: [{
+            title: `新创角`,
+            dataIndex: 'totalTrend',
+            key: 'newCreate',
+            align: "center",
+            width: 110,
+            render: (a: any, b: any) => {
+                let fieldData = getFieldDta()
+                if (fieldData?.length > 0) {
+                    let data: any = {}
+                    let keyS: string[] = fieldData?.map((item: any) => item.key)
+                    switch (fieldData[0].type) {
+                        case 'D1~Dn':
+                            if (b?.['totalTrend']) {
+                                data = b?.['totalTrend']
+                                return <div className={style.dbox}>
+                                    {keyS?.includes('regNum') && <span style={{ color: '#2f54eb', fontWeight: 600 }}>新用户人:<span>{data?.regNum}</span></span>}
+                                    {keyS?.includes('roleNum') && <span style={{ color: '#722ed1', fontWeight: 600 }}>传角人:<span>{data?.roleNum}</span></span>}
+                                    {keyS?.includes('activeNum') && <span style={{ color: '#eb2f96', fontWeight: 600 }}>活跃人:<span>{data?.activeNum}</span></span>}
+                                    {keyS?.includes('amountNum') && <span style={{ color: '#d81b60', fontWeight: 600 }}>付费人:<span>{data?.amountNum}</span></span>}
+                                    {keyS?.includes('amount') && <span style={{ color: '#0f538a', fontWeight: 600 }}>付金金:<span><Statistic value={data?.amount || 0} valueStyle={{ color: '#0f538a', fontWeight: 600 }} /></span></span>}
+                                </div>
+                            }
+                            return '--'
+                    }
                 }
-            }
-            return '--'
-        },
+                return '--'
+            },
+        }, {
+            title: `滚服`,
+            dataIndex: 'totalTrend',
+            key: 'gf',
+            align: "center",
+            width: 110,
+            render: (a: any, b: any) => {
+                let fieldData = getFieldDta()
+                if (fieldData?.length > 0) {
+                    let data: any = {}
+                    let keyS: string[] = fieldData?.map((item: any) => item.key)
+                    switch (fieldData[0].type) {
+                        case 'D1~Dn':
+                            if (b?.['totalTrend']) {
+                                data = b?.['totalTrend']
+                                return <div className={style.dbox}>
+                                    {keyS?.includes('rollServerNum') && <span style={{ color: '#13c2c2', fontWeight: 600 }}>滚人数:<span>{data?.rollServerNum}</span></span>}
+                                    {keyS?.includes('rollServerAmountNum') && <span style={{ color: '#faad14', fontWeight: 600 }}>滚付费人:<span>{data?.rollServerAmountNum}</span></span>}
+                                    {keyS?.includes('rollServerAmount') && <span style={{ color: '#0f538a', fontWeight: 600 }}>滚付金金:<span><Statistic value={data?.rollServerAmount || 0} valueStyle={{ color: '#0f538a', fontWeight: 600 }} /></span></span>}
+                                    {keyS?.includes('rollServerAmountRate') && <span style={{ color: 'rgb(12,130,16)', fontWeight: 600 }}>滚占比:<span>{(data?.rollServerAmountRate * 100)?.toFixed(2)}%</span></span>}
+                                </div>
+                            }
+                            return '--'
+                    }
+                }
+                return '--'
+            },
+        }],
     } as any)
 
     return [
         {
             label: '时间',
             data: [
-                { title: '开服时间', dataIndex: 'dt', label: '时间', align: 'center', width: 90, default: 4, sorter: true },
+                {
+                    title: '开服时间', dataIndex: 'dt', label: '时间', align: 'center', width: 90, default: 4, sorter: true,
+                    render: (a: any, b: any) => {
+                        if (b.gameName === '总计') {
+                            return '--'
+                        }
+                        return a
+                    }
+                },
             ]
         },
         {