Procházet zdrojové kódy

fix: 开启自动损耗时损耗数(不合格品)为累加,最大不能超过样品数

xieyong před 3 dny
rodič
revize
f6cb9d3b28

+ 66 - 25
src/views/inspectionWork/components/inspectionProjectReport.vue

@@ -431,11 +431,9 @@
             slot: 'sampleQualifiedNumber',
             align: 'center',
             formatter: (row) => {
-              if (row.sampleQualifiedNumber) {
-                return (
-                  row.sampleQualifiedNumber + (this.form.measureUnit || '')
-                );
-              }
+              let value = row.sampleQualifiedNumber || 0;
+              if(Number(value) < 0) value = 0;
+              return (value) + (this.form.measureUnit || '');
             },
             label: '样品合格数',
             showOverflowTooltip: true
@@ -455,9 +453,9 @@
             slot: 'lossNumber',
             align: 'center',
             formatter: (row) => {
-              if (row.lossNumber) {
-                return row.lossNumber + (this.form.measureUnit || '');
-              }
+              let value = row.lossNumber || 0;
+              if(Number(value) < 0) value = 0;
+              return (value) + (this.form.measureUnit || '');
             },
             label: '损耗数(合格品)',
             showOverflowTooltip: true
@@ -927,8 +925,27 @@
             ]);
           });
         }
-        this.form.sampleQualifiedNumber = this.form.sampleQuantity;
-        this.form.sampleNoQualifiedNumber = 0;
+        // 样品数变化后,重新计算合格数/不合格数
+        if (this.qms_defaultDisposalType) {
+          // qms_defaultDisposalType为true时,sampleNoQualifiedNumber为下方noQualifiedQuantity累加值,最大为sampleQuantity数
+          const sumNoQualified = this.tableData.reduce((sum, item) => {
+            return sum + (Number(item.noQualifiedQuantity) || 0);
+          }, 0);
+          this.form.sampleNoQualifiedNumber = Math.min(
+            sumNoQualified,
+            this.form.sampleQuantity
+          );
+        } else {
+          this.form.sampleNoQualifiedNumber = this.tableData.length
+            ? this.tableData.reduce(
+                (max, item) =>
+                  Math.max(max, Number(item.noQualifiedQuantity) || 0),
+                0
+              )
+            : 0;
+        }
+        this.form.sampleQualifiedNumber =
+          this.form.sampleQuantity - this.form.sampleNoQualifiedNumber;
       },
       formSampleNoQualifiedNumberChange() {
         if (+this.form.sampleNoQualifiedNumber < 0) {
@@ -1056,30 +1073,54 @@
             this.form.sampleQualifiedNumber = this.form.sampleQuantity || 0;
             return;
           }
-          const maxNoQualified = newVal.reduce((max, item) => {
-            const val = Number(item.noQualifiedQuantity) || 0;
-            return val > max ? val : max;
-          }, 0);
-          this.$set(this.form, 'sampleNoQualifiedNumber', maxNoQualified);
-          const qualifiedNumber =
-            (Number(this.form.sampleQuantity) || 0) - maxNoQualified;
-          if (qualifiedNumber < 0) {
-            this.$message.warning('样品合格数不能小于0');
-            this.$set(this.form, 'sampleQualifiedNumber', 0);
+          if (this.qms_defaultDisposalType) {
+            // qms_defaultDisposalType为true时,sampleNoQualifiedNumber为下方noQualifiedQuantity累加值,最大为sampleQuantity数
+            const sumNoQualified = newVal.reduce((sum, item) => {
+              return sum + (Number(item.noQualifiedQuantity) || 0);
+            }, 0);
+            const sampleQuantity = Number(this.form.sampleQuantity) || 0;
+            this.$set(
+              this.form,
+              'sampleNoQualifiedNumber',
+              Math.min(sumNoQualified, sampleQuantity)
+            );
+            const qualifiedNumber = sampleQuantity - (Number(this.form.sampleNoQualifiedNumber) || 0);
+            if (qualifiedNumber < 0) {
+              this.$message.warning('样品合格数不能小于0');
+              this.$set(this.form, 'sampleQualifiedNumber', 0);
+            } else {
+              this.$set(this.form, 'sampleQualifiedNumber', qualifiedNumber);
+            }
           } else {
-            this.$set(this.form, 'sampleQualifiedNumber', qualifiedNumber);
+            const maxNoQualified = newVal.reduce((max, item) => {
+              const val = Number(item.noQualifiedQuantity) || 0;
+              return val > max ? val : max;
+            }, 0);
+            this.$set(this.form, 'sampleNoQualifiedNumber', maxNoQualified);
+            const qualifiedNumber =
+              (Number(this.form.sampleQuantity) || 0) - maxNoQualified;
+            if (qualifiedNumber < 0) {
+              this.$message.warning('样品合格数不能小于0');
+              this.$set(this.form, 'sampleQualifiedNumber', 0);
+            } else {
+              this.$set(this.form, 'sampleQualifiedNumber', qualifiedNumber);
+            }
           }
 
-          // 损耗数逻辑:从下方 lossNumberUnqualified 取最大值,lossNumberUnqualified = 总数量 - lossNumber
+          // 损耗数逻辑:qms_defaultDisposalType为true时获取下方lossNumberUnqualified累加值,
+          // 如果累加值大于sampleQuantity数,取最大sampleQuantity数,lossNumberUnqualified = 总数量 - lossNumber
           if(this.qms_defaultDisposalType) {
-            const maxLossNumberUnqualified = newVal.reduce((max, item) => {
+            let maxLossNumberUnqualified = newVal.reduce((max, item) => {
               const val = Number(item.lossNumberUnqualified) || 0;
-              return val > max ? val : max;
+              return val + max;
             }, 0);
-            this.$set(this.form, 'lossNumberUnqualified', maxLossNumberUnqualified);
             const lossNumber = Number(this.form.lossNumber) || 0;
             const sampleQuantity = Number(this.form.sampleQuantity) || 0;
             const maxLossNumber = sampleQuantity - maxLossNumberUnqualified;
+            if(maxLossNumberUnqualified > sampleQuantity) {
+              maxLossNumberUnqualified = sampleQuantity;
+            }
+            this.$set(this.form, 'lossNumberUnqualified', maxLossNumberUnqualified);
             if(lossNumber > maxLossNumber) {
               this.$set(this.form, 'lossNumber', maxLossNumber);
             }