wjx 6 months ago
parent
commit
64bd529d78

+ 10 - 0
config/routerConfig.ts

@@ -211,6 +211,16 @@ const iaaNovelData = [
                 path: '/iaaData/novel/tencent/dynamic',
                 name: '创意列表',
                 component: './iaaData/novel/tencent/dynamic',
+            },
+            {
+                path: '/iaaData/novel/tencent/pitcherEveryDay',
+                name: '投手每日数据',
+                component: './iaaData/novel/tencent/pitcherEveryDay',
+            },
+            {
+                path: '/iaaData/novel/tencent/appEveryDayData',
+                name: '应用每日数据',
+                component: './iaaData/novel/tencent/appEveryDayData',
             }
         ]
     }

+ 22 - 3
src/components/QueryForm/queryFormNovel.tsx

@@ -31,6 +31,8 @@ interface Props {
 
     /** 是否开启 投手 搜索 */
     isPutUserId?: boolean
+    /** 是否开启 投手 搜索 */
+    isPutUserIdList?: boolean
     /** 是否开启 出价方式 搜索 */
     isPricing?: boolean,
     /** 是否开启 广告状态 搜索 */
@@ -87,7 +89,7 @@ const QueryFormNovel: React.FC<Props> = (props) => {
     /**************************/
     const { initialState } = useModel('@@initialState');
     const {
-        onChange, initialValues, isAccountId, isAdgroupName, isAdgroupId, isDynamicCreativeName, isDynamicCreativeId, isMemo, isRemark, isCpaBid, isPutUserId, isPricing, isStatus, isMarketingGoal, isMarketingTargetType, isPromotedObjectType, isPromotedObjectName, isOptimizationGoal, isDeliveryMode, isDeleted, isDeepConversionSpec, isConfiguredStatus, day1, day2, day3,
+        onChange, initialValues, isAccountId, isAdgroupName, isAdgroupId, isDynamicCreativeName, isDynamicCreativeId, isMemo, isRemark, isCpaBid, isPutUserId, isPutUserIdList, isPricing, isStatus, isMarketingGoal, isMarketingTargetType, isPromotedObjectType, isPromotedObjectName, isOptimizationGoal, isDeliveryMode, isDeleted, isDeepConversionSpec, isConfiguredStatus, day1, day2, day3,
         isCostTotalMin, isThousandDisplayPriceTotalMin, isConversionsCountTotalMin, isIncomeRoi1, isRegCost, isRegCostPla, isCpc
     } = props
     const [form] = Form.useForm()
@@ -97,7 +99,7 @@ const QueryFormNovel: React.FC<Props> = (props) => {
     /**************************/
 
     useEffect(() => {
-        if (isPutUserId && initialState?.iaaApp) {
+        if ((isPutUserId || isPutUserIdList) && initialState?.iaaApp) {
             const [_, productType] = initialState.iaaApp.split('||')
             getPutUserList.run({ productType }).then(res => {
                 if (res?.data) {
@@ -108,7 +110,7 @@ const QueryFormNovel: React.FC<Props> = (props) => {
         () => {
 
         }
-    }, [isPutUserId, initialState?.iaaApp])
+    }, [isPutUserId, isPutUserIdList, initialState?.iaaApp])
 
     const onFinish = (data: any) => {
         console.log('更新了字段---->', data);
@@ -174,6 +176,23 @@ const QueryFormNovel: React.FC<Props> = (props) => {
                 />
             </Form.Item></Col>}
 
+            {/* 投手多选 */}
+            {isPutUserIdList && <Col><Form.Item name='putUserIdList'>
+                <Select
+                    showSearch
+                    allowClear
+                    mode="multiple"
+                    style={{ minWidth: 120 }}
+                    placeholder={'投手'}
+                    filterOption={(input, option) =>
+                        (option?.label as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0
+                    }
+                    maxTagCount={1}
+                    loading={getPutUserList.loading}
+                    options={putUserList}
+                />
+            </Form.Item></Col>}
+
             {/* 出价方式 */}
             {isPricing && <Col><Form.Item name='pricing'>
                 <Select

+ 98 - 0
src/pages/iaaData/novel/tencent/appEveryDayData/index.tsx

@@ -0,0 +1,98 @@
+import { getNovelAppListApi, getNovelAppTotalApi, getNovelPutUserListApi, GetNovelPutUserListProps, getNovelPutUserTotalApi } from "@/services/iaaData";
+import React, { useEffect, useState } from "react"
+import { useModel } from "umi";
+import moment from "moment";
+import { useAjax } from "@/Hook/useAjax";
+import TablePro from "@/components/TablePro";
+import columns12 from "./tableConfig";
+import QueryFormNovel from "@/components/QueryForm/queryFormNovel";
+
+/**
+ * 应用每日数据
+ * @returns 
+ */
+const AppEveryDayData: React.FC = () => {
+
+    /****************************************/
+    const { initialState } = useModel('@@initialState');
+    const [queryForm, setQueryForm] = useState<GetNovelPutUserListProps>({
+        pageNum: 1,
+        pageSize: 30,
+        costDayBegin: moment().format('YYYY-MM-DD'),
+        costDayEnd: moment().format('YYYY-MM-DD'),
+    })
+    const [totalData, setTotalData] = useState<any[]>([])
+
+    const getNovelAppList = useAjax((params) => getNovelAppListApi(params))
+    const getNovelAppTotal = useAjax((params) => getNovelAppTotalApi(params))
+    /****************************************/
+
+    useEffect(() => {
+        if (initialState?.iaaApp) {
+            const [appId, productType] = initialState.iaaApp.split('||')
+            getNovelAppList.run({ ...queryForm, appId, productType })
+            getNovelAppTotal.run({ ...queryForm, appId, productType }).then((res: { data: { id: number; day: string } }) => {
+                if (res?.data) {
+                    let data = res?.data
+                    data.id = 1
+                    data.day = '总计'
+                    setTotalData([data])
+                } else {
+                    setTotalData([{ id: 1, day: '总计' }])
+                }
+            })
+        }
+
+    }, [queryForm, initialState?.iaaApp])
+
+    return <div>
+        <TablePro
+            leftChild={<QueryFormNovel
+                initialValues={{ day1: [moment(), moment()] }}
+                day1={{ placeholder: ['消耗日期开始', '消耗日期结束'] }}
+                onChange={(data: any) => {
+                    console.log(data)
+                    const { day1, ...params } = data
+                    let newQueryForm = JSON.parse(JSON.stringify(queryForm))
+                    if (day1 && day1?.length === 2) {
+                        newQueryForm['costDayBegin'] = moment(day1[0]).format('YYYY-MM-DD')
+                        newQueryForm['costDayEnd'] = moment(day1[1]).format('YYYY-MM-DD')
+                    } else {
+                        delete newQueryForm['costDayBegin']
+                        delete newQueryForm['costDayEnd']
+                    }
+                    setQueryForm({ ...newQueryForm, ...params })
+                }}
+            />}
+            isZj
+            totalData={totalData}
+            config={columns12()}
+            configName={'小说腾讯应用每日数据'}
+            fixed={{ left: 4, right: 0 }}
+            scroll={{ x: 1000, y: 620 }}
+            title='应用每日数据'
+            loading={getNovelAppList.loading}
+            ajax={getNovelAppList}
+            page={getNovelAppList?.data?.data?.current || 1}
+            pageSize={getNovelAppList?.data?.data?.size || 20}
+            total={getNovelAppList?.data?.data?.total || 0}
+            dataSource={getNovelAppList?.data?.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 AppEveryDayData

+ 293 - 0
src/pages/iaaData/novel/tencent/appEveryDayData/tableConfig.tsx

@@ -0,0 +1,293 @@
+import WidthEllipsis from "@/components/widthEllipsis"
+import { Progress, Statistic } from "antd"
+import React from "react"
+import { PRODUCT_TYPE_ENUM } from "../../../const"
+import { APPTYPE } from "@/pages/iaaSystem/manage/const"
+
+function columns12(): { label: string, fieldSHow?: { label: string, saveField: string, defaultValue: any[], data: any[] }, data: any[] }[] {
+
+    return [
+        {
+            label: '基础信息',
+            data: [
+                {
+                    title: '统计日', dataIndex: 'day', label: '基础信息', align: 'center', width: 80, default: 1,
+                    render: (a: string) => (<WidthEllipsis value={a} />)
+                },
+                {
+                    title: '应用', dataIndex: 'appName', label: '基础信息', align: 'center', width: 120, default: 2,
+                    render: (a: string) => (<WidthEllipsis value={a} />)
+                },
+                {
+                    title: '应用ID', dataIndex: 'appId', label: '基础信息', align: 'center', width: 80,
+                    render: (a: string) => (<WidthEllipsis value={a} />)
+                },
+                {
+                    title: '小程序名称', dataIndex: 'mpName', label: '基础信息', align: 'center', width: 85, default: 3,
+                    render: (a: string) => (<WidthEllipsis value={a} />)
+                },
+                {
+                    title: '小程序ID', dataIndex: 'mpId', label: '基础信息', align: 'center', width: 80,
+                    render: (a: string) => (<WidthEllipsis value={a} />)
+                },
+                {
+                    title: '业务类型', dataIndex: 'productType', label: '基础信息', align: 'center', width: 80, default: 4,
+                    render: (a: string) => (<WidthEllipsis value={PRODUCT_TYPE_ENUM[a as keyof typeof PRODUCT_TYPE_ENUM]} />)
+                },
+                {
+                    title: '应用类型', dataIndex: 'appType', label: '基础信息', align: 'center', width: 80, default: 5,
+                    render: (a: string) => (<WidthEllipsis value={APPTYPE[a as keyof typeof APPTYPE]?.text} />)
+                },
+                {
+                    title: '每日真实消耗', dataIndex: 'cost', label: '基础信息', align: 'right', width: 95, default: 6, sorter: true,
+                    className: 'padding_0',
+                    render: (a: number) => <div style={{ height: 25.5, position: 'relative' }}>
+                        <Progress
+                            strokeColor={{
+                                from: '#10c1e9',
+                                to: '#6892d0',
+                            }}
+                            status="active"
+                            showInfo={false}
+                            percent={a ? a / 20000 * 100 : 0}
+                        />
+                        <span style={{ position: 'absolute', left: '50%', top: '50%', width: '100%', padding: '0 5px', transform: 'translate(-50%, -50%)' }}><Statistic style={{ fontWeight: 'bold' }} value={a || 0} precision={2} valueStyle={a >= 20000 ? { color: '#000', fontWeight: 'bold' } : { fontWeight: 'bold' }} /></span>
+                    </div>
+                },
+                {
+                    title: '每日消耗', dataIndex: 'todayCost', label: '基础信息', align: 'right', width: 85, default: 7, sorter: true,
+                    className: 'padding_0',
+                    render: (a: number) => <div style={{ height: 25.5, position: 'relative' }}>
+                        <Progress
+                            strokeColor={{
+                                from: '#ff5900',
+                                to: '#ffd380',
+                            }}
+                            status="active"
+                            showInfo={false}
+                            percent={a ? a / 20000 * 100 : 0}
+                        />
+                        <span style={{ position: 'absolute', left: '50%', top: '50%', width: '100%', padding: '0 5px', transform: 'translate(-50%, -50%)' }}><Statistic value={a || 0} precision={2} valueStyle={a >= 20000 ? { color: '#000', fontWeight: 'bold' } : { fontWeight: 'bold' }} /></span>
+                    </div>
+                },
+                {
+                    title: '赔付金', dataIndex: 'payout', label: '基础信息', align: 'right', width: 80, default: 8, sorter: true,
+                    render: (a: number) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '推广广告账号数量', dataIndex: 'acountCount', label: '基础信息', align: 'center', width: 80, default: 9, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} />
+                },
+                {
+                    title: '推广广告数量', dataIndex: 'adgroupCount', label: '基础信息', align: 'center', width: 80, default: 10, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} />
+                }
+            ]
+        },
+        {
+            label: '广告曝光指标(媒体)',
+            data: [
+                {
+                    title: '点击量', dataIndex: 'clickCount', label: '广告曝光指标(媒体)', align: 'center', width: 65, default: 11, sorter: true,
+                    render: (a: number) => <Statistic value={a || 0} />
+                },
+                {
+                    title: '曝光量', dataIndex: 'viewCount', label: '广告曝光指标(媒体)', align: 'center', width: 65, default: 12, sorter: true,
+                    render: (a: number) => <Statistic value={a || 0} />
+                },
+                {
+                    title: '千次曝光成本', dataIndex: 'thousandDisplayPrice', label: '广告曝光指标(媒体)', align: 'right', width: 65, default: 13, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '点击率', dataIndex: 'ctr', label: '广告曝光指标(媒体)', align: 'center', width: 70, default: 14, sorter: true,
+                    render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 50 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
+                },
+                {
+                    title: '点击均价', dataIndex: 'cpc', label: '广告曝光指标(媒体)', align: 'center', width: 65, default: 15, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '不感兴趣点击次数', dataIndex: 'noInterestCount', label: '广告曝光指标(媒体)', align: 'center', width: 65, default: 16, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} />
+                },
+                {
+                    title: '转化量', dataIndex: 'conversionsCount', label: '广告曝光指标(媒体)', align: 'center', width: 65, sorter: true, default: 17,
+                    render: (a: string) => <Statistic value={a || 0} />
+                },
+                {
+                    title: '转化成本', dataIndex: 'conversionsCost', label: '广告曝光指标(媒体)', align: 'right', width: 65, sorter: true, default: 18,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+            ]
+        },
+        {
+            label: '广告转化指标(媒体)',
+            data: [
+                {
+                    title: '注册人数', dataIndex: 'regDedupPv', label: '广告转化指标(媒体)', width: 65, align: 'center', sorter: true, default: 19,
+                    render: (a: string) => <Statistic value={a || 0} />
+                },
+                {
+                    title: '注册次数', dataIndex: 'regPv', label: '广告转化指标(媒体)', align: 'center', width: 65, sorter: true, default: 20,
+                    render: (a: string) => <Statistic value={a || 0} />
+                },
+                {
+                    title: '注册成本(人数)', dataIndex: 'regDedupCost', label: '广告转化指标(媒体)', align: 'right', width: 70, sorter: true, default: 21,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '注册成本(次数)', dataIndex: 'regCost', label: '广告转化指标(媒体)', align: 'right', width: 70, sorter: true, default: 22,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '注册率', dataIndex: 'regRate', label: '广告转化指标(媒体)', align: 'center', width: 70, default: 23, sorter: true,
+                    render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 50 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
+                },
+                {
+                    title: '注册人数(平台上报+广告主上报)', dataIndex: 'regAllDedupPv', label: '广告转化指标(媒体)', align: 'center', width: 110, sorter: true, default: 24,
+                    render: (a: string) => <Statistic value={a || 0} />
+                },
+                {
+                    title: '注册成本(平台上报+广告主上报)', dataIndex: 'regCostPla', label: '广告转化指标(媒体)', align: 'right', width: 110, sorter: true, default: 25,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '注册率(平台上报+广告主上报)', dataIndex: 'regClickRatePla', label: '广告转化指标(媒体)', align: 'center', width: 110, default: 26, sorter: true,
+                    render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 50 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
+                },
+            ]
+        },
+        {
+            label: '广告变现指标(媒体)',
+            data: [
+                {
+                    title: '激活首日广告变现人数', dataIndex: 'adPayingUsersD1', label: '广告变现指标(媒体)', align: 'center', width: 85, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} />
+                },
+                {
+                    title: '激活首日广告变现成本(人数)', dataIndex: 'adPayingCostD1', label: '广告变现指标(媒体)', align: 'right', width: 100, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '激活首日广告变现金额', dataIndex: 'incomeVal1', label: '广告变现指标(媒体)', align: 'right', width: 85, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '激活首日广告变现ARPPU', dataIndex: 'incomeArppu1', label: '广告变现指标(媒体)', width: 90, align: 'center', sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '激活首日广告变现ROI', dataIndex: 'incomeRoi1', label: '广告变现指标(媒体)', align: 'center', width: 85, sorter: true,
+                    render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 50 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
+                },
+                {
+                    title: '激活首24小时广告变现人数', dataIndex: 'adPayingUsers24h', label: '广告变现指标(媒体)', align: 'center', width: 85, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} />
+                },
+                {
+                    title: '激活首24小时广告变现成本(人数)', dataIndex: 'adPayingCost24h', label: '广告变现指标(媒体)', align: 'right', width: 100, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '激活首24小时广告变现金额', dataIndex: 'incomeVal24h', label: '广告变现指标(媒体)', align: 'right', width: 85, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '激活首24小时广告变现ARPPU', dataIndex: 'incomeArppu24h', label: '广告变现指标(媒体)', width: 98, align: 'center', sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '激活首24小时广告变现ROI', dataIndex: 'incomeRoi24h', label: '广告变现指标(媒体)', align: 'center', width: 90, sorter: true,
+                    render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 50 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
+                },
+                {
+                    title: '激活3日广告变现次数', dataIndex: 'adMonetizationActive3dPv', label: '广告变现指标(媒体)', align: 'center', width: 75, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} />
+                },
+                {
+                    title: '激活3日广告变现人数', dataIndex: 'adMonetizationDedupActive3dPv', label: '广告变现指标(媒体)', align: 'center', width: 75, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} />
+                },
+                {
+                    title: '激活3日广告变现成本(人数)', dataIndex: 'adMonetizationDedupCost3', label: '广告变现指标(媒体)', align: 'right', width: 90, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '激活3日广告变现成本(次数)', dataIndex: 'adMonetizationActiveCost3', label: '广告变现指标(媒体)', align: 'right', width: 90, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '激活3日广告变现金额', dataIndex: 'incomeVal3', label: '广告变现指标(媒体)', align: 'right', width: 75, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '激活3日广告变现ARPPU', dataIndex: 'incomeArppu3', label: '广告变现指标(媒体)', width: 80, align: 'center', sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '激活3日广告变现ROI', dataIndex: 'incomeRoi3', label: '广告变现指标(媒体)', align: 'center', width: 75, sorter: true,
+                    render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 50 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
+                },
+                {
+                    title: '激活7日广告变现次数', dataIndex: 'adMonetizationActive7dPv', label: '广告变现指标(媒体)', align: 'center', width: 75, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} />
+                },
+                {
+                    title: '激活7日广告变现人数', dataIndex: 'adMonetizationDedupActive7dPv', label: '广告变现指标(媒体)', align: 'center', width: 75, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} />
+                },
+                {
+                    title: '激活7日广告变现成本(人数)', dataIndex: 'adMonetizationDedupCost7', label: '广告变现指标(媒体)', align: 'right', width: 85, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '激活7日广告变现成本(次数)', dataIndex: 'adMonetizationActiveCost7', label: '广告变现指标(媒体)', align: 'right', width: 85, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '激活7日广告变现金额', dataIndex: 'incomeVal7', label: '广告变现指标(媒体)', align: 'right', width: 75, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '激活7日广告变现ARPPU', dataIndex: 'incomeArppu7', label: '广告变现指标(媒体)', width: 80, align: 'center', sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '激活7日广告变现ROI', dataIndex: 'incomeRoi7', label: '广告变现指标(媒体)', align: 'center', width: 80, sorter: true,
+                    render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 50 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
+                },
+                {
+                    title: '激活14日广告变现金额', dataIndex: 'incomeVal14', label: '广告变现指标(媒体)', align: 'right', width: 80, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '激活14日广告变现ROI', dataIndex: 'incomeRoi14', label: '广告变现指标(媒体)', align: 'center', width: 75, sorter: true,
+                    render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 50 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
+                },
+                {
+                    title: '广告变现人数', dataIndex: 'appAdPayingUsers', label: '广告变现指标(媒体)', align: 'right', width: 70, sorter: true, default: 27,
+                    render: (a: string) => <Statistic value={a || 0} />
+                },
+                {
+                    title: '广告变现成本', dataIndex: 'appAdPayingCost', label: '广告变现指标(媒体)', align: 'right', width: 70, sorter: true, default: 28,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '广告变现金额', dataIndex: 'adMonetizationAmount', label: '广告变现指标(媒体)', align: 'right', width: 70, sorter: true, default: 29,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '广告变现ARPPU', dataIndex: 'adMonetizationArppu', label: '广告变现指标(媒体)', width: 70, align: 'center', sorter: true, default: 30,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '广告变现ROI', dataIndex: 'adMonetizationRoi', label: '广告变现指标(媒体)', align: 'center', width: 70, sorter: true, default: 31,
+                    render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 50 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
+                }
+            ]
+        }
+    ]
+}
+
+export default columns12

+ 99 - 0
src/pages/iaaData/novel/tencent/pitcherEveryDay/index.tsx

@@ -0,0 +1,99 @@
+import { getNovelPutUserListApi, GetNovelPutUserListProps, getNovelPutUserTotalApi } from "@/services/iaaData";
+import React, { useEffect, useState } from "react"
+import { useModel } from "umi";
+import moment from "moment";
+import { useAjax } from "@/Hook/useAjax";
+import TablePro from "@/components/TablePro";
+import columns12 from "./tableConfig";
+import QueryFormNovel from "@/components/QueryForm/queryFormNovel";
+
+/**
+ * 投手每日数据
+ * @returns 
+ */
+const PitcherEveryDay: React.FC = () => {
+
+    /****************************************/
+    const { initialState } = useModel('@@initialState');
+    const [queryForm, setQueryForm] = useState<GetNovelPutUserListProps>({
+        pageNum: 1,
+        pageSize: 30,
+        costDayBegin: moment().format('YYYY-MM-DD'),
+        costDayEnd: moment().format('YYYY-MM-DD'),
+    })
+    const [totalData, setTotalData] = useState<any[]>([])
+
+    const getNovelPutUserList = useAjax((params) => getNovelPutUserListApi(params))
+    const getNovelPutUserTotal = useAjax((params) => getNovelPutUserTotalApi(params))
+    /****************************************/
+
+    useEffect(() => {
+        if (initialState?.iaaApp) {
+            const [appId, productType] = initialState.iaaApp.split('||')
+            getNovelPutUserList.run({ ...queryForm, appId, productType })
+            getNovelPutUserTotal.run({ ...queryForm, appId, productType }).then((res: { data: { id: number; day: string } }) => {
+                if (res?.data) {
+                    let data = res?.data
+                    data.id = 1
+                    data.day = '总计'
+                    setTotalData([data])
+                } else {
+                    setTotalData([{ id: 1, day: '总计' }])
+                }
+            })
+        }
+
+    }, [queryForm, initialState?.iaaApp])
+
+    return <div>
+        <TablePro
+            leftChild={<QueryFormNovel
+                initialValues={{ day1: [moment(), moment()] }}
+                day1={{ placeholder: ['消耗日期开始', '消耗日期结束'] }}
+                isPutUserIdList
+                onChange={(data: any) => {
+                    console.log(data)
+                    const { day1, ...params } = data
+                    let newQueryForm = JSON.parse(JSON.stringify(queryForm))
+                    if (day1 && day1?.length === 2) {
+                        newQueryForm['costDayBegin'] = moment(day1[0]).format('YYYY-MM-DD')
+                        newQueryForm['costDayEnd'] = moment(day1[1]).format('YYYY-MM-DD')
+                    } else {
+                        delete newQueryForm['costDayBegin']
+                        delete newQueryForm['costDayEnd']
+                    }
+                    setQueryForm({ ...newQueryForm, ...params })
+                }}
+            />}
+            isZj
+            totalData={totalData}
+            config={columns12()}
+            configName={'小说腾讯投手每日数据'}
+            fixed={{ left: 4, right: 0 }}
+            scroll={{ x: 1000, y: 620 }}
+            title='投手每日数据'
+            loading={getNovelPutUserList.loading}
+            ajax={getNovelPutUserList}
+            page={getNovelPutUserList?.data?.data?.current || 1}
+            pageSize={getNovelPutUserList?.data?.data?.size || 20}
+            total={getNovelPutUserList?.data?.data?.total || 0}
+            dataSource={getNovelPutUserList?.data?.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 PitcherEveryDay

+ 297 - 0
src/pages/iaaData/novel/tencent/pitcherEveryDay/tableConfig.tsx

@@ -0,0 +1,297 @@
+import WidthEllipsis from "@/components/widthEllipsis"
+import { Progress, Statistic } from "antd"
+import React from "react"
+import { PRODUCT_TYPE_ENUM } from "../../../const"
+import { APPTYPE } from "@/pages/iaaSystem/manage/const"
+
+function columns12(): { label: string, fieldSHow?: { label: string, saveField: string, defaultValue: any[], data: any[] }, data: any[] }[] {
+
+    return [
+        {
+            label: '基础信息',
+            data: [
+                {
+                    title: '统计日', dataIndex: 'day', label: '基础信息', align: 'center', width: 80, default: 1,
+                    render: (a: string) => (<WidthEllipsis value={a} />)
+                },
+                {
+                    title: '应用', dataIndex: 'appName', label: '基础信息', align: 'center', width: 120, default: 2,
+                    render: (a: string) => (<WidthEllipsis value={a} />)
+                },
+                {
+                    title: '应用ID', dataIndex: 'appId', label: '基础信息', align: 'center', width: 80,
+                    render: (a: string) => (<WidthEllipsis value={a} />)
+                },
+                {
+                    title: '小程序名称', dataIndex: 'mpName', label: '基础信息', align: 'center', width: 85, default: 3,
+                    render: (a: string) => (<WidthEllipsis value={a} />)
+                },
+                {
+                    title: '小程序ID', dataIndex: 'mpId', label: '基础信息', align: 'center', width: 80,
+                    render: (a: string) => (<WidthEllipsis value={a} />)
+                },
+                {
+                    title: '业务类型', dataIndex: 'productType', label: '基础信息', align: 'center', width: 80, default: 4,
+                    render: (a: string) => (<WidthEllipsis value={PRODUCT_TYPE_ENUM[a as keyof typeof PRODUCT_TYPE_ENUM]} />)
+                },
+                {
+                    title: '应用类型', dataIndex: 'appType', label: '基础信息', align: 'center', width: 80, default: 5,
+                    render: (a: string) => (<WidthEllipsis value={APPTYPE[a as keyof typeof APPTYPE]?.text} />)
+                },
+                {
+                    title: '投手名称', dataIndex: 'pitcherName', label: '基础信息', align: 'center', width: 80, default: 6,
+                    render: (a: string) => (<WidthEllipsis value={a} />)
+                },
+                {
+                    title: '每日真实消耗', dataIndex: 'cost', label: '基础信息', align: 'right', width: 95, default: 7, sorter: true,
+                    className: 'padding_0',
+                    render: (a: number) => <div style={{ height: 25.5, position: 'relative' }}>
+                        <Progress
+                            strokeColor={{
+                                from: '#10c1e9',
+                                to: '#6892d0',
+                            }}
+                            status="active"
+                            showInfo={false}
+                            percent={a ? a / 20000 * 100 : 0}
+                        />
+                        <span style={{ position: 'absolute', left: '50%', top: '50%', width: '100%', padding: '0 5px', transform: 'translate(-50%, -50%)' }}><Statistic style={{ fontWeight: 'bold' }} value={a || 0} precision={2} valueStyle={a >= 20000 ? { color: '#000', fontWeight: 'bold' } : { fontWeight: 'bold' }} /></span>
+                    </div>
+                },
+                {
+                    title: '每日消耗', dataIndex: 'todayCost', label: '基础信息', align: 'right', width: 85, default: 8, sorter: true,
+                    className: 'padding_0',
+                    render: (a: number) => <div style={{ height: 25.5, position: 'relative' }}>
+                        <Progress
+                            strokeColor={{
+                                from: '#ff5900',
+                                to: '#ffd380',
+                            }}
+                            status="active"
+                            showInfo={false}
+                            percent={a ? a / 20000 * 100 : 0}
+                        />
+                        <span style={{ position: 'absolute', left: '50%', top: '50%', width: '100%', padding: '0 5px', transform: 'translate(-50%, -50%)' }}><Statistic value={a || 0} precision={2} valueStyle={a >= 20000 ? { color: '#000', fontWeight: 'bold' } : { fontWeight: 'bold' }} /></span>
+                    </div>
+                },
+                {
+                    title: '赔付金', dataIndex: 'payout', label: '基础信息', align: 'right', width: 80, default: 9, sorter: true,
+                    render: (a: number) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '推广广告账号数量', dataIndex: 'acountCount', label: '基础信息', align: 'center', width: 80, default: 10, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} />
+                },
+                {
+                    title: '推广广告数量', dataIndex: 'adgroupCount', label: '基础信息', align: 'center', width: 80, default: 11, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} />
+                }
+            ]
+        },
+        {
+            label: '广告曝光指标(媒体)',
+            data: [
+                {
+                    title: '点击量', dataIndex: 'clickCount', label: '广告曝光指标(媒体)', align: 'center', width: 65, default: 12, sorter: true,
+                    render: (a: number) => <Statistic value={a || 0} />
+                },
+                {
+                    title: '曝光量', dataIndex: 'viewCount', label: '广告曝光指标(媒体)', align: 'center', width: 65, default: 13, sorter: true,
+                    render: (a: number) => <Statistic value={a || 0} />
+                },
+                {
+                    title: '千次曝光成本', dataIndex: 'thousandDisplayPrice', label: '广告曝光指标(媒体)', align: 'right', width: 65, default: 14, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '点击率', dataIndex: 'ctr', label: '广告曝光指标(媒体)', align: 'center', width: 70, default: 15, sorter: true,
+                    render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 50 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
+                },
+                {
+                    title: '点击均价', dataIndex: 'cpc', label: '广告曝光指标(媒体)', align: 'center', width: 65, default: 16, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '不感兴趣点击次数', dataIndex: 'noInterestCount', label: '广告曝光指标(媒体)', align: 'center', width: 65, default: 17, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} />
+                },
+                {
+                    title: '转化量', dataIndex: 'conversionsCount', label: '广告曝光指标(媒体)', align: 'center', width: 65, sorter: true, default: 18,
+                    render: (a: string) => <Statistic value={a || 0} />
+                },
+                {
+                    title: '转化成本', dataIndex: 'conversionsCost', label: '广告曝光指标(媒体)', align: 'right', width: 65, sorter: true, default: 19,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+            ]
+        },
+        {
+            label: '广告转化指标(媒体)',
+            data: [
+                {
+                    title: '注册人数', dataIndex: 'regDedupPv', label: '广告转化指标(媒体)', width: 65, align: 'center', sorter: true, default: 20,
+                    render: (a: string) => <Statistic value={a || 0} />
+                },
+                {
+                    title: '注册次数', dataIndex: 'regPv', label: '广告转化指标(媒体)', align: 'center', width: 65, sorter: true, default: 21,
+                    render: (a: string) => <Statistic value={a || 0} />
+                },
+                {
+                    title: '注册成本(人数)', dataIndex: 'regDedupCost', label: '广告转化指标(媒体)', align: 'right', width: 70, sorter: true, default: 22,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '注册成本(次数)', dataIndex: 'regCost', label: '广告转化指标(媒体)', align: 'right', width: 70, sorter: true, default: 23,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '注册率', dataIndex: 'regRate', label: '广告转化指标(媒体)', align: 'center', width: 70, default: 24, sorter: true,
+                    render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 50 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
+                },
+                {
+                    title: '注册人数(平台上报+广告主上报)', dataIndex: 'regAllDedupPv', label: '广告转化指标(媒体)', align: 'center', width: 110, sorter: true, default: 25,
+                    render: (a: string) => <Statistic value={a || 0} />
+                },
+                {
+                    title: '注册成本(平台上报+广告主上报)', dataIndex: 'regCostPla', label: '广告转化指标(媒体)', align: 'right', width: 110, sorter: true, default: 26,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '注册率(平台上报+广告主上报)', dataIndex: 'regClickRatePla', label: '广告转化指标(媒体)', align: 'center', width: 110, default: 27, sorter: true,
+                    render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 50 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
+                },
+            ]
+        },
+        {
+            label: '广告变现指标(媒体)',
+            data: [
+                {
+                    title: '激活首日广告变现人数', dataIndex: 'adPayingUsersD1', label: '广告变现指标(媒体)', align: 'center', width: 85, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} />
+                },
+                {
+                    title: '激活首日广告变现成本(人数)', dataIndex: 'adPayingCostD1', label: '广告变现指标(媒体)', align: 'right', width: 100, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '激活首日广告变现金额', dataIndex: 'incomeVal1', label: '广告变现指标(媒体)', align: 'right', width: 85, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '激活首日广告变现ARPPU', dataIndex: 'incomeArppu1', label: '广告变现指标(媒体)', width: 90, align: 'center', sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '激活首日广告变现ROI', dataIndex: 'incomeRoi1', label: '广告变现指标(媒体)', align: 'center', width: 85, sorter: true,
+                    render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 50 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
+                },
+                {
+                    title: '激活首24小时广告变现人数', dataIndex: 'adPayingUsers24h', label: '广告变现指标(媒体)', align: 'center', width: 85, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} />
+                },
+                {
+                    title: '激活首24小时广告变现成本(人数)', dataIndex: 'adPayingCost24h', label: '广告变现指标(媒体)', align: 'right', width: 100, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '激活首24小时广告变现金额', dataIndex: 'incomeVal24h', label: '广告变现指标(媒体)', align: 'right', width: 85, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '激活首24小时广告变现ARPPU', dataIndex: 'incomeArppu24h', label: '广告变现指标(媒体)', width: 98, align: 'center', sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '激活首24小时广告变现ROI', dataIndex: 'incomeRoi24h', label: '广告变现指标(媒体)', align: 'center', width: 90, sorter: true,
+                    render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 50 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
+                },
+                {
+                    title: '激活3日广告变现次数', dataIndex: 'adMonetizationActive3dPv', label: '广告变现指标(媒体)', align: 'center', width: 75, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} />
+                },
+                {
+                    title: '激活3日广告变现人数', dataIndex: 'adMonetizationDedupActive3dPv', label: '广告变现指标(媒体)', align: 'center', width: 75, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} />
+                },
+                {
+                    title: '激活3日广告变现成本(人数)', dataIndex: 'adMonetizationDedupCost3', label: '广告变现指标(媒体)', align: 'right', width: 90, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '激活3日广告变现成本(次数)', dataIndex: 'adMonetizationActiveCost3', label: '广告变现指标(媒体)', align: 'right', width: 90, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '激活3日广告变现金额', dataIndex: 'incomeVal3', label: '广告变现指标(媒体)', align: 'right', width: 75, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '激活3日广告变现ARPPU', dataIndex: 'incomeArppu3', label: '广告变现指标(媒体)', width: 80, align: 'center', sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '激活3日广告变现ROI', dataIndex: 'incomeRoi3', label: '广告变现指标(媒体)', align: 'center', width: 75, sorter: true,
+                    render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 50 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
+                },
+                {
+                    title: '激活7日广告变现次数', dataIndex: 'adMonetizationActive7dPv', label: '广告变现指标(媒体)', align: 'center', width: 75, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} />
+                },
+                {
+                    title: '激活7日广告变现人数', dataIndex: 'adMonetizationDedupActive7dPv', label: '广告变现指标(媒体)', align: 'center', width: 75, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} />
+                },
+                {
+                    title: '激活7日广告变现成本(人数)', dataIndex: 'adMonetizationDedupCost7', label: '广告变现指标(媒体)', align: 'right', width: 85, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '激活7日广告变现成本(次数)', dataIndex: 'adMonetizationActiveCost7', label: '广告变现指标(媒体)', align: 'right', width: 85, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '激活7日广告变现金额', dataIndex: 'incomeVal7', label: '广告变现指标(媒体)', align: 'right', width: 75, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '激活7日广告变现ARPPU', dataIndex: 'incomeArppu7', label: '广告变现指标(媒体)', width: 80, align: 'center', sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '激活7日广告变现ROI', dataIndex: 'incomeRoi7', label: '广告变现指标(媒体)', align: 'center', width: 80, sorter: true,
+                    render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 50 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
+                },
+                {
+                    title: '激活14日广告变现金额', dataIndex: 'incomeVal14', label: '广告变现指标(媒体)', align: 'right', width: 80, sorter: true,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '激活14日广告变现ROI', dataIndex: 'incomeRoi14', label: '广告变现指标(媒体)', align: 'center', width: 75, sorter: true,
+                    render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 50 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
+                },
+                {
+                    title: '广告变现人数', dataIndex: 'appAdPayingUsers', label: '广告变现指标(媒体)', align: 'right', width: 70, sorter: true, default: 28,
+                    render: (a: string) => <Statistic value={a || 0} />
+                },
+                {
+                    title: '广告变现成本', dataIndex: 'appAdPayingCost', label: '广告变现指标(媒体)', align: 'right', width: 70, sorter: true, default: 29,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '广告变现金额', dataIndex: 'adMonetizationAmount', label: '广告变现指标(媒体)', align: 'right', width: 70, sorter: true, default: 30,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '广告变现ARPPU', dataIndex: 'adMonetizationArppu', label: '广告变现指标(媒体)', width: 70, align: 'center', sorter: true, default: 31,
+                    render: (a: string) => <Statistic value={a || 0} precision={2} />
+                },
+                {
+                    title: '广告变现ROI', dataIndex: 'adMonetizationRoi', label: '广告变现指标(媒体)', align: 'center', width: 70, sorter: true, default: 32,
+                    render: (a: number) => <Statistic value={a ? a * 100 : 0} precision={2} valueStyle={!a ? {} : a >= 50 ? { color: 'red' } : { color: '#0f990f' }} suffix="%" />
+                }
+            ]
+        }
+    ]
+}
+
+export default columns12

