优化首页统计和任务请求

This commit is contained in:
yml2213
2026-08-05 10:41:40 +08:00
parent 2fda47c631
commit 335f5cf57b
11 changed files with 421 additions and 160 deletions
+8 -61
View File
@@ -1,12 +1,6 @@
import { Card, Col, Row, Space, Statistic, Tag, Typography, theme } from 'antd';
import { useEffect, useMemo, useState } from 'react';
import {
accountApi,
cookieApi,
huyaApi,
loginApi,
} from '../api/modules';
import { usePermissions } from '../hooks/usePermissions';
import { dashboardApi } from '../api/modules';
const { Title, Text } = Typography;
@@ -67,74 +61,27 @@ function StatCard({
export default function DashboardPage() {
const { token } = theme.useToken();
const { can, canAny } = usePermissions();
const [loading, setLoading] = useState(true);
const [stats, setStats] = useState<DashboardStats>(EMPTY_STATS);
const canViewDouyuAccounts = canAny(['account:view_all', 'account:view_assigned']);
const canViewDouyuTasks = canAny(['login:batch', 'login:view_all', 'login:view_assigned']);
const canViewCookies = can('cookie:view');
const canViewHuyaAccounts = canAny(['huya:account', 'huya:view_all', 'huya:view_assigned']);
const canViewHuyaTasks = can('huya:task');
useEffect(() => {
let ignore = false;
async function loadDashboard() {
setLoading(true);
const [
douyuAccountsResult,
douyuTasksResult,
cookiesResult,
huyaAccountsResult,
huyaTasksResult,
huyaGoodsResult,
huyaRechargeGoodsResult,
] = await Promise.allSettled([
canViewDouyuAccounts ? accountApi.summary() : Promise.resolve(null),
canViewDouyuTasks ? loginApi.tasksSummary() : Promise.resolve(null),
canViewCookies ? cookieApi.summary() : Promise.resolve(null),
canViewHuyaAccounts ? huyaApi.accountsSummary() : Promise.resolve(null),
canViewHuyaTasks ? huyaApi.tasksSummary() : Promise.resolve(null),
canViewHuyaTasks ? huyaApi.listGoods() : Promise.resolve([]),
canViewHuyaTasks ? huyaApi.listRechargeGoods() : Promise.resolve([]),
]);
if (ignore) return;
const douyuAccounts = douyuAccountsResult.status === 'fulfilled' ? douyuAccountsResult.value : null;
const douyuTasks = douyuTasksResult.status === 'fulfilled' ? douyuTasksResult.value : null;
const cookies = cookiesResult.status === 'fulfilled' ? cookiesResult.value : null;
const huyaAccounts = huyaAccountsResult.status === 'fulfilled' ? huyaAccountsResult.value : null;
const huyaTasks = huyaTasksResult.status === 'fulfilled' ? huyaTasksResult.value : null;
const huyaGoods = huyaGoodsResult.status === 'fulfilled' ? huyaGoodsResult.value : [];
const huyaRechargeGoods = huyaRechargeGoodsResult.status === 'fulfilled' ? huyaRechargeGoodsResult.value : [];
setStats({
douyu: {
accounts: douyuAccounts?.total || 0,
tasks: douyuTasks?.total || 0,
success: douyuTasks?.success || 0,
failed: douyuTasks?.failed || 0,
cookies: cookies?.total || 0,
},
huya: {
accounts: huyaAccounts?.total || 0,
tasks: huyaTasks?.total || 0,
success: huyaTasks?.success || 0,
failed: huyaTasks?.failed || 0,
goods: huyaGoods.length,
rechargeGoods: huyaRechargeGoods.length,
},
});
setLoading(false);
try {
const data = await dashboardApi.summary();
if (!ignore) setStats(data);
} finally {
if (!ignore) setLoading(false);
}
}
void loadDashboard();
return () => {
ignore = true;
};
}, [canViewCookies, canViewDouyuAccounts, canViewDouyuTasks, canViewHuyaAccounts, canViewHuyaTasks]);
}, []);
const totalStats = useMemo(() => ({
accounts: stats.douyu.accounts + stats.huya.accounts,