import React, { useMemo } from 'react'; import { Transaction, TransactionType, ExpenseCategory } from '../types'; import { PieChart, Pie, Cell, ResponsiveContainer, Tooltip, Legend, BarChart, Bar, XAxis, YAxis, CartesianGrid } from 'recharts'; interface DashboardProps { expenses: Transaction[]; // Kept prop name as expenses for compatibility but type is Transaction } const COLORS = [ '#6366f1', // Indigo '#ec4899', // Pink '#10b981', // Emerald '#f59e0b', // Amber '#8b5cf6', // Violet '#ef4444', // Red '#3b82f6', // Blue '#14b8a6', // Teal '#f97316', // Orange '#84cc16', // Lime '#06b6d4', // Cyan '#d946ef', // Fuchsia '#64748b', // Slate '#a855f7', // Purple '#fbbf24' // Yellow ]; const Dashboard: React.FC = ({ expenses }) => { const today = new Date().toISOString().split('T')[0]; // Filter only expenses for the dashboard visuals const expenseTransactions = useMemo(() => expenses.filter(e => e.type === TransactionType.EXPENSE), [expenses]); const todaysExpenses = useMemo(() => { return expenseTransactions.filter(e => e.date === today); }, [expenseTransactions, today]); const totalToday = useMemo(() => { return todaysExpenses.reduce((sum, e) => sum + e.amount, 0); }, [todaysExpenses]); const categoryData = useMemo(() => { const map = new Map(); todaysExpenses.forEach(e => { map.set(e.category, (map.get(e.category) || 0) + e.amount); }); return Array.from(map.entries()).map(([name, value], index) => ({ name, value, fill: COLORS[index % COLORS.length] })); }, [todaysExpenses]); const weeklyData = useMemo(() => { const data: { date: string; total: number }[] = []; for (let i = 6; i >= 0; i--) { const d = new Date(); d.setDate(d.getDate() - i); const dateStr = d.toISOString().split('T')[0]; const dailySum = expenseTransactions .filter(e => e.date === dateStr) .reduce((sum, e) => sum + e.amount, 0); data.push({ date: dateStr.slice(5), total: dailySum }); } return data; }, [expenseTransactions]); return (

今日消费统计

¥{totalToday.toFixed(2)} {today}

今日分类占比

{categoryData.length > 0 ? (
{categoryData.map((entry, index) => ( ))} `¥${value.toFixed(2)}`} />
) : (
今天还没有消费哦,小王表现不错!
)}
); }; export default Dashboard;