| | |
| | | |
| | | /** 库存/数量显示:保留最多6位小数,去掉末尾多余的0(不强制补零) */ |
| | | export const formatQuantity = (value) => { |
| | | if (value == null || value === '') return '0'; |
| | | const n = Number(value); |
| | | if (Number.isNaN(n)) return '0'; |
| | | if (n < 0) return '0'; |
| | | return n % 1 === 0 ? String(n) : n.toFixed(6).replace(/\.?0+$/, ''); |
| | | }; |
| | | |
| | | /** 校验最多 N 位小数,用于数量类字段;超过时返回错误信息并阻止提交 */ |
| | | export const maxDecimalPlaces = (maxDecimals, message) => { |
| | | const factor = Math.pow(10, maxDecimals); |
| | | const msg = message || `最多${maxDecimals}位小数`; |
| | | return (value) => { |
| | | if (value == null || value === '') return undefined; |
| | | const n = Number(value); |
| | | if (Number.isNaN(n)) return undefined; |
| | | const rounded = Math.round(n * factor) / factor; |
| | | if (Math.abs(n - rounded) > 1e-10) return msg; |
| | | return undefined; |
| | | }; |
| | | }; |
| | | |
| | | /** 判断数值是否超过 6 位小数(用于提交前校验) */ |
| | | export const hasMoreThan6Decimals = (value) => { |
| | | if (value == null || value === '') return false; |
| | | const n = Number(value); |
| | | if (Number.isNaN(n)) return false; |
| | | const rounded = Math.round(n * 1e6) / 1e6; |
| | | return Math.abs(n - rounded) > 1e-10; |
| | | }; |
| | | |
| | | export const extractNavMenus = (data) => { |
| | | if (!data) { |
| | | return; |