diff --git a/src/utils/priceFormatters.js b/src/utils/priceFormatters.js index e93d4dfb..b4642867 100644 --- a/src/utils/priceFormatters.js +++ b/src/utils/priceFormatters.js @@ -103,3 +103,71 @@ export const PriceArrow = ({ value }) => { return ; }; + +// ==================== 货币/数值格式化 ==================== + +/** + * 格式化货币金额(自动选择单位:亿元/万元/元) + * @param {number|null|undefined} value - 金额(单位:元) + * @returns {string} 格式化后的金额字符串 + */ +export const formatCurrency = (value) => { + if (value === null || value === undefined) return '-'; + const absValue = Math.abs(value); + if (absValue >= 100000000) { + return (value / 100000000).toFixed(2) + '亿元'; + } else if (absValue >= 10000) { + return (value / 10000).toFixed(2) + '万元'; + } + return value.toFixed(2) + '元'; +}; + +/** + * 格式化业务营收(支持指定单位) + * @param {number|null|undefined} value - 营收金额 + * @param {string} [unit] - 原始单位(元/万元/亿元) + * @returns {string} 格式化后的营收字符串 + */ +export const formatBusinessRevenue = (value, unit) => { + if (value === null || value === undefined) return '-'; + if (unit) { + if (unit === '元') { + const absValue = Math.abs(value); + if (absValue >= 100000000) { + return (value / 100000000).toFixed(2) + '亿元'; + } else if (absValue >= 10000) { + return (value / 10000).toFixed(2) + '万元'; + } + return value.toFixed(0) + '元'; + } else if (unit === '万元') { + const absValue = Math.abs(value); + if (absValue >= 10000) { + return (value / 10000).toFixed(2) + '亿元'; + } + return value.toFixed(2) + '万元'; + } else if (unit === '亿元') { + return value.toFixed(2) + '亿元'; + } else { + return value.toFixed(2) + unit; + } + } + // 无单位时,假设为元 + const absValue = Math.abs(value); + if (absValue >= 100000000) { + return (value / 100000000).toFixed(2) + '亿元'; + } else if (absValue >= 10000) { + return (value / 10000).toFixed(2) + '万元'; + } + return value.toFixed(2) + '元'; +}; + +/** + * 格式化百分比 + * @param {number|null|undefined} value - 百分比值 + * @param {number} [decimals=2] - 小数位数 + * @returns {string} 格式化后的百分比字符串 + */ +export const formatPercentage = (value, decimals = 2) => { + if (value === null || value === undefined) return '-'; + return value.toFixed(decimals) + '%'; +};