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, unrealizedPnlCny } = await getPortfolioSummary();
const formattedTotal = formatAmount(totalCnyValue);
const formattedTotalPnl = formatAmount(totalPnlCny);
const formattedUnrealized = formatAmount(unrealizedPnlCny);
const totalPnlIsPositive = new Big(totalPnlCny).gte(0);
const unrealizedIsPositive = new Big(unrealizedPnlCny).gte(0);
const displayChartData = chartData.map((item) => ({
...item,
value: Number(item.value),
}));
return (
欢迎来到 Omniledger
您的跨界记账中枢。
总资产概览
¥
{formattedTotal}
总资产 (CNY)
持仓盈亏:
{unrealizedIsPositive ? '+' : ''}{formattedUnrealized}
总盈亏:
{totalPnlIsPositive ? '+' : ''}{formattedTotalPnl}
{positions.length === 0 ? (
暂无持仓,请先添加资产和交易记录。
) : (
positions.map((pos) => {
const posPnl = new Big(pos.pnlCny);
const posPnlPositive = posPnl.gte(0);
const formattedPosPnl = formatAmount(pos.pnlCny);
const posPnlNative = new Big(pos.pnlNative);
const posPnlNativePositive = posPnlNative.gte(0);
const avgCostFormatted = new Big(pos.avgCost).gt(0) ? formatAmount(pos.avgCost) : '-';
const dilutedCostFormatted = new Big(pos.dilutedCost).gt(0) ? formatAmount(pos.dilutedCost) : '-';
return (
{pos.name || pos.symbol}
{pos.symbol}
{pos.type}
持仓数量
{formatQuantity(pos.quantity, pos.type)}
结算币种
{pos.baseCurrency}
平均成本
¥{avgCostFormatted}
摊薄成本
¥{dilutedCostFormatted}
持仓天数
{pos.holdingDays} 天
持仓成本 ({pos.baseCurrency})
{formatAmount(pos.totalCostNative)}
当前盈亏 ({pos.baseCurrency})
{posPnlNativePositive ? '+' : ''}{formatAmount(pos.pnlNative)}
成本 (CNY)
¥{formatAmount(pos.totalCostCny)}
盈亏 (CNY)
{posPnlPositive ? '+' : ''}{formattedPosPnl}
);
})
)}
资产分布
);
}