|
|
@@ -13,7 +13,6 @@ import {
|
|
|
Typography,
|
|
|
} from "antd";
|
|
|
import type { ColumnsType, TablePaginationConfig } from "antd/es/table";
|
|
|
-import type { SorterResult } from "antd/es/table/interface";
|
|
|
import type { Dayjs } from "dayjs";
|
|
|
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
|
import { getBizCategoryConfigPage } from "@/services/bizCategory";
|
|
|
@@ -134,11 +133,11 @@ const StatisticsPlaymateServicePage: React.FC = () => {
|
|
|
const response = await getBizCategoryConfigPage({ enabled: true });
|
|
|
const flatList = flattenBizCategories(response.list || []);
|
|
|
const options = flatList
|
|
|
+ .filter((item) => Boolean(item.code) && Boolean(item.parentCode))
|
|
|
.map((item) => ({
|
|
|
label: item.name ? `${item.name} (${item.code})` : (item.code ?? ""),
|
|
|
value: item.code,
|
|
|
- }))
|
|
|
- .filter((item) => Boolean(item.value));
|
|
|
+ }));
|
|
|
setCategoryOptions(options);
|
|
|
} catch (error) {
|
|
|
console.error("Failed to load biz categories:", error);
|
|
|
@@ -186,7 +185,6 @@ const StatisticsPlaymateServicePage: React.FC = () => {
|
|
|
...prev,
|
|
|
pageIndex: 1,
|
|
|
pageSize: prev.pageSize || PAGE_SIZE,
|
|
|
- sort: undefined,
|
|
|
startDay,
|
|
|
endDay,
|
|
|
type: Number.isFinite(type) ? type : 0,
|
|
|
@@ -208,7 +206,6 @@ const StatisticsPlaymateServicePage: React.FC = () => {
|
|
|
startDay: defaultRange.beginDateTime,
|
|
|
endDay: defaultRange.endDateTime,
|
|
|
type: 0,
|
|
|
- sort: undefined,
|
|
|
playmateKeyword: undefined,
|
|
|
mainSkillBizCategoryCode: undefined,
|
|
|
skip: 0,
|
|
|
@@ -265,12 +262,7 @@ const StatisticsPlaymateServicePage: React.FC = () => {
|
|
|
|
|
|
const handleTableChange = (
|
|
|
pagination: TablePaginationConfig,
|
|
|
- _filters: unknown,
|
|
|
- sorter:
|
|
|
- | SorterResult<PlaymateServiceMetricAdminDTO>
|
|
|
- | SorterResult<PlaymateServiceMetricAdminDTO>[],
|
|
|
) => {
|
|
|
- const singleSorter = Array.isArray(sorter) ? sorter[0] : sorter;
|
|
|
const nextPageIndex = pagination.current || 1;
|
|
|
const nextPageSize = pagination.pageSize || PAGE_SIZE;
|
|
|
|
|
|
@@ -281,24 +273,10 @@ const StatisticsPlaymateServicePage: React.FC = () => {
|
|
|
pageSize: nextPageSize,
|
|
|
skip: (nextPageIndex - 1) * nextPageSize,
|
|
|
};
|
|
|
-
|
|
|
- if (singleSorter?.field && singleSorter?.order) {
|
|
|
- next.sort = {
|
|
|
- field: String(singleSorter.field),
|
|
|
- order: singleSorter.order === "ascend" ? 1 : -1,
|
|
|
- };
|
|
|
- } else {
|
|
|
- next.sort = undefined;
|
|
|
- }
|
|
|
return next;
|
|
|
});
|
|
|
};
|
|
|
|
|
|
- const getSortOrder = (field: string): "ascend" | "descend" | undefined => {
|
|
|
- if (queryParams.sort?.field !== field) return undefined;
|
|
|
- return queryParams.sort.order === 1 ? "ascend" : "descend";
|
|
|
- };
|
|
|
-
|
|
|
const columns: ColumnsType<PlaymateServiceMetricAdminDTO> = [
|
|
|
{
|
|
|
title: "周期",
|
|
|
@@ -352,8 +330,6 @@ const StatisticsPlaymateServicePage: React.FC = () => {
|
|
|
dataIndex: "foregroundOnlineHours",
|
|
|
key: "foregroundOnlineHours",
|
|
|
width: 170,
|
|
|
- sorter: true,
|
|
|
- sortOrder: getSortOrder("foregroundOnlineHours"),
|
|
|
render: (value) => formatNumber(value, 2),
|
|
|
},
|
|
|
{
|
|
|
@@ -361,8 +337,6 @@ const StatisticsPlaymateServicePage: React.FC = () => {
|
|
|
dataIndex: "avgDailyOnlineHours",
|
|
|
key: "avgDailyOnlineHours",
|
|
|
width: 180,
|
|
|
- sorter: true,
|
|
|
- sortOrder: getSortOrder("avgDailyOnlineHours"),
|
|
|
render: (value) => formatNumber(value, 2),
|
|
|
},
|
|
|
{
|
|
|
@@ -370,8 +344,6 @@ const StatisticsPlaymateServicePage: React.FC = () => {
|
|
|
dataIndex: "replyWithin5mRatePct",
|
|
|
key: "replyWithin5mRatePct",
|
|
|
width: 160,
|
|
|
- sorter: true,
|
|
|
- sortOrder: getSortOrder("replyWithin5mRatePct"),
|
|
|
render: formatPercent,
|
|
|
},
|
|
|
{
|
|
|
@@ -379,8 +351,6 @@ const StatisticsPlaymateServicePage: React.FC = () => {
|
|
|
dataIndex: "proactiveChatRatePct",
|
|
|
key: "proactiveChatRatePct",
|
|
|
width: 130,
|
|
|
- sorter: true,
|
|
|
- sortOrder: getSortOrder("proactiveChatRatePct"),
|
|
|
render: formatPercent,
|
|
|
},
|
|
|
{
|
|
|
@@ -388,8 +358,6 @@ const StatisticsPlaymateServicePage: React.FC = () => {
|
|
|
dataIndex: "deepChatRatePct",
|
|
|
key: "deepChatRatePct",
|
|
|
width: 110,
|
|
|
- sorter: true,
|
|
|
- sortOrder: getSortOrder("deepChatRatePct"),
|
|
|
render: formatPercent,
|
|
|
},
|
|
|
{
|
|
|
@@ -397,8 +365,6 @@ const StatisticsPlaymateServicePage: React.FC = () => {
|
|
|
dataIndex: "cardExposureUv",
|
|
|
key: "cardExposureUv",
|
|
|
width: 110,
|
|
|
- sorter: true,
|
|
|
- sortOrder: getSortOrder("cardExposureUv"),
|
|
|
render: formatInteger,
|
|
|
},
|
|
|
{
|
|
|
@@ -406,8 +372,6 @@ const StatisticsPlaymateServicePage: React.FC = () => {
|
|
|
dataIndex: "profileVisitUv",
|
|
|
key: "profileVisitUv",
|
|
|
width: 110,
|
|
|
- sorter: true,
|
|
|
- sortOrder: getSortOrder("profileVisitUv"),
|
|
|
render: formatInteger,
|
|
|
},
|
|
|
{
|
|
|
@@ -415,8 +379,6 @@ const StatisticsPlaymateServicePage: React.FC = () => {
|
|
|
dataIndex: "dmInitiateUv",
|
|
|
key: "dmInitiateUv",
|
|
|
width: 110,
|
|
|
- sorter: true,
|
|
|
- sortOrder: getSortOrder("dmInitiateUv"),
|
|
|
render: formatInteger,
|
|
|
},
|
|
|
{
|
|
|
@@ -424,8 +386,6 @@ const StatisticsPlaymateServicePage: React.FC = () => {
|
|
|
dataIndex: "newContactUv",
|
|
|
key: "newContactUv",
|
|
|
width: 120,
|
|
|
- sorter: true,
|
|
|
- sortOrder: getSortOrder("newContactUv"),
|
|
|
render: formatInteger,
|
|
|
},
|
|
|
{
|
|
|
@@ -433,8 +393,6 @@ const StatisticsPlaymateServicePage: React.FC = () => {
|
|
|
dataIndex: "homeToDmCvrPct",
|
|
|
key: "homeToDmCvrPct",
|
|
|
width: 175,
|
|
|
- sorter: true,
|
|
|
- sortOrder: getSortOrder("homeToDmCvrPct"),
|
|
|
render: formatPercent,
|
|
|
},
|
|
|
{
|
|
|
@@ -442,8 +400,6 @@ const StatisticsPlaymateServicePage: React.FC = () => {
|
|
|
dataIndex: "completedOrderCount",
|
|
|
key: "completedOrderCount",
|
|
|
width: 100,
|
|
|
- sorter: true,
|
|
|
- sortOrder: getSortOrder("completedOrderCount"),
|
|
|
render: formatInteger,
|
|
|
},
|
|
|
{
|
|
|
@@ -451,8 +407,6 @@ const StatisticsPlaymateServicePage: React.FC = () => {
|
|
|
dataIndex: "newUserFirstOrderCount",
|
|
|
key: "newUserFirstOrderCount",
|
|
|
width: 120,
|
|
|
- sorter: true,
|
|
|
- sortOrder: getSortOrder("newUserFirstOrderCount"),
|
|
|
render: formatInteger,
|
|
|
},
|
|
|
{
|
|
|
@@ -460,8 +414,6 @@ const StatisticsPlaymateServicePage: React.FC = () => {
|
|
|
dataIndex: "oldUserRepurchaseOrderCount",
|
|
|
key: "oldUserRepurchaseOrderCount",
|
|
|
width: 120,
|
|
|
- sorter: true,
|
|
|
- sortOrder: getSortOrder("oldUserRepurchaseOrderCount"),
|
|
|
render: formatInteger,
|
|
|
},
|
|
|
{
|
|
|
@@ -469,8 +421,6 @@ const StatisticsPlaymateServicePage: React.FC = () => {
|
|
|
dataIndex: "orderIncomeBeanAmount",
|
|
|
key: "orderIncomeBeanAmount",
|
|
|
width: 140,
|
|
|
- sorter: true,
|
|
|
- sortOrder: getSortOrder("orderIncomeBeanAmount"),
|
|
|
render: (value) => formatNumber(value, 2),
|
|
|
},
|
|
|
{
|
|
|
@@ -478,8 +428,6 @@ const StatisticsPlaymateServicePage: React.FC = () => {
|
|
|
dataIndex: "newContactConversionRatePct",
|
|
|
key: "newContactConversionRatePct",
|
|
|
width: 165,
|
|
|
- sorter: true,
|
|
|
- sortOrder: getSortOrder("newContactConversionRatePct"),
|
|
|
render: formatPercent,
|
|
|
},
|
|
|
{
|
|
|
@@ -487,8 +435,6 @@ const StatisticsPlaymateServicePage: React.FC = () => {
|
|
|
dataIndex: "avgOrderValueBeanAmount",
|
|
|
key: "avgOrderValueBeanAmount",
|
|
|
width: 150,
|
|
|
- sorter: true,
|
|
|
- sortOrder: getSortOrder("avgOrderValueBeanAmount"),
|
|
|
render: (value) => formatNumber(value, 2),
|
|
|
},
|
|
|
{
|
|
|
@@ -496,8 +442,6 @@ const StatisticsPlaymateServicePage: React.FC = () => {
|
|
|
dataIndex: "unitOutputBeanPerHour",
|
|
|
key: "unitOutputBeanPerHour",
|
|
|
width: 185,
|
|
|
- sorter: true,
|
|
|
- sortOrder: getSortOrder("unitOutputBeanPerHour"),
|
|
|
render: (value) => formatNumber(value, 2),
|
|
|
},
|
|
|
{
|
|
|
@@ -505,8 +449,6 @@ const StatisticsPlaymateServicePage: React.FC = () => {
|
|
|
dataIndex: "avgUserRating",
|
|
|
key: "avgUserRating",
|
|
|
width: 110,
|
|
|
- sorter: true,
|
|
|
- sortOrder: getSortOrder("avgUserRating"),
|
|
|
render: (value) => formatNumber(value, 2),
|
|
|
},
|
|
|
{
|
|
|
@@ -514,8 +456,6 @@ const StatisticsPlaymateServicePage: React.FC = () => {
|
|
|
dataIndex: "positiveRatingRatePct",
|
|
|
key: "positiveRatingRatePct",
|
|
|
width: 100,
|
|
|
- sorter: true,
|
|
|
- sortOrder: getSortOrder("positiveRatingRatePct"),
|
|
|
render: formatPercent,
|
|
|
},
|
|
|
{
|
|
|
@@ -523,8 +463,6 @@ const StatisticsPlaymateServicePage: React.FC = () => {
|
|
|
dataIndex: "oldUserRepurchaseRatePct",
|
|
|
key: "oldUserRepurchaseRatePct",
|
|
|
width: 120,
|
|
|
- sorter: true,
|
|
|
- sortOrder: getSortOrder("oldUserRepurchaseRatePct"),
|
|
|
render: formatPercent,
|
|
|
},
|
|
|
];
|
|
|
@@ -536,7 +474,7 @@ const StatisticsPlaymateServicePage: React.FC = () => {
|
|
|
<Title level={3} style={{ marginBottom: 0 }}>
|
|
|
陪玩服务效果
|
|
|
</Title>
|
|
|
- <Text type="secondary">按周期查看陪玩师服务效果指标,支持筛选、排序与导出</Text>
|
|
|
+ <Text type="secondary">按周期查看陪玩师服务效果指标,支持筛选与导出</Text>
|
|
|
</div>
|
|
|
</div>
|
|
|
|