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 { SyncButton } from '@/components/assets/sync-button'; 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.name || pos.symbol} {pos.symbol}
{pos.type}
持仓数量 {formatQuantity(pos.quantity, pos.type)}
结算币种 {pos.baseCurrency}
持仓成本 ({pos.baseCurrency}) {formatAmount(pos.totalCostNative)}
{(() => { const posPnlNative = new Big(pos.pnlNative); const posPnlNativePositive = posPnlNative.gte(0); return (
当前盈亏 ({pos.baseCurrency}) {posPnlNativePositive ? '+' : ''}{formatAmount(pos.pnlNative)}
); })()}
成本 (CNY) ¥{formatAmount(pos.totalCostCny)}
盈亏 (CNY) {posPnlPositive ? '+' : ''}{formatAmount(pos.pnlCny)}
); }) )}
资产分布
); }