42 lines
1.3 KiB
JavaScript
42 lines
1.3 KiB
JavaScript
export function formatCurrency(value) {
|
|
const number = Number(value || 0);
|
|
return `¥${number.toLocaleString('zh-CN', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`;
|
|
}
|
|
|
|
export function formatNumber(value, digits = 2) {
|
|
return Number(value || 0).toLocaleString('zh-CN', { minimumFractionDigits: digits, maximumFractionDigits: digits });
|
|
}
|
|
|
|
export function formatPercent(value) {
|
|
const number = Number(value || 0);
|
|
return `${number > 0 ? '+' : ''}${number.toFixed(2)}%`;
|
|
}
|
|
|
|
export function formatDateTime(value, includeSeconds = false) {
|
|
if (!value) return '--';
|
|
const date = new Date(value);
|
|
if (Number.isNaN(date.getTime())) return String(value);
|
|
return new Intl.DateTimeFormat('zh-CN', {
|
|
year: 'numeric',
|
|
month: '2-digit',
|
|
day: '2-digit',
|
|
hour: '2-digit',
|
|
minute: '2-digit',
|
|
...(includeSeconds ? { second: '2-digit' } : {}),
|
|
hour12: false,
|
|
}).format(date).replaceAll('/', '-');
|
|
}
|
|
|
|
export function valueClass(value) {
|
|
const number = Number(value || 0);
|
|
if (number > 0) return 'value--positive';
|
|
if (number < 0) return 'value--negative';
|
|
return 'value--muted';
|
|
}
|
|
|
|
export function escapeHtml(value) {
|
|
const node = document.createElement('span');
|
|
node.textContent = String(value ?? '');
|
|
return node.innerHTML;
|
|
}
|