import { useQuery } from '@tanstack/react-query' import api from '@/lib/api' import { CollapsibleSection } from '@/components/CollapsibleSection' import { MetricCard } from '@/components/MetricCard' import { LoadingSpinner } from '@/components/LoadingSpinner' import { formatCurrency, formatNumber, formatPercent } from '@/lib/utils' import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, PieChart, Pie, Cell, Legend } from 'recharts' const PIE_COLORS = ['#3b82f6', '#ef4444', '#22c55e', '#f97316', '#eab308', '#8b5cf6', '#06b6d4', '#ec4899', '#84cc16', '#a3a3a3', '#f43f5e', '#6366f1', '#14b8a6', '#facc15', '#7c3aed', '#10b981', '#fb923c'] export function ExpenseOverviewTab({ month }: { month: string }) { const { data: overview, isLoading: l1 } = useQuery({ queryKey: ['se/overview', month], queryFn: () => api.get('/store-expense/overview', { params: { month } }) }) const { data: structure, isLoading: l2 } = useQuery({ queryKey: ['se/structure', month], queryFn: () => api.get('/store-expense/expense-structure', { params: { month } }) }) if (l1 || l2) return const ov = (overview as any)?.data || {} const structureData = (structure as any)?.data || [] const pieData = structureData.map((r: any) => ({ name: r.account_name, value: parseFloat(r.amount) })) return (
{pieData.map((_: any, i: number) => )} [formatCurrency(v), name]} />
{structureData.map((r: any, i: number) => ( ))}
费用科目 金额 占比 门店数
{r.account_name} {formatCurrency(r.amount)} {formatPercent(r.expense_share_pct)} {r.nonzero_cost_unit_count}
) }