| | |
| | | |
| | | /** 库存/数量显示:保留最多6位小数,去掉末尾多余的0(不强制补零) */ |
| | | /** 前端数量显示:统一保留2位小数(仅展示,后端不变) */ |
| | | export const formatQuantity = (value) => { |
| | | if (value == null || value === '') return '0'; |
| | | if (value == null || value === '') return '0.00'; |
| | | 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+$/, ''); |
| | | if (Number.isNaN(n)) return '0.00'; |
| | | if (n < 0) return '0.00'; |
| | | return n.toFixed(2); |
| | | }; |
| | | |
| | | /** 用于 react-admin NumberField 的数量展示 options(2位小数) */ |
| | | export const QTY_NUMBER_OPTIONS = { minimumFractionDigits: 2, maximumFractionDigits: 2 }; |
| | | |
| | | /** 校验最多 N 位小数,用于数量类字段;超过时返回错误信息并阻止提交 */ |
| | | export const maxDecimalPlaces = (maxDecimals, message) => { |
| | |
| | | const navMenus = []; |
| | | const traverse = (nodes) => { |
| | | nodes.forEach((node) => { |
| | | if (!node.children) { |
| | | navMenus.push(node); |
| | | // 叶子:无子或 children 为空数组;仅收集有 component 的节点(页面资源) |
| | | const children = node.children; |
| | | const hasChildren = Array.isArray(children) && children.length > 0; |
| | | if (!hasChildren) { |
| | | if (node.component) { |
| | | navMenus.push(node); |
| | | } |
| | | } else { |
| | | traverse(node.children); |
| | | traverse(children); |
| | | } |
| | | }); |
| | | }; |