wjx 1 år sedan
förälder
incheckning
ad0c928c57

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

@@ -4,7 +4,6 @@ import { gameClassifyEnum } from "@/components/QueryForm/const"
 import WidthEllipsis from "@/components/widthEllipsis"
 import moment from "moment"
 import style from './index.less'
-import { QuestionCircleOutlined } from "@ant-design/icons"
 
 function columnsUser12(): { label: string, fieldSHow?: { label: string, saveField: string, defaultValue: any[], data: any[] }, data: any[] }[] {
 

+ 7 - 5
src/pages/gameDataStatistics/gameServer/serverData/index.tsx

@@ -5,7 +5,7 @@ import { useAjax } from "@/Hook/useAjax"
 import TableData from "../../components/TableData"
 import QueryForm from "@/components/QueryForm"
 import columns12 from "./tableConfig"
-import { getPresets } from "@/components/QueryForm/const"
+import { ActiveEnum, getPresets } from "@/components/QueryForm/const"
 
 /**
  * 游戏区服
@@ -14,7 +14,7 @@ import { getPresets } from "@/components/QueryForm/const"
 const ServerData: React.FC = () => {
 
     /********************************/
-    const [queryForm, setQueryForm] = useState<GameServerListProps>({ pageNum: 1, pageSize: 50, beginDate: moment().format('YYYY-MM-DD'), endDate: moment().format('YYYY-MM-DD'), sourceSystem: 'ZX_ONE' })
+    const [queryForm, setQueryForm] = useState<GameServerListProps>({ pageNum: 1, pageSize: 50, beginDate: moment().format('YYYY-MM-DD'), endDate: moment().format('YYYY-MM-DD'), sourceSystem: 'ZX_ONE', activeTypes: 'reg' as ActiveEnum })
     const [totalData, setTotalData] = useState<any[]>([])
 
     const getGameServerList = useAjax((params) => getGameServerListApi(params))
@@ -22,9 +22,10 @@ const ServerData: React.FC = () => {
     /********************************/
 
     useEffect(() => {
-        getGameServerTotal.run(queryForm).then((res: { id: number; dt?: string; gameName: string; }) => {
+        getGameServerTotal.run(queryForm).then((res: { id: number; dt?: string; gameName: string; activeTypes: any }) => {
             res.id = 1
             res.dt = queryForm.beginDate
+            res.activeTypes = queryForm.activeTypes
             res.gameName = '总计'
             setTotalData([res])
         })
@@ -34,7 +35,7 @@ const ServerData: React.FC = () => {
     return <div>
         <TableData
             leftChild={<QueryForm
-                initialValues={{ sourceSystem: 'ZX_ONE', serverDay: [moment(), moment()] }}
+                initialValues={{ sourceSystem: 'ZX_ONE', serverDay: [moment(), moment()], activeTypes: 'reg' }}
                 onChange={(data: any) => {
                     const { serverDay, ...params } = data
                     let newQueryForm = JSON.parse(JSON.stringify(queryForm))
@@ -53,6 +54,7 @@ const ServerData: React.FC = () => {
                 isGameId
                 isServerName
                 isServerId
+                isActiveTypes
             />}
             isZj
             isVirtually={false}
@@ -60,7 +62,7 @@ const ServerData: React.FC = () => {
             scroll={{ x: 1000, y: 600 }}
             ajax={getGameServerList}
             fixed={{ left: 5, right: 1 }}
-            dataSource={getGameServerList?.data?.records?.map((item: any, index: number) => ({ ...item, id: Number(queryForm.pageNum.toString() + index.toString()) }))}
+            dataSource={getGameServerList?.data?.records?.map((item: any, index: number) => ({ ...item, activeTypes: queryForm?.activeTypes, id: Number(queryForm.pageNum.toString() + index.toString()) }))}
             total={getGameServerList?.data?.total}
             page={queryForm.pageNum}
             pageSize={queryForm.pageSize}

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

@@ -1,6 +1,6 @@
 import { gameClassifyEnum } from "@/components/QueryForm/const"
 import WidthEllipsis from "@/components/widthEllipsis"
-import { Statistic } from "antd"
+import { Statistic, Tooltip } from "antd"
 import React from "react"
 import moment from "moment"
 import style from './index.less'
@@ -118,6 +118,128 @@ function columns12(): { label: string, fieldSHow?: { label: string, saveField: s
                     }
                     return '--'
                 },
+            }, {
+                title: `留存`,
+                dataIndex: field,
+                key: 'retained',
+                align: "center",
+                width: 125,
+                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');
+                    if (index < 1 && b?.gameName === '暗影防线H5') {
+                        console.log('========', index, day)
+                    }
+                    if (index <= day) {
+                        let data: any = {}
+                        switch (b?.activeTypes) {
+                            case 'reg':
+                                if (b?.[field]) {
+                                    data = b?.[field]
+                                    return <div>
+                                        {/* <div style={{ alignItems: 'center', fontSize: 12, fontWeight: 'bold' }}>注册留存</div> */}
+                                        <div className={style.dbox}>
+                                            <span style={{ color: '#d81b60', fontWeight: 600 }}>活跃人数:<span>{data?.activeNum}</span></span>
+                                            <span style={{ color: 'rgb(12,130,16)', fontWeight: 600 }}>留存率:<span>{(data?.regActiveRate * 100)?.toFixed(2)}%</span></span>
+                                        </div>
+                                    </div>
+                                }
+                                return '--'
+                            case 'role':
+                                if (b?.[field]) {
+                                    data = b?.[field]
+                                    return <div>
+                                        <div className={style.dbox}>
+                                            <span style={{ color: '#d81b60', fontWeight: 600 }}>
+                                                <Tooltip title="累计到第N天的活跃用户数" placement='left'>
+                                                    <span>活跃数:</span>
+                                                </Tooltip>
+                                                <span>{data?.roleNewActiveUserTotalNum}</span>
+                                            </span>
+                                            <span style={{ color: '#faad14', fontWeight: 600 }}>
+                                                <Tooltip title="第N天的新增创角用户数" placement='left'>
+                                                    <span>新增创角:</span>
+                                                </Tooltip>
+                                                <span>{data?.roleNewUserNum}</span>
+                                            </span>
+                                            <span style={{ color: '#0f538a', fontWeight: 600 }}>
+                                                <Tooltip title="累计到第N天的创角用户数" placement='left'>
+                                                    <span>累计创角:</span>
+                                                </Tooltip>
+                                                <span>{data?.roleNewUserTotalNum}</span>
+                                            </span>
+                                            <span style={{ color: '#eb2f96', fontWeight: 600 }}>
+                                                <Tooltip title="第N天的老活跃用户数" placement='left'>
+                                                    <span>老活跃数:</span>
+                                                </Tooltip>
+                                                <span>{data?.roleOldActiveUserNum}</span>
+                                            </span>
+                                            <span style={{ color: 'rgb(12,130,16)', fontWeight: 600 }}>
+                                                <Tooltip title="创角留存率" placement='left'>
+                                                    <span>留存率:</span>
+                                                </Tooltip>
+                                                <span>{(data?.roleActiveRate * 100)?.toFixed(2)}%</span>
+                                            </span>
+                                        </div>
+                                    </div>
+                                }
+                                return '--'
+                            case 'amount':
+                                if (b?.[field]) {
+                                    data = b?.[field]
+                                    return <div>
+                                        <div className={style.dbox}>
+                                            <span style={{ color: '#d81b60', fontWeight: 600 }}>
+                                                <Tooltip title="累计到第N天的活跃用户数" placement='left'>
+                                                    <span>活跃数:</span>
+                                                </Tooltip>
+                                                <span>{data?.newActiveUserTotalNum}</span>
+                                            </span>
+                                            <span style={{ color: '#faad14', fontWeight: 600 }}>
+                                                <Tooltip title="第N天的新增付费用户" placement='left'>
+                                                    <span>新增付费:</span>
+                                                </Tooltip>
+                                                <span>{data?.newUserAmountNum}</span>
+                                            </span>
+                                            <span style={{ color: '#0f538a', fontWeight: 600 }}>
+                                                <Tooltip title="累计到第N天的付费用户数" placement='left'>
+                                                    <span>付费人数:</span>
+                                                </Tooltip>
+                                                <span>{data?.newUserTotalAmountNum}</span>
+                                            </span>
+                                            <span style={{ color: '#eb2f96', fontWeight: 600 }}>
+                                                <Tooltip title="第N天的老活跃用户数" placement='left'>
+                                                    <span>老活跃数:</span>
+                                                </Tooltip>
+                                                <span>{data?.oldActiveUserNum}</span>
+                                            </span>
+                                            <span style={{ color: 'rgb(12,130,16)', fontWeight: 600 }}>
+                                                <Tooltip title="付费留存率" placement='left'>
+                                                    <span>留存率:</span>
+                                                </Tooltip>
+                                                <span>{(data?.amountActiveRate * 100)?.toFixed(2)}%</span>
+                                            </span>
+                                        </div>
+                                    </div>
+                                }
+                                return '--'
+                            default:
+                                return '--'
+                        }
+
+                    }
+                    return '--'
+                }
             }]
         }
         data['default'] = defaultStart + index
@@ -210,6 +332,125 @@ function columns12(): { label: string, fieldSHow?: { label: string, saveField: s
                     }
                     return '--'
                 },
+            },{
+                title: `留存`,
+                dataIndex: field,
+                key: 'retained',
+                align: "center",
+                width: 125,
+                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');
+                    if (item * 30 <= day) {
+                        let data: any = {}
+                        switch (b?.activeTypes) {
+                            case 'reg':
+                                if (b?.[field]) {
+                                    data = b?.[field]
+                                    return <div>
+                                        {/* <div style={{ alignItems: 'center', fontSize: 12, fontWeight: 'bold' }}>注册留存</div> */}
+                                        <div className={style.dbox}>
+                                            <span style={{ color: '#d81b60', fontWeight: 600 }}>活跃人数:<span>{data?.activeNum}</span></span>
+                                            <span style={{ color: 'rgb(12,130,16)', fontWeight: 600 }}>留存率:<span>{(data?.regActiveRate * 100)?.toFixed(2)}%</span></span>
+                                        </div>
+                                    </div>
+                                }
+                                return '--'
+                            case 'role':
+                                if (b?.[field]) {
+                                    data = b?.[field]
+                                    return <div>
+                                        <div className={style.dbox}>
+                                            <span style={{ color: '#d81b60', fontWeight: 600 }}>
+                                                <Tooltip title="累计到第N天的活跃用户数" placement='left'>
+                                                    <span>活跃数:</span>
+                                                </Tooltip>
+                                                <span>{data?.roleNewActiveUserTotalNum}</span>
+                                            </span>
+                                            <span style={{ color: '#faad14', fontWeight: 600 }}>
+                                                <Tooltip title="第N天的新增创角用户数" placement='left'>
+                                                    <span>新增创角:</span>
+                                                </Tooltip>
+                                                <span>{data?.roleNewUserNum}</span>
+                                            </span>
+                                            <span style={{ color: '#0f538a', fontWeight: 600 }}>
+                                                <Tooltip title="累计到第N天的创角用户数" placement='left'>
+                                                    <span>累计创角:</span>
+                                                </Tooltip>
+                                                <span>{data?.roleNewUserTotalNum}</span>
+                                            </span>
+                                            <span style={{ color: '#eb2f96', fontWeight: 600 }}>
+                                                <Tooltip title="第N天的老活跃用户数" placement='left'>
+                                                    <span>老活跃数:</span>
+                                                </Tooltip>
+                                                <span>{data?.roleOldActiveUserNum}</span>
+                                            </span>
+                                            <span style={{ color: 'rgb(12,130,16)', fontWeight: 600 }}>
+                                                <Tooltip title="创角留存率" placement='left'>
+                                                    <span>留存率:</span>
+                                                </Tooltip>
+                                                <span>{(data?.roleActiveRate * 100)?.toFixed(2)}%</span>
+                                            </span>
+                                        </div>
+                                    </div>
+                                }
+                                return '--'
+                            case 'amount':
+                                if (b?.[field]) {
+                                    data = b?.[field]
+                                    return <div>
+                                        <div className={style.dbox}>
+                                            <span style={{ color: '#d81b60', fontWeight: 600 }}>
+                                                <Tooltip title="累计到第N天的活跃用户数" placement='left'>
+                                                    <span>活跃数:</span>
+                                                </Tooltip>
+                                                <span>{data?.newActiveUserTotalNum}</span>
+                                            </span>
+                                            <span style={{ color: '#faad14', fontWeight: 600 }}>
+                                                <Tooltip title="第N天的新增付费用户" placement='left'>
+                                                    <span>新增付费:</span>
+                                                </Tooltip>
+                                                <span>{data?.newUserAmountNum}</span>
+                                            </span>
+                                            <span style={{ color: '#0f538a', fontWeight: 600 }}>
+                                                <Tooltip title="累计到第N天的付费用户数" placement='left'>
+                                                    <span>付费人数:</span>
+                                                </Tooltip>
+                                                <span>{data?.newUserTotalAmountNum}</span>
+                                            </span>
+                                            <span style={{ color: '#eb2f96', fontWeight: 600 }}>
+                                                <Tooltip title="第N天的老活跃用户数" placement='left'>
+                                                    <span>老活跃数:</span>
+                                                </Tooltip>
+                                                <span>{data?.oldActiveUserNum}</span>
+                                            </span>
+                                            <span style={{ color: 'rgb(12,130,16)', fontWeight: 600 }}>
+                                                <Tooltip title="付费留存率" placement='left'>
+                                                    <span>留存率:</span>
+                                                </Tooltip>
+                                                <span>{(data?.amountActiveRate * 100)?.toFixed(2)}%</span>
+                                            </span>
+                                        </div>
+                                    </div>
+                                }
+                                return '--'
+                            default:
+                                return '--'
+                        }
+
+                    }
+                    return '--'
+                }
             }]
         }
         data['default'] = defaultStartM + index
@@ -352,37 +593,37 @@ function columns12(): { label: string, fieldSHow?: { label: string, saveField: s
             ]
         },
         {
-            fieldSHow: {
-                label: 'D1~Dn区间字段展示',
-                saveField: 'date_field',
-                defaultValue: [  // 默认展示字段
-                    { label: '新用户人数', key: 'regNum', type: 'D1~Dn' },
-                    { label: '创角人数', key: 'roleNum', type: 'D1~Dn' },
-                    { label: '活跃人数', key: 'activeNum', type: 'D1~Dn' },
-                    { label: '付费人数', key: 'amountNum', type: 'D1~Dn' },
-                    { label: '付费金额', key: 'amount', type: 'D1~Dn' },
-                    { label: '滚服人数', key: 'rollServerNum', type: 'D1~Dn' },
-                    { label: '滚服付费人数', key: 'rollServerAmountNum', type: 'D1~Dn' },
-                    { label: '滚服付费金额', key: 'rollServerAmount', type: 'D1~Dn' },
-                    { label: '滚服(付费金额)占比', key: 'rollServerAmountRate', type: 'D1~Dn' },
-                ],
-                data: [
-                    {
-                        label: 'D1~Dn',
-                        data: [
-                            { label: '新用户人数', key: 'regNum', type: 'D1~Dn' },
-                            { label: '创角人数', key: 'roleNum', type: 'D1~Dn' },
-                            { label: '活跃人数', key: 'activeNum', type: 'D1~Dn' },
-                            { label: '付费人数', key: 'amountNum', type: 'D1~Dn' },
-                            { label: '付费金额', key: 'amount', type: 'D1~Dn' },
-                            { label: '滚服人数', key: 'rollServerNum', type: 'D1~Dn' },
-                            { label: '滚服付费人数', key: 'rollServerAmountNum', type: 'D1~Dn' },
-                            { label: '滚服付费金额', key: 'rollServerAmount', type: 'D1~Dn' },
-                            { label: '滚服(付费金额)占比', key: 'rollServerAmountRate', type: 'D1~Dn' },
-                        ]
-                    }
-                ]
-            },
+            // fieldSHow: {
+            //     label: 'D1~Dn区间字段展示',
+            //     saveField: 'date_field',
+            //     defaultValue: [  // 默认展示字段
+            //         { label: '新用户人数', key: 'regNum', type: 'D1~Dn' },
+            //         { label: '创角人数', key: 'roleNum', type: 'D1~Dn' },
+            //         { label: '活跃人数', key: 'activeNum', type: 'D1~Dn' },
+            //         { label: '付费人数', key: 'amountNum', type: 'D1~Dn' },
+            //         { label: '付费金额', key: 'amount', type: 'D1~Dn' },
+            //         { label: '滚服人数', key: 'rollServerNum', type: 'D1~Dn' },
+            //         { label: '滚服付费人数', key: 'rollServerAmountNum', type: 'D1~Dn' },
+            //         { label: '滚服付费金额', key: 'rollServerAmount', type: 'D1~Dn' },
+            //         { label: '滚服(付费金额)占比', key: 'rollServerAmountRate', type: 'D1~Dn' },
+            //     ],
+            //     data: [
+            //         {
+            //             label: 'D1~Dn',
+            //             data: [
+            //                 { label: '新用户人数', key: 'regNum', type: 'D1~Dn' },
+            //                 { label: '创角人数', key: 'roleNum', type: 'D1~Dn' },
+            //                 { label: '活跃人数', key: 'activeNum', type: 'D1~Dn' },
+            //                 { label: '付费人数', key: 'amountNum', type: 'D1~Dn' },
+            //                 { label: '付费金额', key: 'amount', type: 'D1~Dn' },
+            //                 { label: '滚服人数', key: 'rollServerNum', type: 'D1~Dn' },
+            //                 { label: '滚服付费人数', key: 'rollServerAmountNum', type: 'D1~Dn' },
+            //                 { label: '滚服付费金额', key: 'rollServerAmount', type: 'D1~Dn' },
+            //                 { label: '滚服(付费金额)占比', key: 'rollServerAmountRate', type: 'D1~Dn' },
+            //             ]
+            //         }
+            //     ]
+            // },
             label: 'D1~Dn',
             data: [
                 ...day,

+ 2 - 2
src/pages/gameDataStatistics/player/role/tableConfig.tsx

@@ -20,7 +20,7 @@ function columns12() {
                 { title: '玩家账号', dataIndex: 'username', label: '玩家列表', align: 'center', width: 120, default: 2, render: (a: string, b: any) => (<WidthEllipsis isCopy value={a} />) },
                 { title: '玩家昵称', dataIndex: 'nickname', label: '玩家列表', align: 'center', width: 120, render: (a: string, b: any) => (<WidthEllipsis value={a} />) },
                 { title: '玩家注册IP', dataIndex: 'regIp', label: '玩家列表', align: 'center', width: 100, default: 3, render: (a: string, b: any) => (<WidthEllipsis isCopy value={a} />) },
-                { title: '玩家注册时间', dataIndex: 'createTime', label: '玩家列表', align: 'center', width: 140, default: 4, render: (a: string, b: any) => (<WidthEllipsis value={a} />) },
+                { title: '玩家注册时间', dataIndex: 'regTime', label: '玩家列表', align: 'center', width: 140, default: 4, render: (a: string, b: any) => (<WidthEllipsis value={a} />) },
                 { title: '注册渠道', dataIndex: 'agentName', label: '玩家列表', align: 'center', width: 120, default: 5, render: (a: string, b: any) => (<WidthEllipsis value={a} />) },
                 { title: 'CP名称', dataIndex: 'cpName', label: '玩家列表', align: 'center', width: 70, default: 6, render: (a: string, b: any) => (<WidthEllipsis value={a} />) },
                 { title: '归因投放人员', dataIndex: 'pitcherName', label: '玩家列表', align: 'center', width: 60, default: 7, render: (a: string, b: any) => (<WidthEllipsis value={a} />) },
@@ -36,7 +36,7 @@ function columns12() {
                 { title: '角色VIP', dataIndex: 'roleVipLevel', label: '玩家列表', align: 'center', width: 60, default: 17, render: (a: string, b: any) => (<WidthEllipsis value={a} />) },
                 { title: '操作系统', dataIndex: 'os', label: '玩家列表', align: 'center', width: 65, default: 18, render: (a: string, b: any) => (<WidthEllipsis value={a} />) },
                 { title: '充值金额', dataIndex: 'rechargeMoney', label: '玩家列表', align: 'center', width: 80, default: 19, render: (a: string, b: any) => (<Statistic value={a || 0} />) },
-                { title: '充值次数', dataIndex: 'rechargeCount', label: '玩家列表', align: 'center', width: 45, default: 20, render: (a: string, b: any) => (<Statistic value={a || 0} />) },
+                { title: '充值次数', dataIndex: 'rechargeCount', label: '玩家列表', align: 'center', width: 60, default: 20, render: (a: string, b: any) => (<Statistic value={a || 0} />) },
                 { title: '游戏角色创建时间', dataIndex: 'createTime', label: '玩家列表', align: 'center', width: 140, default: 21, render: (a: string, b: any) => (<WidthEllipsis value={a} />) },
                 { title: '最近登录时间', dataIndex: 'lastLoginTime', label: '玩家列表', align: 'center', width: 140, default: 22, render: (a: string, b: any) => (<WidthEllipsis value={a} />) },
                 { title: '游戏角色更新时间', dataIndex: 'updateTime', label: '玩家列表', align: 'center', width: 140, default: 23, render: (a: string, b: any) => (<WidthEllipsis value={a} />) },

+ 3 - 1
src/services/gameData/gameServer.ts

@@ -1,6 +1,7 @@
 import { request } from 'umi';
 import { api } from '../api';
 import { Paging, SortProps } from './rankingList';
+import { ActiveEnum } from '@/components/QueryForm/const';
 let wapi = api + '/gameData'
 
 export interface GameServerListProps extends Paging, SortProps {
@@ -8,7 +9,8 @@ export interface GameServerListProps extends Paging, SortProps {
     endDate?: string,
     gameId?: number,
     serverId?: number,
-    serverName?: string
+    serverName?: string,
+    activeTypes?: ActiveEnum
 }
 /**
  * 游戏区服列表