From 7afab80e0c34842345717a821efd2219a35b0d98 Mon Sep 17 00:00:00 2001 From: chenhao Date: Thu, 4 Dec 2025 11:03:24 +0800 Subject: [PATCH] =?UTF-8?q?feat(calc):=20=E5=BC=95=E5=85=A5=E9=AB=98?= =?UTF-8?q?=E7=B2=BE=E5=BA=A6=E8=AE=A1=E7=AE=97=E5=B7=A5=E5=85=B7=E5=B9=B6?= =?UTF-8?q?=E6=9B=BF=E6=8D=A2=E5=8E=9F=E6=9C=89=E7=B2=BE=E5=BA=A6=E5=A4=84?= =?UTF-8?q?=E7=90=86=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增基于 decimal.js 的高精度计算工具类 - 在 main.js 中全局挂载 $calc 对象供所有组件使用 - 替换项目中多处使用的 preciseCurrencyRound 方法 - 统一处理加减乘除及四舍五入运算,提升数值计算准确性 - 移除旧的 ruoyi.js 中的精确货币舍入函数 - 更新 package.json 添加 decimal.js 依赖项 --- oms_web/oms_vue/package.json | 3 +- oms_web/oms_vue/src/main.js | 2 + oms_web/oms_vue/src/utils/calc.js | 38 ++++++++++++++++++ oms_web/oms_vue/src/utils/ruoyi.js | 7 +--- .../src/views/approve/order/ConfigInfo.vue | 6 +-- .../src/views/project/info/ProductConfig.vue | 33 ++++++++------- .../components/PurchaseOrderDetail.vue | 40 +++++++++---------- .../components/PurchaseOrderDetailView.vue | 8 ++-- 8 files changed, 86 insertions(+), 51 deletions(-) create mode 100644 oms_web/oms_vue/src/utils/calc.js diff --git a/oms_web/oms_vue/package.json b/oms_web/oms_vue/package.json index 9b44bc24..dccf5b15 100644 --- a/oms_web/oms_vue/package.json +++ b/oms_web/oms_vue/package.json @@ -48,7 +48,8 @@ "vue-cropper": "0.5.5", "vue-router": "3.4.9", "vuedraggable": "2.24.3", - "vuex": "3.6.0" + "vuex": "3.6.0", + "decimal.js": "10.4.2" }, "devDependencies": { "@vue/cli-plugin-babel": "4.4.6", diff --git a/oms_web/oms_vue/src/main.js b/oms_web/oms_vue/src/main.js index da017509..189b9dfc 100644 --- a/oms_web/oms_vue/src/main.js +++ b/oms_web/oms_vue/src/main.js @@ -4,7 +4,9 @@ import Cookies from 'js-cookie' import Element from 'element-ui' import './assets/styles/element-variables.scss' +import * as Calc from '@/utils/calc' +Vue.prototype.$calc = Calc // 全局挂载 import '@/assets/styles/index.scss' // global css import '@/assets/styles/ruoyi.scss' // ruoyi css import App from './App' diff --git a/oms_web/oms_vue/src/utils/calc.js b/oms_web/oms_vue/src/utils/calc.js new file mode 100644 index 00000000..37c814de --- /dev/null +++ b/oms_web/oms_vue/src/utils/calc.js @@ -0,0 +1,38 @@ +import Decimal from 'decimal.js' + +// 默认保留小数位(你可根据业务修改,比如金额一般 2 位) +const DEFAULT_DP = 2 + +// 内部方法:统一转换 Decimal,避免 null/undefined 报错 +function D(n) { + return new Decimal(n || 0) +} + +/** + * 保留小数位 & 四舍五入 + * @param value 数值 + * @param dp 保留位数(默认 DEFAULT_DP) + */ +export function toFixed(value, dp = DEFAULT_DP) { + return D(value).toDecimalPlaces(dp).toNumber() +} + +// 加法 +export function add(a, b, dp = DEFAULT_DP) { + return D(a).plus(b).toDecimalPlaces(dp).toNumber() +} + +// 减法 +export function sub(a, b, dp = DEFAULT_DP) { + return D(a).minus(b).toDecimalPlaces(dp).toNumber() +} + +// 乘法 +export function mul(a, b, dp = DEFAULT_DP) { + return D(a).times(b).toDecimalPlaces(dp).toNumber() +} + +// 除法 +export function div(a, b, dp = DEFAULT_DP) { + return D(a).div(b || 1).toDecimalPlaces(dp).toNumber() +} diff --git a/oms_web/oms_vue/src/utils/ruoyi.js b/oms_web/oms_vue/src/utils/ruoyi.js index ae9eadfb..d75265d8 100644 --- a/oms_web/oms_vue/src/utils/ruoyi.js +++ b/oms_web/oms_vue/src/utils/ruoyi.js @@ -226,9 +226,4 @@ export function getNormalPath(p) { export function blobValidate(data) { return data.type !== 'application/json' } -export function preciseCurrencyRound(amount,decimalPlace) { - if (decimalPlace){ - return Number(Math.round(amount + `e${decimalPlace}`) + `e-${decimalPlace}`); - } - return Number(Math.round(amount + 'e2') + 'e-2'); -} + diff --git a/oms_web/oms_vue/src/views/approve/order/ConfigInfo.vue b/oms_web/oms_vue/src/views/approve/order/ConfigInfo.vue index 7a7c3db1..488e46dd 100644 --- a/oms_web/oms_vue/src/views/approve/order/ConfigInfo.vue +++ b/oms_web/oms_vue/src/views/approve/order/ConfigInfo.vue @@ -206,7 +206,6 @@