优化首页统计和任务请求
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user