48 lines
1.5 KiB
JavaScript
48 lines
1.5 KiB
JavaScript
import dayjs from 'dayjs'
|
|
|
|
/**
|
|
* 按 displayFormat 将原始值格式化为展示字符串,供数据层预格式化使用。
|
|
* 展示值直接写入行数据,表格走原生文本渲染,无 customCell 运行时开销。
|
|
* @param {*} value - 原始值
|
|
* @param {string|Function} format - 'money' | 'number' | 'percent' | 'date' | 'datetime' | 'time' | 自定义函数
|
|
* @returns {string} 格式化后的文本
|
|
*/
|
|
export function formatCellValue(value, format) {
|
|
if (value === null || value === undefined || value === '') return ''
|
|
if (typeof format === 'function') return String(format(value))
|
|
|
|
switch (format) {
|
|
case 'money': {
|
|
const num = Number(value)
|
|
if (!Number.isFinite(num)) return String(value)
|
|
return (
|
|
'¥' +
|
|
num.toLocaleString('zh-CN', {
|
|
minimumFractionDigits: 2,
|
|
maximumFractionDigits: 2,
|
|
})
|
|
)
|
|
}
|
|
case 'number': {
|
|
const num = Number(value)
|
|
if (!Number.isFinite(num)) return String(value)
|
|
return num.toLocaleString('zh-CN', {
|
|
minimumFractionDigits: 0,
|
|
maximumFractionDigits: 0,
|
|
})
|
|
}
|
|
case 'percent': {
|
|
const num = Number(value)
|
|
if (!Number.isFinite(num)) return String(value)
|
|
return (num * 100).toFixed(1) + '%'
|
|
}
|
|
case 'date':
|
|
return dayjs(value).format('YYYY-MM-DD')
|
|
case 'datetime':
|
|
return dayjs(value).format('YYYY-MM-DD HH:mm:ss')
|
|
case 'time':
|
|
return dayjs(value).format('HH:mm:ss')
|
|
default:
|
|
return String(value)
|
|
}
|
|
} |