import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { getPortfolioSummary } from '@/actions/portfolio'; import { formatQuantity, formatAmount } from '@/lib/formatters'; import AllocationChart from '@/components/dashboard/allocation-chart'; import Big from 'big.js'; const CHART_COLORS = [ '#3b82f6', '#8b5cf6', '#10b981', '#f59e0b', '#ef4444', '#06b6d4', ]; export default async function DashboardPage() { const { positions, totalCnyValue, chartData, totalPnlCny } = await getPortfolioSummary(); const formattedTotal = formatAmount(totalCnyValue); const formattedPnl = formatAmount(totalPnlCny); const pnlIsPositive = new Big(totalPnlCny).gte(0); const displayChartData = chartData.map((item) => ({ ...item, value: Number(item.value), })); return (

欢迎来到 Omniledger

您的跨界记账中枢。

¥ {formattedTotal} 总资产 (CNY)
总盈亏: {pnlIsPositive ? '+' : ''}{formattedPnl}
{positions.length === 0 ? (

暂无持仓,请先添加资产和交易记录。

) : ( positions.map((pos) => { const posPnl = new Big(pos.pnlCny); const posPnlPositive = posPnl.gte(0); const formattedPosPnl = formatAmount(pos.pnlCny); return ( {pos.symbol} {pos.type}
持仓数量 {formatQuantity(pos.quantity, pos.type)}
结算币种 {pos.baseCurrency}
CNY 估值 ¥{formatAmount(pos.cnyValue)}
成本 (CNY) ¥{formatAmount(pos.totalCostCny)}
盈亏 {posPnlPositive ? '+' : ''}{formattedPosPnl}
); }) )}
资产分布
); }