diff --git a/web/public/images/hand-bg.png b/web/public/images/hand-bg.png index 8ca9e333..88988c6e 100644 Binary files a/web/public/images/hand-bg.png and b/web/public/images/hand-bg.png differ diff --git a/web/src/components/ComparisonChart.tsx b/web/src/components/ComparisonChart.tsx index e8d1fafe..1050562e 100644 --- a/web/src/components/ComparisonChart.tsx +++ b/web/src/components/ComparisonChart.tsx @@ -31,11 +31,14 @@ export function ComparisonChart({ traders }: ComparisonChartProps) { const { data: allTraderHistories, isLoading } = useSWR( traders.length > 0 ? `all-equity-histories-${tradersKey}` : null, async () => { - // 并发请求所有trader的历史数据 - const promises = traders.map(trader => - api.getEquityHistory(trader.trader_id) - ); - return Promise.all(promises); + // 使用批量API一次性获取所有trader的历史数据 + const traderIds = traders.map(trader => trader.trader_id); + const batchData = await api.getEquityHistoryBatch(traderIds); + + // 转换为原格式,保持与原有代码兼容 + return traders.map(trader => { + return batchData.histories[trader.trader_id] || []; + }); }, { refreshInterval: 30000, // 30秒刷新(对比图表数据更新频率较低) diff --git a/web/src/lib/api.ts b/web/src/lib/api.ts index 6009b0a7..607f4be6 100644 --- a/web/src/lib/api.ts +++ b/web/src/lib/api.ts @@ -247,6 +247,33 @@ export const api = { return res.json(); }, + // 批量获取多个交易员的历史数据(无需认证) + async getEquityHistoryBatch(traderIds: string[]): Promise { + const res = await fetch(`${API_BASE}/equity-history-batch`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ trader_ids: traderIds }), + }); + if (!res.ok) throw new Error('获取批量历史数据失败'); + return res.json(); + }, + + // 获取前10名交易员数据(无需认证) + async getTopTraders(): Promise { + const res = await fetch(`${API_BASE}/top-traders`); + if (!res.ok) throw new Error('获取前10名交易员失败'); + return res.json(); + }, + + // 获取公开交易员配置(无需认证) + async getPublicTraderConfig(traderId: string): Promise { + const res = await fetch(`${API_BASE}/trader/${traderId}/config`); + if (!res.ok) throw new Error('获取公开交易员配置失败'); + return res.json(); + }, + // 获取AI学习表现分析(支持trader_id) async getPerformance(traderId?: string): Promise { const url = traderId