Browse Source

修改质检bug

695593266@qq.com 6 months ago
parent
commit
c30b37ae4b

+ 7 - 1
src/mixins/dictMixins.js

@@ -8,7 +8,13 @@ export default {
     };
   },
   computed: {
-    ...mapGetters(['getDictValue', 'dict', 'getDict', 'getDictListByName'])
+    ...mapGetters([
+      'getDictValue',
+      'dict',
+      'getDict',
+      'getDictCode',
+      'getDictListByName'
+    ])
   },
   methods: {
     ...mapActions('dict', ['requestDict'])

+ 6 - 0
src/store/getters.js

@@ -45,5 +45,11 @@ export default {
         value: i.dictCode
       };
     });
+  },
+  getDictCode: (state) => (enumName, dictValue) => {
+    const obj = (state.dict[dictEnum[enumName]] || []).find((item) => {
+      return item.dictValue == dictValue;
+    });
+    return obj && obj.dictCode;
   }
 };

+ 1 - 2
src/views/beEntrusted/index.vue

@@ -520,8 +520,7 @@
 
         if (
           this.selection[0].approvalStatus == 2 &&
-          (this.selection[0].sendStatus != 3 ||
-            this.selection[0].sendStatus != 4)
+          this.selection[0].sendStatus == 2
         ) {
           return this.$message.warning('请先收货再转生产订单');
         }

+ 40 - 10
src/views/produce/components/workPlan/components/inspectionProjectReport.vue

@@ -74,7 +74,25 @@
       :datasource="tableData"
     >
       <template v-slot:toolbar>
-        当前质检剩余样品数:{{ getSampleQuantityCount }}{{ form.measureUnit }}
+        <div
+          style="
+            display: flex;
+            justify-content: space-between;
+            align-items: center;
+          "
+        >
+          <span>
+            当前质检剩余样品数:{{ getSampleQuantityCount
+            }}{{ form.measureUnit }}</span
+          >
+          <el-button
+            type="primary"
+            @click="handleOneKeyQualified"
+            style="margin-right: 10px"
+          >
+            一键合格
+          </el-button>
+        </div>
       </template>
       <template v-slot:qualityStandardType="{ row }">
         {{ getDictValue('质检标准类型', row.qualityStandardType) }}
@@ -582,7 +600,7 @@
             prop: 'qualityResultContent',
             align: 'center',
             slot: 'qualityResultContent',
-            headerSlot: 'isRequired',
+            headerSlot: this.qms_qualityResultContent == 1 ? 'isRequired' : '',
             label: '质检内容',
             showOverflowTooltip: true
           },
@@ -685,6 +703,8 @@
             fixed: 'right'
           }
         ],
+        sList: [], //质检工具筛选
+        pageName: '',
         qualityResultsList: [
           {
             value: 1,
@@ -699,8 +719,7 @@
             label: '让步接收'
           }
         ],
