From 4f866407a98c721a3e134fd215f0776e6750bc5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B8=B8=E7=86=9F=E5=90=B4=E5=BD=A6=E7=A5=96?= Date: Tue, 7 Jul 2026 14:51:57 +0800 Subject: [PATCH] 1 --- .../modules/production/generateReport.vue | 57 ++++++++++++++++--- 1 file changed, 49 insertions(+), 8 deletions(-) diff --git a/src/views/modules/production/generateReport.vue b/src/views/modules/production/generateReport.vue index 739e12c..a3732e2 100644 --- a/src/views/modules/production/generateReport.vue +++ b/src/views/modules/production/generateReport.vue @@ -908,17 +908,58 @@ }else { this.saveHeaderData.moldQty=this.moQty } - let boxWeightKG=0 - if(this.saveHeaderData.boxWeight!=null&&this.saveHeaderData.boxWeight!=''){ - boxWeightKG=this.saveHeaderData.boxWeight + // ========== 报工重量计算(传给后端 saveGenerateReportForSchedule)- rqrq ========== + // 页面上三个重量相关字段的关系: + // 带框合格重量(KG) → this.KGApprove = 合格数量 × 重量系数(qty3) + 框重 + // 不合格/缺失重量(KG) → this.KGReported = 不合格数量 × 重量系数(qty3) + // 框重(KG) → saveHeaderData.boxWeight + // + // 传给后端的两个字段(存储过程 sfdc_schedule 使用): + // approveWeight = 合格净重(不含框)= KGApprove - 框重 + // reportWeight = 报工总净重 = 合格净重 + 不合格净重 + // = (KGApprove - 框重) + KGReported + // + // 注意:KGApprove/KGReported 平时靠输入框 @blur 反算,用户可能没点失焦就保存, + // 所以保存前若重量为空,要按数量 × 系数再算一遍,避免传错值。 + + // 第1步:取框重,没填按 0 算 + let boxWeightKG = 0 + if (this.saveHeaderData.boxWeight != null && this.saveHeaderData.boxWeight !== '') { + boxWeightKG = Number(this.saveHeaderData.boxWeight) } - if(this.KGApprove!=null&&this.KGApprove!=''&&this.KGApprove>=0){ - this.saveHeaderData.approveWeight=Number(this.KGApprove)-boxWeightKG - if(this.KGReported!=null&&this.KGReported!=''){ - this.KGReported=0 + + // 第2步:有重量系数时才计算(qty3 来自 ERP weightFactor;未维护则传 0) + if (this.qty3 && this.qty3 != 0 && this.qty3 !== 'erp未维护数据') { + // 2.1 带框合格重量:优先用页面上已填的 KGApprove + let kgApprove = (this.KGApprove !== '' && this.KGApprove != null) ? Number(this.KGApprove) : NaN + if (isNaN(kgApprove)) { + // 页面上没填或没失焦时,用合格数量反算:合格数量 × 系数 + 框重 + kgApprove = Number(this.saveHeaderData.qtyApprove || 0) * Number(this.qty3) + boxWeightKG } - this.saveHeaderData.reportWeight=Number(this.KGApprove)-boxWeightKG+Number(this.KGReported) + + // 2.2 不合格/缺失重量:优先用页面上已填的 KGReported + let kgReported = (this.KGReported !== '' && this.KGReported != null) ? Number(this.KGReported) : NaN + if (isNaN(kgReported)) { + // 页面上没填或没失焦时,用不合格数量反算:不合格数量 × 系数 + kgReported = Number(this.saveHeaderData.qtyUnApprove || 0) * Number(this.qty3) + } + + // 2.3 先各自 Number() 再运算,避免 + 碰到字符串变成拼接(如 50 + "5" = "505") + let kgApproveNum = Number(kgApprove) + let boxWeightNum = Number(boxWeightKG) + let kgReportedNum = Number(kgReported) + let approveNetWeight = kgApproveNum - boxWeightNum // 合格净重 = 带框合格 - 框重 + let reportTotalWeight = approveNetWeight + kgReportedNum // 报工总净重 = 合格净重 + 不合格净重 + + // 2.4 保留1位小数后转回数字,传给后端 approveWeight / reportWeight + this.saveHeaderData.approveWeight = Number(approveNetWeight.toFixed(1)) + this.saveHeaderData.reportWeight = Number(reportTotalWeight.toFixed(1)) + } else { + // ERP 未维护重量系数,重量字段不参与报工 + this.saveHeaderData.approveWeight = 0 + this.saveHeaderData.reportWeight = 0 } + // ========== 报工重量计算结束 - rqrq ========== if(this.saveHeaderData.scrapQty==null||this.saveHeaderData.scrapQty==''){ this.saveHeaderData.scrapQty=0 }