wjx 10 mesiacov pred
rodič
commit
d37d8f7c3f

+ 3 - 2
config/config.ts

@@ -2,7 +2,7 @@
 import { defineConfig } from 'umi';
 import defaultSettings from './defaultSettings';
 import proxy from './proxy';
-import { gameDataStatistics } from './routerConfig';
+import { gameDataStatistics, gsData } from './routerConfig';
 // const CompressionWebpackPlugin = require('compression-webpack-plugin');
 const { REACT_APP_ENV } = process.env;
 export default defineConfig({
@@ -51,6 +51,7 @@ export default defineConfig({
       ],
     },
     gameDataStatistics, // 游戏数据
+    gsData,  // gs数据
     {
       path: '/',
       redirect: '/',
@@ -67,7 +68,7 @@ export default defineConfig({
   // @ts-ignore
   title: false,
   ignoreMomentLocale: true,
-  proxy: proxy[REACT_APP_ENV || 'dev'],
+  proxy: proxy[(REACT_APP_ENV || 'dev') as keyof typeof proxy],
   manifest: {
     basePath: '/',
   },

+ 23 - 5
config/routerConfig.ts

@@ -19,13 +19,18 @@ function headrRouter(initialState: any, history: any) {
         initialState?.menu?.data.forEach((item: { roles: string[], path: string, routes: { path: string, routes: any[] }[] }) => {
             if (item?.routes?.some((i: { path: string }) => i.path?.includes('/gameDataStatistics'))) {
                 let path = item?.routes?.length > 0 ? (item?.routes[0]?.routes?.length > 0 && item?.routes[0]?.routes[0]?.path) ? item?.routes[0]?.routes[0]?.path : item?.routes[0].path : item?.routes[0].path
-                // history.push(path)
                 isPhone ? history.push(path) : window.open(location.origin + '/#' + path)
-                // window.open(location.origin+'/#'+path)
             }
         })
-
-        // localStorage.setItem('bg', 'light')
+    }
+    if (history?.location?.pathname === '/gsData') { //当切换一级菜单的辅助跳转
+        history?.goBack()
+        initialState?.menu?.data.forEach((item: { roles: string[], path: string, routes: { path: string, routes: any[] }[] }) => {
+            if (item?.routes?.some((i: { path: string }) => i.path?.includes('/gsData'))) {
+                let path = item?.routes?.length > 0 ? (item?.routes[0]?.routes?.length > 0 && item?.routes[0]?.routes[0]?.path) ? item?.routes[0]?.routes[0]?.path : item?.routes[0].path : item?.routes[0].path
+                isPhone ? history.push(path) : window.open(location.origin + '/#' + path)
+            }
+        })
     }
 }
 //返回按钮路由
@@ -418,8 +423,21 @@ const gameDataStatistics = {
     ]
 }
 
+const gsData = {
+    path: '/gsData',
+    routes: [
+        {
+            path: '/gsData/bidREveryday',
+            name: '大R每日充值比',
+            access: 'bidREveryday',
+            component: './gsData/bidREveryday',
+        },
+    ]
+}
+
 export {
     headrRouter,
     getMyMenu,
-    gameDataStatistics
+    gameDataStatistics,
+    gsData
 }

+ 5 - 2
src/app.tsx

@@ -121,10 +121,13 @@ const loopMenuItem = (menus: MenuDataItem[],): MenuDataItem[] => {
         return {
             ...newItem,
             hideInMenu: false,//校验隐藏菜单
-            icon: icon && IconMap[icon as string],
+            icon: icon && IconMap[icon as keyof typeof IconMap],
             children: routes && loopMenuItem(routes),
         }
     })
+    if (menu.some(item => item.path === "/gsData")) {
+        menu = menu.reverse()
+    }
     return menu
 }
 export const layout = ({
@@ -183,7 +186,7 @@ const codeMessage = {
 const errorHandler = (error: ResponseError) => {
     const { response } = error;
     if (response && response.status) {
-        const errorText = codeMessage[response.status] || response.statusText;
+        const errorText = codeMessage[response.status as keyof typeof codeMessage] || response.statusText;
         const { status, url } = response;
         notification.error({
             message: `请求错误 ${status}: ${url}`,

+ 9 - 9
src/components/QueryForm/index.tsx

@@ -603,7 +603,7 @@ const QueryForm: React.FC<Props> = (props) => {
                         (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
                     }
                 >
-                    {Object.keys(ActiveEnum).map(key => <Select.Option value={key} key={key}>{ActiveEnum[key]}</Select.Option>)}
+                    {Object.keys(ActiveEnum).map(key => <Select.Option value={key} key={key}>{ActiveEnum[key as keyof typeof ActiveEnum]}</Select.Option>)}
                 </Select>
             </Form.Item></Col>}
             {/* 不同排行榜选择 */}
@@ -743,7 +743,7 @@ const QueryForm: React.FC<Props> = (props) => {
                         (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
                     }
                 >
-                    {Object.keys(ADSTTTATUSEnum).map(key => <Select.Option value={key} key={key}>{ADSTTTATUSEnum[key]}</Select.Option>)}
+                    {Object.keys(ADSTTTATUSEnum).map(key => <Select.Option value={key} key={key}>{ADSTTTATUSEnum[key as keyof typeof ADSTTTATUSEnum]}</Select.Option>)}
                 </Select>
             </Form.Item></Col>}
 
@@ -759,7 +759,7 @@ const QueryForm: React.FC<Props> = (props) => {
                         (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
                     }
                 >
-                    {Object.keys(ADSTATUSEnum).map(key => <Select.Option value={key} key={key}>{ADSTATUSEnum[key]}</Select.Option>)}
+                    {Object.keys(ADSTATUSEnum).map(key => <Select.Option value={key} key={key}>{ADSTATUSEnum[key as keyof typeof ADSTATUSEnum]}</Select.Option>)}
                 </Select>
             </Form.Item></Col>}
 
@@ -776,7 +776,7 @@ const QueryForm: React.FC<Props> = (props) => {
                         (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
                     }
                 >
-                    {Object.keys(DeviceType).map(key => <Select.Option value={key} key={key}>{DeviceType[key]}</Select.Option>)}
+                    {Object.keys(DeviceType).map(key => <Select.Option value={key} key={key}>{DeviceType[key as keyof typeof DeviceType]}</Select.Option>)}
                 </Select>
             </Form.Item></Col>}
 
@@ -793,7 +793,7 @@ const QueryForm: React.FC<Props> = (props) => {
                         (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
                     }
                 >
-                    {Object.keys(LoginType).map(key => <Select.Option value={key} key={key}>{LoginType[key]}</Select.Option>)}
+                    {Object.keys(LoginType).map(key => <Select.Option value={key} key={key}>{LoginType[key as keyof typeof LoginType]}</Select.Option>)}
                 </Select>
             </Form.Item></Col>}
 
@@ -919,7 +919,7 @@ const QueryForm: React.FC<Props> = (props) => {
                     filterOption={(input, option) =>
                         (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
                     }
-                    onChange={(e, option) => {
+                    onChange={(e, option: any) => {
                         if (isServerIds) {
                             form.setFieldsValue({ serverIds: undefined })
                             if (option?.['data-super-id']) {
@@ -1050,7 +1050,7 @@ const QueryForm: React.FC<Props> = (props) => {
                         (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
                     }
                 >
-                    {Object.keys(gameClassifyEnum).map(key => <Select.Option value={key} key={key}>{gameClassifyEnum[key]}</Select.Option>)}
+                    {Object.keys(gameClassifyEnum).map(key => <Select.Option value={key} key={key}>{gameClassifyEnum[key as keyof typeof gameClassifyEnum]}</Select.Option>)}
                 </Select>
             </Form.Item></Col>}
             {/* 游戏角色名 */}
@@ -1129,7 +1129,7 @@ const QueryForm: React.FC<Props> = (props) => {
                         (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
                     }
                 >
-                    {Object.keys(PayStatus).map(key => <Select.Option value={key} key={key}>{PayStatus[key]}</Select.Option>)}
+                    {Object.keys(PayStatus).map(key => <Select.Option value={key} key={key}>{PayStatus[key as keyof typeof PayStatus]}</Select.Option>)}
                 </Select>
             </Form.Item></Col>}
 
@@ -1159,7 +1159,7 @@ const QueryForm: React.FC<Props> = (props) => {
                         (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
                     }
                 >
-                    {Object.keys(TYPE).map(key => <Select.Option value={key} key={key}>{TYPE[key]}</Select.Option>)}
+                    {Object.keys(TYPE).map(key => <Select.Option value={key} key={key}>{TYPE[key as keyof typeof TYPE]}</Select.Option>)}
                 </Select>
             </Form.Item></Col>}
 

+ 1178 - 0
src/components/QueryForm/indexGs.tsx

@@ -0,0 +1,1178 @@
+import { Button, Checkbox, Col, DatePicker, Form, Input, InputNumber, Radio, Row, Select, Space } from "antd"
+import React, { useEffect, useState } from "react"
+import moment from "moment"
+import { useAjax } from "@/Hook/useAjax"
+import { getAllOfOwnerUserApi, getChannelChoiceListApi, getGameChoiceListApi, getGameChoiceParentListType1Api, getPayListApi, getSubUserWithSelfListApi, getTtAllUserListApi, getUserSystemTypeChoiceListApi, getRoleUserListApi, getGameServerListApi, getGameServerUnListApi, getAccountListNewApi, getAgentListNewApi, getPitcherListNewApi, getGameListNewApi, getVipLevelApi, getGameUnMergeServerListApi } from "@/services/gameData"
+import { ActiveEnum, PayStatus, gameClassifyEnum } from "./const"
+import IntervalTime from "./intervalTime"
+import { RangePickerProps } from "antd/lib/date-picker"
+
+
+interface Props {
+    onChange?: (data: any) => void
+    /** 默认值 */
+    initialValues?: any
+    /** 开启数据源搜索 */
+    isSource?: boolean,
+    /** 是否开启角色来源搜索 */
+    isRoleSource?: boolean,
+    /** 是否开启 广告账户ID 搜索 */
+    isAccountId?: boolean
+    // 开启账号多选
+    isAccountIds?: boolean,
+    /** 是否开启 订单创建日期 搜索 */
+    isCreateDay?: {
+        ranges?: any
+    }
+    /** 订单创建日期 根据消耗时间 来限制可选范围 */
+    isCreateDayXz?: {
+        ranges?: any
+    }
+    /** 是否开启 角色创建日期 搜索 */
+    isCreateRoleDay?: RangePickerProps
+    /** 是否开启 最近活跃时间 搜索 */
+    isLastActiveTime?: {
+        ranges?: any
+    }
+    /** 是否开启 操作设备 搜索 */
+    isDevice?: boolean
+    /** 是否开启 注册游戏名 搜索 */
+    isRechargeGameName?: boolean
+    /** 是否开启 游戏名 搜索 */
+    isGameName?: boolean
+    /** 是否开启 游戏ID 搜索 */
+    isGameId?: boolean
+    isGameIds?: boolean
+    /** 是否开启 充值游戏ID 搜索 */
+    isOrderGameId?: boolean
+    /** 是否开启 父游戏ID 搜索 */
+    isParentId?: boolean
+    isParentIds?: boolean
+    /** 是否开启 超父游戏ID 搜索 */
+    isSuperParentGameId?: boolean
+    /** 是否开启 是否合服 搜索 */
+    isIsMergeServer?: boolean
+    /** 是否开启 是否未参与过合服 搜索 */
+    isIsParticipateMerge?: boolean
+    /** 是否开启 游戏应用类型 搜索 */
+    isGameType?: boolean
+    /** 是否开启 游戏角色名 搜索 */
+    isGameRoleName?: boolean
+    /** 是否开启 游戏角色名ID 搜索 */
+    isGameRoleId?: boolean
+    /** 是否开启 是否首充 搜索 */
+    isFirstRecharge?: boolean
+    /** 是否开启 支付状态 搜索 */
+    isPayStatus?: boolean
+    /** 是否开启 支付方式 搜索 */
+    isPayWay?: boolean
+    /** 是否开启 产品名称 搜索 */
+    isProductName?: boolean
+    /** 是否开启 注册渠道名 搜索 */
+    isRegAgent?: boolean
+    /** 是否开启 渠道名称 搜索 */
+    isAgentName?: boolean
+    /** 是否开启 注册渠道ID 搜索 */
+    isAgentId?: boolean
+    /** 是否开启 渠道标识 搜索 */
+    isAgentKey?: boolean
+    /** 是否开启 用户注册日期 搜索 */
+    isRegDay?: {
+        ranges?: any
+    }
+    /** 是否开启 投手ID 搜索 */
+    isSysUserId?: boolean
+    isSysUserIds?: boolean
+    /** 是否开启 玩家账号 搜索 */
+    isUserName?: boolean
+    /** 是否开启 用户ID 搜索 */
+    isUserId?: boolean
+    /** 是否开启 不同排行榜选择 搜索 */
+    isSelectRanking?: boolean
+    /** 是否开启 充值日期 搜索 */
+    rechargeDay?: RangePickerProps
+    /** 是否开启 服务日期 搜索 */
+    isServeDay?: RangePickerProps
+    /** 是否开启 支付时间 搜索 */
+    payTimeDay?: {
+        ranges?: any
+    }
+    /** 是否开启 下单时间 搜索 */
+    placeAnOrderDay?: {
+        ranges?: any
+    }
+    /** 是否开启布谷 游戏类型 筛选 */
+    isBGGameClassify?: boolean,
+    /** 是否开启 单个充值日期 选择 */
+    isRechargeDate?: boolean,
+    /** 是否开启 玩家ID 搜索 */
+    isGameUserId?: boolean
+    /** 是否开启 操作系统 选择 */
+    isOs?: boolean
+    /** 是否开启 展示数据类型(买量,自然,总) 搜索 */
+    isUserEnterType?: boolean
+    /** 是否开启 区服名称 搜索 */
+    isServerName?: boolean
+    /** 是否开启 所在原始服务器名称 搜索 */
+    isSourceServerName?: boolean
+    /** 是否开启区服ID 搜索 */
+    isServerId?: boolean | {
+        placeholder?: string
+    }
+    /** 是否开启 充值到支付的间隔时间 搜索 */
+    isPayIntervalTime?: {
+        tips?: string
+    }
+    /** 是否开启 留存数据的类型 搜索 */
+    isActiveTypes?: boolean
+    /** 是否开启 玩家昵称 搜索 */
+    isNickname?: boolean
+    /** 是否开启 绑定手机 搜索 */
+    isMobile?: boolean
+    /** 是否开启 是否充值 搜索 */
+    isIsRecharge?: boolean
+    /** 是否开启 玩家状态 搜索 */
+    isUserStatus?: boolean
+    /** 是否开启 角色VIP 搜索 */
+    isVipLevel?: boolean
+    /** 是否开启 角色等级 搜索 */
+    isRoleLevel?: boolean
+    /** 是否开启 是否转端 搜索 */
+    isIsChange?: boolean
+    /** 是否开启 企业微信号 搜索 */
+    isWeChatCompany?: boolean
+    /** 是否开启 企业微信号 搜索 */
+    isWeChat?: boolean
+    /** 是否开启 客服 搜索*/
+    isCustomerServerId?: boolean
+    /** 是否开启 运营 搜索 */
+    isOperatorId?: boolean
+    /** 是否开启多个区服id搜索 */
+    isServerIds?: boolean
+    /** 是否开启 游戏区服 搜索 */
+    isGameServerName?: boolean
+    /** 是否开启多个区服id搜索 */
+    isRankingNum?: boolean
+    /** 是否开启 原始区服列表 搜索 */
+    isServerIdUn?: boolean
+    /** 是否开启 是否退游 搜索 */
+    isRemoveGame?: boolean
+    /** 是否开启 是否退游系统 搜索 */
+    isRemoveGameForSystem?: boolean
+    /** 是否开启GS 搜索 */
+    isGsId?: boolean
+    /** 是否开启 服务状态 搜索 */
+    isServeStatus?: boolean
+}
+/**
+ * 游戏数据系统 请求参数
+ * @returns 
+ */
+const QueryFormGS: React.FC<Props> = (props) => {
+
+    /**************************/
+    const {
+        onChange, initialValues, isSource, isRoleSource, isGsId, isAccountId, isAccountIds, isAgentKey, isAgentName, isCreateDay, isCreateDayXz, isDevice, isGameName, isRechargeGameName, isGameId, isGameIds, isOrderGameId, isGameRoleId,
+        isGameRoleName, isFirstRecharge, isPayStatus, isPayWay, isProductName, isRegAgent, isAgentId, isRegDay, isOs, isParentId, isParentIds, isServeDay,
+        isRechargeDate, isBGGameClassify, isGameUserId, isSysUserId, isSysUserIds, isUserName, isUserId, isSelectRanking, isGameType, rechargeDay, isUserEnterType, isServerName, isServerId,
+        payTimeDay, placeAnOrderDay, isPayIntervalTime, isActiveTypes, isNickname, isMobile, isIsRecharge, isUserStatus, isVipLevel, isRoleLevel, isCreateRoleDay, isLastActiveTime, isIsChange, isWeChatCompany, isWeChat,
+        isCustomerServerId, isOperatorId, isServerIds, isServeStatus, isRankingNum, isIsMergeServer, isIsParticipateMerge, isSuperParentGameId, isGameServerName, isServerIdUn, isSourceServerName, isRemoveGame, isRemoveGameForSystem,
+    } = props
+    const [form] = Form.useForm()
+    const parentId = Form.useWatch('parentId', form)
+    const superParentGameId = Form.useWatch('superParentGameId', form)
+    const isMergeServer = Form.useWatch('isMergeServer', form)
+    const serverName = Form.useWatch('serverName', form)
+    const serverIds = Form.useWatch('serverIds', form)
+    const sourceSystem = Form.useWatch('sourceSystem', form)
+    const parentGameIds = Form.useWatch('parentGameIds', form)
+    const gameDimension = Form.useWatch('gameDimension', form)
+    const consumeDay = Form.useWatch('consumeDay', form)
+    const isParticipateMerge = Form.useWatch('isParticipateMerge', form)
+    const [accountList, setAccountList] = useState<any[]>([])
+    const [userIdList, setUserIdList] = useState<any[]>([])
+    const [gsList, setGsList] = useState<any[]>([])
+    const [customerList, setCustomerList] = useState<any[]>([])
+    const [operateList, setOperateList] = useState<any[]>([])
+    const [gameList, setGameList] = useState<any[]>([])
+    const [parentGameList, setParentGameList] = useState<any[]>([])
+    const [superGameList, setSuperGameList] = useState<any[]>([])
+    const [agentData, setAgentData] = useState<{ label: string, value: string }[]>([])
+
+
+    const getAllOfOwnerUser = useAjax(() => getAllOfOwnerUserApi())
+    const getTtAllUserList = useAjax(() => getTtAllUserListApi())
+    const getGameChoiceList = useAjax(() => getGameChoiceListApi())
+    const getSubUserWithSelfList = useAjax(() => getSubUserWithSelfListApi())
+    const getChannelChoiceList = useAjax(() => getChannelChoiceListApi())
+    const getGameChoiceParentListType1 = useAjax(() => getGameChoiceParentListType1Api())
+    const getUserSystemTypeChoiceList = useAjax(() => getUserSystemTypeChoiceListApi())
+    const getPayList = useAjax(() => getPayListApi())
+    const getVipLevel = useAjax(() => getVipLevelApi())
+    const getRoleUserList = useAjax((params) => getRoleUserListApi(params))
+    const getGameServerList = useAjax((params) => getGameServerListApi(params))
+    const getGameUnMergeServerList = useAjax((params) => getGameUnMergeServerListApi(params))
+    const getGameServerUnList = useAjax((params) => getGameServerUnListApi(params))
+    const getAccountListNew = useAjax((params) => getAccountListNewApi(params))
+    const getAgentListNew = useAjax((params) => getAgentListNewApi(params))
+    const getPitcherListNew = useAjax((params) => getPitcherListNewApi(params))
+    const getGameListNew = useAjax((params) => getGameListNewApi(params))
+    /**************************/
+
+    useEffect(() => {
+        if (isCustomerServerId || isOperatorId || isGsId) {
+            const getList = async () => {
+                // 游戏GS
+                let gs = await getRoleUserList.run({ authType: 'GS' })
+                setGsList(gs ? Object.keys(gs)?.map(key => ({ userId: key, nickname: gs[key] })) : [])
+                // 运营
+                let operate = await getRoleUserList.run({ authType: 'OPERATE' })
+                setOperateList(operate ? Object.keys(operate)?.map(key => ({ userId: key, nickname: operate[key] })) : [])
+                // 客服
+                let customer = await getRoleUserList.run({ authType: 'CUSTOMER' })
+                setCustomerList(customer ? Object.keys(customer)?.map(key => ({ userId: key, nickname: customer[key] })) : [])
+            }
+            getList()
+        }
+    }, [isCustomerServerId, isOperatorId, isGsId])
+
+    useEffect(() => {
+        if (isAccountId) {
+            // 请求广告账号列表
+            async function getAccount() {
+                if (sourceSystem === 'ZX_ONE') {
+                    let data: any[] = []
+                    let res1 = await getAllOfOwnerUser.run()
+                    let data1 = []
+                    if (res1) {
+                        data1 = res1?.map((item: any) => ({ label: item.accountId, value: item.accountId, corporationName: item.corporationName }))
+                    }
+                    let res2 = await getTtAllUserList.run()
+                    let data2 = []
+                    if (res2) {
+                        data2 = res2?.map((item: any) => ({ label: item.accountId, value: item.accountId, corporationName: item.accountName }))
+                    }
+                    data = [...data1, ...data2]
+                    setAccountList(data)
+                } else if (['BG_OLD', 'BG_NEW', 'ZX_SDK'].includes(sourceSystem)) {
+                    let res1 = await getAccountListNew.run({ sourceSystem })
+                    setAccountList(res1?.map((item: any) => ({ label: item.accountId, value: item.accountId, corporationName: '' })))
+                }
+            }
+            getAccount()
+        }
+    }, [isAccountId, sourceSystem])
+
+    /** 游戏列表 */
+    useEffect(() => {
+        if (isGameId || isOrderGameId || isParentId || isParentIds || isGameIds || isSuperParentGameId) {
+            getGameListNew.run({ sourceSystem }).then((res: { gameList: any; parentGameList: any; superGameList: any }) => {
+                if (res) {
+                    const { gameList, parentGameList, superGameList } = res
+                    // if (['BG_OLD', 'BG_NEW', 'ZX_SDK'].includes(sourceSystem)) {
+                    setGameList(gameList?.map((item: { id: any; game_name: any }) => ({ id: item.id, name: item.game_name })) || [])
+                    // }
+                    // let isBg = ['289', '399', '402', '432', '445', '472'].includes(localStorage.getItem('userId') || '')
+                    // let newparentGameList: { parent_game_id: number }[] = parentGameList || []
+                    // if (isBg) {  //布谷过滤
+                    //     newparentGameList = newparentGameList.filter(item => ![9, 1, 7, 15, 11, 16, 13].includes(item.parent_game_id))
+                    // }
+                    setParentGameList(parentGameList)
+                    setSuperGameList(superGameList)
+                }
+            })
+
+            // if (sourceSystem === 'ZX_ONE') {
+            //     getGameChoiceList.run().then(res => {
+            //         setGameList(res || [])
+            //     })
+            // }
+        }
+    }, [isGameId, isGameIds, isOrderGameId, isParentId, isParentIds, isSuperParentGameId, sourceSystem])
+
+    useEffect(() => {
+        if (isVipLevel) {
+            getVipLevel.run()
+        }
+    }, [isVipLevel])
+
+    /** 投手列表 */
+    useEffect(() => {
+        if (isSysUserId || isSysUserIds) {
+            if (['BG_OLD', 'BG_NEW', 'ZX_SDK'].includes(sourceSystem)) {
+                getPitcherListNew.run({ sourceSystem }).then((res: { pitcherId: any; pitcherName: any }[]) => {
+                    setUserIdList(res?.map((item: { pitcherId: any; pitcherName: any }) => ({ userId: item.pitcherId, nickname: item.pitcherName })))
+                })
+            } else {
+                getSubUserWithSelfList.run().then((res: { [x: string]: any }) => {
+                    setUserIdList(res ? Object.keys(res)?.map(key => ({ userId: key, nickname: res[key] })) : [])
+                })
+            }
+        }
+    }, [isSysUserId, isSysUserIds, sourceSystem])
+
+    /** 推广渠道 */
+    useEffect(() => {
+        if (isAgentId) {
+            if (['BG_OLD', 'BG_NEW', 'ZX_SDK'].includes(sourceSystem)) {
+                getAgentListNew.run({ sourceSystem }).then((res: { agentName: any; agentId: any }[]) => {
+                    setAgentData(res?.map((item: { agentName: any; agentId: any }) => ({ label: item.agentName, value: item.agentId })))
+                })
+            } else {
+                getChannelChoiceList.run().then((res: { agentName: any; id: any }[]) => {
+                    console.log(res)
+                    setAgentData(res?.map((item: { agentName: any; id: any }) => ({ label: item.agentName, value: item.id })))
+                })
+            }
+        }
+    }, [isAgentId, sourceSystem])
+
+    /** 游戏应用类型 */
+    useEffect(() => {
+        if (isGameType) {
+            getGameChoiceParentListType1.run()
+        }
+    }, [isGameType])
+
+    /** 操作系统 */
+    useEffect(() => {
+        if (isOs) {
+            getUserSystemTypeChoiceList.run()
+        }
+    }, [isOs])
+
+    /** 支付方式 */
+    useEffect(() => {
+        if (isPayWay) {
+            getPayList.run()
+        }
+    }, [isPayWay])
+
+    const onFinish = (data: any) => {
+
+        // 处理订单创建日期
+        if (isCreateDay) {
+            if (data?.createDay && data?.createDay?.length > 0) {
+                data.beginOrderTime = moment(data?.createDay[0]).format('YYYY-MM-DD')
+                data.endOrderTime = moment(data?.createDay[1]).format('YYYY-MM-DD')
+            } else {
+                data.beginOrderTime = ''
+                data.endOrderTime = ''
+            }
+            delete data.createDay
+        }
+        // 处理 用户注册日期
+        if (isRegDay) {
+            if (data?.regDay && data?.regDay?.length > 0) {
+                data.regStartDay = moment(data?.regDay[0]).format('YYYY-MM-DD')
+                data.regEndDay = moment(data?.regDay[1]).format('YYYY-MM-DD')
+            } else {
+                data.regStartDay = ''
+                data.regEndDay = ''
+            }
+            delete data.regDay
+        }
+        // 处理 不同排行榜 选择
+        if (isSelectRanking) {
+            switch (data?.dateType) {
+                case 'all':
+                    data.beginDay = ''
+                    data.endDay = ''
+                    break;
+                case 'today':
+                    data.beginDay = moment().format('YYYY-MM-DD')
+                    data.endDay = moment().format('YYYY-MM-DD')
+                    break
+                case 'yesterday':
+                    data.beginDay = moment().subtract(1, 'd').format('YYYY-MM-DD')
+                    data.endDay = moment().subtract(1, 'd').format('YYYY-MM-DD')
+                    break
+                case '7days':
+                    data.beginDay = moment().subtract(7, 'd').format('YYYY-MM-DD')
+                    data.endDay = moment().format('YYYY-MM-DD')
+                    break
+                case '30days':
+                    data.beginDay = moment().subtract(30, 'd').format('YYYY-MM-DD')
+                    data.endDay = moment().format('YYYY-MM-DD')
+                    break
+            }
+            delete data?.dateType
+        }
+        console.log('更新了字段---->', data);
+        onChange && onChange(data)
+    }
+
+
+    const disabledDate: RangePickerProps['disabledDate'] = (current) => {
+        // Can not select days before today and today
+        if (consumeDay && consumeDay?.length === 2) {
+            let [d1] = consumeDay
+            return current && (current < moment(d1) || current > moment().endOf('day'));
+        }
+        return current && current > moment().endOf('day');
+    };
+
+    return <Form layout="inline" className='queryForm' initialValues={initialValues} name="basicGs" form={form} onFinish={onFinish}>
+        <Row gutter={[0, 6]}>
+            {/* 数据源搜索 */}
+            {isSource && <Col><Form.Item name='sourceSystem'>
+                <Select
+                    showSearch
+                    style={{ width: 100 }}
+                    allowClear
+                    placeholder={'数据源选择'}
+                    filterOption={(input, option) =>
+                        (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
+                    }
+                >
+                    <Select.Option value="BG_OLD">布谷-old</Select.Option>
+                    <Select.Option value="BG_NEW">布谷-new</Select.Option>
+                    <Select.Option value="ZX_SDK">布谷-zx</Select.Option>
+                    <Select.Option value="ZX_ONE">赞象</Select.Option>
+                </Select>
+            </Form.Item></Col>}
+            {/* 角色来源 */}
+            {isRoleSource && <Col><Form.Item name='roleSource'>
+                <Select
+                    showSearch
+                    style={{ width: 100 }}
+                    allowClear
+                    placeholder={'角色来源选择'}
+                    filterOption={(input, option) =>
+                        (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
+                    }
+                >
+                    <Select.Option value={2}>角色指派</Select.Option>
+                    <Select.Option value={1}>区服指派</Select.Option>
+                </Select>
+            </Form.Item></Col>}
+            {/* 展示数据类型 */}
+            {isUserEnterType && <Col><Form.Item name='tableTypes'>
+                <Select
+                    showSearch
+                    style={{ width: 130 }}
+                    allowClear
+                    placeholder={'展示数据类型'}
+                    filterOption={(input, option) =>
+                        (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
+                    }
+                >
+                    <Select.Option value="buy">买量</Select.Option>
+                    <Select.Option value="nature">自然量</Select.Option>
+                    <Select.Option value="total">总量</Select.Option>
+                </Select>
+            </Form.Item></Col>}
+
+            {isActiveTypes && <Col><Form.Item name='activeTypes'>
+                <Select
+                    showSearch
+                    style={{ width: 130 }}
+                    placeholder={'留存数据的类型'}
+                    filterOption={(input, option) =>
+                        (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
+                    }
+                >
+                    {Object.keys(ActiveEnum).map(key => <Select.Option value={key} key={key}>{ActiveEnum[key as keyof typeof ActiveEnum]}</Select.Option>)}
+                </Select>
+            </Form.Item></Col>}
+            {/* 不同排行榜选择 */}
+            {isSelectRanking && <Col><Form.Item name='dateType'>
+                <Radio.Group>
+                    <Radio.Button value="all">总排行</Radio.Button>
+                    <Radio.Button value="today">今日排行</Radio.Button>
+                    <Radio.Button value="yesterday">昨日排行</Radio.Button>
+                    <Radio.Button value="7days">7日排行</Radio.Button>
+                    <Radio.Button value="30days">30日排行</Radio.Button>
+                </Radio.Group>
+            </Form.Item></Col>}
+            {/* 所在原始服务器名称 */}
+            {isSourceServerName && <Col><Form.Item name='sourceServerName'>
+                <Input placeholder="原始服务器名称" allowClear style={{ width: 140 }} />
+            </Form.Item></Col>}
+            {/* 广告区服名称 */}
+            {isServerName && <Col><Form.Item name='serverName'>
+                <Input placeholder="区服名称" allowClear style={{ width: 140 }} />
+            </Form.Item></Col>}
+            {/* 广告区服ID */}
+            {isServerId && <Col><Form.Item name='serverId'>
+                <Input placeholder="区服ID" allowClear style={{ width: 140 }} {...(isServerId && typeof isServerId === 'object') ? isServerId : {}} />
+            </Form.Item></Col>}
+            {/* 广告账号ID */}
+            {isAccountId && <Col><Form.Item name='accountId'>
+                <Select
+                    maxTagCount={1}
+                    mode={isAccountIds ? 'multiple' : undefined}
+                    showSearch
+                    style={{ minWidth: 140 }}
+                    allowClear
+                    placeholder={'广告账号'}
+                    loading={getAccountListNew.loading || getAllOfOwnerUser.loading}
+                    filterOption={(input, option) =>
+                        (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
+                    }
+                >
+                    {accountList.map(item => <Select.Option key={item.value} value={item.value}>{item.label?.toString() + (item.corporationName ? `_${item.corporationName}` : '')}</Select.Option>)}
+                </Select>
+            </Form.Item></Col>}
+
+            {/* 操作设备 */}
+            {isDevice && <Col><Form.Item name='device'>
+                <Input placeholder="操作设备" allowClear style={{ width: 140 }} />
+            </Form.Item></Col>}
+            {/* 游戏名 */}
+            {isRechargeGameName && <Col><Form.Item name='rechargeGameName'>
+                <Input placeholder="游戏名" allowClear style={{ width: 140 }} />
+            </Form.Item></Col>}
+            {/* 玩家ID */}
+            {isGameUserId && <Col><Form.Item name='gameUserId'>
+                <Input placeholder="玩家ID" allowClear style={{ width: 140 }} />
+            </Form.Item></Col>}
+            {/* 游戏名 */}
+            {isGameName && <Col><Form.Item name='gameName'>
+                <Input placeholder="游戏名" allowClear style={{ width: 140 }} />
+            </Form.Item></Col>}
+
+            {/* 游戏ID搜索 */}
+            {isGameId && <Col><Form.Item name='gameId'>
+                <Select
+                    maxTagCount={1}
+                    showSearch
+                    style={{ minWidth: 140 }}
+                    allowClear
+                    loading={getGameListNew.loading || getGameChoiceList.loading}
+                    placeholder={'请选择游戏'}
+                    filterOption={(input, option) =>
+                        (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
+                    }
+                >
+                    {gameList?.map((item: any) => <Select.Option value={item.id} key={item.id}>{item.name}</Select.Option>)}
+                </Select>
+            </Form.Item></Col>}
+            {isGameIds && <Col><Form.Item name='gameId'>
+                <Select
+                    maxTagCount={1}
+                    mode="multiple"
+                    showSearch
+                    style={{ minWidth: 140 }}
+                    allowClear
+                    loading={getGameListNew.loading || getGameChoiceList.loading}
+                    placeholder={'请选择游戏'}
+                    filterOption={(input, option) =>
+                        (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
+                    }
+                >
+                    {/* {gameDimension === 2 ? parentGameList?.map((item: any) => <Select.Option value={item.parent_game_id} key={item.parent_game_id} data-super-id={item.super_game_id}>{item.parent_game_name}</Select.Option>) : getGameChoiceList?.data?.map((item: any) => <Select.Option value={item.id} key={item.id}>{item.name}</Select.Option>)} */}
+                    {gameDimension === 2 ? parentGameList?.map((item: any) => <Select.Option value={item.parent_game_id} key={item.parent_game_id} data-super-id={item.super_game_id}>{item.parent_game_name}</Select.Option>) : gameList?.map((item: any) => <Select.Option value={item.id} key={item.id}>{item.name}</Select.Option>)}
+                </Select>
+            </Form.Item></Col>}
+            {/* 充值游戏ID */}
+            {isOrderGameId && <Col><Form.Item name='orderGameId'>
+                <Select
+                    maxTagCount={1}
+                    showSearch
+                    style={{ minWidth: 140 }}
+                    allowClear
+                    placeholder={'请选择充值游戏'}
+                    filterOption={(input, option) =>
+                        (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
+                    }
+                >
+                    {/* {getGameChoiceList?.data?.map((item: any) => <Select.Option value={item.id} key={item.id}>{item.name}</Select.Option>)} */}
+                    {gameList?.map((item: any) => <Select.Option value={item.id} key={item.id}>{item.name}</Select.Option>)}
+                </Select>
+            </Form.Item></Col>}
+
+            {/* 超父游戏ID */}
+            {isSuperParentGameId && <Col><Form.Item name='superParentGameId'>
+                <Select
+                    maxTagCount={1}
+                    showSearch
+                    style={{ minWidth: 140 }}
+                    allowClear
+                    disabled={parentId || parentGameIds?.length > 0}
+                    placeholder={'请选择超父游戏'}
+                    filterOption={(input, option) =>
+                        (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
+                    }
+                    onChange={(e) => {
+                        if (isServerIds && e) {
+                            form.setFieldsValue({ serverIds: undefined })
+                            getGameServerList.run({ gameId: e })
+                            getGameUnMergeServerList.run({ gameId: e })
+                        } else {
+                            getGameServerList?.data && getGameServerList.mutate([])
+                            getGameUnMergeServerList?.data && getGameUnMergeServerList.mutate([])
+                        }
+                    }}
+                >
+                    {superGameList?.map((item: any) => <Select.Option value={item.super_game_id} key={item.super_game_id}>{item.super_game_name}</Select.Option>)}
+                </Select>
+            </Form.Item></Col>}
+
+            {/* 父游戏ID */}
+            {isParentId && <Col><Form.Item name='parentId'>
+                <Select
+                    maxTagCount={1}
+                    showSearch
+                    style={{ minWidth: 140 }}
+                    allowClear
+                    disabled={superParentGameId}
+                    placeholder={'请选择父游戏'}
+                    filterOption={(input, option) =>
+                        (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
+                    }
+                    onChange={(e, option: any) => {
+                        if (isServerIds) {
+                            form.setFieldsValue({ serverIds: undefined })
+                            if (option?.['data-super-id']) {
+                                getGameServerList.run({ gameId: option['data-super-id'] })
+                            } else {
+                                getGameServerList?.data && getGameServerList.mutate([])
+                            }
+                        }
+                        if (isServerIdUn) {
+                            form.setFieldsValue({ serverId: undefined })
+                            if (option?.['data-super-id']) {
+                                getGameServerUnList.run({ gameId: option['data-super-id'] })
+                            } else {
+                                getGameServerUnList?.data && getGameServerUnList.mutate([])
+                            }
+                        }
+                    }}
+                >
+                    {parentGameList?.map((item: any) => <Select.Option value={item.parent_game_id} key={item.parent_game_id} data-super-id={item.super_game_id}>{item.parent_game_name}</Select.Option>)}
+                </Select>
+            </Form.Item></Col>}
+            {isParentIds && <Col><Form.Item name='parentGameIds'>
+                <Select
+                    maxTagCount={1}
+                    mode="multiple"
+                    showSearch
+                    style={{ minWidth: 140 }}
+                    allowClear
+                    disabled={superParentGameId}
+                    placeholder={'请选择父游戏'}
+                    filterOption={(input, option) =>
+                        (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
+                    }
+                    onChange={(e, option) => {
+                        if (isServerIds) {
+                            form.setFieldsValue({ serverIds: undefined })
+                        }
+                        if (isServerIdUn) {
+                            form.setFieldsValue({ serverId: undefined })
+                        }
+                    }}
+                >
+                    {parentGameList?.map((item: any) => <Select.Option value={item.parent_game_id} key={item.parent_game_id}>{item.parent_game_name}</Select.Option>)}
+                </Select>
+            </Form.Item></Col>}
+
+            {(parentId || superParentGameId) && <>
+                {/* 广告区服名称 */}
+                {isGameServerName && <Col><Form.Item name='serverName'>
+                    <Input placeholder="区服名称" allowClear style={{ width: 140 }} disabled={serverIds?.length > 0} />
+                </Form.Item></Col>}
+
+                {/* 区服id */}
+                {isServerIds && <Col><Form.Item name='serverIds'>
+                    <Select
+                        maxTagCount={1}
+                        mode="multiple"
+                        showSearch
+                        disabled={serverName}
+                        style={{ minWidth: 140 }}
+                        allowClear
+                        placeholder={'请选择区服'}
+                        filterOption={(input, option) =>
+                            (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
+                        }
+                        loading={getGameServerList.loading}
+                    >
+                        {(isIsParticipateMerge && isParticipateMerge)
+                            ? getGameUnMergeServerList?.data?.filter((item: { isSourceServer: any }) => (isIsMergeServer && ((!isMergeServer && item.isSourceServer) || (isMergeServer && !item.isSourceServer))) || !isIsMergeServer)?.map((item: any) => <Select.Option value={item.serverId} key={item.serverId}>{item.serverName}</Select.Option>)
+                            : getGameServerList?.data?.filter((item: { isSourceServer: any }) => (isIsMergeServer && ((!isMergeServer && item.isSourceServer) || (isMergeServer && !item.isSourceServer))) || !isIsMergeServer)?.map((item: any) => <Select.Option value={item.serverId} key={item.serverId}>{item.serverName}</Select.Option>)}
+                    </Select>
+                </Form.Item></Col>}
+
+                {/* 是否合服 */}
+                {isIsMergeServer && <Col><Form.Item name='isMergeServer' valuePropName="checked">
+                    <Checkbox onChange={() => form.setFieldsValue({ serverIds: undefined })}>是否合服</Checkbox>
+                </Form.Item></Col>}
+
+                {/* 是否参与过合服 */}
+                {isIsParticipateMerge && <Col><Form.Item name='isParticipateMerge' valuePropName="checked">
+                    <Checkbox onChange={() => form.setFieldsValue({ serverIds: undefined })}>未参与过合服</Checkbox>
+                </Form.Item></Col>}
+
+                {/* 区服id */}
+                {isServerIdUn && <Col><Form.Item name='serverId'>
+                    <Select
+                        maxTagCount={1}
+                        mode="multiple"
+                        showSearch
+                        disabled={serverName}
+                        style={{ minWidth: 140 }}
+                        allowClear
+                        placeholder={'请选择区服'}
+                        filterOption={(input, option) =>
+                            (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
+                        }
+                        loading={getGameServerUnList.loading}
+                    >
+                        {getGameServerUnList?.data?.filter((item: { isSourceServer: any }) => item.isSourceServer)?.map((item: any) => <Select.Option value={item.serverId} key={item.serverId}>{item.serverName}</Select.Option>)}
+                    </Select>
+                </Form.Item></Col>}
+            </>}
+
+            {/* 游戏应用类型搜索 */}
+            {isGameType && <Col><Form.Item name='gameType'>
+                <Select
+                    maxTagCount={1}
+                    showSearch
+                    style={{ minWidth: 140 }}
+                    allowClear
+                    placeholder={'请选择游戏应用类型'}
+                    filterOption={(input, option) =>
+                        (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
+                    }
+                >
+                    {getGameChoiceParentListType1?.data?.map((item: any) => <Select.Option value={item.id} key={item.id}>{item.name}</Select.Option>)}
+                </Select>
+            </Form.Item></Col>}
+            {/* 布谷游戏应用类型搜索 */}
+            {isBGGameClassify && <Col><Form.Item name='gameClassify'>
+                <Select
+                    maxTagCount={1}
+                    showSearch
+                    style={{ width: 140 }}
+                    allowClear
+                    placeholder={'游戏应用类型'}
+                    filterOption={(input, option) =>
+                        (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
+                    }
+                >
+                    {Object.keys(gameClassifyEnum).map(key => <Select.Option value={key} key={key}>{gameClassifyEnum[key as keyof typeof gameClassifyEnum]}</Select.Option>)}
+                </Select>
+            </Form.Item></Col>}
+            {/* 游戏角色名 */}
+            {isGameRoleName && <Col><Form.Item name='roleName'>
+                <Input placeholder="游戏角色名" allowClear style={{ width: 140 }} />
+            </Form.Item></Col>}
+
+            {/* 游戏角色名id搜索 */}
+            {isGameRoleId && <Col><Form.Item name='roleId'>
+                <Input placeholder="角色ID" allowClear style={{ width: 140 }} />
+            </Form.Item></Col>}
+
+            {/* 客户微信号 */}
+            {isWeChat && <Col><Form.Item name='weChat'>
+                <Input placeholder="客户微信号" allowClear style={{ width: 140 }} />
+            </Form.Item></Col>}
+
+            {/* 客户微信号 */}
+            {isWeChatCompany && <Col><Form.Item name='weChatCompany'>
+                <Input placeholder="企业微信号" allowClear style={{ width: 140 }} />
+            </Form.Item></Col>}
+
+            {/* 是否首充 */}
+            {isFirstRecharge && <Col><Form.Item name='isFirstRecharge'>
+                <Select
+                    maxTagCount={1}
+                    showSearch
+                    style={{ width: 100 }}
+                    allowClear
+                    placeholder={'是否首充'}
+                    filterOption={(input, option) =>
+                        (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
+                    }
+                >
+                    <Select.Option value={'0'}>否</Select.Option>
+                    <Select.Option value={'1'}>是</Select.Option>
+                </Select>
+            </Form.Item></Col>}
+
+            {isServeStatus && <Col><Form.Item name='serveStatus'>
+                <Select
+                    showSearch
+                    style={{ width: 100 }}
+                    allowClear
+                    placeholder={'服务状态'}
+                    filterOption={(input, option) =>
+                        (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
+                    }
+                >
+                    <Select.Option value={1}>服务中</Select.Option>
+                    <Select.Option value={2}>服务完成</Select.Option>
+                </Select>
+            </Form.Item></Col>}
+
+            {/* 支付状态 */}
+            {isPayStatus && <Col><Form.Item name='orderStatus'>
+                <Select
+                    showSearch
+                    style={{ width: 100 }}
+                    allowClear
+                    placeholder={'支付状态'}
+                    filterOption={(input, option) =>
+                        (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
+                    }
+                >
+                    {Object.keys(PayStatus).map(key => <Select.Option value={key} key={key}>{PayStatus[key as keyof typeof PayStatus]}</Select.Option>)}
+                </Select>
+            </Form.Item></Col>}
+
+            {/* 支付方式 */}
+            {isPayWay && <Col><Form.Item name='payWay'>
+                <Select
+                    showSearch
+                    style={{ width: 100 }}
+                    allowClear
+                    placeholder={'支付方式'}
+                    filterOption={(input, option) =>
+                        (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
+                    }
+                >
+                    {getPayList?.data?.map((item: any) => <Select.Option value={item.id} key={item.id}>{item.payName}</Select.Option>)}
+                </Select>
+            </Form.Item></Col>}
+
+            {/* 产品名称 */}
+            {isProductName && <Col><Form.Item name='productName'>
+                <Input placeholder="产品名称" allowClear style={{ width: 140 }} />
+            </Form.Item></Col>}
+
+            {/* 注册渠道名 */}
+            {isRegAgent && <Col><Form.Item name='regAgent'>
+                <Input placeholder="注册渠道名" allowClear style={{ width: 140 }} />
+            </Form.Item></Col>}
+
+            {/* 渠道标识 */}
+            {isAgentKey && <Col><Form.Item name='agentKey'>
+                <Input placeholder="渠道标识" allowClear style={{ width: 140 }} />
+            </Form.Item></Col>}
+
+            {/* 渠道名称 */}
+            {isAgentName && <Col><Form.Item name='agentName'>
+                <Input placeholder="渠道名称" allowClear style={{ width: 140 }} />
+            </Form.Item></Col>}
+
+            {/* 推广渠道id */}
+            {isAgentId && <Col><Form.Item name='agentId'>
+                <Select
+                    maxTagCount={1}
+                    mode="multiple"
+                    showSearch
+                    style={{ minWidth: 140 }}
+                    allowClear
+                    placeholder={'请选择渠道'}
+                    loading={getChannelChoiceList.loading || getAgentListNew.loading}
+                    filterOption={(input, option) =>
+                        (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
+                    }
+                >
+                    {agentData?.map((item: any) => <Select.Option value={item.value} key={item.value}>{item.label}</Select.Option>)}
+                </Select>
+            </Form.Item></Col>}
+
+            {/* 投手ID */}
+            {isSysUserId && <Col><Form.Item name='pitcherId'>
+                <Select
+                    maxTagCount={1}
+                    showSearch
+                    style={{ width: 120 }}
+                    allowClear
+                    loading={getSubUserWithSelfList.loading || getPitcherListNew.loading}
+                    placeholder={'请选择投手'}
+                    filterOption={(input, option) =>
+                        (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
+                    }
+                >
+                    {userIdList.map((item: any) => <Select.Option value={item.userId} key={item.userId}>{item.nickname}</Select.Option>)}
+                </Select>
+            </Form.Item></Col>}
+            {isSysUserIds && <Col><Form.Item name='pitcherId'>
+                <Select
+                    maxTagCount={1}
+                    showSearch
+                    style={{ minWidth: 120 }}
+                    allowClear
+                    mode="multiple"
+                    loading={getSubUserWithSelfList.loading || getPitcherListNew.loading}
+                    placeholder={'请选择投手'}
+                    filterOption={(input, option) =>
+                        (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
+                    }
+                >
+                    {userIdList.map((item: any) => <Select.Option value={item.userId} key={item.userId}>{item.nickname}</Select.Option>)}
+                </Select>
+            </Form.Item></Col>}
+            {/* 客服ID */}
+            {isCustomerServerId && <Col><Form.Item name='customerServerId'>
+                <Select
+                    maxTagCount={1}
+                    showSearch
+                    style={{ width: 120 }}
+                    allowClear
+                    placeholder={'请选择客服'}
+                    filterOption={(input, option) =>
+                        (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
+                    }
+                >
+                    <Select.Option value={0}>未操作</Select.Option>
+                    {customerList.map((item: any) => <Select.Option value={item.userId} key={item.userId}>{item.nickname}</Select.Option>)}
+                </Select>
+            </Form.Item></Col>}
+            {/* 运营ID */}
+            {isOperatorId && <Col><Form.Item name='operatorId'>
+                <Select
+                    maxTagCount={1}
+                    showSearch
+                    style={{ width: 120 }}
+                    allowClear
+                    placeholder={'请选择运营'}
+                    filterOption={(input, option) =>
+                        (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
+                    }
+                >
+                    <Select.Option value={0}>未操作</Select.Option>
+                    {operateList.map((item: any) => <Select.Option value={item.userId} key={item.userId}>{item.nickname}</Select.Option>)}
+                </Select>
+            </Form.Item></Col>}
+            {/* GSID */}
+            {isGsId && <Col><Form.Item name='gsId'>
+                <Select
+                    maxTagCount={1}
+                    showSearch
+                    style={{ minWidth: 120 }}
+                    allowClear
+                    mode="multiple"
+                    placeholder={'请选择GS'}
+                    filterOption={(input, option) =>
+                        (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
+                    }
+                >
+                    {/* <Select.Option value={0}>未操作</Select.Option> */}
+                    {gsList.map((item: any) => <Select.Option value={item.userId} key={item.userId}>{item.nickname}</Select.Option>)}
+                </Select>
+            </Form.Item></Col>}
+
+            {/* 玩家账号 */}
+            {isUserName && <Col><Form.Item name='username'>
+                <Input placeholder="玩家账号" allowClear style={{ width: 140 }} />
+            </Form.Item></Col>}
+
+            {/* 用户id */}
+            {isUserId && <Col><Form.Item name='userId'>
+                <Input placeholder="用户ID" allowClear style={{ width: 140 }} />
+            </Form.Item></Col>}
+
+            {/* 玩家昵称 */}
+            {isNickname && <Col><Form.Item name='nickname'>
+                <Input placeholder="玩家昵称" allowClear style={{ width: 140 }} />
+            </Form.Item></Col>}
+
+            {/* 绑定手机 */}
+            {isMobile && <Col><Form.Item name='mobile'>
+                <Input placeholder="绑定手机" allowClear style={{ width: 140 }} />
+            </Form.Item></Col>}
+
+            {/* 注册IP */}
+            {isRankingNum && <Col><Form.Item name='rankingNum'>
+                <InputNumber placeholder="排名范围" min={1} />
+            </Form.Item></Col>}
+
+            {/* 是否充值 */}
+            {isIsRecharge && <Col><Form.Item name='isRecharge'>
+                <Select
+                    showSearch
+                    style={{ width: 98 }}
+                    allowClear
+                    placeholder={'是否充值'}
+                    filterOption={(input, option) =>
+                        (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
+                    }
+                >
+                    <Select.Option value={false}>否</Select.Option>
+                    <Select.Option value={true}>是</Select.Option>
+                </Select>
+            </Form.Item></Col>}
+
+            {/* 玩家状态 */}
+            {isUserStatus && <Col><Form.Item name='userStatus'>
+                <Select
+                    showSearch
+                    allowClear
+                    style={{ width: 110 }}
+                    placeholder={'玩家状态'}
+                    filterOption={(input, option) =>
+                        (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
+                    }
+                >
+                    <Select.Option value={'1'}>试玩</Select.Option>
+                    <Select.Option value={'2'}>正常</Select.Option>
+                    <Select.Option value={'3'}>冻结</Select.Option>
+                </Select>
+            </Form.Item></Col>}
+
+            {/* 是否转端 */}
+            {isIsChange && <Col><Form.Item name='isChange'>
+                <Select
+                    showSearch
+                    allowClear
+                    mode="multiple"
+                    style={{ width: 110 }}
+                    placeholder={'是否转端'}
+                    filterOption={(input, option) =>
+                        (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
+                    }
+                >
+                    <Select.Option value="2">未操作</Select.Option>
+                    <Select.Option value="1">是</Select.Option>
+                    <Select.Option value="0">不转端</Select.Option>
+                </Select>
+            </Form.Item></Col>}
+
+            {/* 是否退游 */}
+            {isRemoveGameForSystem && <Col><Form.Item name='systemRemoveGameStatus'>
+                <Select
+                    showSearch
+                    allowClear
+                    style={{ width: 170 }}
+                    placeholder={'角色当前状态(系统判定)'}
+                    filterOption={(input, option) =>
+                        (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
+                    }
+                >
+                    <Select.Option value="1">退游</Select.Option>
+                    <Select.Option value="0">正常</Select.Option>
+                </Select>
+            </Form.Item></Col>}
+
+            {/* 是否退游 */}
+            {isRemoveGame && <Col><Form.Item name='humanRemoveGameStatus'>
+                <Select
+                    showSearch
+                    allowClear
+                    style={{ width: 170 }}
+                    placeholder={'角色当前状态(人工判断)'}
+                    filterOption={(input, option) =>
+                        (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
+                    }
+                >
+                    <Select.Option value="1">退游</Select.Option>
+                    <Select.Option value="0">正常</Select.Option>
+                </Select>
+            </Form.Item></Col>}
+
+            {/* vip等级 */}
+            {isVipLevel && <Col><Form.Item name='vipLevel'>
+                <Select
+                    showSearch
+                    allowClear
+                    maxTagCount={1}
+                    mode="multiple"
+                    style={{ minWidth: 98 }}
+                    placeholder={'角色VIP'}
+                    filterOption={(input, option) =>
+                        (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
+                    }
+                >
+                    {Array(getVipLevel?.data || 0).fill('').map((_item, index) => <Select.Option value={index + 1} key={index + 1}>{index + 1}</Select.Option>)}
+                </Select>
+            </Form.Item></Col>}
+
+            {/* 角色等级 */}
+            {isRoleLevel && <Col><Form.Item>
+                <Space>
+                    <Form.Item name='roleLevelMin' noStyle>
+                        <InputNumber style={{ width: 130 }} placeholder="角色等级最小值" />
+                    </Form.Item>
+                    <span>~</span>
+                    <Form.Item name='roleLevelMax' noStyle>
+                        <InputNumber style={{ width: 130 }} placeholder="角色等级最小值" />
+                    </Form.Item>
+                </Space>
+            </Form.Item></Col>}
+
+            {/* 操作系统 */}
+            {isOs && <Col><Form.Item name='os'>
+                <Select
+                    maxTagCount={1}
+                    showSearch
+                    style={{ width: 110 }}
+                    allowClear
+                    placeholder={'操作系统'}
+                    filterOption={(input, option) =>
+                        (option?.children as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
+                    }
+                >
+                    {getUserSystemTypeChoiceList?.data?.map((item: any) => <Select.Option value={item.os} key={item.os}>{item.os}</Select.Option>)}
+                </Select>
+            </Form.Item></Col>}
+
+            {/* 用户注册日期搜索 */}
+            {isRegDay && <Col><Form.Item name='regDay'>
+                <DatePicker.RangePicker style={{ width: 250 }} placeholder={['注册开始日期', '注册结束日期']} {...isRegDay} />
+            </Form.Item></Col>}
+
+            {/* 订单创建日期搜索 */}
+            {isCreateDay && <Col><Form.Item name='createDay'>
+                <DatePicker.RangePicker style={{ width: 250 }} placeholder={['订单创建开始日期', '订单创建结束日期']} {...isCreateDay} />
+            </Form.Item></Col>}
+
+            {isCreateDayXz && <Col><Form.Item name='createDay'>
+                <DatePicker.RangePicker style={{ width: 250 }} disabledDate={disabledDate} placeholder={['订单创建开始日期', '订单创建结束日期']} {...isCreateDay} />
+            </Form.Item></Col>}
+
+            {/* 充值日期搜索 */}
+            {rechargeDay && <Col><Form.Item name='rechargeDay'>
+                <DatePicker.RangePicker style={{ width: 250 }} placeholder={['充值开始日期', '充值结束日期']} {...rechargeDay} />
+            </Form.Item></Col>}
+
+            {/* 单个充值日期搜索 */}
+            {payTimeDay && <Col><Form.Item name='payTime'>
+                <DatePicker.RangePicker style={{ width: 250 }} placeholder={['支付开始日期', '支付结束日期']} {...payTimeDay} />
+            </Form.Item></Col>}
+
+            {/* 单个充值日期搜索 */}
+            {placeAnOrderDay && <Col><Form.Item name='placeAnOrderTime'>
+                <DatePicker.RangePicker style={{ width: 250 }} placeholder={['下单开始日期', '下单结束日期']} {...placeAnOrderDay} />
+            </Form.Item></Col>}
+
+            {/* 角色创建日期搜索 */}
+            {isCreateRoleDay && <Col><Form.Item name='createRoleDay'>
+                <DatePicker.RangePicker style={{ width: 250 }} placeholder={['角色创建开始日期', '角色创建结束日期']} {...isCreateRoleDay} />
+            </Form.Item></Col>}
+
+            {/* 最近活跃 */}
+            {isLastActiveTime && <Col><Form.Item name='lastActiveTime'>
+                <DatePicker.RangePicker style={{ width: 250 }} placeholder={['最近活跃开始日期', '最近活跃结束日期']} {...isLastActiveTime} />
+            </Form.Item></Col>}
+
+            {isServeDay && <Col><Form.Item name='serveDay'>
+                <DatePicker.RangePicker style={{ width: 250 }} placeholder={['服务开始日期', '服务结束日期']} {...isServeDay} />
+            </Form.Item></Col>}
+
+            {/* 单个充值日期搜索 */}
+            {isRechargeDate && <Col><Form.Item name='rechargeDate'>
+                <DatePicker placeholder={'充值日期'} />
+            </Form.Item></Col>}
+
+            {/* 单个充值日期搜索 */}
+            {isPayIntervalTime && <Col><Form.Item name='regPayIntervalTime'>
+                <IntervalTime {...isPayIntervalTime} />
+            </Form.Item></Col>}
+
+            <Col>
+                <Space>
+                    <Button type="primary" htmlType="submit">搜索</Button>
+                    <Button onClick={() => form.resetFields()}>重置</Button>
+                </Space>
+            </Col>
+        </Row>
+    </Form>
+}
+
+
+export default React.memo(QueryFormGS)

+ 5 - 3
src/components/RightContent/index.tsx

@@ -25,9 +25,11 @@ const GlobalHeaderRight: React.FC<{}> = () => {
     let navLi: any = document.querySelectorAll('.top-nav-menu > li')
     if (nav && navLi) {
       let l = nav.offsetLeft
-      let lw = navLi[0].offsetWidth
-      let length = navLi.length - 1
-      setLeft(l + lw * length)
+      let lw = 0
+      for (const iterator of navLi) {
+        lw += iterator.offsetWidth
+      }
+      setLeft(l + lw - 50)
     }
   }, [])
 

+ 5 - 77
src/pages/gameDataStatistics/components/TableData/index.tsx

@@ -2,14 +2,11 @@ import CustomListModel from '@/components/CustomList'
 import Tables from '@/components/Tables'
 import { FullscreenExitOutlined, FullscreenOutlined, QuestionCircleOutlined, RedoOutlined, SearchOutlined, SettingOutlined } from '@ant-design/icons'
 import { useDebounceFn, useFullscreen, useThrottleFn } from 'ahooks'
-import { Button, Card, Col, Row, Space, Tag, Tooltip, } from 'antd'
+import { Button, Card, Col, Row, Space, Tooltip, } from 'antd'
 import React, { useEffect, useRef, useState, useCallback } from 'react'
 import style from './index.less'
 import moment from 'moment'
 import lodash from 'lodash';
-import BaseTable from '@/components/BaseTable'
-import { getBaseTableColumn } from '@/components/BaseTable/utils'
-import IsVirtually from './isVirtually'
 
 interface Prosp {
     isZj?: boolean,//是否查总计
@@ -52,7 +49,6 @@ interface Prosp {
     }
     estimatedRowHeight?: number | (() => number)
     headerHeight?: number
-    isVirtually?: boolean
     rowSelection?: any
 
 }
@@ -60,9 +56,8 @@ interface Prosp {
 export const version = '1.0.0'
 
 function TableData(props: Prosp) {
-    console.log('--start--', new Date().getTime())
     /*************************/
-    const { isZj, totalData, czChild, scroll, title, tips, dataSource, expandedRowRender, isVirtually = true, rowSelection, sortData, headerHeight, className, rowClassName, leftChild, page = undefined, pageSize = undefined, size = 'small', total = 0, onChange, config, configName, ajax, fixed = { left: 0, right: 1 }, summary, estimatedRowHeight } = props
+    const { isZj, totalData, czChild, scroll, title, tips, dataSource, expandedRowRender, rowSelection, sortData, className, rowClassName, leftChild, page = undefined, pageSize = undefined, size = 'small', total = 0, onChange, config, configName, ajax, fixed = { left: 0, right: 1 }, summary, estimatedRowHeight } = props
     const [visible, setVisible] = useState<boolean>(false)
     const [isFullscreen, setIsFullscreen] = useState<boolean>(true)
     const [oldSelectData, setoldSelectData] = useState<any[]>([])
@@ -78,7 +73,6 @@ function TableData(props: Prosp) {
 
     useEffect(() => {
         if (originalColumns.length > 0) {
-            console.log('=============originalColumns========>', sortData)
             if (sortData?.field && sortData.order) {
                 setNewColumns(originalColumns.map((item: any) => {
                     if (item.dataIndex === sortData?.field) {
@@ -99,11 +93,9 @@ function TableData(props: Prosp) {
 
 
     const { run: runSet } = useThrottleFn((newArr, newConfig, fixedData) => {
-        console.log('设置配置改变重新赋值', new Date().getTime())
         setoldSelectData(selectData.selectData)
         setoldFixed(selectData.fixed)
         if (newArr.length > 0) {
-            console.log('改变--------------------->', new Date().getTime())
             let c: any[] = []
             newArr.forEach((newItem: any, index: number) => {
                 let oldItem = newConfig.find((c: { dataIndex: any }) => c.dataIndex === newItem.dataIndex)
@@ -290,7 +282,6 @@ function TableData(props: Prosp) {
                             <span><QuestionCircleOutlined /></span>
                         </Tooltip>}
                     </Space>
-                    {isVirtually && <IsVirtually title={title} />}
                 </div>
                 <Row gutter={[0, 16]}>
                     {header}
@@ -299,36 +290,10 @@ function TableData(props: Prosp) {
             </Card>
         </Col>
     </Row>
-    const content1 = <Row gutter={[0, 20]} ref={ref} style={isFull ? { background: '#fff' } : {}}>
-        {/**table */}
-        <Col span={24}>
-            <Card
-                style={{ borderRadius: 8 }}
-                headStyle={{ textAlign: 'left' }}
-                bodyStyle={{ padding: '5px 10px' }}
-            >
-                <div style={{ textAlign: 'center', fontWeight: 'bold', padding: '4px 6px 6px', fontSize: 16, marginBottom: 4, position: 'relative' }}>
-                    <Space>{title}</Space>
-                    {isVirtually && <IsVirtually title={title} />}
-                </div>
-                <Row gutter={[0, 16]}>
-                    {header}
-                    <Tab1 {...{ size, newColumns, className, handelResize, headerHeight, page, pageSize, totalData, dataSource, onChange, total, ajax, estimatedRowHeight }} />
-                </Row>
-            </Card>
-        </Col>
-    </Row >
 
-    const tableNames = localStorage.getItem('TABLENAMES')
-    if (tableNames && title && tableNames.split(',').includes(title)) {
-        return <>
-            {content1}
-        </>
-    } else {
-        return <>
-            {content}
-        </>
-    }
+    return <>
+        {content}
+    </>
 }
 
 /**表格 */
@@ -360,7 +325,6 @@ const Tab = React.memo((props: any) => {
             }
         }
     }, [isZj, ran])
-    console.log('--end--', new Date().getTime())
     return <Col span={24}>
         <div className={`${style[size]} ${className ? style[className] : ''} `}>
             {
@@ -408,42 +372,6 @@ const Tab = React.memo((props: any) => {
     </Col >
 })
 
-const Tab1 = React.memo((props: any) => {
-    const { size, newColumns, className, handelResize, page, pageSize, headerHeight = 65, totalData, dataSource, onChange, total, ajax, estimatedRowHeight } = props
-    let ww = document.body.clientWidth < 415
-
-    return < Col span={24} >
-        <div className={`${style[size]} ${className ? style[className] : ''} `}>
-            <BaseTable
-                columns={getBaseTableColumn(newColumns)}
-                data={dataSource}
-                loading={ajax?.loading}
-                onColumnResizeEnd={({ column }: any) => handelResize(column, 'vir')}
-                onChange={(data) => onChange?.(data)}
-                estimatedRowHeight={estimatedRowHeight}
-                frozenData={totalData}
-                headerHeight={headerHeight}
-                pagination={
-                    {
-                        size: 'small',
-                        total: total || 0,//总共多少条数据,服务器给,设置后分页自动计算页数
-                        current: page,//当前页数,需state控制配合翻页
-                        pageSize: pageSize,
-                        defaultCurrent: 1,//默认初始的当前页数
-                        defaultPageSize: 20,//默认初始的每页条数
-                        pageSizeOptions: ['10', '20', '30', '40', '50', '60', '70', '80', '90', '100'],
-                        showTotal: (total) => <Tag color="cyan">总共{total}数据</Tag>,
-                        showSizeChanger: true, //手动开启条数筛选器,默认超过50条开启
-                        simple: ww ? true : false,//开启简单分页
-                        hideOnSinglePage: false,//只有一页数据隐藏分页
-                        showLessItems: true
-                    }
-                }
-            />
-        </div>
-    </Col >
-})
-
 export default React.memo(TableData, (prevProps, nextProps) => {
     return lodash.isEqual(nextProps, prevProps); // 假设 deepEqual 是一个深层比较函数
 })

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

@@ -41,7 +41,6 @@ const FlowingWater: React.FC = () => {
                     setQueryForm({ ...newQueryForm, ...params })
                 }}
             />}
-            isVirtually={false}
             scroll={{ x: 1000, y: 600 }}
             ajax={getGameWaterList}
             fixed={{ left: 1, right: 0 }}

+ 0 - 1
src/pages/gameDataStatistics/gameServer/serverData/index.tsx

@@ -58,7 +58,6 @@ const ServerData: React.FC = () => {
                 isActiveTypes
             />}
             isZj
-            isVirtually={false}
             totalData={totalData}
             scroll={{ x: 1000, y: 600 }}
             ajax={getGameServerList}

+ 0 - 1
src/pages/gameDataStatistics/gameServer/serverEveryData/index.tsx

@@ -54,7 +54,6 @@ const ServerEveryData: React.FC = () => {
                 isGameDimension
             />}
             isZj
-            isVirtually={false}
             totalData={totalData}
             scroll={{ x: 1000, y: 600 }}
             ajax={getGameServerEveryList}

+ 0 - 1
src/pages/gameDataStatistics/gameServer/serverGsData/index.tsx

@@ -59,7 +59,6 @@ const ServerGsData: React.FC = () => {
                 isGsId
             />}
             isZj
-            isVirtually={false}
             totalData={totalData}
             scroll={{ x: 1000, y: 600 }}
             ajax={getGameServerGsList}

+ 2 - 2
src/pages/gameDataStatistics/pitcher/everyDay/tableConfig.tsx

@@ -43,7 +43,7 @@ function columns12(): { label: string, fieldSHow?: { label: string, saveField: s
     let defaultStart = 15
     const zC = Array(90).fill('').map((_item: string, index: number) => {
         let field = `amountD${index + 1}Trend`
-        let data = {
+        let data: any = {
             title: `D${index + 1}`,
             dataIndex: `D${index + 1}`,
             label: "时间区间跨度",
@@ -90,7 +90,7 @@ function columns12(): { label: string, fieldSHow?: { label: string, saveField: s
     let mDefaultStart = 105, count = 0
     const Mc = [4, 5, 6, 7, 8, 9, 10, 11, 12].map(index => {
         let field = `amountM${index}Trend`
-        let data = {
+        let data: any = {
             title: `M${index}`,
             dataIndex: `M${index}`,
             label: "时间区间跨度",

+ 0 - 1
src/pages/gameDataStatistics/roleOperate/roleFightingRanking/index.tsx

@@ -57,7 +57,6 @@ const RoleFightingRanking: React.FC = () => {
                 isGameServerName
                 isRankingNum
             />}
-            isVirtually={false}
             scroll={{ x: 1000, y: 600 }}
             ajax={getCombatRankingList}
             fixed={{ left: 2, right: 0 }}

+ 0 - 1
src/pages/gameDataStatistics/roleOperate/roleRechargeRanking/index.tsx

@@ -180,7 +180,6 @@ const RoleRechargeRanking: React.FC = () => {
                 isRoleLevel
             />}
             scroll={{ x: 1000, y: 600 }}
-            isVirtually={false}
             ajax={getRoleRechargeRankingList}
             fixed={{ left: 2, right: 1 }}
             dataSource={getRoleRechargeRankingList?.data?.records?.map((item: any, index: number) => ({ ...item, id: Number(queryForm.pageNum.toString() + index.toString()) }))}

+ 0 - 1
src/pages/gameDataStatistics/stream/recharge/index.tsx

@@ -63,7 +63,6 @@ const Recharge: React.FC = () => {
                 isConsumeDay={{ ranges: getPresets() }}
                 isCreateDayXz={{}}
             />}
-            isVirtually={false}
             scroll={{ x: 1000, y: 700 }}
             ajax={getGameRechargeList}
             fixed={{ left: 0, right: 0 }}

+ 107 - 0
src/pages/gsData/bidREveryday/index.tsx

@@ -0,0 +1,107 @@
+import { useAjax } from "@/Hook/useAjax"
+import { getBigRApi, GetBigRProps } from "@/services/gsData/bidREveryday"
+import React, { useEffect, useState } from "react"
+import columns12 from "./tableConfig"
+import TablePro from "@/pages/gameDataStatistics/components/TablePro"
+import QueryFormGS from "@/components/QueryForm/indexGs"
+import moment from "moment"
+
+/**
+ * 大R每日充值比
+ * @returns 
+ */
+const BidREveryday: React.FC = () => {
+
+    /****************************************/
+    const [queryForm, setQueryForm] = useState<GetBigRProps>({
+        pageNum: 1, 
+        pageSize: 30,
+        sourceSystem: 'ZX_ONE',
+        roleSource: 2
+    })
+    const getBigR = useAjax((params) => getBigRApi(params))
+    /****************************************/
+
+    useEffect(() => {
+        getBigR.run(queryForm)
+    }, [queryForm])
+
+    return <div>
+        <TablePro
+            leftChild={<QueryFormGS 
+                initialValues={{ sourceSystem: 'ZX_ONE', roleSource: 2 }}
+                isSource
+                isGsId
+                rechargeDay={{ placeholder: ['充值统计开始日期', '充值统计结束日期'] }}
+                isCreateRoleDay={{}}
+                isServeDay={{}}
+                isRemoveGame
+                isRemoveGameForSystem
+                isParentId
+                isSuperParentGameId
+                isGameRoleName
+                isServerIds
+                isServeStatus
+                onChange={(data: any) => {
+                    console.log(data)
+                    const { rechargeDay, gsId, parentId, createRoleDay, serveDay, superParentGameId, serverIds, ...params } = data
+                    let newQueryForm = JSON.parse(JSON.stringify(queryForm))
+                    newQueryForm.pageNum = 1
+                    newQueryForm.gsIdList = gsId
+                    newQueryForm.parentGameId = parentId
+                    newQueryForm.superGameId = superParentGameId
+                    newQueryForm.serverIdList = serverIds
+                    if (rechargeDay && rechargeDay?.length === 2) {
+                        newQueryForm['rechargeBeginDate'] = moment(rechargeDay[0]).format('YYYY-MM-DD')
+                        newQueryForm['rechargeEndDate'] = moment(rechargeDay[0]).format('YYYY-MM-DD')
+                    } else {
+                        delete newQueryForm['rechargeBeginDate']
+                        delete newQueryForm['rechargeEndDate']
+                    }
+                    if (createRoleDay && createRoleDay?.length === 2) {
+                        newQueryForm['roleCreateDayBegin'] = moment(createRoleDay[0]).format('YYYY-MM-DD')
+                        newQueryForm['roleCreateDayEnd'] = moment(createRoleDay[0]).format('YYYY-MM-DD')
+                    } else {
+                        delete newQueryForm['roleCreateDayBegin']
+                        delete newQueryForm['roleCreateDayEnd']
+                    }
+                    if (serveDay && serveDay?.length === 2) {
+                        newQueryForm['serveDayBegin'] = moment(serveDay[0]).format('YYYY-MM-DD')
+                        newQueryForm['serveDayEnd'] = moment(serveDay[0]).format('YYYY-MM-DD')
+                    } else {
+                        delete newQueryForm['serveDayBegin']
+                        delete newQueryForm['serveDayEnd']
+                    }
+                    setQueryForm({ ...newQueryForm, ...params })
+                }}
+            />}
+            config={columns12()}
+            configName={'大R每日充值比'}
+            fixed={{ left: 4, right: 0 }}
+            scroll={{ x: 1000, y: 500 }}
+            title='GS区服数据'
+            loading={getBigR.loading}
+            ajax={getBigR}
+            page={getBigR?.data?.current || 1}
+            pageSize={getBigR?.data?.size || 20}
+            total={getBigR?.data?.total || 0}
+            dataSource={getBigR?.data?.records?.map((item: any, index: number) => ({ ...item, id: Number(queryForm.pageNum.toString() + (index + '')) }))}
+            onChange={(pagination: any, _: any, sortData: any) => {
+                let { current, pageSize } = pagination
+                let newQueryForm = JSON.parse(JSON.stringify(queryForm))
+                if (sortData && sortData?.order) {
+                    newQueryForm['sortAsc'] = sortData?.order === 'ascend' ? true : false
+                    newQueryForm['sortFiled'] = sortData?.field
+                } else {
+                    delete newQueryForm['sortAsc']
+                    delete newQueryForm['sortFiled']
+                }
+                newQueryForm.pageNum = current || newQueryForm.pageNum
+                newQueryForm.pageSize = pageSize || newQueryForm.pageSize 
+                setQueryForm({ ...newQueryForm })
+            }}
+        />
+    </div>
+}
+
+export default React.memo(BidREveryday)

+ 169 - 0
src/pages/gsData/bidREveryday/tableConfig.tsx

@@ -0,0 +1,169 @@
+import WidthEllipsis from "@/components/widthEllipsis"
+import { Badge, Statistic, Tag } from "antd"
+import React from "react"
+
+function columns12(): { label: string, fieldSHow?: { label: string, saveField: string, defaultValue: any[], data: any[] }, data: any[] }[] {
+
+
+    return [
+        {
+            label: '基本信息',
+            data: [
+                {
+                    title: 'GS名称', dataIndex: 'gsName', label: '基本信息', align: 'center', width: 75, default: 1,
+                    render: (a: string) => (<WidthEllipsis value={a} />)
+                },
+                {
+                    title: '父游戏名称', dataIndex: 'parentGameName', label: '基本信息', align: 'center', width: 85, default: 2,
+                    render: (a: string) => (<WidthEllipsis value={a} />)
+                },
+                {
+                    title: '角色名称', dataIndex: 'roleName', label: '基本信息', align: 'center', width: 85, default: 3,
+                    render: (a: string) => (<WidthEllipsis value={a} />)
+                },
+                {
+                    title: '角色创建时间', dataIndex: 'roleTime', label: '基本信息', align: 'center', width: 125, default: 4,
+                    render: (a: string, b: any) => (<WidthEllipsis value={a} />)
+                },
+                {
+                    title: '角色创角天数', dataIndex: 'roleCreateDayDiff', label: '基本信息', align: 'center', width: 60, default: 5,
+                    render: (a: string) => (<WidthEllipsis value={a} />)
+                },
+                {
+                    title: '角色来源', dataIndex: 'roleSource', label: '基本信息', align: 'center', width: 75, default: 6,
+                    render: (a: string) => (<WidthEllipsis value={{ '1': '区服指派', '2': '角色指派' }[a]} />)
+                },
+                {
+                    title: '角色所在区服名称', dataIndex: 'endServerName', label: '基本信息', align: 'center', width: 80, default: 7,
+                    render: (a: string) => (<WidthEllipsis value={a} />)
+                },
+                {
+                    title: '服务时间', dataIndex: 'gsStartTime', label: '基本信息', align: 'center', width: 160, default: 8,
+                    render: (a: string, b: any) => (<WidthEllipsis value={`${a}-${b?.gsEndTime}`} />)
+                },
+                {
+                    title: '服务天数', dataIndex: 'gsServeDays', label: '基本信息', align: 'center', width: 45, default: 9,
+                    render: (a: string) => (<WidthEllipsis value={a} />)
+                },
+                {
+                    title: '服务状态', dataIndex: 'serveStatus', label: '基本信息', align: 'center', width: 75, default: 10,
+                    render: (a: boolean) => {
+                        return a ? <Tag color="success" style={{ marginRight: 0 }}>服务完成</Tag> : <Tag color="processing" style={{ marginRight: 0 }}>服务中</Tag>
+                    }
+                },
+                {
+                    title: '角色当前状态(系统)', dataIndex: 'systemRemoveGameStatus', label: '基本信息', align: 'center', width: 75, default: 11,
+                    render: (a: number) => {
+                        return a === 0 ? <Badge status="success" text={<span style={{ fontSize: 12 }}>正常</span>} /> : a === 1 ? <Badge status="error" text={<span style={{ fontSize: 12 }}>退游</span>} /> : '--'
+                    }
+                },
+                {
+                    title: '角色当前状态(人工)', dataIndex: 'humanRemoveGameStatus', label: '基本信息', align: 'center', width: 75, default: 12,
+                    render: (a: number) => {
+                        return a === 0 ? <Badge status="success" text={<span style={{ fontSize: 12 }}>正常</span>} /> : a === 1 ? <Badge status="error" text={<span style={{ fontSize: 12 }}>退游</span>} /> : '--'
+                    }
+                },
+            ]
+        },
+        {
+            label: '角色游戏数据',
+            data: [
+                {
+                    title: '角色VIP等级', dataIndex: 'roleVip', label: '角色游戏数据', align: 'center', width: 55, sorter: true, default: 13,
+                    render: (a: string) => <Statistic value={a || 0} />
+                },
+                {
+                    title: '角色攻击力', dataIndex: 'combatNum', label: '角色游戏数据', align: 'right', width: 80, sorter: true, default: 14,
+                    render: (a: string) => <Statistic value={a || 0} />
+                },
+                {
+                    title: '角色游戏等级', dataIndex: 'roleLevel', label: '角色游戏数据', align: 'center', width: 60, sorter: true, default: 15,
+                    render: (a: string) => <Statistic value={a || 0} />
+                },
+                {
+                    title: '角色首充金额', dataIndex: 'firstAmount', label: '角色游戏数据', align: 'right', width: 55, sorter: true, default: 16,
+                    render: (a: string) => <Statistic value={a || 0} />
+                },
+                {
+                    title: '创角24小时付费金额', dataIndex: 'roleHourAmount', label: '角色游戏数据', align: 'right', width: 70, sorter: true, default: 17,
+                    render: (a: string) => <Statistic value={a || 0} />
+                },
+                {
+                    title: '角色当天付费金额', dataIndex: 'todayAmount', label: '角色游戏数据', align: 'right', width: 70, sorter: true, default: 18,
+                    render: (a: string) => <Statistic value={a || 0} />
+                },
+                {
+                    title: '角色当天付费次数', dataIndex: 'todayCount', label: '角色游戏数据', align: 'center', width: 70, sorter: true, default: 19,
+                    render: (a: string) => <Statistic value={a || 0} />
+                },
+                {
+                    title: '角色当天区服充值比', dataIndex: 'serverProportion', label: '角色游戏数据', align: 'center', width: 80, sorter: true, default: 20,
+                    render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 50 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
+                },
+                {
+                    title: '角色当天游戏充值比', dataIndex: 'gameProportion', label: '角色游戏数据', align: 'center', width: 80, sorter: true, default: 21,
+                    render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 50 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
+                },
+                {
+                    title: '角色累计充值次数', dataIndex: 'totalCnt', label: '角色游戏数据', align: 'center', width: 70, sorter: true, default: 22,
+                    render: (a: string) => <Statistic value={a || 0} />
+                },
+                {
+                    title: '角色累计充值金额', dataIndex: 'totalAmount', label: '角色游戏数据', align: 'right', width: 70, sorter: true, default: 23,
+                    render: (a: string) => <Statistic value={a || 0} />
+                },
+                {
+                    title: '角色最近充值金额', dataIndex: 'lastAmount', label: '角色游戏数据', align: 'right', width: 70, sorter: true, default: 24,
+                    render: (a: string) => <Statistic value={a || 0} />
+                },
+                {
+                    title: '角色最近充值产品', dataIndex: 'productName', label: '角色游戏数据', align: 'center', width: 85, default: 25,
+                    render: (a: string) => (<WidthEllipsis value={a} />)
+                },
+                {
+                    title: '角色最近充值时间', dataIndex: 'lastOrderTime', label: '角色游戏数据', align: 'center', width: 120, default: 26,
+                    render: (a: string) => (<WidthEllipsis value={a} />)
+                },
+                {
+                    title: '角色最近活跃时间', dataIndex: 'activeTime', label: '角色游戏数据', align: 'center', width: 120, default: 27,
+                    render: (a: string) => (<WidthEllipsis value={a} />)
+                },
+                {
+                    title: '角色最近充值时间距今', dataIndex: 'lastOrderDayDiff', label: '角色游戏数据', align: 'center', width: 65, default: 28,
+                    render: (a: number) => (<span style={{ fontSize: 12, color: a > 5 ? 'red' : '#000' }}>{a}</span>)
+                },
+                {
+                    title: '角色最近活跃时间距今', dataIndex: 'roleActiveDayDiff', label: '角色游戏数据', align: 'center', width: 65, default: 29,
+                    render: (a: number) => (<span style={{ fontSize: 12, color: a > 5 ? 'red' : '#000' }}>{a}</span>)
+                },
+                {
+                    title: '角色转端充值比', dataIndex: 'proportion', label: '角色游戏数据', align: 'center', width: 70, sorter: true, default: 30,
+                    render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 50 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
+                },
+            ]
+        },
+        {
+            label: '补充数据',
+            data: [
+                {
+                    title: 'GS服务中的付费金额', dataIndex: 'gsAmount', label: '补充数据', align: 'right', width: 70, sorter: true, default: 31,
+                    render: (a: string) => <Statistic value={a || 0} />
+                },
+                {
+                    title: 'GS服务中的付费次数', dataIndex: 'gsCount', label: '补充数据', align: 'right', width: 70, sorter: true, default: 32,
+                    render: (a: string) => <Statistic value={a || 0} />
+                },
+                {
+                    title: '区服指派GS充值金额', dataIndex: 'serverAmount', label: '补充数据', align: 'right', width: 70, sorter: true, default: 33,
+                    render: (a: string) => <Statistic value={a || 0} />
+                },
+                {
+                    title: '区服指派GS充值次数', dataIndex: 'serverCount', label: '补充数据', align: 'right', width: 70, sorter: true, default: 34,
+                    render: (a: string) => <Statistic value={a || 0} />
+                },
+            ]
+        }
+    ]
+}
+
+export default columns12

+ 1 - 0
src/services/gameData/rankingList.ts

@@ -17,6 +17,7 @@ export interface Paging {
 export interface SortProps {
     sortFiled?: string, // 排序字段
     sortType?: string,  // 排序方式:升序asc;降序desc
+    sortAsc?: boolean   // 排序类型:升序 true;降序 false
 }
 
 /**

+ 34 - 0
src/services/gsData/bidREveryday.ts

@@ -0,0 +1,34 @@
+import { request } from 'umi';
+import { api } from '../api';
+import { Paging, SortProps } from '../gameData/rankingList';
+let wapi = api + '/gameGsData'
+
+export interface GetBigRProps extends Paging, SortProps {
+    roleSource: 1 | 2, // 必填:角色来源:1:区服指派;2:角色指派
+    sourceSystem: string, // 必填:SDK来源;默认ZX_ONE
+    dtBegin?: string, // 充值统计日期开始
+    dtEnd?: string,
+    gsIdList?: number[],    // 消耗开始时间
+    humanRemoveGameStatus?: 0 | 1, // 人工判断角色退游状态:0:未退游;1:退游
+    parentGameId?: number,   // 父游戏id
+    roleCreateDayBegin?: string  // 角色创建日期开始
+    roleCreateDayEnd?: string
+    roleName?: string   // 角色名称
+    serveDayBegin?: string, // 服务日期开始
+    serveDayEnd?: string,
+    serveStatus?: 1 | 2, // 服务状态:1:服务中;2:服务完成
+    serverIdList?: string[], // 角色当前所在区服id列表
+    superGameId?: number,  //超父游戏id 
+    systemRemoveGameStatus?: 0 | 1 // 系统判断角色退游状态:0:未退游;1:退游
+}
+/**
+ * 投手总数居
+ * @param data 
+ * @returns 
+ */
+export async function getBigRApi(data: GetBigRProps) {
+    return request(wapi + `/game/parent/bigR/listOfPage`, {
+        method: 'POST',
+        data
+    });
+}

+ 1 - 1
src/services/user.ts

@@ -16,7 +16,7 @@ export async function queryCurrent() {
 export async function getMenu(): Promise<any> {
   return request(erpApi + '/erp/menu/getRouters', {
     method: 'PUT',
-    data: ["game-data"]
+    data: ["game-data", 'gs_data']
   })
 }