-        sList: [], //质检工具筛选
-        pageName: ''
+        qms_qualityResultContent: 1
       };
     },
     computed: {
@@ -720,6 +739,11 @@
       this.requestDict('质检计划类型');
       this.requestDict('取样类型');
       this.requestDict('质检标准类型');
+      parameterGetByCode({
+        code: 'qms_qualityResultContent'
+      }).then((res) => {
+        this.qms_qualityResultContent = res?.value;
+      });
     },
     methods: {
       async craftFiles(row) {
@@ -854,26 +878,32 @@
           this.form.sampleQuantity - this.form.sampleNoQualifiedNumber;
       },
 
+      handleOneKeyQualified() {
+        this.tableData.forEach((item, index) => {
+          this.$set(this.tableData[index], 'qualityResults', 1);
+        });
+      },
+
       handleClose() {
         this.visible = false;
       },
       handleConfirm() {
         let isHandleConfirm = false;
+
+        if (!this.form.sampleQuantity) {
+          return this.$message.error('样品数不能为空!');
+        }
         this.tableData.forEach((item, index) => {
+          item.status = 1;
           if (!item.qualityResultContent) {
             isHandleConfirm = true;
-          } else {
-            item.status = 1;
           }
         });
-        if (!this.form.sampleQuantity) {
-          return this.$message.error('样品数不能为空!');
-        }
         if (!this.pageName) {
           this.$emit('success', { data: this.form, tableData: this.tableData });
           this.visible = false;
         } else {
-          if (isHandleConfirm) {
+          if (isHandleConfirm && this.qms_qualityResultContent == 1) {
             return this.$message.error('质检内容不能为空!');
           }
           let api =

+ 21 - 2
src/views/produce/components/workPlan/components/newQualityContentTabs.vue

@@ -273,6 +273,22 @@
           </el-table-column>
           <!-- *** fixed="right" -->
           <el-table-column
+            label="状态"
+            prop="status"
+            align="center"
+            fixed="right"
+            :show-overflow-tooltip="true"
+            v-if="form.recordingMethod != 1"
+          >
+            <template slot-scope="scope">
+              {{
+                inspectionProjectStatus.find(
+                  (item) => item.value == scope.row.status
+                )?.label
+              }}
+            </template>
+          </el-table-column>
+          <!-- <el-table-column
             label="质检状态"
             prop="qualityStatus"
             align="center"
@@ -285,7 +301,7 @@
               <span v-if="scope.row.qualityStatus == 1">已检</span>
               <span v-if="scope.row.qualityStatus == 2">待检</span>
             </template>
-          </el-table-column>
+          </el-table-column> -->
           <el-table-column
             label="质检结果"
             prop="qualityResults"
@@ -301,7 +317,7 @@
                 v-model="scope.row.qualityResults"
                 placeholder="请选择"
                 style="width: 100%"
-                :disabled="type == 'detail'"
+                :disabled="type == 'detail' || scope.row.correlationId"
                 size="mini"
               >
                 <el-option
@@ -331,6 +347,7 @@
                 filterable
                 clearable
                 @change="badTypeChange(row)"
+                :disabled="type == 'detail' || row.correlationId"
               >
                 <el-option
                   v-for="item in badTypeList"
@@ -360,6 +377,7 @@
                 filterable
                 clearable
                 @change="badNameChange(row)"
+                :disabled="type == 'detail' || row.correlationId"
               >
                 <el-option
                   v-for="item in badNameList"
@@ -382,6 +400,7 @@
               <el-link
                 :type="scope.row.isValid ? 'primary' : 'danger'"
                 :underline="false"
+                v-if="!scope.row.correlationId"
                 @click="handleDetail(scope.$index, scope.row, 'report')"
               >
                 质检

+ 6 - 0
src/views/produce/components/workPlan/components/sampleListDialog.vue

@@ -502,6 +502,12 @@
       },
       handleConfirm() {
         this.visible = false;
+        this.tableData.forEach((item) => {
+          if (!this.pageName && item.correlationId) {
+            return;
+          }
+          item.status = 1;
+        });
         this.$emit('handleConfirm', this.tableData, this.rowIndex);
       },
       handleDispose(index, row, type) {

+ 82 - 34
src/views/produce/components/workPlan/details.vue

@@ -62,12 +62,25 @@
                   </el-form-item>
                 </el-col>
                 <el-col :span="6">
-                  <el-form-item label="质检部门">
+                  <el-form-item label="接收人部门">
                     <el-input :value="form.groupName" disabled />
                   </el-form-item>
                 </el-col>
-              </el-row>
-              <el-row>
+                <el-col :span="6">
+                  <el-form-item label="接收人">
+                    <el-input :value="qualityName" disabled />
+                  </el-form-item>
+                </el-col>
+
+                <el-col :span="6">
+                  <el-form-item
+                    label="执行部门"
+                    prop="executeDeptName"
+                    v-if="form.qualityType != 2"
+                  >
+                    <el-input :value="form.executeDeptName" disabled />
+                  </el-form-item>
+                </el-col>
                 <el-col :span="6" v-if="form.qualityType == 2">
                   <el-form-item label="执行班组" prop="executeJobName">
                     <el-input :value="form.executeJobName" disabled />
@@ -78,11 +91,7 @@
                     <el-input :value="form.executeUserName" disabled />
                   </el-form-item>
                 </el-col>
-                <el-col :span="6">
-                  <el-form-item label="质检人">
-                    <el-input :value="qualityName" disabled />
-                  </el-form-item>
-                </el-col>
+
                 <el-col :span="6">
                   <el-form-item label="质检时间">
                     <el-input :value="qualityTime" disabled />
@@ -181,31 +190,34 @@
               <el-row>
                 <el-col :span="6" v-if="showArrange == '1'">
                   <el-form-item label="样品合格数:">
-                    <el-input
-                      disabled
-                      v-model="form.sampleQualifiedNumber"
-                    ></el-input>
+                    <el-input disabled v-model="form.sampleQualifiedNumber"
+                      ><template slot="append">{{
+                        sourceData2[0]?.measureUnit
+                      }}</template></el-input
+                    >
                   </el-form-item>
                 </el-col>
                 <el-col :span="6" v-if="showArrange == '1'">
                   <el-form-item label="样品不合格数:">
-                    <el-input
-                      disabled
-                      v-model="form.sampleNoQualifiedNumber"
-                    ></el-input>
+                    <el-input disabled v-model="form.sampleNoQualifiedNumber"
+                      ><template slot="append">{{
+                        sourceData2[0]?.measureUnit
+                      }}</template></el-input
+                    >
                   </el-form-item>
                 </el-col>
                 <el-col :span="6">
                   <el-form-item label="样品合格率:">
-                    <el-input v-model="form.sampleQualificationRate" disabled />
+                    <el-input v-model="form.sampleQualificationRate" disabled
+                      ><template slot="append">%</template></el-input
+                    >
                   </el-form-item>
                 </el-col>
                 <el-col :span="6">
                   <el-form-item label="样品不合格率:">
-                    <el-input
-                      v-model="form.sampleNoQualificationRate"
-                      disabled
-                    />
+                    <el-input v-model="form.sampleNoQualificationRate" disabled
+                      ><template slot="append">%</template></el-input
+                    >
                   </el-form-item>
                 </el-col>
               </el-row>
@@ -220,7 +232,11 @@
                 </el-col>
                 <el-col :span="6">
                   <el-form-item label="样品数量:">
-                    <el-input disabled v-model="form.sampleQuantity" />
+                    <el-input disabled v-model="form.sampleQuantity"
+                      ><template slot="append">{{
+                        sourceData2[0]?.measureUnit
+                      }}</template></el-input
+                    >
                   </el-form-item>
                 </el-col>
                 <el-col :span="6">
@@ -241,13 +257,17 @@
                   </el-form-item>
                 </el-col>
               </el-row>
-              <el-row v-if="form.recordingMethod == 1">
+              <el-row>
                 <el-col :span="6">
                   <el-form-item
                     label="留样数(合格品):"
                     prop="retainedSampleQuantity"
                   >
-                    <el-input disabled :value="form.retainedSampleQuantity" />
+                    <el-input disabled :value="form.retainedSampleQuantity"
+                      ><template slot="append">{{
+                        sourceData2[0]?.measureUnit
+                      }}</template></el-input
+                    >
                   </el-form-item>
                 </el-col>
                 <el-col :span="6">
@@ -255,15 +275,20 @@
                     label="留样数(不合格品):"
                     prop="retainedSampleUnqualified"
                   >
-                    <el-input
-                      disabled
-                      :value="form.retainedSampleUnqualified"
-                    />
+                    <el-input disabled :value="form.retainedSampleUnqualified"
+                      ><template slot="append">{{
+                        sourceData2[0]?.measureUnit
+                      }}</template></el-input
+                    >
                   </el-form-item>
                 </el-col>
                 <el-col :span="6">
                   <el-form-item label="损耗数(合格品):" prop="lossNumber">
-                    <el-input disabled :value="form.lossNumber" />
+                    <el-input disabled :value="form.lossNumber"
+                      ><template slot="append">{{
+                        sourceData2[0]?.measureUnit
+                      }}</template></el-input
+                    >
                   </el-form-item>
                 </el-col>
                 <el-col :span="6">
@@ -271,7 +296,11 @@
                     label="损耗数(不合格品):"
                     prop="lossNumberUnqualified"
                   >
-                    <el-input disabled :value="form.lossNumberUnqualified" />
+                    <el-input disabled :value="form.lossNumberUnqualified"
+                      ><template slot="append">{{
+                        sourceData2[0]?.measureUnit
+                      }}</template></el-input
+                    >
                   </el-form-item>
                 </el-col>
               </el-row>
@@ -328,8 +357,16 @@
                   :toolkit="[]"
                   height="calc(100vh - 330px)"
                 >
-                </ele-pro-table
-              ></el-tab-pane>
+                  <template v-slot:experimentCode="scope">
+                    <el-link
+                      type="primary"
+                      :underline="false"
+                      @click="experimentReport(scope.row)"
+                      >{{ scope.row.experimentCode }}
+                    </el-link>
+                  </template>
+                </ele-pro-table></el-tab-pane
+              >
             </el-tabs>
           </el-tab-pane>
           <el-tab-pane
@@ -359,9 +396,9 @@
             </ele-pro-table>
           </el-tab-pane>
         </el-tabs>
-        <el-button class="go_back" @click="goBack">返回</el-button>
       </el-card>
       <sampleListDialog ref="detailRef"></sampleListDialog>
+      <experimentReport ref="experimentReport"></experimentReport>
     </div>
   </ele-modal>
 </template>
@@ -373,10 +410,11 @@
   import { getUserPage } from '@/api/system/organization';
   import { recordingMethodList } from '@/utils/util.js';
   import sampleListDialog from './components/sampleListDialog.vue';
+  import experimentReport from './components/experimentReport.vue';
 
   export default {
     mixins: [detailMixins],
-    components: { sampleListDialog },
+    components: { sampleListDialog, experimentReport },
     data() {
       return {
         activeName: '1',
@@ -599,6 +637,16 @@
         }
         return '';
       },
+      experimentReport(row) {
+        this.$refs.experimentReport.open(
+          {
+            ...row,
+            batchNo: this.form.batchNo,
+            qualityWorkOrderId: this.form.id
+          },
+          'detail'
+        );
+      },
       goBack() {
         let path = this.$route.query.path || '';
         console.log(path, 'path');

+ 6 - 2
src/views/produce/components/workPlan/edit.vue

@@ -1708,9 +1708,9 @@
             }
 
             for (let i = 0; i < this.sampleList.length; i++) {
-              const qualityStatus = this.sampleList[i].qualityStatus;
+              const status = this.sampleList[i].status;
 
-              if (qualityStatus == '2') {
+              if (status != '1') {
                 this.loading = false;
                 this.$refs.tabsRef.tabsChange('2');
                 this.$message.error('请完成以下样品质检!');
@@ -1734,6 +1734,7 @@
           this.form.qualityTimeEnd = this.getNowTime();
           this.form.qualityTimeStart = this.qualityTimeStart;
           this.form.qualityId = this.form.qualityIdList.join(',');
+          this.form.executeUserIdList = this.form.executeUserIdList || [];
           if (
             !this.form.executeUserIdList.find(
               (item) => item == this.$store.state.user.info.userId
@@ -1809,6 +1810,9 @@
         //   }
         // }
         list.forEach((item) => {
+          if (item.correlationId) {
+            return;
+          }
           if (item.qualitySampleTemplateList.length == 1) {
             if (
               item.qualitySampleTemplateList.some(

+ 286 - 11
src/views/produce/components/workPlan/mixins/detailMixins.js

@@ -544,6 +544,287 @@ export default {
             return this.disposeTypeMap[_row.disposeType];
           }
         }
+      ],
+      entrustColumns: [
+        {
+          columnKey: 'index',
+          label: '序号',
+          type: 'index',
+          width: 55,
+          align: 'center',
+          showOverflowTooltip: true,
+          fixed: 'left'
+        },
+        {
+          prop: 'code',
+          label: '请托单号',
+          showOverflowTooltip: true,
+          align: 'center',
+          minWidth: 130
+        },
+        {
+          prop: 'name',
+          label: '任务名称',
+          showOverflowTooltip: true,
+          align: 'center',
+          minWidth: 110
+        },
+
+        {
+          prop: 'sampleQuantity',
+          label: '样品数',
+          showOverflowTooltip: true,
+          align: 'center',
+          formatter: (row) => {
+            if (row.sampleQuantity) {
+              return (
+                row.sampleQuantity + this.sourceData2[0]?.measureUnit || ''
+              );
+            }
+          },
+          minWidth: 110
+        },
+        {
+          prop: 'sampleQualifiedNumber',
+          label: '样品合格数',
+          showOverflowTooltip: true,
+          align: 'center',
+          formatter: (row) => {
+            if (row.sampleQualifiedNumber) {
+              return (
+                row.sampleQualifiedNumber + this.sourceData2[0]?.measureUnit ||
+                ''
+              );
+            }
+          },
+          minWidth: 110
+        },
+        {
+          prop: 'sampleNoQualifiedNumber',
+          label: '样品不合格数',
+          showOverflowTooltip: true,
+          align: 'center',
+          formatter: (row) => {
+            if (row.sampleNoQualifiedNumber) {
+              return (
+                row.sampleNoQualifiedNumber +
+                  this.sourceData2[0]?.measureUnit || ''
+              );
+            }
+          },
+          minWidth: 110
+        },
+        {
+          prop: 'lossNumber',
+          label: '损耗数(合格品)',
+          showOverflowTooltip: true,
+          align: 'center',
+          formatter: (row) => {
+            if (row.lossNumber) {
+              return row.lossNumber + this.sourceData2[0]?.measureUnit || '';
+            }
+          },
+          minWidth: 110
+        },
+        {
+          prop: 'lossNumberUnqualified',
+          label: '损耗数(不合格品)',
+          showOverflowTooltip: true,
+          align: 'center',
+          formatter: (row) => {
+            if (row.lossNumberUnqualified) {
+              return (
+                row.lossNumberUnqualified + this.sourceData2[0]?.measureUnit ||
+                ''
+              );
+            }
+          },
+          minWidth: 110
+        },
+        {
+          prop: 'retainedSampleQuantity',
+          label: '留样数(合格品)',
+          showOverflowTooltip: true,
+          align: 'center',
+          formatter: (row) => {
+            if (row.retainedSampleQuantity) {
+              return (
+                row.retainedSampleQuantity + this.sourceData2[0]?.measureUnit ||
+                ''
+              );
+            }
+          },
+          minWidth: 110
+        },
+        {
+          prop: 'retainedSampleUnqualified',
+          label: '留样数(不合格品)',
+          formatter: (row) => {
+            if (row.retainedSampleUnqualified) {
+              return (
+                row.retainedSampleUnqualified +
+                  this.sourceData2[0]?.measureUnit || ''
+              );
+            }
+          },
+          showOverflowTooltip: true,
+          align: 'center',
+          minWidth: 110
+        },
+        {
+          prop: 'status',
+          minWidth: 110,
+          label: '状态',
+          align: 'center',
+          formatter: (row) => {
+            return row.status == 0
+              ? '待收样'
+              : row.status == 1
+              ? '未报工'
+              : '已报工';
+          },
+          showOverflowTooltip: true
+        }
+      ],
+      taskColumns: [
+        {
+          columnKey: 'index',
+          label: '序号',
+          type: 'index',
+          width: 55,
+          align: 'center',
+          showOverflowTooltip: true,
+          fixed: 'left'
+        },
+        {
+          prop: 'code',
+          label: '质检任务单号',
+          showOverflowTooltip: true,
+          align: 'center',
+          minWidth: 130
+        },
+        {
+          prop: 'name',
+          label: '任务名称',
+          showOverflowTooltip: true,
+          align: 'center',
+          minWidth: 110
+        },
+        {
+          prop: 'sampleQuantity',
+          label: '样品数',
+          showOverflowTooltip: true,
+          align: 'center',
+          formatter: (row) => {
+            if (row.sampleQuantity) {
+              return (
+                row.sampleQuantity + this.sourceData2[0]?.measureUnit || ''
+              );
+            }
+          },
+          minWidth: 110
+        },
+        {
+          prop: 'sampleQualifiedNumber',
+          label: '样品合格数',
+          showOverflowTooltip: true,
+          align: 'center',
+          formatter: (row) => {
+            if (row.sampleQualifiedNumber) {
+              return (
+                row.sampleQualifiedNumber + this.sourceData2[0]?.measureUnit ||
+                ''
+              );
+            }
+          },
+          minWidth: 110
+        },
+        {
+          prop: 'sampleNoQualifiedNumber',
+          label: '样品不合格数',
+          showOverflowTooltip: true,
+          align: 'center',
+          formatter: (row) => {
+            if (row.sampleNoQualifiedNumber) {
+              return (
+                row.sampleNoQualifiedNumber +
+                  this.sourceData2[0]?.measureUnit || ''
+              );
+            }
+          },
+          minWidth: 110
+        },
+        {
+          prop: 'lossNumber',
+          label: '损耗数(合格品)',
+          showOverflowTooltip: true,
+          align: 'center',
+          formatter: (row) => {
+            if (row.lossNumber) {
+              return row.lossNumber + this.sourceData2[0]?.measureUnit || '';
+            }
+          },
+          minWidth: 110
+        },
+        {
+          prop: 'lossNumberUnqualified',
+          label: '损耗数(不合格品)',
+          showOverflowTooltip: true,
+          align: 'center',
+          formatter: (row) => {
+            if (row.lossNumberUnqualified) {
+              return (
+                row.lossNumberUnqualified + this.sourceData2[0]?.measureUnit ||
+                ''
+              );
+            }
+          },
+          minWidth: 110
+        },
+        {
+          prop: 'retainedSampleQuantity',
+          label: '留样数(合格品)',
+          showOverflowTooltip: true,
+          align: 'center',
+          formatter: (row) => {
+            if (row.retainedSampleQuantity) {
+              return (
+                row.retainedSampleQuantity + this.sourceData2[0]?.measureUnit ||
+                ''
+              );
+            }
+          },
+          minWidth: 110
+        },
+        {
+          prop: 'retainedSampleUnqualified',
+          label: '留样数(不合格品)',
+          formatter: (row) => {
+            if (row.retainedSampleUnqualified) {
+              return (
+                row.retainedSampleUnqualified +
+                  this.sourceData2[0]?.measureUnit || ''
+              );
+            }
+          },
+          showOverflowTooltip: true,
+          align: 'center',
+          minWidth: 110
+        },
+        {
+          prop: 'status',
+          minWidth: 110,
+          label: '状态',
+          align: 'center',
+          formatter: (row) => {
+            return row.status == 0
+              ? '待收样'
+              : row.status == 1
+              ? '未报工'
+              : '已报工';
+          },
+          showOverflowTooltip: true
+        }
       ]
     };
   },
@@ -727,20 +1008,14 @@ export default {
           show: this.form.recordingMethod != 1
         },
         {
-          label: '质检状态',
-          prop: 'qualityStatus',
+          label: '状态',
+          prop: 'status',
           align: 'center',
           show: this.form.recordingMethod != 1,
           formatter: (row) => {
-            if (row.qualityStatus == 0) {
-              return '未检';
-            }
-            if (row.qualityStatus == 1) {
-              return '已检';
-            }
-            if (row.qualityStatus == 2) {
-              return '待检';
-            }
+            return inspectionProjectStatus.find(
+              (item) => item.value == row.status
+            )?.label;
           }
         }
       ];