소스 검색

质检报告

yusheng 1 일 전
부모
커밋
5133010bb2

+ 2 - 2
src/views/inspectionPlan/components/new-edit.vue

@@ -117,7 +117,7 @@
           <!-- 来料列表表格 -->
           <ele-pro-table
             ref="table12"
-            :columns="tableColumns"
+            :columns="columns"
             :datasource="sourceList"
             :needPage="false"
             @selection-change="handleSelectionChange"
@@ -669,7 +669,7 @@
       }
     },
     computed: {
-      tableColumns() {
+      columns() {
         let columnsVersion = this.columnsVersion;
         return [
           // (this.btnType !== 'issued' || this.baseForm.qualityMode === 2)

+ 60 - 5
src/views/inspectionReport/components/reportTemplateWrapper.vue

@@ -43,15 +43,17 @@
       @setQualifiedNumber="setQualifiedNumber"
       :total="basicInfoData.total"
       :isView="isView"
+      @setLossNumber="setLossNumber"
     >
     </unqualifiedProduct>
-    <div style="margin-top: 10px" v-if="activeComp != 'bpm' && !isView">
+    <div style="margin-top: 10px" v-if="activeComp != 'bpm'">
       结论:
       <el-select
         v-model="basicInfoData.qualityResults"
         placeholder="请选择"
         style="width: 140px"
         @change="selectResult"
+        :disabled="isView"
       >
         <el-option label="整单合格" :value="1" />
         <el-option label="整单不合格" :value="2" />
@@ -63,7 +65,7 @@
       <el-input
         v-model="basicInfoData.qualifiedNumber"
         placeholder="合格数"
-        style="width: 140px"
+        style="width: 120px"
         disabled
       ></el-input>
 
@@ -72,7 +74,35 @@
         v-model="basicInfoData.noQualifiedNumber"
         placeholder="不合格数"
         disabled
-        style="width: 140px"
+        style="width: 120px"
+      ></el-input>
+      留样数(合格):
+      <el-input
+        v-model="basicInfoData.retainedSampleQuantity"
+        placeholder=" "
+        disabled
+        style="width: 120px"
+      ></el-input>
+      留样数(不合格):
+      <el-input
+        v-model="basicInfoData.retainedSampleUnqualified"
+        placeholder=" "
+        disabled
+        style="width: 120px"
+      ></el-input>
+      消耗数(合格):
+      <el-input
+        v-model="basicInfoData.lossNumber"
+        placeholder=" "
+        disabled
+        style="width: 120px"
+      ></el-input>
+      消耗数(不合格):
+      <el-input
+        v-model="basicInfoData.lossNumberUnqualified"
+        placeholder=" "
+        disabled
+        style="width: 120px"
       ></el-input>
     </div>
     <bpmDetail
@@ -157,6 +187,7 @@
       /* 打开质检报告 */
       async open({ row, item }, isView) {
         // this.visible = true;
+        this.activeComp = 'main';
         this.isView = isView;
         this.componentName = row.reportTemplateCode;
         this.currentRow = row;
@@ -284,9 +315,11 @@
             this.basicInfoData.qualityResults = 4;
           }
         }
-        if (data.noQualifiedNumber == this.basicInfoData.total) {
+        if(!data.qualifiedNumber){
           this.basicInfoData.qualityResults = 2;
+
         }
+   
         if (data.qualifiedNumber && data.noQualifiedNumber) {
           this.basicInfoData.qualityResults = 3;
         }
@@ -406,7 +439,29 @@
           this.inspectionItems = res;
         });
       },
-
+      setLossNumber({
+        lossNumber,
+        lossNumberUnqualified,
+        retainedSampleQuantity,
+        retainedSampleUnqualified
+      }) {
+        this.$set(
+          this.basicInfoData,
+          'retainedSampleQuantity',
+          retainedSampleQuantity
+        );
+        this.$set(
+          this.basicInfoData,
+          'retainedSampleUnqualified',
+          retainedSampleUnqualified
+        );
+        this.$set(this.basicInfoData, 'lossNumber', lossNumber);
+        this.$set(
+          this.basicInfoData,
+          'lossNumberUnqualified',
+          lossNumberUnqualified
+        );
+      },
       cancel() {
         this.visible = false;
         this.$emit('close');

+ 113 - 18
src/views/inspectionReport/components/unqualifiedProduct.vue

@@ -1,10 +1,11 @@
 <template>
   <div class="ele-body">
     <el-card shadow="never" v-loading="loading">
+
       <ele-pro-table
         ref="table"
         :columns="columns"
-        :datasource="poList"
+        :datasource="poList.filter((item) => item.disposalStatus != 2)"
         :selection.sync="selection"
         :needPage="false"
         row-key="id"
@@ -291,7 +292,7 @@
               <el-input-number
                 v-model="singleQuantity"
                 :min="0"
-                :max="total"
+                :max="availableTotal"
                 style="width: 120px"
               ></el-input-number>
             </template>
@@ -450,11 +451,14 @@
         oldList: [],
         addDialogVisible: false,
         addSelection: [],
-        singleQuantity: ''
+        singleQuantity: '',
+        retainedSampleQuantity: 0,
+        retainedSampleUnqualified: 0,
+        lossNumber: 0,
+        lossNumberUnqualified: 0
       };
     },
     computed: {
-
       disposeList() {
         if (this.qualityType == 1) {
           return this.allList.filter((item) => [5, 10].includes(item.value));
@@ -470,6 +474,14 @@
           return this.allList;
         }
       },
+      // 可用总数 = 总数 - 留样数 - 消耗数
+      availableTotal() {
+        if (!this.sampleList.length) return this.total;
+        const usedQuantity = this.sampleList
+          .filter((item) => item.disposeType == 6 || item.disposeType == 7)
+          .reduce((sum, item) => sum + (item.measureQuantity || 0), 0);
+        return this.total - usedQuantity;
+      },
       // 表格列配置
       columns() {
         const arr = [
@@ -478,7 +490,10 @@
             type: 'selection',
             columnKey: 'selection',
             reserveSelection: true,
-            align: 'center'
+            align: 'center',
+            selectable: (row, index) => {
+              return row.disposalStatus != 2;
+            }
           },
           {
             columnKey: 'index',
@@ -548,6 +563,9 @@
             width: '120',
             showOverflowTooltip: true
           },
+
+          { label: '计量数量', prop: 'measureQuantity', align: 'center' },
+          { label: '计量单位', prop: 'measureUnit', align: 'center' },
           {
             prop: 'weight',
             label: '重量',
@@ -568,9 +586,6 @@
             align: 'center'
           },
 
-          { label: '计量数量', prop: 'measureQuantity', align: 'center' },
-          { label: '计量单位', prop: 'measureUnit', align: 'center' },
-
           {
             prop: 'produceRoutingName',
             label: '工艺路线',
@@ -661,19 +676,25 @@
       setQualifiedNumber() {
         let isQualifiedNumber = true;
         let noQualifiedNumber = this.poList
-          .filter((item) => item.disposeType != 5)
+          .filter((item) => item.disposeType != 5 && item.disposalStatus != 2)
           .reduce((acc, cur) => acc + cur.measureQuantity, 0);
 
+        console.log(
+          this.poList.map((item) => item.measureQuantity),
+          'noQualifiedNumber'
+        );
+
         if (
           this.poList
             .filter((item) => item.disposeType == 5)
-            .reduce((acc, cur) => acc + cur.measureQuantity, 0) == this.total
+            .reduce((acc, cur) => acc + cur.measureQuantity, 0) ==
+          this.availableTotal
         ) {
           isQualifiedNumber = false;
         }
         this.$emit('setQualifiedNumber', {
           noQualifiedNumber,
-          qualifiedNumber: this.total - noQualifiedNumber,
+          qualifiedNumber: this.availableTotal - noQualifiedNumber,
           isQualifiedNumber
         });
       },
@@ -681,21 +702,40 @@
         if (qualityResults == 1) {
           this.poList = JSON.parse(JSON.stringify(this.oldList));
           this.poList = this.poList.map((item) => {
-            item.disposalStatus = 1;
-            item.disposeType = 5;
+            if (item.disposalStatus != 2) {
+              item.disposalStatus = 1;
+              item.disposeType = 5;
+            }
+
             return item;
           });
         }
         if (qualityResults == 4) {
-          this.poList = JSON.parse(JSON.stringify(this.inventoryList));
+          this.poList = [
+            ...JSON.parse(JSON.stringify(this.inventoryList)),
+            ...JSON.parse(
+              JSON.stringify(
+                this.oldList.filter((item) => item.disposalStatus == 2)
+              )
+            )
+          ];
           this.poList = this.poList.map((item) => {
-            item.disposalStatus = 1;
-            item.disposeType = 5;
+            if (item.disposalStatus != 2) {
+              item.disposalStatus = 1;
+              item.disposeType = 5;
+            }
             return item;
           });
         }
         if (qualityResults == 2) {
-          this.poList = JSON.parse(JSON.stringify(this.inventoryList));
+          this.poList = [
+            ...JSON.parse(JSON.stringify(this.inventoryList)),
+            ...JSON.parse(
+              JSON.stringify(
+                this.oldList.filter((item) => item.disposalStatus == 2)
+              )
+            )
+          ];
         }
         if (qualityResults == 3) {
           this.poList = JSON.parse(JSON.stringify(this.oldList));
@@ -714,6 +754,7 @@
         const arr = await getById(this.id);
         this.oldList = JSON.parse(JSON.stringify(arr.poList));
         this.poList = arr.poList;
+        this.setQualifiedNumber();
       },
 
       //   async getRefluxTask() {
@@ -766,7 +807,7 @@
             0
           );
         }
-        if (poListTotal + selectedTotal > this.total) {
+        if (poListTotal + selectedTotal > this.availableTotal) {
           this.$message.error('选中的计量数量之和加上已有数量不能超过总数');
           return;
         }
@@ -801,6 +842,7 @@
         if (res.list.length > 0) {
           this.inventoryList = res.list;
         }
+        return;
       },
 
       async queryQualitySamplContent() {
@@ -809,6 +851,59 @@
           size: 1000
         });
         this.sampleList = res.list;
