Browse Source

修改bug

695593266@qq.com 3 days ago
parent
commit
46ef74a1d8

+ 5 - 1
src/views/produce/components/feeding/components/workOrderBom.vue

@@ -139,7 +139,7 @@
           </div>
         </div>
 
-        <div class="item rx-sc" v-if="isOrder">
+        <div class="item rx-sc" v-if="isOrder || showTaskReportInfo">
           <div class="rx ww50">
             <div class="lable rx-cc">任务报工</div>
             <div class="content">
@@ -196,6 +196,10 @@
       isOrder: {
         type: Boolean,
         default: true
+      },
+      showTaskReportInfo: {
+        type: Boolean,
+        default: false
       }
     },
 

+ 2 - 1
src/views/produce/components/jobBooking/index.vue

@@ -79,7 +79,7 @@
       >
         <div class="title_box rx-bc">
           <div class="name" v-if="!taskObj.isOrderListData">工单信息 </div>
-          <div class="name" v-else> </div>
+          <div class="name" v-else>任务信息</div>
 
           <div class="rx-bc">
             <el-button
@@ -109,6 +109,7 @@
           :item="item"
           :isReportWork="true"
           :isOrder="!taskObj.isOrderListData"
+          :showTaskReportInfo="taskObj.isOrderListData"
           @task-report-change="setTaskReportInfo(index, $event)"
         ></workOrderBom>
 

+ 23 - 10
src/views/produce/components/qualityInspection/index.vue

@@ -10,9 +10,22 @@
     :close-on-press-escape="false"
   >
     <div class="two-layout quality-inspection-layout">
-      <el-row :gutter="16" class="full-row">
-        <el-col :span="12" class="full-col">
-          <div class="pane pane-left">
+      <ele-split-layout
+        class="quality-inspection-split"
+        space="12px"
+        width="50%"
+        :resizable="true"
+        :min-size="360"
+        :max-size="-360"
+        :left-style="{
+          overflow: 'hidden',
+          width: '100%',
+          height: '100%'
+        }"
+        :right-style="{ overflow: 'hidden', height: '100%' }"
+        :responsive="false"
+      >
+        <div class="pane pane-left">
             <div class="pane-title">首件两检</div>
             <div
               v-show="leftMode === 'list'"
@@ -96,10 +109,9 @@
               @cancel="backToList"
               @success="reportSuccess"
             />
-          </div>
-        </el-col>
+        </div>
 
-        <el-col :span="12" class="full-col">
+        <template v-slot:content>
           <div class="pane pane-right">
             <div class="pane-title">工艺文件</div>
 
@@ -107,8 +119,8 @@
               <wokePopup ref="wokePopupRef"></wokePopup>
             </div>
           </div>
-        </el-col>
-      </el-row>
+        </template>
+      </ele-split-layout>
     </div>
 
     <!-- <self-inspection-reporting
@@ -395,13 +407,14 @@
     background: #f5f7fa;
   }
 
