Files
client-web/src/modules/first-leg/utils/inboundBilling.ts
T

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)}`
}