'use client'; import { ResponsiveContainer, LineChart, Line, XAxis, YAxis, Tooltip, CartesianGrid } from 'recharts'; interface DailyData { date: string; amount: number; count: number; } interface DailyChartProps { data: DailyData[]; dark?: boolean; } function formatDate(dateStr: string) { const [, m, d] = dateStr.split('-'); return `${m}/${d}`; } function formatAmount(value: number) { if (value >= 10000) return `¥${(value / 10000).toFixed(1)}w`; if (value >= 1000) return `¥${(value / 1000).toFixed(1)}k`; return `¥${value}`; } interface TooltipPayload { value: number; dataKey: string; } function CustomTooltip({ active, payload, label, dark, }: { active?: boolean; payload?: TooltipPayload[]; label?: string; dark?: boolean; }) { if (!active || !payload?.length) return null; return (

{label}

{payload.map((p) => (

{p.dataKey === 'amount' ? '金额' : '笔数'}: {p.dataKey === 'amount' ? `¥${p.value.toLocaleString()}` : p.value}

))}
); } export default function DailyChart({ data, dark }: DailyChartProps) { // Auto-calculate tick interval: show ~10-15 labels max const tickInterval = data.length > 30 ? Math.ceil(data.length / 12) - 1 : 0; if (data.length === 0) { return (

每日充值趋势

暂无数据

); } const axisColor = dark ? '#64748b' : '#94a3b8'; const gridColor = dark ? '#334155' : '#e2e8f0'; return (

每日充值趋势

} />
); }