-  .full-row {
+  .quality-inspection-split {
     flex: 1;
     height: 100%;
     min-height: 0;
   }
 
-  .full-col {
+  .quality-inspection-layout ::v-deep .ele-split-layout,
+  .quality-inspection-layout ::v-deep .ele-split-layout > .ele-split-layout-content {
     height: 100%;
     min-height: 0;
   }

+ 66 - 3
src/views/produce/components/taskDialog/index.vue

@@ -89,25 +89,51 @@
           type="textarea"
         ></el-input>
       </template>
+      <template v-slot:disposalStatus="{ row }">
+        <el-tag v-if="row.disposalStatus == 0" type="success">待接收</el-tag>
+        <el-tag v-if="row.disposalStatus == 1" type="success">已接收</el-tag>
+        <el-tag v-if="row.disposalStatus == 2" type="danger">已拒绝</el-tag>
+      </template>
       <template v-slot:action="{ row }">
         <!-- <el-popconfirm title="确定完成这个任务?" @confirm="sureData(row)">
           <template v-slot:reference>
             <el-link :underline="false" type="primary">确定 </el-link>
           </template>
         </el-popconfirm> -->
-        <el-popconfirm title="确认本次报工?" @confirm="saveData(row)">
+        <el-popconfirm
+          v-if="canReport(row)"
+          title="确认本次报工?"
+          @confirm="saveData(row)"
+        >
           <template v-slot:reference>
             <el-link :underline="false" type="primary">报工 </el-link>
           </template>
         </el-popconfirm>
 
         <el-link
+          v-if="row.disposalStatus == 1"
           style="margin-left: 10px"
           :underline="false"
           type="primary"
           @click="viewRecords(row.id)"
           >报工修改记录</el-link
         >
+        <el-popconfirm
+          v-if="canReceiveTask(row)"
+          icon="el-icon-info"
+          title="确定接收任务吗?"
+          @confirm="receiveTask(row.id, '1')"
+        >
+          <el-button slot="reference" type="text">接收</el-button>
+        </el-popconfirm>
+        <el-popconfirm
+          v-if="canReceiveTask(row)"
+          icon="el-icon-info"
+          title="确定拒绝任务吗?"
+          @confirm="receiveTask(row.id, '2')"
+        >
+          <el-button slot="reference" type="text">拒绝</el-button>
+        </el-popconfirm>
       </template>
     </ele-pro-table>
     <modifyDialog ref="modifyRef" />
@@ -119,7 +145,8 @@
     batchUpdateRealTime,
     listUpdateRealTimeRecord,
     pageAssigneeByTask,
-    batchUpdateRealTimeConfirm
+    batchUpdateRealTimeConfirm,
+    taskManagement
   } from '@/api/workOrderList';
   import modifyDialog from '@/views/taskList/components/modifyDialog.vue';
 
@@ -208,6 +235,14 @@
             align: 'center',
             showOverflowTooltip: true
           },
+          {
+            slot: 'disposalStatus',
+            label: '接收状态',
+            prop: 'disposalStatus',
+            width: 120,
+            align: 'center',
+            showOverflowTooltip: true
+          },
           {
             slot: 'reportQuantity',
             label: '报工数',
@@ -253,7 +288,7 @@
             slot: 'action',
             label: '操作',
             align: 'center',
-            width: 165,
+            width: 220,
             resizable: false,
             showOverflowTooltip: true,
             fixed: 'right'
@@ -317,6 +352,34 @@
             this.$message.error(err.message);
           });
       },
+      canReport(row) {
+        if (row.disposalStatus != 1) {
+          return false;
+        }
+        if (!row.hasFirstArticleDualInspection) {
+          return true;
+        }
+        return (
+          row.hasFirstArticleDualInspection == 0 ||
+          row.totalFirstArticleDualInspectionStatus == 2
+        );
+      },
+      canReceiveTask(row) {
+        return row.disposalStatus != 1 && row.disposalStatus != 2;
+      },
+      receiveTask(id, type) {
+        taskManagement({
+          id,
+          disposalStatus: Number(type)
+        })
+          .then(() => {
+            this.$message.success('操作成功');
+            this.getData();
+          })
+          .catch((err) => {
+            this.$message.error(err.message);
+          });
+      },
       buildReportRow(row) {
         const reportQuantityReported = Number(row.reportQuantity) || 0;
         const lossQuantityReported = Number(row.lossQuantity) || 0;

+ 59 - 1
src/views/produce/index.vue

@@ -419,7 +419,8 @@
     singleListTask,
     pleaseEntrustManagement,
     checkPleaseEntrust,
-    checkRepeatPick
+    checkRepeatPick,
+    getTaskReport
   } from '@/api/produce/index';
   import { checkFeedStatus } from '@/api/produce/feeding.js';
   import prenatalExamination from './components/prenatalExamination/index.vue';
@@ -1502,10 +1503,67 @@
         };
       },
 
