const CURRENCY_NAME_MAP = { CNY: '人民币', RMB: '人民币', USD: '美元', EUR: '欧元', JPY: '日元', GBP: '英镑', }; const CURRENCY_UNIT_MAP = { CNY: '元', RMB: '元', USD: '美元', EUR: '欧元', JPY: '日元', GBP: '英镑', }; const CURRENCY_NAME_TO_UNIT = { 人民币: '元', 美元: '美元', 欧元: '欧元', 日元: '日元', 英镑: '英镑', }; /** * 归一化币种代码(CNY → RMB) */ export function normalizeCurrencyCode(value, fallback = 'RMB') { const raw = typeof value === 'object' ? value?.dictKey || value?.value || value?.code || value?.dictValue || '' : value; const normalized = String(raw || fallback) .trim() .toUpperCase(); const code = normalized.includes(' - ') ? normalized.split(' - ')[0].trim() : normalized; if (!code) return fallback; return code === 'CNY' ? 'RMB' : code; } /** * 币种中文名称 */ export function currencyName(value) { const text = String(value || ''); if (text.includes(' - ')) return text.slice(text.indexOf(' - ') + 3); return CURRENCY_NAME_MAP[text.toUpperCase()] || text; } /** * 金额单位文案:RMB/CNY → 元,USD → 美元 */ export function currencyUnit(value) { const text = String(value || ''); let code = text; if (text.includes(' - ')) { code = text.split(' - ')[0].trim(); } const upperCode = code.toUpperCase(); if (CURRENCY_UNIT_MAP[upperCode]) { return CURRENCY_UNIT_MAP[upperCode]; } if (CURRENCY_NAME_TO_UNIT[code]) { return CURRENCY_NAME_TO_UNIT[code]; } return text || '元'; } /** * 将计价单位前缀替换为当前币种单位,如 元/吨 → 美元/吨 */ export function remapPriceUnitCurrency(priceUnit, currency) { const text = String(priceUnit || '').trim(); if (!text || !text.includes('/')) return text; const suffix = text.slice(text.indexOf('/')); return `${currencyUnit(currency)}${suffix}`; } /** * 按数量单位生成默认计价单位 */ export function resolvePriceUnitByQuantityUnit(quantityUnit, currency = 'RMB') { const unit = currencyUnit(currency); return ( { 吨: `${unit}/吨`, 方: `${unit}/立方`, 件: `${unit}/件`, }[String(quantityUnit || '').trim()] || '' ); } /** * 将字典中的计价单位选项映射到当前币种 */ export function mapFeeUnitOptions(options = [], currency = 'RMB') { const unit = currencyUnit(currency); return (options || []).map(item => { const label = String(item.label || item.value || ''); const value = String(item.value || item.label || ''); return { ...item, label: label.replace(/^元/, unit).replace(/^人民币/, unit), value: value.replace(/^元/, unit).replace(/^人民币/, unit), }; }); }