perf: admin

This commit is contained in:
archer
2023-06-30 10:56:34 +08:00
parent c411ca4bd4
commit a4e2c6510f
4 changed files with 107 additions and 13 deletions

View File

@@ -188,16 +188,21 @@ export const useUserRoute = (app) => {
$match: {
status: 'SUCCESS',
createTime: {
$gte: new Date(Date.now() - day * 24 * 60 * 60 * 1000)
$gte: new Date(Date.now() - day * 24 * 60 * 60 * 1000 + 8 * 60 * 60 * 1000) // 补时差
}
}
},
{
$addFields: {
adjustedCreateTime: { $add: ['$createTime', 8 * 60 * 60 * 1000] }
}
},
{
$group: {
_id: {
year: { $year: '$createTime' },
month: { $month: '$createTime' },
day: { $dayOfMonth: '$createTime' }
year: { $year: '$adjustedCreateTime' },
month: { $month: '$adjustedCreateTime' },
day: { $dayOfMonth: '$adjustedCreateTime' }
},
count: { $sum: '$price' }
}
@@ -216,7 +221,8 @@ export const useUserRoute = (app) => {
startCount += item.count;
return {
date: item.date,
count: startCount
total: startCount,
count: item.count
};
});

View File

@@ -16,13 +16,20 @@ import dayjs from 'dayjs';
const authStorageKey = 'tushan:auth';
const PRICE_SCALE = 100000;
type fetchChatData = { count: number; date: string; increase?: number; increaseRate?: string };
type fetchChatData = {
count: number;
total?: number;
date: string;
increase?: number;
increaseRate?: string;
};
type chatDataType = {
date: string;
userCount: number;
userIncrease?: number;
userIncreaseRate?: string;
payTotal: number;
payCount: number;
};
@@ -84,7 +91,8 @@ export const Dashboard: React.FC = React.memo(() => {
userCount: item.count,
userIncrease: item.increase,
userIncreaseRate: item.increaseRate,
payCount: pay ? pay.count / PRICE_SCALE : 0
payCount: pay ? pay.count / PRICE_SCALE : 0,
payTotal: pay?.total ? pay.total / PRICE_SCALE : 0
};
});
setChatData(data);
@@ -208,10 +216,13 @@ const CustomTooltip = ({ active, payload }: any) => {
: <strong>{data.userCount}</strong>
</p>
<p className="label">
: <strong>{data.userIncrease}</strong>
: <strong>{data.userIncrease}</strong>
</p>
<p className="label">
60: <strong>{data.payCount}</strong>
: <strong>{data.payCount}</strong>
</p>
<p className="label">
60: <strong>{data.payTotal}</strong>
</p>
</div>
);
@@ -233,7 +244,7 @@ const UserChart = ({ data }: { data: chatDataType[] }) => {
<stop offset="5%" stopColor="#82ca9d" stopOpacity={0.8} />
<stop offset="95%" stopColor="#82ca9d" stopOpacity={0} />
</linearGradient>
<linearGradient id="payCount" x1="0" y1="0" x2="0" y2="1">
<linearGradient id="payTotal" x1="0" y1="0" x2="0" y2="1">
<stop offset="5%" stopColor="#8884d8" stopOpacity={0.8} />
<stop offset="95%" stopColor="#8884d8" stopOpacity={0} />
</linearGradient>
@@ -251,10 +262,10 @@ const UserChart = ({ data }: { data: chatDataType[] }) => {
/>
<Area
type="monotone"
dataKey="payCount"
dataKey="payTotal"
stroke="#8884d8"
fillOpacity={1}
fill="url(#payCount)"
fill="url(#payTotal)"
/>
</AreaChart>
</ResponsiveContainer>