// 格式化工具函数 /** * 格式化日期 YYYY-MM-DD */ export function formatDate(dateStr: string | Date | null | undefined): string { if (!dateStr) return '-'; const d = new Date(dateStr); if (isNaN(d.getTime())) return String(dateStr); const year = d.getFullYear(); const month = String(d.getMonth() + 1).padStart(2, '0'); const day = String(d.getDate()).padStart(2, '0'); return `${year}-${month}-${day}`; } /** * 格式化日期时间 YYYY-MM-DD HH:mm */ export function formatDateTime(dateStr: string | Date | null | undefined): string { if (!dateStr) return '-'; const d = new Date(dateStr); if (isNaN(d.getTime())) return String(dateStr); const year = d.getFullYear(); const month = String(d.getMonth() + 1).padStart(2, '0'); const day = String(d.getDate()).padStart(2, '0'); const hour = String(d.getHours()).padStart(2, '0'); const minute = String(d.getMinutes()).padStart(2, '0'); return `${year}-${month}-${day} ${hour}:${minute}`; } /** * 格式化金额(带千分位分隔符,保留2位小数) */ export function formatMoney(amount: number | null | undefined): string { if (amount == null || isNaN(amount)) return '0.00'; return Number(amount).toLocaleString('zh-CN', { minimumFractionDigits: 2, maximumFractionDigits: 2 }); } /** * 格式化数量(带千分位分隔符,无小数) */ export function formatNumber(num: number | null | undefined): string { if (num == null || isNaN(num)) return '0'; return Number(num).toLocaleString('zh-CN'); } /** * 格式化百分比 */ export function formatPercent(value: number, total: number): string { if (total === 0) return '0%'; const percent = (value / total) * 100; return `${percent.toFixed(1)}%`; }