+ 1 - 1
src/pages/iaaSystem/manage/channel/modalChannel.tsx

@@ -37,7 +37,7 @@ const ModalChannel: React.FC<Props> = ({ onChange, visible, onClose, initialValu
     const handleOk = async () => {
         form.submit()
         let data: any = await form.validateFields()
-        if (data.accountType === 'OUTSIDE_APPLICATION' || data.accountType === 'OCENAENGINE_MINI_GAME') {
+        if (data.accountType === 'OUTSIDE_APPLICATION' || data.accountType === 'OCENAENGINE_MINI_GAME' || data.accountType === 'APP_ANDROID_NOVEL') {
             data.accountIdList = data.accountIdList.replace(/[,,\s]/g, ',')
             data.accountIdList = data.accountIdList.split(',')
         }

+ 60 - 0
src/services/iaaData/index.ts

@@ -523,6 +523,66 @@ export async function getNovelDynamicDetailListApi(data: GetNovelDynamicDetailLi
 
 
 
+export interface GetNovelPutUserListProps extends Paging, SortProps {
+    putUserIdList?: number[]
+    costDayBegin?: string
+    costDayEnd?: string
+}
+
+/**
+ * 小说投手每日数据
+ * @param data 
+ * @returns 
+ */
+export async function getNovelPutUserListApi(data: GetNovelPutUserListProps) {
+    return request(wapi + `/monitor/novel/putUser/listOfPage`, {
+        method: 'POST',
+        data
+    });
+}
+
+/**
+ * 总计
+ * @param data 
+ * @returns 
+ */
+export async function getNovelPutUserTotalApi(data: GetNovelPutUserListProps) {
+    return request(wapi + `/monitor/novel/putUser/total`, {
+        method: 'POST',
+        data
+    });
+}
+
+
+export interface GetNovelAppListProps extends Paging, SortProps {
+    costDayBegin?: string
+    costDayEnd?: string
+}
+
+/**
+ * 小说应用每日数据
+ * @param data 
+ * @returns 
+ */
+export async function getNovelAppListApi(data: GetNovelAppListProps) {
+    return request(wapi + `/monitor/novel/app/listOfPage`, {
+        method: 'POST',
+        data
+    });
+}
+
+/**
+ * 总计
+ * @param data 
+ * @returns 
+ */
+export async function getNovelAppTotalApi(data: GetNovelAppListProps) {
+    return request(wapi + `/monitor/novel/app/total`, {
+        method: 'POST',
+        data
+    });
+}
+
 export interface GetByteAppTrendRoiListApi extends Paging, SortProps {
     costDayBegin?: string
     costDayEnd?: string