+      getSelectedWorkOrderRows() {
+        const selectedIds = new Set(this.workListIds.map((id) => String(id)));
+        const rows = this.workData?.list || [];
+        const selectedRows = rows.filter((row) =>
+          selectedIds.has(
+            String(row.id || row.workOrderId || row.mesWorkOrderId)
+          )
+        );
+        return selectedRows.length
+          ? selectedRows
+          : this.workListIds.map((id) => ({ id }));
+      },
+
+      async validateTaskAssignBeforeWorkOrderJob() {
+        if (this.info?.clientEnvironmentId != 9 || this.activeName !== '0') {
+          return true;
+        }
+
+        const rows = this.getSelectedWorkOrderRows();
+        try {
+          const reportList = await Promise.all(
+            rows.map(async (row) => {
+              const workOrderId =
+                row.id || row.workOrderId || row.mesWorkOrderId;
+              const taskId = row.taskId || this.workTaskId || this.taskObj.id;
+              const res = await getTaskReport({ workOrderId, taskId });
+              return {
+                row,
+                data: res.data || {}
+              };
+            })
+          );
+
+          for (const { row, data } of reportList) {
+            if (Object.keys(data).length == 0 || data.isAssign != 1) {
+              continue;
+            }
+
+            if (data.reportCheck != 1) {
+              this.$message.warning(
+                `工单${
+                  row.code || row.workOrderCode || ''
+                }未完成任务报工,不能报工`
+              );
+              return false;
+            }
+          }
+        } catch (error) {
+          this.$message.warning('任务派单校验失败,请稍后重试');
+          return false;
+        }
+
+        return true;
+      },
+
       async handleWorkOrderJob() {
         if (!this.checkWorkOrder({ min: 1 })) return;
 
         this.isFinalCheckProduction = false;
+        if (!(await this.validateTaskAssignBeforeWorkOrderJob())) return;
+
         if (this.taskObj.id != '-1') {
           const result = await this.checkQualityResult();
           console.log(result, 'result');

+ 53 - 1
src/views/produceOrder/workReport.vue

@@ -323,7 +323,8 @@
     factoryworkstationPage,
     nextTask,
     checkPleaseEntrust,
-    checkRepeatPick
+    checkRepeatPick,
+    getTaskReport
   } from '@/api/produce/index';
   import { getTaskInstanceList } from '@/api/produce/job';
   import { workorderInfo } from '@/api/produceOrder/index.js';
@@ -934,6 +935,55 @@
         }
       },
 
+      getSelectedWorkOrderRows() {
+        if (this.workOrderInfo && Object.keys(this.workOrderInfo).length) {
+          return [this.workOrderInfo];
+        }
+        return this.workListIds.map((id) => ({ id }));
+      },
+
+      async validateTaskAssignBeforeWorkOrderJob() {
+        if (this.info?.clientEnvironmentId != 9 || this.activeName !== '0') {
+          return true;
+        }
+
+        const rows = this.getSelectedWorkOrderRows();
+        try {
+          const reportList = await Promise.all(
+            rows.map(async (row) => {
+              const workOrderId =
+                row.id || row.workOrderId || row.mesWorkOrderId;
+              const taskId = row.taskId || this.workTaskId || this.taskObj.id;
+              const res = await getTaskReport({ workOrderId, taskId });
+              return {
+                row,
+                data: res.data || {}
+              };
+            })
+          );
+
+          for (const { row, data } of reportList) {
+            if (Object.keys(data).length == 0 || data.isAssign != 1) {
+              continue;
+            }
+
+            if (data.reportCheck != 1) {
+              this.$message.warning(
+                `工单${
+                  row.code || row.workOrderCode || ''
+                }未完成任务报工,不能报工`
+              );
+              return false;
+            }
+          }
+        } catch (error) {
+          this.$message.warning('任务派单校验失败,请稍后重试');
+          return false;
+        }
+
+        return true;
+      },
+
       resetFirstArticlePickFeedStatus() {
         this.firstArticlePickFeedReady = true;
         this.firstArticlePickFeedMsg = '';
@@ -1103,6 +1153,8 @@
             }
           }
 
+          if (!(await this.validateTaskAssignBeforeWorkOrderJob())) return;
+
           if (this.taskObj.id != '-1') {
             const result = await this.checkQualityResult();
             if (!result) return;

+ 2 - 2
vue.config.js

@@ -33,7 +33,7 @@ module.exports = {
       '/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.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
@@ -45,7 +45,7 @@ module.exports = {
         // target: 'http://192.168.1.251:18186', // 测试环境
         // target: 'http://192.168.1.251:18087',
         // target: 'http://116.163.22.90:86/api', // 嘉实生产
-        target: 'http://aiot.zoomwin.com.cn:51001/api',
+        // target: 'http://aiot.zoomwin.com.cn:51001/api',
         // target: 'http://f222326r53.imwork.net',
         changeOrigin: true, // 只有这个值为true的情况下 才表示开启跨域
         pathRewrite: {