72 lines
2.4 KiB
TypeScript
72 lines
2.4 KiB
TypeScript
export function formatInboundNumber(value: number | null | undefined, maximumFractionDigits = 3) {
|
|
if (value === null || value === undefined || !Number.isFinite(value)) return '-'
|
|
return new Intl.NumberFormat('zh-CN', { maximumFractionDigits }).format(value)
|
|
}
|
|
|
|
export function formatInboundMeasure(value: number | null | undefined, unit: string, maximumFractionDigits = 3) {
|
|
const formatted = formatInboundNumber(value, maximumFractionDigits)
|
|
return formatted === '-' ? formatted : `${formatted} ${unit}`
|
|
}
|
|
|
|
export function formatInboundMoney(value: number | null | undefined, currency: string) {
|
|
if (value === null || value === undefined || !Number.isFinite(value)) return '-'
|
|
try {
|
|
return new Intl.NumberFormat('zh-CN', {
|
|
style: 'currency',
|
|
currency,
|
|
minimumFractionDigits: 2,
|
|
maximumFractionDigits: 2,
|
|
}).format(value)
|
|
} catch {
|
|
return `${currency} ${value.toFixed(2)}`
|
|
}
|
|
}
|
|
|
|
export function formatInboundDateTime(value: string | null | undefined) {
|
|
if (!value) return '-'
|
|
const date = new Date(value)
|
|
if (Number.isNaN(date.getTime())) return value
|
|
return new Intl.DateTimeFormat('zh-CN', {
|
|
year: 'numeric',
|
|
month: '2-digit',
|
|
day: '2-digit',
|
|
hour: '2-digit',
|
|
minute: '2-digit',
|
|
hour12: false,
|
|
}).format(date)
|
|
}
|
|
|
|
export function getChargeModeLabel(value: 'KG' | 'CBM') {
|
|
return value === 'KG' ? '按重量计费' : '按体积计费'
|
|
}
|
|
|
|
export function getTaxModeLabel(value: string) {
|
|
if (value === 'TAX_INCLUDED') return '包税'
|
|
if (value === 'TAX_EXCLUDED') return '不包税'
|
|
return value || '-'
|
|
}
|
|
|
|
export function getRoundingModeLabel(value: string | null | undefined) {
|
|
const labels: Record<string, string> = {
|
|
UP: '向上舍入',
|
|
DOWN: '向下舍入',
|
|
CEILING: '向上取整',
|
|
FLOOR: '向下取整',
|
|
HALF_UP: '四舍五入',
|
|
HALF_DOWN: '五舍六入',
|
|
HALF_EVEN: '银行家舍入',
|
|
}
|
|
return value ? labels[value] || value : '-'
|
|
}
|
|
|
|
export function formatConversionPrecision(
|
|
conversionFactor: number | null | undefined,
|
|
roundingScale: number | null | undefined,
|
|
roundingMode: string | null | undefined,
|
|
) {
|
|
if (conversionFactor === null || conversionFactor === undefined
|
|
|| roundingScale === null || roundingScale === undefined
|
|
|| !roundingMode) return '-'
|
|
return `系数 ${formatInboundNumber(conversionFactor)} · 保留 ${roundingScale} 位 ${getRoundingModeLabel(roundingMode)}`
|
|
}
|