import { getAssets } from '@/actions/asset'; import { getTransactions } from '@/actions/transaction'; import { AddTransactionDialog } from '@/components/transactions/add-transaction-dialog'; import { formatAmount, formatQuantity } from '@/lib/formatters'; import { Table, TableBody, TableCaption, TableCell, TableHead, TableHeader, TableRow, } from '@/components/ui/table'; export default async function TransactionsPage() { const [assets, transactions] = await Promise.all([ getAssets(), getTransactions(), ]); const typeLabels: Record = { BUY: '买入', SELL: '卖出', DIVIDEND: '分红', AIRDROP: '空投', FEE: '手续费', }; const assetMap = new Map(assets.map((a) => [a.id, { symbol: a.symbol, type: a.type }])); return (

交易流水

共 {transactions.length} 条交易记录 标的 类型 数量 价格 手续费 币种 执行时间 {transactions.length === 0 ? ( 暂无流水,点击"添加流水"按钮录入第一笔交易 ) : ( transactions.map((tx) => { const assetInfo = assetMap.get(tx.assetId); const symbol = assetInfo?.symbol || tx.assetId; const assetType = assetInfo?.type || 'CASH'; return ( {symbol} {typeLabels[tx.txType] || tx.txType} {formatQuantity(tx.quantity, assetType)} {formatAmount(tx.price)} {formatAmount(tx.fee)} {tx.txCurrency} {tx.executedAt ? new Date(tx.executedAt).toLocaleString('zh-CN') : '-'} ); }) )}
); }