+        [
+          'retainedSampleQuantity',
+          'retainedSampleUnqualified',
+          'lossNumber',
+          'lossNumberUnqualified'
+        ].forEach((key) => {
+          this[key] = 0;
+        });
+        if (this.sampleList.length > 0 && this.inventoryList.length > 0) {
+          const processedList = this.sampleList.filter(
+            (item) => item.disposeType == 6 || item.disposeType == 7
+          );
+          processedList.forEach((sampleItem) => {
+            if (sampleItem.disposeType == 6) {
+              sampleItem.qualityResults == 2
+                ? (this.retainedSampleQuantity += sampleItem.measureQuantity)
+                : (this.retainedSampleUnqualified +=
+                    sampleItem.measureQuantity);
+            } else {
+              sampleItem.qualityResults == 2
+                ? (this.lossNumber += sampleItem.measureQuantity)
+                : (this.lossNumberUnqualified += sampleItem.measureQuantity);
+            }
+            const inventoryItem = this.inventoryList.find(
+              (item) => item.sourceId === sampleItem.sourceId
+            );
+            if (inventoryItem) {
+              inventoryItem.measureQuantity = Math.max(
+                0,
+                (inventoryItem.measureQuantity || 0) -
+                  (sampleItem.measureQuantity || 0)
+              );
+            }
+          });
+          if (
+            this.inventoryList.length == 1 &&
+            !this.inventoryList[0].sourceId
+          ) {
+            this.inventoryList[0].measureQuantity =
+              this.inventoryList[0].measureQuantity -
+              this.lossNumber -
+              this.lossNumberUnqualified -
+              this.retainedSampleQuantity -
+              this.retainedSampleUnqualified;
+          }
+        }
+        this.$emit('setLossNumber', {
+          lossNumber: this.lossNumber,
+          lossNumberUnqualified: this.lossNumberUnqualified,
+          retainedSampleQuantity: this.retainedSampleQuantity,
+          retainedSampleUnqualified: this.retainedSampleUnqualified
+        });
+        return;
       },
 
       async handleDispose() {

+ 26 - 9
src/views/inspectionWork/edit.vue

@@ -209,6 +209,7 @@
               <el-input
                 v-else
                 v-model="form.retainedSampleQuantity"
+                :disabled="default_disposal_type == 1"
                 @input="
                   inputValue('retainedSampleQuantity', 'sampleQualifiedNumber')
                 "
@@ -234,6 +235,7 @@
               <el-input
                 v-else
                 v-model="form.retainedSampleUnqualified"
+                :disabled="default_disposal_type == 1"
                 @input="
                   inputValue(
                     'retainedSampleUnqualified',
@@ -259,6 +261,7 @@
               <el-input
                 v-else
                 v-model="form.lossNumber"
+                :disabled="default_disposal_type == 1"
                 @input="inputValue('lossNumber', 'sampleQualifiedNumber')"
                 ><template slot="append">{{
                   sampleList[0]?.measureUnit
@@ -282,6 +285,7 @@
               <el-input
                 v-else
                 v-model="form.lossNumberUnqualified"
+                :disabled="default_disposal_type == 1"
                 @input="
                   inputValue('lossNumberUnqualified', 'sampleNoQualifiedNumber')
                 "
@@ -354,6 +358,7 @@
   import QualityContentTabs from './components/newQualityContentTabs.vue';
   import pickOrderList from './components/pickOrderList/index.vue'; //领料记录
   import { recordingMethodList } from '@/utils/util.js';
+  import { parameterGetByCode } from '@/api/main/index';
 
   import { getCode, getCodeList } from '@/api/login';
   import {
@@ -501,6 +506,7 @@
         };
       };
       return {
+        default_disposal_type: 2,
         recordingMethodList,
         activeComp: 'main',
         tabOptions: [
@@ -574,14 +580,20 @@
       'form.sampleQualifiedNumber': {
         handler(newVal) {
           if (this.form.recordingMethod == 2) {
-            [
-              'retainedSampleQuantity',
-              'lossNumber',
-              'retainedSampleUnqualified',
-              'lossNumberUnqualified'
-            ].forEach((item) => {
-              this.form[item] = 0;
-            });
+            if (this.default_disposal_type == 1) {
+              this.form.lossNumber = newVal;
+              this.form.lossNumberUnqualified =
+                this.form.sampleNoQualifiedNumber;
+            } else {
+              [
+                'retainedSampleQuantity',
+                'lossNumber',
+                'retainedSampleUnqualified',
+                'lossNumberUnqualified'
+              ].forEach((item) => {
+                this.form[item] = 0;
+              });
+            }
           }
         },
         deep: true,
@@ -597,6 +609,12 @@
     },
 
     created() {
+      //样品默认处置类型:1、自动消耗 2、不自动消耗
+      parameterGetByCode({
+        code: 'default_disposal_type'
+      }).then((res) => {
+        this.default_disposal_type = res.value;
+      });
       this.open();
       if (this.$route.query.id) {
         this.getDetail();
@@ -773,7 +791,6 @@
         );
         // 数量赋值
         console.log(this.form, 'this.form');
-
         this.quantityAssignment();
       },
       // 计算合格数不合格数

+ 1 - 0
src/views/unqualifiedProduct/unqualifiedList/detailList.vue

@@ -9,6 +9,7 @@
         :selection.sync="selection"
         :pageSize="20"
         :pageSizes="[20, 30, 40, 50, 100]"
+        :needPage="false"
         :key="key"
         row-key="id"
         @columns-change="handleColumnChange"