Selaa lähdekoodia

同步质检代码

695593266@qq.com 6 kuukautta sitten
vanhempi
commit
b097213b67

+ 10 - 0
src/api/inspectionWork/index.js

@@ -175,3 +175,13 @@ export async function sampleCollection(data) {
   }
   return Promise.reject(new Error(res.data.message));
 }
+
+export async function getQmsReportTemplatePageList(params) {
+  const res = await request.get(`/main/qmsreporttemplate/page`, {
+    params
+  });
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}

+ 213 - 0
src/api/requirementListOrder/index.js

@@ -69,3 +69,216 @@ export async function dowloadRequirementListOrder(data) {
   }
   return Promise.reject(new Error(res.data.message));
 }
+
+//领用单分页
+export async function getBorrowOrderList(params) {
+  const res = await request.get('/mes/mesborroworder/page', {
+    params
+  });
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+//领用单保存
+export async function saveBorrowOrder(params) {
+  const res = await request.post('/mes/mesborroworder/save', params);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+//领用单详细信息
+export async function borrowOrderInfo(id) {
+  const res = await request.get(`/mes/mesborroworder/getById/${id}`);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+//领用单删除
+export async function deleteBorrowOrder(data) {
+  const res = await request.delete(`/mes/mesborroworder/delete`, {
+    data
+  });
+
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+//领料单分页
+export async function getPickingOrderList(params) {
+  const res = await request.get('/mes/mespickingorder/page', {
+    params
+  });
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+//领料单保存
+export async function savePickingOrder(params) {
+  const res = await request.post('/mes/mespickingorder/save', params);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+//领料单详细信息
+export async function pickingOrderInfo(id) {
+  const res = await request.get(`/mes/mespickingorder/getById/${id}`);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+//领料单删除
+export async function deletePickingOrder(data) {
+  const res = await request.delete(`/mes/mespickingorder/delete`, {
+    data
+  });
+
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+//下料单分页
+export async function getBlankingOrderList(params) {
+  const res = await request.get('/mes/mesblankingorder/page', {
+    params
+  });
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+//下料单保存
+export async function saveBlankingOrder(params) {
+  const res = await request.post('/mes/mesblankingorder/save', params);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+//下料单详细信息
+export async function blankingOrderInfo(id) {
+  const res = await request.get(`/mes/mesblankingorder/getById/${id}`);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+//下料单删除
+export async function deleteBlankingOrder(data) {
+  const res = await request.delete(`/mes/mesblankingorder/delete`, {
+    data
+  });
+
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+//退料单分页
+export async function getReturnOrderList(params) {
+  const res = await request.get('/mes/mesreturnorder/page', {
+    params
+  });
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+//退料单保存
+export async function saveReturnOrder(params) {
+  const res = await request.post('/mes/mesreturnorder/save', params);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+//退料单详细信息
+export async function returnOrderInfo(id) {
+  const res = await request.get(`/mes/mesreturnorder/getById/${id}`);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+//退料单删除
+export async function deleteReturnOrder(data) {
+  const res = await request.delete(`/mes/mesreturnorder/delete`, {
+    data
+  });
+
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+// 资产
+export async function assetPage(data) {
+  const res = await request.get('/main/asset/pdaPage', {
+    params: data
+  });
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+// 在制品
+export async function listInProduct(data) {
+  const res = await request.post('/pda/mes/feed/listInProduct', data);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+//获取物品维度的库存数据
+export async function getOutindetailtwo(params) {
+  const res = await request.get(`wms/outInDetailPda/page`, { params });
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+// 父级ID查询分类树
+export async function treeByPid(data) {
+  const res = await request.get('/pda/main/categoryLevel/pdaTreeByPid', {
+    params: data
+  });
+  if (res.data.code == 0) {
+    return res.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+//出库单详情
+export async function getOutOrderList(params) {
+  const res = await request.get(`/mes/pickorder/outStorageDetail`, { params });
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}

+ 29 - 0
src/enum/dict.js

@@ -69,3 +69,32 @@ export const produceTypeList = [
     value: 3
   }
 ];
+
+// 质检方案状态
+export const inspectionProjectStatus = [
+  {
+    label: '待检',
+    value: 0,
+    type: 'info'
+  },
+  {
+    label: '已检',
+    value: 1,
+    type: 'success'
+  },
+  {
+    label: '已派单',
+    value: 2,
+    type: 'warning'
+  },
+  {
+    label: '已请托',
+    value: 3,
+    type: 'warning'
+  },
+  {
+    label: '检验中',
+    value: 4,
+    type: ''
+  }
+];

+ 13 - 173
src/views/produce/components/jobBooking/components/jobBom.vue

@@ -8,34 +8,6 @@
 
     <div class="material">
       <div class="content_table">
-        <!-- <div class="item rx-sc"> -->
-        <!-- <div
-            class="rx ww33"
-            v-if="
-              Object.prototype.hasOwnProperty.call(item, 'product') &&
-              clientEnvironmentId != 3
-            "
-          >
-            <div class="lable rx-cc">投料数量</div>
-            <div class="content">
-              {{ item.product[0] && item.product[0].feedQuantity }}
-            </div>
-          </div> -->
-        <!--
-          <div class="rx ww33">
-            <div class="lable lable100 rx-cc">要求生产数量</div>
-            <div class="content">{{ item.formingNum }} {{ item.unit }}</div>
-          </div>
-
-          <div class="rx ww33">
-            <div class="lable rx-cc">重量</div>
-            <div class="content"
-              >{{ item.formingWeight }}{{ item.weightUnit }}</div
-            >
-          </div>
-        </div> -->
-
-        <!-- v-if="(clientEnvironmentId == 3 && item.singleReport == 0) ||  taskObj.type == 4 || clientEnvironmentId == 2" -->
         <div class="item rx-sc">
           <div class="rx ww40">
             <div class="lable lable100 rx-cc">合格品数量</div>
@@ -65,8 +37,6 @@
             </div>
           </div>
         </div>
-        <!-- v-if="(clientEnvironmentId == 3 && item.singleReport == 0) || taskObj.type == 4 || clientEnvironmentId == 2" -->
-        <!-- v-for="(not, notIndex) in notFormedList" :key="notIndex" -->
 
         <div class="item rx-sc">
           <div class="rx ww40">
@@ -96,16 +66,6 @@
               </el-input>
             </div>
           </div>
-
-          <!-- <div class="rw ww20 rx-cc">
-            <div class="penalize" v-if="!isDetails" :style="{ background: not.warehouseId ? '#FFA07A' : '' }"
-              @click="penalize">
-              处置</div>
-            <div class="penalize" v-if="isDetails" :style="{ background: not.warehouseId ? '#FFA07A' : '' }" @click="
-              handleView(isDetails ? not.warehouseName : item.warehouseName)
-              ">
-              查看</div>
-          </div> -->
         </div>
 
         <div class="item rx-sc">
@@ -136,16 +96,6 @@
               </el-input>
             </div>
           </div>
-
-          <!-- <div class="rw ww20 rx-cc">
-            <div class="penalize" v-if="!isDetails" :style="{ background: not.warehouseId ? '#FFA07A' : '' }"
-              @click="penalize">
-              处置</div>
-            <div class="penalize" v-if="isDetails" :style="{ background: not.warehouseId ? '#FFA07A' : '' }" @click="
-              handleView(isDetails ? not.warehouseName : item.warehouseName)
-              ">
-              查看</div>
-          </div> -->
         </div>
 
         <!-- 报工备注 -->
@@ -374,17 +324,6 @@
           };
         });
       }
-      // if(item.semiProductList){
-      //   let allReportWeight=0
-      //    item.semiProductList.map(sitem=>{
-      //     if(sitem.extInfo.batchReportInfo){
-      //       sitem.extInfo.batchReportInfo.map(bitem=>{
-      //         allReportWeight=allReportWeight+bitem.allReportWeight
-      //       })
-      //       this.item.workReportInfo.formedWeight=allReportWeight
-      //     }
-      //    })
-      // }
     },
 
     mounted() {
@@ -452,51 +391,6 @@
       },
 
       blurNum() {
-        // let total =
-        //   Number(this.item.workReportInfo.formedNum) +
-        //   Number(this.item.workReportInfo.notFormedNum);
-        // if (total > this.item.formingNum) {
-        //   this.item.workReportInfo.formedNum = 0;
-        //   this.$message.warning('合格品数量加不合格数量不能大于要求生产数量');
-        // }
-
-        // let total =
-        //   Number(this.item.workReportInfo.formedNum) +
-        //   Number(this.notFormedList[0].notFormedNum);
-
-        // console.log(total, '9****');
-
-        // this.$emit('modeNum', total);
-
-        // if (
-        //   this.item.product[0] &&
-        //   this.item.product[0].feedQuantity > 0 &&
-        //   Number(this.item.workReportInfo.formedNum)
-        // ) {
-        //   this.$set(
-        //     this.notFormedList[0],
-        //     'notFormedNum',
-        //     this.item.product[0].feedQuantity -
-        //     Number(this.item.workReportInfo.formedNum)
-        //   );
-        //   this.notForme();
-        // }
-
-        // let weight =
-        //   Number(this.item.workReportInfo.formedNum) *
-        //   Number(this.item.singleWeight) *
-        //   Number(this.item.weightMultiple);
-
-        // if (['G', 'g', '克'].includes(this.item.singleWeightUnit)) {
-        //   weight = parseFloat((weight / 1000).toFixed(2));
-        // } else {
-        //   weight = parseFloat(weight.toFixed(2));
-        // }
-
-        // console.log(this.item, 'weight');
-
-        // this.$set(this.item.workReportInfo, 'formedWeight', weight);
-
         this.$forceUpdate();
       },
 
@@ -548,18 +442,6 @@
         this.$forceUpdate();
       },
 
-      changeNum() {
-        // let total =
-        //   Number(this.item.workReportInfo.formedNum) +
-        //   Number(this.item.workReportInfo.notFormedNum);
-        // if (total > this.item.formingNum) {
-        //   this.item.workReportInfo.notFormedNum = 0;
-        //   this.$message.warning('合格品数量加不合格数量不能大于要求生产数量');
-        // }
-        // this.notForme();
-        // this.blurNum()
-      },
-
       singleBatch() {
         // console.log(this.item.workReportInfo);
         // return;
@@ -584,39 +466,6 @@
         createInProductBatch(req).then((res) => {
           if (res && res.length) {
             this.forValue = res[0];
-
-            // const engrave = res.map((item, index) => {
-            //   if (!item.extInfo.engrave) {
-            //     item.extInfo.engrave = index + 1;
-            //   }
-
-            //   return item;
-            // });
-
-            // this.list = engrave;
-            // this.item.product = engrave;
-
-            // res.map((v) => {
-            //   v.selected = true;
-            //   v.extInfo.batchReportInfo = [
-            //     {
-            //       allFeedQuantity: '',
-            //       allReportWeight: '',
-            //       taskId: '',
-            //       taskName: ''
-            //     }
-            //   ];
-
-            //   v.extInfo.notBatchReportInfo = [
-            //     {
-            //       allFeedQuantity: '',
-            //       notType: '',
-            //       taskId: '',
-            //       taskName: '',
-            //       notReason: ''
-            //     }
-            //   ];
-            // });
             this.list = res;
             this.item.product = res;
           }
@@ -645,28 +494,6 @@
           if (res && res.length) {
             this.forValue = res[0];
 
-            // res.map((v) => {
-            //   v.selected = true;
-            //   v.extInfo.batchReportInfo = [
-            //     {
-            //       allFeedQuantity: v.extInfo.allFeedQuantity,
-            //       allReportWeight: v.extInfo.allReportWeight,
-            //       taskId: '',
-            //       taskName: ''
-            //     }
-            //   ];
-
-            //   v.extInfo.notBatchReportInfo = [
-            //     {
-            //       allFeedQuantity: v.extInfo.allFeedQuantity,
-            //       allReportWeight: v.extInfo.allReportWeight,
-            //       notType: '',
-            //       taskId: '',
-            //       taskName: '',
-            //       notReason: ''
-            //     }
-            //   ];
-            // });
             this.list = res;
             this.item.semiProductList = res;
           }
@@ -812,4 +639,17 @@
   .btn-margin {
     margin: 10px 0 10px 100px;
   }
+
+  ::v-deep .content_num .el-input {
+    width: 100%;
+  }
+
+  ::v-deep .content_num .el-input__inner {
+    padding-right: 20px; // 给单位预留空间
+  }
+
+  ::v-deep .content_num .el-input-group__append {
+    min-width: 40px;
+    text-align: center;
+  }
 </style>

+ 13 - 0
src/views/produce/components/jobBooking/components/jobDdBom.vue

@@ -651,4 +651,17 @@
   .btn-margin {
     margin: 10px 0 10px 100px;
   }
+
+  ::v-deep .content_num .el-input {
+    width: 100%;
+  }
+
+  ::v-deep .content_num .el-input__inner {
+    padding-right: 20px; // 给单位预留空间
+  }
+
+  ::v-deep .content_num .el-input-group__append {
+    min-width: 40px;
+    text-align: center;
+  }
 </style>

+ 18 - 19
src/views/produce/components/workPlan/components/addSample.vue

@@ -146,6 +146,16 @@
             ></el-input>
           </el-form-item>
         </el-col>
+        <!-- <el-col :span="8">
+          <el-form-item label="质检方式:" prop="qualityMode">
+            <DictSelection
+              dictName="取样类型"
+              v-model="form.qualityMode"
+              @change="handleQualityModeChange"
+              :disabled="form.isFirstSampling != '1'"
+            ></DictSelection>
+          </el-form-item>
+        </el-col> -->
         <el-col :span="8">
           <el-form-item label="质检方式:" prop="qualityMode">
             <el-select
@@ -312,7 +322,7 @@
         type="primary"
         @click="save('submit')"
         v-loading="loading"
-        v-if="type != 'view' && isSamplingApproval == 1 && isProcess"
+        v-if="type != 'view' && isSamplingApproval == 1"
         >提交</el-button
       >
 
@@ -334,7 +344,6 @@
 <script>
   import processSubmitDialog from '@/components/processSubmitDialog/processSubmitDialog.vue';
   import { recordingMethodList } from '@/utils/util.js';
-  import { parameterGetByCode } from '@/api/system/dictionary-data';
 
   const defForm = {
     code: '', //编码
@@ -367,8 +376,7 @@
   import bpmDetail from '@/views/bpm/processInstance/detail.vue';
   import inspectionWorkDialog from './inspectionWorkDialog.vue';
   import { getCodeList, getCode } from '@/api/login';
-  import { getByCode } from '@/api/system/dictionary-data';
-
+  import { getByCode, parameterGetByCode } from '@/api/system/dictionary-data';
   export default {
     components: { bpmDetail, inspectionWorkDialog, processSubmitDialog },
     props: {
@@ -624,8 +632,7 @@
         type: 'add',
         title: '',
         isSamplingApproval: 0,
-        qualityMode: [],
-        isProcess: true
+        qualityMode: []
       };
     },
 
@@ -640,7 +647,6 @@
         this.visible = true;
         this.type = type;
         await this.getQualityMethodCode();
-        await this.getProcess();
         this.parameterGetByCode();
         this.title =
           type == 'add' ? '请样' : type == 'edit' ? '修改请样' : '详情';
@@ -652,10 +658,11 @@
           this.getById(row.id);
         }
       },
-
-      async getProcess() {
-        await parameterGetByCode({ code: 'sampling_approval' }).then((res) => {
-          this.isProcess = res.value == '1' ? true : false;
+      parameterGetByCode() {
+        parameterGetByCode({
+          code: 'sampling_approval'
+        }).then((res) => {
+          this.isSamplingApproval = res.value;
         });
       },
 
@@ -670,14 +677,6 @@
           this.qualityMode = list;
         }
       },
-
-      parameterGetByCode() {
-        parameterGetByCode({
-          code: 'sampling_approval'
-        }).then((res) => {
-          this.isSamplingApproval = res.value;
-        });
-      },
       async init(row) {
         let isPackingUnit = false;
         let data = await samplingRecordsPage({

+ 57 - 37
src/views/produce/components/workPlan/components/baseInfo.vue

@@ -110,27 +110,52 @@
     <div>
       <el-row>
         <el-col :span="6">
-          <el-form-item label="质检部门" prop="groupId">
+          <el-form-item
+            label="执行部门"
+            prop="executeDeptId"
+            v-if="form.qualityType != 2"
+          >
             <deptSelect
-              :disabled="btnType == 'detail' || form.qualityType == 2"
-              v-model="form.groupId"
+              :disabled="btnType == 'detail'"
+              v-model="form.executeDeptId"
               @changeGroup="searchDeptNodeClick"
             />
           </el-form-item>
         </el-col>
+        <el-col :span="6" v-if="form.qualityType == 2">
+          <el-form-item label="执行班组" prop="executeJobId">
+            <el-select
+              :disabled="btnType == 'detail'"
+              v-model="form.executeJobId"
+              size="small"
+              style="width: 100%"
+            >
+              <el-option
+                v-for="item in form.jobList"
+                :key="item.id"
+                :value="item.id"
+                :label="item.name"
+                @click.native="changeExecuteJob(item)"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
         <el-col :span="6">
-          <el-form-item label="质检人" prop="qualityIdList">
+          <el-form-item label="执行人" prop="executeUserId">
             <el-select
-              :disabled="btnType == 'detail' || form.qualityType == 2"
-              v-model="form.qualityIdList"
-              @change="changeExecutor"
+              :disabled="btnType == 'detail'"
+              v-model="form.executeUserIdList"
               size="small"
               style="width: 100%"
               filterable
               multiple
+              @change="executeUserIdChange"
             >
               <el-option
-                v-for="item in executorList"
+                v-for="item in form.qualityType == 2
+                  ? form.jobList.find((job) => job.id == form.executeJobId)
+                      ?.userVOList
+                  : executorList"
                 :key="item.id"
                 :value="item.id"
                 :label="item.name"
@@ -161,45 +186,35 @@
         </el-col>
       </el-row>
       <el-row>
-        <el-col :span="6" v-if="form.qualityType == 2">
-          <el-form-item label="执行班组" prop="executeJobId">
-            <el-select
-              :disabled="btnType == 'detail'"
-              v-model="form.executeJobId"
-              size="small"
-              style="width: 100%"
-            >
-              <el-option
-                v-for="item in form.jobList"
-                :key="item.id"
-                :value="item.id"
-                :label="item.name"
-                @click.native="changeExecuteJob(item)"
-              ></el-option>
-            </el-select>
+        <el-col :span="6">
+          <el-form-item label="接收人部门" prop="groupId">
+            <!-- <deptSelect
+              :disabled="btnType == 'detail' || form.qualityType == 2"
+              v-model="form.groupId"
+              @changeGroup="searchDeptNodeClick"
+            /> -->
+            <el-input v-model="form.groupName" disabled></el-input>
           </el-form-item>
         </el-col>
         <el-col :span="6">
-          <el-form-item label="执行人" prop="executeUserId">
-            <el-select
-              :disabled="btnType == 'detail'"
-              v-model="form.executeUserIdList"
+          <el-form-item label="接收人" prop="qualityIdList">
+            <el-input v-model="form.qualityName" disabled></el-input>
+            <!-- <el-select
+              :disabled="btnType == 'detail' || form.qualityType == 2"
+              v-model="form.qualityIdList"
+              @change="changeExecutor"
               size="small"
               style="width: 100%"
               filterable
               multiple
-              @change="executeUserIdChange"
             >
               <el-option
-                v-for="item in form.qualityType == 2
-                  ? form.jobList.find((job) => job.id == form.executeJobId)
-                      ?.userVOList
-                  : executorList"
+                v-for="item in executorList"
                 :key="item.id"
                 :value="item.id"
                 :label="item.name"
               ></el-option>
-            </el-select>
+            </el-select> -->
           </el-form-item>
         </el-col>
       </el-row>
@@ -515,6 +530,9 @@
           executeJobId: [
             { required: true, message: '请选择执行班组', trigger: 'change' }
           ],
+          executeDeptId: [
+            { required: true, message: '请选择执行部门', trigger: 'change' }
+          ],
 
           // qualityId: [
           //   { required: true, message: '请选择质检人', trigger: 'change' }
@@ -717,13 +735,15 @@
       //选择部门(搜索)
       searchDeptNodeClick(info, row) {
         this.form.executeUserId = '';
-
+        this.$set(this.form, 'executeUserName', ' item.name');
+        this.$set(this.form, 'executeUserIdList', '');
         if (info) {
           const params = { groupId: info };
           this.getUserList(params);
-          this.form.groupName = row.name;
+          this.form.executeDeptName = row.name;
         } else {
-          this.form.executeGroupId = null;
+          this.form.executeDeptId = null;
+          this.form.executeDeptName = null;
         }
       },
       // 获取人员

+ 338 - 1
src/views/produce/components/workPlan/components/newQualityContentTabs.vue

@@ -438,6 +438,37 @@
           :total="schemeList.length"
         /> -->
       </el-tab-pane>
+
+      <el-tab-pane
+        label="质检项任务单"
+        name="4"
+        v-if="form.recordingMethod == 1"
+      >
+        <ele-pro-table
+          ref="table"
+          :columns="taskColumns"
+          :datasource="form.taskMonadList"
+          :needPage="false"
+        >
+        </ele-pro-table>
+      </el-tab-pane>
+      <el-tab-pane
+        label="质检项请托单"
+        name="5"
+        v-if="form.recordingMethod == 1"
+      >
+        <ele-pro-table
+          ref="table"
+          :columns="entrustColumns"
+          :datasource="form.requestEntrustList"
+          :needPage="false"
+        >
+        </ele-pro-table>
+      </el-tab-pane>
+
+      <el-tab-pane label="工艺文件" name="6">
+        <wokePopupList ref="wokePopupListRef"></wokePopupList>
+      </el-tab-pane>
     </el-tabs>
   </el-row>
 </template>
@@ -459,9 +490,13 @@
   } from '@/api/inspectionWork';
   import { getQualityTemplateByIds } from '@/api/produce/workPlan.js';
   import { getCodeList } from '@/api/login';
+  import { inspectionProjectStatus } from '@/enum/dict.js';
+  import wokePopupList from '@/components/workList/wokePopupList.vue';
+  import { parameterGetByCode } from '@/api/system/dictionary-data';
   export default {
     components: {
-      inspectionTemplateDialog
+      inspectionTemplateDialog,
+      wokePopupList
     },
     watch: {
       schemeList: {
@@ -490,6 +525,7 @@
       packingList: Array,
       sampleList: Array,
       schemeList: Array,
+      fileParam: Array,
       loading: Boolean,
       form: Object,
       ids: String,
@@ -652,6 +688,287 @@
           portion: null,
           packingUnit: ''
         },
+        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.sampleList[0]?.measureUnit || ''
+                );
+              }
+            },
+            minWidth: 110
+          },
+          {
+            prop: 'sampleQualifiedNumber',
+            label: '样品合格数',
+            showOverflowTooltip: true,
+            align: 'center',
+            formatter: (row) => {
+              if (row.sampleQualifiedNumber) {
+                return (
+                  row.sampleQualifiedNumber + this.sampleList[0]?.measureUnit ||
+                  ''
+                );
+              }
+            },
+            minWidth: 110
+          },
+          {
+            prop: 'sampleNoQualifiedNumber',
+            label: '样品不合格数',
+            showOverflowTooltip: true,
+            align: 'center',
+            formatter: (row) => {
+              if (row.sampleNoQualifiedNumber) {
+                return (
+                  row.sampleNoQualifiedNumber +
+                    this.sampleList[0]?.measureUnit || ''
+                );
+              }
+            },
+            minWidth: 110
+          },
+          {
+            prop: 'lossNumber',
+            label: '损耗数(合格品)',
+            showOverflowTooltip: true,
+            align: 'center',
+            formatter: (row) => {
+              if (row.lossNumber) {
+                return row.lossNumber + this.sampleList[0]?.measureUnit || '';
+              }
+            },
+            minWidth: 110
+          },
+          {
+            prop: 'lossNumberUnqualified',
+            label: '损耗数(不合格品)',
+            showOverflowTooltip: true,
+            align: 'center',
+            formatter: (row) => {
+              if (row.lossNumberUnqualified) {
+                return (
+                  row.lossNumberUnqualified + this.sampleList[0]?.measureUnit ||
+                  ''
+                );
+              }
+            },
+            minWidth: 110
+          },
+          {
+            prop: 'retainedSampleQuantity',
+            label: '留样数(合格品)',
+            showOverflowTooltip: true,
+            align: 'center',
+            formatter: (row) => {
+              if (row.retainedSampleQuantity) {
+                return (
+                  row.retainedSampleQuantity +
+                    this.sampleList[0]?.measureUnit || ''
+                );
+              }
+            },
+            minWidth: 110
+          },
+          {
+            prop: 'retainedSampleUnqualified',
+            label: '留样数(不合格品)',
+            formatter: (row) => {
+              if (row.retainedSampleUnqualified) {
+                return (
+                  row.retainedSampleUnqualified +
+                    this.sampleList[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.sampleList[0]?.measureUnit || ''
+                );
+              }
+            },
+            minWidth: 110
+          },
+          {
+            prop: 'sampleQualifiedNumber',
+            label: '样品合格数',
+            showOverflowTooltip: true,
+            align: 'center',
+            formatter: (row) => {
+              if (row.sampleQualifiedNumber) {
+                return (
+                  row.sampleQualifiedNumber + this.sampleList[0]?.measureUnit ||
+                  ''
+                );
+              }
+            },
+            minWidth: 110
+          },
+          {
+            prop: 'sampleNoQualifiedNumber',
+            label: '样品不合格数',
+            showOverflowTooltip: true,
+            align: 'center',
+            formatter: (row) => {
+              if (row.sampleNoQualifiedNumber) {
+                return (
+                  row.sampleNoQualifiedNumber +
+                    this.sampleList[0]?.measureUnit || ''
+                );
+              }
+            },
+            minWidth: 110
+          },
+          {
+            prop: 'lossNumber',
+            label: '损耗数(合格品)',
+            showOverflowTooltip: true,
+            align: 'center',
+            formatter: (row) => {
+              if (row.lossNumber) {
+                return row.lossNumber + this.sampleList[0]?.measureUnit || '';
+              }
+            },
+            minWidth: 110
+          },
+          {
+            prop: 'lossNumberUnqualified',
+            label: '损耗数(不合格品)',
+            showOverflowTooltip: true,
+            align: 'center',
+            formatter: (row) => {
+              if (row.lossNumberUnqualified) {
+                return (
+                  row.lossNumberUnqualified + this.sampleList[0]?.measureUnit ||
+                  ''
+                );
+              }
+            },
+            minWidth: 110
+          },
+          {
+            prop: 'retainedSampleQuantity',
+            label: '留样数(合格品)',
+            showOverflowTooltip: true,
+            align: 'center',
+            formatter: (row) => {
+              if (row.retainedSampleQuantity) {
+                return (
+                  row.retainedSampleQuantity +
+                    this.sampleList[0]?.measureUnit || ''
+                );
+              }
+            },
+            minWidth: 110
+          },
+          {
+            prop: 'retainedSampleUnqualified',
+            label: '留样数(不合格品)',
+            formatter: (row) => {
+              if (row.retainedSampleUnqualified) {
+                return (
+                  row.retainedSampleUnqualified +
+                    this.sampleList[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
+          }
+        ],
         rules: {
           number: [
             {
@@ -875,7 +1192,27 @@
         }
       });
     },
+
+    mounted() {
+      this.getFileParam();
+    },
+
     methods: {
+      async getFileParam() {
+        const res = await parameterGetByCode({
+          code: 'mes_craft_file_by_category_code'
+        });
+        const byCategory = res?.value === '1';
+
+        if (byCategory) {
+          this.$refs.wokePopupListRef.openTwo(this.form);
+        } else {
+          this.$refs.wokePopupListRef.open(
+            this.fileParam.map((item) => item.id)
+          );
+        }
+      },
+
       doTableLayout() {
         this.$nextTick(() => {
           this.$refs.showSampleListTable &&

+ 97 - 14
src/views/produce/components/workPlan/edit.vue

@@ -67,7 +67,11 @@
                   disabled
                   v-model="form.sampleQualifiedNumber"
                   placeholder=""
-                ></el-input>
+                >
+                  <template slot="append">{{
+                    sampleList[0]?.measureUnit
+                  }}</template>
+                </el-input>
               </el-form-item>
             </el-col>
             <el-col :span="6">
@@ -81,7 +85,11 @@
                   disabled
                   v-model="form.sampleNoQualifiedNumber"
                   placeholder=""
-                ></el-input>
+                >
+                  <template slot="append">{{
+                    sampleList[0]?.measureUnit
+                  }}</template></el-input
+                >
               </el-form-item>
             </el-col>
             <el-col :span="6">
@@ -107,7 +115,11 @@
                   disabled
                   :value="getSampleQuantity('sampleQualifiedNumber')"
                   placeholder=""
-                ></el-input>
+                >
+                  <template slot="append">{{
+                    sampleList[0]?.measureUnit
+                  }}</template></el-input
+                >
               </el-form-item>
             </el-col>
             <el-col :span="6">
@@ -121,7 +133,11 @@
                   disabled
                   :value="getSampleQuantity('sampleNoQualifiedNumber')"
                   placeholder=""
-                ></el-input>
+                >
+                  <template slot="append">{{
+                    sampleList[0]?.measureUnit
+                  }}</template></el-input
+                >
               </el-form-item>
             </el-col>
             <el-col :span="6">
@@ -158,11 +174,11 @@
             </el-col>
             <el-col :span="6">
               <el-form-item label="样品数量:" prop="sampleQuantity">
-                <el-input
-                  type="number"
-                  disabled
-                  v-model="form.sampleQuantity"
-                />
+                <el-input type="number" disabled v-model="form.sampleQuantity">
+                  <template slot="append">{{
+                    sampleList[0]?.measureUnit
+                  }}</template></el-input
+                >
               </el-form-item>
             </el-col>
             <el-col :span="6">
@@ -171,16 +187,33 @@
               </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
+                  v-if="form.recordingMethod == 1"
                   disabled
                   :value="getSampleQuantity('retainedSampleQuantity')"
-                />
+                  ><template slot="append">{{
+                    sampleList[0]?.measureUnit
+                  }}</template></el-input
+                >
+                <el-input
+                  v-else
+                  v-model="form.retainedSampleQuantity"
+                  @input="
+                    inputValue(
+                      'retainedSampleQuantity',
+                      'sampleQualifiedNumber'
+                    )
+                  "
+                  ><template slot="append">{{
+                    sampleList[0]?.measureUnit
+                  }}</template></el-input
+                >
               </el-form-item>
             </el-col>
             <el-col :span="6">
@@ -189,14 +222,46 @@
                 prop="retainedSampleUnqualified"
               >
                 <el-input
+                  v-if="form.recordingMethod == 1"
                   disabled
                   :value="getSampleQuantity('retainedSampleUnqualified')"
-                />
+                  ><template slot="append">{{
+                    sampleList[0]?.measureUnit
+                  }}</template></el-input
+                >
+                <el-input
+                  v-else
+                  v-model="form.retainedSampleUnqualified"
+                  @input="
+                    inputValue(
+                      'retainedSampleUnqualified',
+                      'sampleNoQualifiedNumber'
+                    )
+                  "
+                  ><template slot="append">{{
+                    sampleList[0]?.measureUnit
+                  }}</template></el-input
+                >
               </el-form-item>
             </el-col>
             <el-col :span="6">
               <el-form-item label="损耗数(合格品):" prop="lossNumber">
-                <el-input disabled :value="getSampleQuantity('lossNumber')" />
+                <el-input
+                  v-if="form.recordingMethod == 1"
+                  disabled
+                  :value="getSampleQuantity('lossNumber')"
+                  ><template slot="append">{{
+                    sampleList[0]?.measureUnit
+                  }}</template></el-input
+                >
+                <el-input
+                  v-else
+                  v-model="form.lossNumber"
+                  @input="inputValue('lossNumber', 'sampleQualifiedNumber')"
+                  ><template slot="append">{{
+                    sampleList[0]?.measureUnit
+                  }}</template></el-input
+                >
               </el-form-item>
             </el-col>
             <el-col :span="6">
@@ -205,9 +270,26 @@
                 prop="lossNumberUnqualified"
               >
                 <el-input
+                  v-if="form.recordingMethod == 1"
                   disabled
                   :value="getSampleQuantity('lossNumberUnqualified')"
-                />
+                  ><template slot="append">{{
+                    sampleList[0]?.measureUnit
+                  }}</template></el-input
+                >
+                <el-input
+                  v-else
+                  v-model="form.lossNumberUnqualified"
+                  @input="
+                    inputValue(
+                      'lossNumberUnqualified',
+                      'sampleNoQualifiedNumber'
+                    )
+                  "
+                  ><template slot="append">{{
+                    sampleList[0]?.measureUnit
+                  }}</template></el-input
+                >
               </el-form-item>
             </el-col>
           </el-row>
@@ -224,6 +306,7 @@
           :form="form"
           :productId="productId"
           :status="statusType"
+          :fileParam="form.fileParam"
           @handleSelectionChange="handleSelectionChange1"
           @batch-quality="batchQuality"
           @batch-dispose="batchDispose"

+ 20 - 2
src/views/produce/components/workPlan/index.vue

@@ -259,7 +259,8 @@
     verificationQualityInspector,
     closeWork,
     sampleCollection,
-    checkByQualityWorkOrderId
+    checkByQualityWorkOrderId,
+    getQmsReportTemplatePageList
   } from '@/api/inspectionWork';
   import dictMixins from '@/mixins/dictMixins';
   import tabMixins from '@/mixins/tableColumnsMixin';
@@ -531,7 +532,8 @@
         transferVisible: false,
         transferId: '',
         isReportApproval: 0,
-        processSubmitDialogFlag: false
+        processSubmitDialogFlag: false,
+        reportTemplateList: []
       };
     },
     created() {
@@ -541,6 +543,7 @@
       this.getTnspectionPlanType();
       this.getQualityMethodCode();
       this.getCode();
+      this.getReportTemplateList();
       // this.getQualityModeList('quality_method_code');
       // this.getQualityTypeList('inspection_plan_type');
     },
@@ -602,6 +605,21 @@
       }
     },
     methods: {
+      getReportTemplateList() {
+        getQmsReportTemplatePageList({
+          pageNum: 1,
+          pageSize: 999,
+          isEnabled: 1
+        })
+          .then((res) => {
+            this.reportTemplateList = res.list;
+            console.log('reportTemplateList', this.reportTemplateList);
+          })
+          .catch((err) => {
+            console.error('获取报表模板列表失败:', err);
+            // this.$message.error('获取报表模板列表失败:' + (err.message || '操作异常'));
+          });
+      },
       // datasource({ page, where, limit }) {
       //   // return getList({
       //   //   ...where,

+ 2 - 2
vue.config.js

@@ -32,8 +32,8 @@ module.exports = {
       // 当我们的本地的请求 有/api的时候,就会代理我们的请求地址向另外一个服务器发出请求
       '/api': {
         // target: 'http://124.71.68.31:50001',
-        target: 'http://192.168.1.125:18086',
-        // target: 'http://192.168.1.251:18086',
+        // target: 'http://192.168.1.125:18086',
+        target: 'http://192.168.1.251:18086',
         // target: 'http://192.168.1.251:18186',
         // target: 'http://192.168.1.251:18086', // 开发环境
         // target: 'http://192.168.1.103:18086',192.168.1.116