eaece0209d
结算币种驱动计费单价单位及运单/计划/总单计价单位;同步合同编号预览、部门前缀配置、派车备注与查看弹窗等交互优化。 Co-authored-by: Cursor <cursoragent@cursor.com>
110 lines
2.7 KiB
JavaScript
110 lines
2.7 KiB
JavaScript
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),
|
|
};
|
|
});
|
|
}
|