Преглед на файлове

新增工单报工,修改bug

695593266@qq.com преди 1 година
родител
ревизия
a4e3af4a49

+ 12 - 0
src/api/produceOrder/index.js

@@ -219,3 +219,15 @@ export async function updateStatusTerminate(params) {
   }
   return Promise.reject(new Error(res.data.message));
 }
+
+//获取单个工单报工信息
+export async function workorderInfo(id) {
+  let timeStamp = new Date().getTime();
+  const res = await request.get(
+    `/pda/mes/workorder/getById/${id}?timeStamp=${timeStamp}`
+  );
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}

+ 23 - 12
src/views/produce/components/feeding/components/batchProductsBom.vue

@@ -73,8 +73,12 @@
       :visible.sync="dialogVisible"
       width="30%"
       :before-close="handleClose"
+      append-to-body
     >
       <el-form ref="form" :model="form" label-width="80px">
+        <el-form-item label="批次号">
+          <el-input v-model="form.batchNo"></el-input>
+        </el-form-item>
         <el-form-item label="拆批数">
           <el-input v-model="form.quantity"></el-input>
         </el-form-item>
@@ -116,7 +120,8 @@
         cacheKeyUrl: 'batch-products-bom',
         dialogVisible: false,
         form: {
-          quantity: ''
+          quantity: '',
+          batchNo: ''
         },
         itemData: {},
         itemIndex: ''
@@ -206,14 +211,14 @@
             align: 'center',
             showOverflowTooltip: true
           },
-          {
-            minWidth: 120,
-            prop: 'feedQuantity',
-            slot: 'feedQuantity',
-            label: '投料数量',
-            align: 'center',
-            showOverflowTooltip: true
-          },
+          // {
+          //   minWidth: 120,
+          //   prop: 'feedQuantity',
+          //   slot: 'feedQuantity',
+          //   label: '投料数量',
+          //   align: 'center',
+          //   showOverflowTooltip: true
+          // },
           {
             minWidth: 120,
             prop: 'newWeight',
@@ -246,14 +251,15 @@
 
       openBatch(row, index) {
         this.form.quantity = '';
+        this.form.batchNo = '';
         this.itemData = row;
         this.itemIndex = index;
+        this.form.batchNo = row.batchNo;
         this.dialogVisible = true;
       },
 
       async asyncgetQualityParam() {
-        console.log(this.itemIndex, 'index');
-        if (this.form.quantity) {
+        if (this.form.quantity && this.form.batchNo) {
           if (this.itemData.extInfo.sourceQuantity <= this.form.quantity) {
             this.$message.warning('拆批数不能大于数量');
             return;
@@ -262,7 +268,8 @@
           let dataList = [];
           await splitBatch({
             product: this.itemData,
-            splitQt: Number(this.form.quantity)
+            splitQt: Number(this.form.quantity),
+            batchNo: this.form.batchNo
           }).then((res) => {
             res.forEach((item) => {
               dataList.push(this.deepCopy(item));
@@ -280,6 +287,10 @@
           Number(this.form.quantity);
         this.list[this.itemIndex].extInfo.sourceQuantity = number;
         this.list[this.itemIndex].feedQuantity = number;
+        this.list[this.itemIndex].extInfo.newWeight =
+          (Number(this.list[this.itemIndex].extInfo.newWeight) * 100000) /
+            100000 -
+          (Number(list[0].extInfo.newWeight) * 100000) / 100000;
 
         list.forEach((item) => {
           item.childBatch = 1;

+ 7 - 3
src/views/produce/components/feeding/index.vue

@@ -36,7 +36,7 @@
       <div class="feed_box" v-if="isLoad">
         <div v-for="(item, index) in List" :key="index" class="card_box">
           <div class="title_box rx-bc">
-            <div class="name">工单信息 </div>
+            <div class="name" v-if="!taskObj.isOrderListData">工单信息 </div>
 
             <div class="rx-bc">
               <el-button
@@ -63,7 +63,10 @@
             </div>
           </div>
 
-          <workOrderBom :item="item"></workOrderBom>
+          <workOrderBom
+            :item="item"
+            v-if="!taskObj.isOrderListData"
+          ></workOrderBom>
 
           <div>
             <div class="title_box rx-bc">
@@ -596,6 +599,7 @@
           this.loadingBtn = false;
           this.$message.success('投料成功');
           this.getList(this.idsList);
+          this.$emit('feedSuccess', 'success');
         });
       },
 
@@ -641,7 +645,7 @@
   }
 
   .feed_box {
-    margin-top: 6px;
+    // margin-top: 6px;
     width: 100%;
     height: calc(100vh - 70px - 50px - 80px - 60px);
     overflow-y: scroll;

+ 44 - 32
src/views/produce/components/jobBooking/components/batchPackagingGrouping.vue

@@ -856,40 +856,52 @@
         console.log(this.DispositionList, 'this.DispositionList');
         let packInfo = {};
         if (this.warehouseId == 2) {
-          packInfo = {
-            // this.DispositionList[0]
-
-            specText: this.text,
-            specValue: this.value,
-            minimumPackage: this.minimumPackage, // 最小包装
-            tier: this.warehouseId,
-            minimumPackageCell: this.DispositionList[0].packageCell, // 最小包装
-            minimumPackageUnit: this.DispositionList[0].packageUnit, // 最小包装单位
-            minimumConversionUnit: this.DispositionList[0].conversionUnit, // 最小包装单位
-            minimumFormedNumLast: this.DispositionList[0].formedNumLast // 总包装数量
-          };
+          if (this.DispositionList && this.DispositionList.length != 0) {
+            packInfo = {
+              // this.DispositionList[0]
+
+              specText: this.text,
+              specValue: this.value,
+              minimumPackage: this.minimumPackage, // 最小包装
+              tier: this.warehouseId,
+              minimumPackageCell: this.DispositionList[0].packageCell, // 最小包装
+              minimumPackageUnit: this.DispositionList[0].packageUnit, // 最小包装单位
+              minimumConversionUnit: this.DispositionList[0].conversionUnit, // 最小包装单位
+              minimumFormedNumLast: this.DispositionList[0].formedNumLast // 总包装数量
+            };
+          } else {
+            packInfo = {};
+          }
         } else if (this.warehouseId == 3) {
-          packInfo = {
-            specText: this.text,
-            specValue: this.value,
-            withinPackage: this.withinPackage, // 内包装
-            tier: this.warehouseId,
-            withinPackageCell: this.DispositionList[0].packageCell, // 最小包装名称
-            withinPackageUnit: this.DispositionList[0].packageUnit, // 最小包装单位
-            withinConversionUnit: this.DispositionList[0].conversionUnit, // 最小包装单位
-            withinFormedNumLast: this.DispositionList[0].formedNumLast
-          }; // 总包装数量
+          if (this.DispositionList && this.DispositionList.length != 0) {
+            packInfo = {
+              specText: this.text,
+              specValue: this.value,
+              withinPackage: this.withinPackage, // 内包装
+              tier: this.warehouseId,
+              withinPackageCell: this.DispositionList[0].packageCell, // 最小包装名称
+              withinPackageUnit: this.DispositionList[0].packageUnit, // 最小包装单位
+              withinConversionUnit: this.DispositionList[0].conversionUnit, // 最小包装单位
+              withinFormedNumLast: this.DispositionList[0].formedNumLast // 总包装数量
+            };
+          } else {
+            packInfo = {};
+          }
         } else if (this.warehouseId == 4) {
-          packInfo = {
-            specText: this.text,
-            specValue: this.value,
-            outsidePackage: this.outsidePackage, //外包装
-            tier: this.warehouseId,
-            outsidePackageCell: this.DispositionList[0].packageCell, // 最小包装名称
-            outsidePackageUnit: this.DispositionList[0].packageUnit, // 最小包装单位
-            outsideConversionUnit: this.DispositionList[0].conversionUnit, // 最小包装单位
-            outsideFormedNumLast: this.DispositionList[0].formedNumLast
-          }; // 总包装数量
+          if (this.DispositionList && this.DispositionList.length != 0) {
+            packInfo = {
+              specText: this.text,
+              specValue: this.value,
+              outsidePackage: this.outsidePackage, //外包装
+              tier: this.warehouseId,
+              outsidePackageCell: this.DispositionList[0].packageCell, // 最小包装名称
+              outsidePackageUnit: this.DispositionList[0].packageUnit, // 最小包装单位
+              outsideConversionUnit: this.DispositionList[0].conversionUnit, // 最小包装单位
+              outsideFormedNumLast: this.DispositionList[0].formedNumLast
+            }; // 总包装数量
+          } else {
+            packInfo = {};
+          }
         }
 
         this.objData.packInfo = packInfo;

+ 2 - 0
src/views/produce/components/jobBooking/components/batchSemiProductJobBom.vue

@@ -416,6 +416,7 @@
       :visible.sync="dialogVisible"
       width="30%"
       :before-close="handleClose"
+      append-to-body
     >
       <el-form ref="form" :model="form" label-width="80px">
         <el-form-item label="处置类型">
@@ -447,6 +448,7 @@
       :visible.sync="dialogEngrave"
       width="30%"
       :before-close="handleClose"
+      append-to-body
     >
       <el-form ref="form" :model="form" label-width="90px">
         <el-form-item label="刻码区间">

+ 3 - 1
src/views/produce/components/jobBooking/components/detailPackagingGrouping.vue

@@ -8,7 +8,9 @@
       <div class="label lable150 rx-cc" style="width: 100px !important"
         >规格</div
       >
-      <span style="width: 200px">{{ objData.packInfo.specText }}</span>
+      <span style="width: 200px">{{
+        objData.packInfo ? objData.packInfo.specText : ''
+      }}</span>
       <div class="label lable150 rx-cc" style="width: 100px !important"
         >包装:</div
       >

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

@@ -425,6 +425,7 @@
       :visible.sync="dialogVisible"
       width="30%"
       :before-close="handleClose"
+      append-to-body
     >
       <el-form ref="form" :model="form" label-width="80px">
         <el-form-item label="处置类型">
@@ -455,7 +456,7 @@
       v-if="dialogEngrave"
       :visible.sync="dialogEngrave"
       width="30%"
-      :before-close="handleClose"
+      append-to-body
     >
       <el-form ref="form" :model="form" label-width="90px">
         <el-form-item label="刻码区间">

+ 10 - 2
src/views/produce/components/jobBooking/details.vue

@@ -7,13 +7,21 @@
           <div class="item_box rx-bc">
             <div class="round">{{ index + 1 }}</div>
             <div class="time"
-              >报工时间:{{ objData.workReportInfo.executorTime }}
+              >报工时间:{{
+                objData.workReportInfo
+                  ? objData.workReportInfo.executorTime
+                  : ''
+              }}
             </div>
           </div>
 
           <div class="item_box rx-bc">
             <div class="time"
-              >报工人:{{ objData.workReportInfo.executorName }}
+              >报工人:{{
+                objData.workReportInfo
+                  ? objData.workReportInfo.executorName
+                  : ''
+              }}
             </div>
           </div>
 

+ 20 - 3
src/views/produce/components/jobBooking/index.vue

@@ -44,7 +44,7 @@
         class="card_box"
         v-if="isLoad"
       >
-        <div class="title_box rx-bc">
+        <div class="title_box rx-bc" v-if="!taskObj.isOrderListData">
           <div class="name">工单信息 </div>
 
           <div class="rx-bc">
@@ -71,7 +71,10 @@
         </div>
         <!-- // 工单信息 -->
 
-        <workOrderBom :item="item"></workOrderBom>
+        <workOrderBom
+          :item="item"
+          v-if="!taskObj.isOrderListData"
+        ></workOrderBom>
 
         <!-- 报工时间 -->
         <div>
@@ -639,6 +642,19 @@
                 console.log(item, 'item');
                 return item;
               });
+
+              obj.product = obj.product.map((item) => {
+                if (this.taskObj.type != 6) {
+                  if (item['extInfo']?.reportWeight) {
+                    item['extInfo'].reportWeight = '';
+                  }
+                }
+                item.confirm = 0;
+
+                console.log(item, 'item');
+                return item;
+              });
+
               obj.workReportInfo = {
                 executorTime: null,
                 formingNum: null,
@@ -1055,6 +1071,7 @@
             this.loading.close();
             this.$message.success('报工成功');
             this.getList(this.idsList);
+            this.$emit('jobSuccess', 'Success');
           })
           .catch(() => {
             this.loadingBtn = false;
@@ -1477,7 +1494,7 @@
   }
 
   .job_box {
-    margin-top: 6px;
+    // margin-top: 6px;
     width: 100%;
     height: calc(100vh - 70px - 50px - 80px - 60px);
     overflow-y: scroll;

+ 4 - 0
src/views/produce/components/warehousing/index.vue

@@ -652,6 +652,7 @@
             console.log(res);
             this.$message.success('入库成功');
             this.getList(this.idsList);
+            this.$emit('warehouseSuccess', 'warehouseSuccess');
           });
         } else if (this.clientEnvironmentId == 2) {
           if (!this.warehouseId) {
@@ -709,6 +710,7 @@
             console.log(res);
             this.$message.success('入库成功');
             this.getList(this.idsList);
+            this.$emit('warehouseSuccess', 'warehouseSuccess');
           });
         } else if (this.clientEnvironmentId == 3) {
           let _arr = [];
@@ -756,6 +758,7 @@
             console.log(res);
             this.$message.success('入库成功');
             this.getList(this.idsList);
+            this.$emit('warehouseSuccess', 'warehouseSuccess');
           });
         } else {
           let _arr = [];
@@ -797,6 +800,7 @@
             console.log(res);
             this.$message.success('入库成功');
             this.getList(this.idsList);
+            this.$emit('warehouseSuccess', 'warehouseSuccess');
           });
         }
       }

+ 4 - 4
src/views/produce/components/workPlan/components/newQualityContentTabs.vue

@@ -14,13 +14,13 @@
         @click="$emit('batch-quality')"
         >批量质检</el-button
       >
-      <el-button
+      <!-- <el-button
         type="primary"
         :loading="loading"
         v-if="type != 'detail'"
         @click="$emit('batch-dispose')"
         >批量处置</el-button
-      >
+      > -->
     </header-title>
 
     <el-tabs v-model="activeNameKK" @tab-click="handleClick">
@@ -323,12 +323,12 @@
               >
                 质检
               </el-link>
-              <el-link
+              <!-- <el-link
                 type="primary"
                 :underline="false"
                 @click="handleDispose(scope.$index, scope.row, 'dispose')"
                 >处置
-              </el-link>
+              </el-link> -->
             </template>
           </el-table-column>
         </el-table>

+ 3 - 0
src/views/produce/index.vue

@@ -452,6 +452,8 @@
         this.feedNeedEquipment = data.feedNeedEquipment;
         this.reportNeedFeed = data.reportNeedFeed;
 
+        console.log(data, 'handleNodeClick');
+
         let obj = {
           1: `${data.workCenterName}-${data.name}(普通工序)`,
           3: `${data.workCenterName}-${data.name}(质检工序)`,
@@ -464,6 +466,7 @@
         this.type = data.type;
         let taskObj = {};
         taskObj = this.produceTaskList.find((item) => item.id === data.id);
+        taskObj.isOrderListData = false;
         this.$store.commit('user/setTaskObj', taskObj);
       },
 

+ 14 - 11
src/views/produceOrder/index.vue

@@ -142,11 +142,10 @@
           >
           <template v-if="activeName != 'second'">
             <el-link
-              v-if="row.status == 4 && row.isSplit == 0"
+              v-if="(row.status == 4 || row.status == 5) && row.isSplit == 0"
               type="primary"
               :underline="false"
-              icon="el-icon-truck"
-              @click="handleOrderPublish(1, row)"
+              @click="handleOrderPublish(row)"
             >
               报工
             </el-link>
@@ -191,6 +190,7 @@
     <EquipmentDialog ref="equipmentRef" @choose="choose"></EquipmentDialog>
 
     <xlhView ref="xlhRef"></xlhView>
+    <workReport ref="workReport"></workReport>
     <releaseDialog
       ref="releaseRef"
       :current="dispatchRow"
@@ -203,6 +203,7 @@
 
 <script>
   import releaseDialog from './components/releaseDialog';
+  import workReport from './workReport.vue';
   import {
     getPage,
     batchCompletion,
@@ -241,7 +242,8 @@
       printTg,
       detailsPop,
       EquipmentDialog,
-      xlhView
+      xlhView,
+      workReport
     },
 
     data() {
@@ -802,19 +804,20 @@
         this.$refs.createRef.open(0);
       },
       // 发布工单
-      handleOrderPublish(type, row) {
+      handleOrderPublish(row) {
+        this.$refs.workReport.open(row);
         // this.$router.push({
         //   path: '/produce',
         //   query: {
         //     workOrderId: row.id
         //   }
         // });
-        this.$router.push({
-          path: '/produceOrder/workReport',
-          query: {
-            workOrderId: row.id
-          }
-        });
+        // this.$router.push({
+        //   path: '/produceOrder/workReport',
+        //   query: {
+        //     workOrderId: row.id
+        //   }
+        // });
       },
 
       getFieldModel() {

+ 283 - 0
src/views/produceOrder/info.vue

@@ -0,0 +1,283 @@
+<template>
+  <div class="material">
+    <div class="content_table">
+      <div class="item rx-sc">
+        <div class="rx ww25">
+          <div class="lable rx-cc">报工类型</div>
+          <div class="content" v-if="workOrderInfo.singleReport == 0"
+            >批量报工</div
+          >
+          <div class="content" v-if="workOrderInfo.singleReport == 1"
+            >单个报工</div
+          >
+        </div>
+      </div>
+
+      <div class="item rx-sc">
+        <div class="rx ww25">
+          <div class="lable rx-cc">生产工单号</div>
+          <div class="content">
+            {{ workOrderInfo.code }}
+          </div>
+        </div>
+      </div>
+
+      <div class="item rx-sc">
+        <div class="rx ww25">
+          <div class="lable rx-cc">生产订单号</div>
+          <div class="content">{{ workOrderInfo.apsWorkOrderCode }}</div>
+        </div>
+      </div>
+
+      <div class="item rx-sc">
+        <div class="rx ww25">
+          <div class="lable rx-cc">计划编码</div>
+          <div class="content">{{ workOrderInfo.productionPlanCode }}</div>
+        </div>
+      </div>
+
+      <div class="item rx-sc">
+        <div class="rx ww25">
+          <div class="lable rx-cc">编码</div>
+          <div class="content">{{ workOrderInfo.productCode }}</div>
+        </div>
+      </div>
+
+      <div class="item rx-sc">
+        <div class="rx ww25">
+          <div class="lable rx-cc">名称</div>
+          <div class="content" :title="workOrderInfo.productName">{{
+            workOrderInfo.productName
+          }}</div>
+        </div>
+      </div>
+
+      <div class="item rx-sc">
+        <div class="rx ww25">
+          <div class="lable rx-cc">规格</div>
+          <div class="content" :title="workOrderInfo.specification">{{
+            workOrderInfo.specification
+          }}</div>
+        </div>
+      </div>
+
+      <div class="item rx-sc">
+        <div class="rx ww25">
+          <div class="lable rx-cc" :title="workOrderInfo.model">型号</div>
+          <div class="content">{{ workOrderInfo.model }}</div>
+        </div>
+      </div>
+
+      <div class="item rx-sc">
+        <div class="rx ww25">
+          <div class="lable rx-cc">牌号</div>
+          <div class="content" :title="workOrderInfo.brandNo">{{
+            workOrderInfo.brandNo
+          }}</div>
+        </div>
+      </div>
+
+      <div class="item rx-sc">
+        <div class="rx ww25">
+          <div class="lable rx-cc">批次号</div>
+          <div class="content">{{ workOrderInfo.batchNo }}</div>
+        </div>
+      </div>
+
+      <div class="item rx-sc">
+        <div class="rx ww25">
+          <div class="lable rx-cc">生产数量</div>
+          <div class="content rx-sc">
+            <div>{{ workOrderInfo.formingNum }}</div>
+            <div class="unit">{{ workOrderInfo.unit }}</div>
+          </div>
+        </div>
+      </div>
+
+      <div class="item rx-sc">
+        <div class="rx ww25">
+          <div class="lable rx-cc">重量</div>
+          <div class="content content_num">
+            <div>{{ workOrderInfo.formingWeight }}</div>
+            <div class="unit">{{ workOrderInfo.weightUnit }}</div>
+          </div>
+        </div>
+      </div>
+
+      <div class="item rx-sc">
+        <div class="rx ww25">
+          <div class="lable rx-cc">已生产数量</div>
+          <div class="content content_num">
+            <div>{{ workOrderInfo.formedNum }}</div>
+            <div class="unit">{{ workOrderInfo.unit }}</div>
+          </div>
+        </div>
+      </div>
+
+      <div class="item rx-sc">
+        <div class="rx ww25">
+          <div class="lable rx-cc">已生产重量</div>
+          <div class="content content_num">
+            <div>{{ workOrderInfo.formedWeight || 0 }}</div>
+            <div class="unit">{{ workOrderInfo.weightUnit }}</div>
+          </div>
+        </div>
+      </div>
+
+      <div class="item rx-sc">
+        <div class="rx ww25">
+          <div class="lable rx-cc">生产编号</div>
+          <div class="content" :title="workOrderInfo.productionCodes">{{
+            workOrderInfo.productionCodes
+          }}</div>
+        </div>
+      </div>
+
+      <div class="item rx-sc">
+        <div class="rx ww25">
+          <div class="lable rx-cc">委外状态</div>
+          <div v-if="workOrderInfo.outsourceStatus">
+            <div class="content" v-if="workOrderInfo.outsourceStatus == 1"
+              >未委外</div
+            >
+            <div class="content" v-if="workOrderInfo.outsourceStatus == 2"
+              >委外中</div
+            >
+            <div class="content" v-if="workOrderInfo.outsourceStatus == 3"
+              >完成委外-未质检</div
+            >
+          </div>
+          <div v-else>
+            <div class="content">{{ '' }}</div>
+          </div>
+        </div>
+      </div>
+
+      <div class="item rx-sc">
+        <div class="rx ww25">
+          <div class="lable rx-cc">计划开始时间</div>
+          <div class="content">{{ workOrderInfo.planStartTime }}</div>
+        </div>
+      </div>
+
+      <div class="item rx-sc">
+        <div class="rx ww25">
+          <div class="lable rx-cc">计划结束时间</div>
+          <div class="content">{{ workOrderInfo.planCompleteTime }}</div>
+        </div>
+      </div>
+
+      <div class="item rx-sc">
+        <div class="rx ww25">
+          <div class="lable rx-cc">实际开始时间</div>
+          <div class="content">{{ workOrderInfo.startTime }}</div>
+        </div>
+      </div>
+
+      <div class="item rx-sc">
+        <div class="rx ww25">
+          <div class="lable rx-cc">创建时间</div>
+          <div class="content">{{ workOrderInfo.createTime }}</div>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+  export default {
+    props: {
+      workOrderInfo: {
+        type: Object,
+        default: () => ({})
+      }
+    },
+    data() {
+      return {};
+    },
+
+    methods: {}
+  };
+</script>
+
+<style lang="scss" scoped>
+  .content_table {
+    width: 100%;
+    border: 1px solid #e3e5e5;
+    position: relative;
+
+    .item {
+      // display: flex;
+      // border-bottom: 1px solid #e3e5e5;
+
+      .lable {
+        width: 82px !important;
+        text-align: center;
+        background-color: #f7f9fa;
+        font-size: 12px;
+        border-right: 1px solid #e3e5e5;
+        flex-shrink: 0;
+      }
+
+      .content {
+        min-width: 250px;
+        min-height: 32px;
+        font-size: 14px;
+        line-height: 14px;
+        font-style: normal;
+        font-weight: 400;
+        padding: 9px 4px;
+        box-sizing: border-box;
+        word-wrap: break-word;
+        white-space: nowrap;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        flex-grow: 1 !important;
+
+        .unit {
+          padding: 0 2px;
+          font-size: 12px;
+          color: #404446;
+        }
+      }
+
+      .content_num {
+        display: flex;
+        align-items: center;
+        padding: 2px;
+        --input-background-color: #f0f8f2;
+      }
+
+      &:last-child {
+        border-bottom: none;
+      }
+    }
+
+    .ww25 {
+      width: 25%;
+    }
+  }
+
+  .title_box {
+    .name {
+      font-size: 14px;
+      font-style: normal;
+      font-weight: 400;
+      color: #157a2c;
+      padding-left: 5px;
+      position: relative;
+
+      &:before {
+        position: absolute;
+        content: '';
+        left: 0px;
+        top: 0px;
+        bottom: 0px;
+        width: 2px;
+        height: 14px;
+        background: #157a2c;
+        margin: auto;
+      }
+    }
+  }
+</style>

+ 1055 - 0
src/views/produceOrder/workReport.vue

@@ -0,0 +1,1055 @@
+<template>
+  <div class="index_box">
+    <el-drawer
+      title=""
+      :visible.sync="drawer"
+      :before-close="handleClose"
+      :custom-class="isFullscreen ? 'not-fullscreen' : 'is-fullscreen'"
+      :with-header="false"
+      :append-to-body="true"
+    >
+      <div>
+        <div>
+          <div class="seek-list" style="background-color: #157a2c">
+            <!-- <div>
+              <el-input
+                style="width: 180px; margin-right: 5px"
+                clearable
+                v-model="keyWord"
+                placeholder="请输入关键字"
+                @clear="handleSearch"
+              />
+
+              <el-button
+                size="mini"
+                type="primary"
+                style="margin: 0 5px"
+                @click="handleSearch"
+                >查询</el-button
+              >
+
+              <template>
+                <el-popover
+                  placement="top-start"
+                  width="200"
+                  trigger="hover"
+                  content="支持工单编码,产品编码,产品名称,产品规格,牌号,型号,批次号查询。"
+                >
+                  <i
+                    class="el-icon-question"
+                    slot="reference"
+                    style="color: #40a9ff; font-size: 14px"
+                  ></i> </el-popover
+              ></template>
+            </div> -->
+            <div
+              style="
+                width: 100%;
+                color: #fff;
+                display: flex;
+                justify-content: space-between;
+              "
+            >
+              <div>
+                <b style="margin-right: 50px; font-size: 16px"
+                  >当前工序:{{ title }}</b
+                >
+                <b style="font-size: 16px">下道工序:{{ title1 }}</b>
+              </div>
+
+              <b style="font-weight: blod; font-size: 16px">
+                操作员:{{ info.name }}
+              </b>
+
+              <div class="rx-ec">
+                <el-button
+                  icon="el-icon-full-screen"
+                  type="text"
+                  style="color: #fff; font-size: 16px"
+                  @click="handleFull"
+                  >{{ isFullscreen ? '全屏' : '缩小' }}</el-button
+                >
+                <el-button
+                  icon="el-icon-circle-close"
+                  type="text"
+                  style="color: #fff; font-size: 16px"
+                  @click="handleClose"
+                  >关闭</el-button
+                >
+              </div>
+            </div>
+          </div>
+
+          <div class="drawer_content">
+            <div class="taskTitle"
+              >工艺路线:{{ workOrderInfo.produceRoutingName }}</div
+            >
+            <el-steps :active="activeIndex" space="20px" align-center>
+              <el-step
+                v-for="(item, index) in routeList"
+                :key="index"
+                :title="item.taskTypeName"
+                @click.native="handIdx(index, item)"
+                :description="desIndex == index ? '此处' : ''"
+                :class="desIndex == index ? 'active' : ''"
+              ></el-step>
+            </el-steps>
+          </div>
+
+          <ele-split-layout
+            space="0px"
+            width="26%"
+            :resizable="true"
+            :min-size="200"
+            :max-size="-200"
+            :left-style="{
+              overflow: 'hidden',
+              width: '100%'
+            }"
+            :right-style="{ overflow: 'hidden' }"
+            :responsive="false"
+            style="height: calc(100vh - 230px)"
+          >
+            <!-- 左侧 工单列表 -->
+            <div class="left_main">
+              <div class="top">
+                <Info :workOrderInfo="workOrderInfo"></Info>
+              </div>
+            </div>
+            <!-- //详细信息 -->
+            <template v-slot:content>
+              <div class="right_main">
+                <!-- 领料 -->
+                <!-- <div v-if="operationType == 'pick'"> -->
+                <div v-if="operationType == 'pick'">
+                  <pickDetails
+                    ref="pickListRef"
+                    :workTaskId="workTaskId"
+                    :taskId="taskObj.id"
+                    @pickAdd="pickAdd"
+                  ></pickDetails>
+                </div>
+
+                <div v-if="operationType == 'feed'">
+                  <!-- 投料 -->
+                  <feeding
+                    :workListIds="workListIds"
+                    :feedNeedEquipment="feedNeedEquipment"
+                    @feedSuccess="feedSuccess"
+                  ></feeding>
+                </div>
+
+                <div v-if="operationType == 'job'">
+                  <!-- // 报工列表 入库 -->
+
+                  <warehousing
+                    v-if="taskObj.id == -1"
+                    :workListIds="workListIds"
+                    ref="wareRef"
+                    @warehouseSuccess="warehouseSuccess"
+                  ></warehousing>
+
+                  <!-- // 设备 入库 -->
+                  <!-- 普通报工 -->
+                  <!-- <jobBooking
+                  v-else
+                  :workListIds="workListIds"
+                  ref="jobRef"
+                  :reportNeedFeed="reportNeedFeed"
+                ></jobBooking> -->
+
+                  <jobBooking
+                    v-else
+                    :workListIds="workListIds"
+                    ref="jobRef"
+                    :reportNeedFeed="reportNeedFeed"
+                    @jobSuccess="jobSuccess"
+                  ></jobBooking>
+
+                  <!-- <workPlan
+                  style="width: 100%"
+                  v-else
+                  :workListIds="workListIds"
+                  ref="jobRef"
+                  :reportNeedFeed="reportNeedFeed"
+                >
+                </workPlan> -->
+                </div>
+
+                <!-- 工步 -->
+                <div v-if="operationType == 'workStep'"> </div>
+                <!-- 质检工序 -->
+
+                <div v-if="operationType == 'inspection'">
+                  <inspection
+                    :workListIds="workListIds"
+                    ref="inspectionRef"
+                  ></inspection>
+                </div>
+
+                <!-- 委外 -->
+                <div
+                  v-if="operationType == 'Outsourcing' && isType == '3'"
+                  class="right_main_box"
+                >
+                  <outsourcing
+                    :outsourceFormVal="outsourceForm"
+                    @changePlugIn="changePlugIn"
+                    v-if="isStep"
+                  ></outsourcing>
+
+                  <!--   -->
+                  <outsourceList
+                    :outsourceFormVal="outObj"
+                    @closeForm="closeForm"
+                    @outScucc="outScucc"
+                    v-else
+                  ></outsourceList>
+                </div>
+              </div>
+            </template>
+          </ele-split-layout>
+
+          <footBtn
+            @footBtn="footBtn"
+            :type="type"
+            :singleReportInspection="singleReportInspection"
+            style="background: rgba(223, 250, 222, 0.6); padding: 10px"
+          ></footBtn>
+        </div>
+      </div>
+
+      <!--领料弹框 -->
+      <picking
+        v-if="pickingShow"
+        @close="pickingClose"
+        :workListIds="workListIds"
+      ></picking>
+
+      <!-- 工艺文件 -->
+      <wokePopup ref="wokePopupRef"></wokePopup>
+      <!-- 检验报工 -->
+      <workPlan ref="jobRefs"> </workPlan>
+      <!-- <workes ref="jobRefs"> </workes> -->
+
+      <!-- :workListIds="workListIds" :taskId="taskObj.id" -->
+      <!-- 工步 -->
+      <workStep ref="workStepRef" />
+      <!--  任务  -->
+      <TaskDialog ref="taskDialogRef" />
+
+      <!-- 异常 -->
+      <createError ref="createErrorRef" />
+    </el-drawer>
+  </div>
+</template>
+
+<script>
+  import Info from './info.vue';
+  import TaskDialog from '@/views/produce/components/taskDialog/index.vue';
+  import Search from '@/views/produce/components/search.vue';
+  import footBtn from '@/views/produce/components/footBtn.vue';
+  // import produceOrder from './components/produceOrder.vue';
+  import produceOrder from '@/views/produce/components/new_produceOrder.vue';
+  import productionResource from '@/views/produce/components/productionResource/index.vue';
+  import outsourcing from '@/views/produce/components/outsourcing/index.vue';
+  import picking from '@/views/produce/components/picking/index.vue';
+  import wokePopup from '@/views/produce/components/picking/wokePopup.vue';
+  import inspection from '@/views/produce/components/inspection/newIndex.vue';
+  // import inspection from './components/inspection/index.vue';
+
+  import pickDetails from '@/views/produce/components/picking/details.vue';
+  import AssetTree from '@/components/AssetTree/joobIndex.vue';
+  import feeding from '@/views/produce/components/feeding/index.vue';
+
+  import jobBooking from '@/views/produce/components/jobBooking/index.vue';
+  import workPlan from '@/views/produce/components/workPlan/index.vue';
+  // import workes from './components/workPlan/components/work.vue';
+  import warehousing from '@/views/produce/components/warehousing/index.vue';
+  import outsourceList from '@/views/produce/components/outsourcing/outsourceList.vue';
+  import workStep from '@/views/produce/components/workStep/index.vue';
+  import createError from '@/views/produce/components/createError.vue';
+  import { parameterGetByCode } from '@/api/system/dictionary-data';
+  import {
+    getByTaskId,
+    pcCheckOutsource,
+    getTaskInstanceById,
+    checkOutsourceMaterial,
+    listTask,
+    factoryworkstationPage,
+    nextTask
+  } from '@/api/produce/index';
+  import { getTaskInstanceList } from '@/api/produce/job';
+  import { workorderInfo } from '@/api/produceOrder/index.js';
+
+  export default {
+    components: {
+      Search,
+      footBtn,
+      wokePopup,
+      produceOrder,
+      productionResource,
+      outsourcing,
+      picking,
+      pickDetails,
+      outsourceList,
+      feeding,
+      AssetTree,
+      jobBooking,
+      inspection,
+      warehousing,
+      workStep,
+      workPlan,
+      TaskDialog,
+      createError,
+      Info
+    },
+    data() {
+      return {
+        name: '',
+        activeName: '0',
+        taskName: '',
+        keyWord: '', //搜索
+        title: '',
+        type: '',
+        loading: false,
+        operationType: null,
+        popupType: '', // 弹窗
+        workListIds: [],
+        factoryworkstationList: [],
+        title1: '',
+        arr: [],
+        arrTow: [],
+        produceTaskList: [],
+        isType: '',
+        isStep: true,
+        outsourceForm: {},
+        outObj: {},
+        pickingShow: false,
+        wokePopup: false,
+        workOrderInfo: {},
+        routeList: [],
+        activeIndex: 0,
+        desIndex: 0,
+        drawer: false,
+        workData: {},
+        isFullscreen: false,
+        routeObj: {
+          id: null
+        },
+        BomObj: {},
+        defaultProps: {
+          children: 'children',
+          label: 'newName'
+        },
+        defaultPropsTow: {
+          children: 'children',
+          label: 'name',
+          value: 'code'
+        },
+        feedNeedEquipment: 0, //投料是否要添加生产设备1是0否
+        reportNeedFeed: 0, //生产质检是否需要处置再报工1是0否
+        singleReportInspection: null, //获取选中的工单是单个还是批量
+        workTaskId: null, //选中的工单工序id
+        workStepQueryParam: {
+          taskId: null,
+          workOrderId: null,
+          bomCategoryId: null
+        }
+      };
+    },
+
+    computed: {
+      taskObj() {
+        return this.$store.state.user.taskObj;
+      },
+      info() {
+        return this.$store.state.user.info;
+      },
+      rightShow() {
+        return (type) => {};
+      }
+    },
+
+    created() {
+      this.init();
+
+      this.getTaskList();
+      this.getFactoryworkstationPageList();
+
+      this.operationType = null;
+      this.workListIds = [];
+    },
+    methods: {
+      tabClickValue() {
+        this.name = '';
+        this.seekInput();
+      },
+      // 前端筛选
+      seekInput() {
+        // console.log(activeName);
+
+        if (this.activeName == '0') {
+          if (!this.name) return (this.produceTaskList = this.arr);
+          this.produceTaskList = this.produceTaskList.filter((item) => {
+            return item.name.indexOf(this.name) > -1;
+          });
+        } else {
+          if (!this.name) return (this.factoryworkstationList = this.arrTow);
+          this.factoryworkstationList = this.factoryworkstationList.filter(
+            (item) => {
+              return item.name.indexOf(this.name) > -1;
+            }
+          );
+        }
+      },
+
+      //  折叠悬浮中样式调整
+      init() {
+        this.$store.dispatch('theme/setCollapse', true);
+      },
+      async getTaskName(value) {
+        let res = await nextTask({
+          taskId: this.taskObj.id,
+          workOrderIds: [value.id]
+        });
+
+        const title1 = res.data.map((item) => item.taskTypeName).toString();
+        this.title1 = title1 ? title1 : '';
+      },
+      handleSearch() {
+        let obj = {
+          keyWord: this.keyWord,
+          taskName: this.taskName
+        };
+        this.$refs.produceOrder.handleSearch(obj);
+        //handleSearch(this.code);
+      },
+
+      handleNodeClickNew(info) {
+        // this.current = info;
+
+        let current = { id: info.id };
+
+        this.$store.commit('user/currentObj', current);
+      },
+      setRootId(id) {
+        this.rootId = id;
+      },
+      // 点击工序
+      // handleNodeClick(data) {
+      //   this.feedNeedEquipment = data.feedNeedEquipment;
+      //   this.reportNeedFeed = data.reportNeedFeed;
+
+      //   let obj = {
+      //     1: `${data.workCenterName}-${data.name}(普通工序)`,
+      //     3: `${data.workCenterName}-${data.name}(质检工序)`,
+      //     4: `${data.workCenterName}-${data.name}(包装工序)`,
+      //     5: `${data.workCenterName}-${data.name}(入库工序)`,
+      //     6: `${data.workCenterName}-${data.name}(质检工序)`
+      //   };
+
+      //   this.title = obj[data.type] || '';
+      //   this.type = data.type;
+      //   let taskObj = {};
+      //   taskObj = this.routeList.find((item) => item.taskId === data.taskId);
+      //   console.log(taskObj, 'taskObj');
+      //   this.$store.commit('user/setTaskObj', taskObj);
+      // },
+
+      handleChoose(val) {
+        console.log(val);
+      },
+
+      handleFull() {
+        this.isFullscreen = !this.isFullscreen;
+        this.$forceUpdate();
+      },
+
+      // 获取工序列表
+      getTaskList() {
+        listTask().then((res) => {
+          res.map((v) => {
+            v.newName = `${v.workCenterName}-${v.name}`;
+          });
+          this.produceTaskList = res;
+          this.arr = JSON.parse(JSON.stringify(this.produceTaskList));
+          //默认选择第一个工序
+          // if (this.produceTaskList?.length) {
+          //   this.$store.commit('user/setTaskObj', this.produceTaskList[0]);
+          //   this.$nextTick(() => {
+          //     this.$refs.taskListRef.setCurrentKey(this.produceTaskList[0].id);
+          //   });
+          // }
+          // newName
+        });
+      },
+
+      // 获取工位
+      getFactoryworkstationPageList() {
+        factoryworkstationPage({ pageNum: 1, size: 99999999 }).then((res) => {
+          this.factoryworkstationList = res.list;
+
+          this.arrTow = JSON.parse(JSON.stringify(this.factoryworkstationList));
+
+          // newName
+        });
+      },
+
+      closeForm() {
+        this.isStep = true;
+      },
+      outScucc() {
+        this.operationType = null;
+      },
+
+      // 切换组件
+      async changePlugIn(e) {
+        this.outObj = e;
+
+        let req = {
+          taskId: e.taskId,
+          taskIds: e.taskIds,
+          workOrderId: e.workOrderId,
+          quantity: e.formedNumLast
+        };
+        const res = await checkOutsourceMaterial(req);
+
+        this.outObj = { ...res.data, ...this.outsourceForm, ...this.outObj };
+
+        this.isStep = false;
+      },
+
+      pickingWokeClose() {
+        this.wokePopup = false;
+      },
+
+      open(row) {
+        this.workOrderInfo = row;
+        console.log(row, 'workOrderInfo');
+        this.routeObj.id = this.workOrderInfo.id;
+        this.getTaskFn();
+        this.drawer = true;
+        this.getOrderData();
+      },
+
+      async getOrderData() {
+        await workorderInfo(this.workOrderInfo.id).then((res) => {
+          this.workOrderInfo = res;
+          this.workStepQueryParam.taskId = this.workOrderInfo.taskId;
+          this.workStepQueryParam.workOrderId = this.workOrderInfo.id;
+          this.workStepQueryParam.bomCategoryId =
+            this.workOrderInfo.bomCategoryId;
+          this.singleReportInspection = this.workOrderInfo.singleReport;
+        });
+      },
+
+      handleClose() {
+        this.drawer = false;
+      },
+
+      feedSuccess() {
+        this.getOrderData();
+        this.getTaskFn();
+      },
+
+      jobSuccess() {
+        this.getOrderData();
+        this.getTaskFn();
+      },
+
+      warehouseSuccess() {
+        this.getOrderData();
+        this.getTaskFn();
+      },
+
+      async getTaskFn() {
+        await getTaskInstanceList(this.workOrderInfo.id).then((res) => {
+          this.routeList = res;
+
+          console.log(this.routeList, 'routeList');
+          console.log(this.workOrderInfo, 'this.workOrderInfo');
+
+          // 使用findIndex方法查找
+          const index = this.routeList.findIndex(
+            (item) => Number(item.taskId) == Number(this.workOrderInfo.taskId)
+          );
+
+          this.desIndex = index;
+          console.log(this.routeList, '888888');
+          this.newId = this.routeList[this.desIndex].taskId || '';
+
+          if (this.workOrderInfo.taskId != -2) {
+            this.curTaskObj = JSON.parse(JSON.stringify(this.routeObj));
+          } else {
+            this.curTaskObj = JSON.parse(JSON.stringify(this.routeList[0]));
+            this.desIndex = 0;
+          }
+          this.activeIndex = index;
+          this.workData = this.workOrderInfo;
+          this.handIdx(this.activeIndex, this.routeList[index]);
+        });
+      },
+
+      async getCodeData(req) {
+        await parameterGetByCode({ code: 'enable_quality_plus' }).then(
+          (res) => {
+            if (res.value == '1') {
+              this.$refs.jobRefs.open(req);
+            }
+          }
+        );
+      },
+
+      footBtn(t) {
+        // this.operationType = t;
+        // 新增判断 *** 出现弹窗的时候不然右边数据消失
+        if ((t == 'work' || t == 'workStep', t === 'task')) {
+          this.popupType = t;
+        } else {
+          this.operationType = t;
+        }
+
+        if (
+          Object.keys(this.$store.state.user.taskObj).length === 0 &&
+          this.$store.state.user.taskObj.constructor === Object
+        ) {
+          this.$message.warning('请选择工序');
+          return true;
+        }
+        if (['pick', 'feed', 'job', 'work', 'workStep', 'task'].includes(t)) {
+          if (this.workListIds.length == 0) {
+            this.$message.warning('请选择工单列表');
+            return false;
+          }
+        }
+
+        // console.log('按钮被点击了.....', t);
+        if (t === 'job') {
+          let req = {
+            taskId: this.taskObj.id,
+            workOrderId: this.workListIds[0],
+            data: [this.workOrderInfo]
+          };
+
+          // console.log(this.workData.list, 'this.workListIds');
+          // console.log(this.taskObj.type, 'this.taskObj');
+
+          if (
+            this.taskObj.type == 2 ||
+            this.taskObj.type == 3 ||
+            this.taskObj.type == 6
+          ) {
+            // this.$refs.jobRefs.open(req);
+            this.getCodeData(req);
+          }
+        }
+
+        if (t == 'pick') {
+          this.$nextTick(() => {
+            this.$refs.pickListRef.getList(this.workListIds);
+          });
+        }
+        // 工步
+        if (t === 'workStep') {
+          if (this.workListIds.length > 1) {
+            return this.$message.warning('工步只能选择一个工单!');
+          }
+          this.$refs.workStepRef.open(this.workStepQueryParam);
+          // let req = {
+          //   taskId: this.taskObj.id,
+          //   workOrderId: this.workListIds[0]
+          // };
+
+          // this.$refs.wokePopupRef.open(req);
+        }
+        if (t === 'task') {
+          if (this.workListIds.length > 1) {
+            return this.$message.warning('任务只能选择一个工单!');
+          }
+          this.$refs.taskDialogRef.open(
+            this.workStepQueryParam,
+            this.workOrderInfo
+          );
+        }
+
+        if (t === 'error') {
+          if (this.workListIds.length > 1) {
+            return this.$message.warning('异常只能选择一个工单!');
+          }
+          // console.log(this.workListIds, 'this.workListIds');
+          this.$refs.createErrorRef.open('add', this.workOrderInfo);
+        }
+        // 工艺路线 *** 修改 判断只能选择一个
+        // if (t === 'work') {
+        //   let req = {
+        //     taskId: this.taskObj.id,
+        //     workOrderId: this.workListIds[0]
+        //   };
+
+        //   this.$refs.wokePopupRef.open(req);
+        // }
+        if (t === 'work') {
+          if (this.workListIds.length > 1) {
+            return this.$message.warning('工艺文件只能选择一个工单!');
+          }
+          let req = {
+            taskId: this.taskObj.id,
+            workOrderId: this.workListIds[0]
+          };
+
+          this.$refs.wokePopupRef.open(req);
+        }
+        if (t == 'feed') {
+        }
+
+        // 委外
+        if (t == 'Outsourcing') {
+          if (this.workListIds.length > 1) {
+            return this.$message.warning('委外工序只能选择一个工单!');
+          } else if (this.workListIds.length < 1)
+            return this.$message.warning('请选择工单!');
+          else {
+            // /
+            this.handOutsource(this.workListIds[0]);
+          }
+        }
+      },
+
+      handIdx(index, item) {
+        if (item.count > 0 || index == this.desIndex) {
+          this.taskId = item.taskId;
+        } else {
+          this.$message.info('还未执行到此工序');
+          return;
+        }
+
+        this.curTaskObj = JSON.parse(JSON.stringify(item));
+
+        console.log(item, 'item');
+
+        this.feedNeedEquipment = item.feedNeedEquipment;
+        this.reportNeedFeed = item.reportNeedFeed;
+
+        let obj = {
+          1: `${item.taskTypeName}(普通工序)`,
+          3: `${item.taskTypeName}(质检工序)`,
+          4: `${item.taskTypeName}(包装工序)`,
+          5: `${item.taskTypeName}(入库工序)`,
+          6: `${item.taskTypeName}(质检工序)`
+        };
+
+        this.title = obj[item.type] || '';
+        this.type = item.type;
+        let taskObj = {};
+        taskObj = this.routeList.find((e) => e.taskId === item.taskId);
+        taskObj.id = taskObj.sourceTaskId;
+        taskObj.isOrderListData = true;
+        this.$store.commit('user/setTaskObj', taskObj);
+        this.workListIds = [this.workOrderInfo.id];
+
+        // if (item.taskId == -2) {
+        //   this.$message.info('完结状态不能点击');
+        //   return;
+        // } else {
+        //   this.desIndex = index;
+        //   this.newId = this.routeList[this.desIndex].taskId || '';
+        //   this.getTaskName(this.workOrderInfo);
+        // }
+        if (item.taskId != -2) {
+          this.desIndex = index;
+          this.newId = this.routeList[this.desIndex].taskId || '';
+          this.getTaskName(this.workOrderInfo);
+        }
+      },
+
+      handOutsource(workOrderId) {
+        // return
+        let param = {
+          taskId: this.taskObj.id,
+          workOrderId: workOrderId
+        };
+        pcCheckOutsource(param).then((res) => {
+          this.outsourceForm = {
+            ...res.data
+          };
+
+          console.log(this.taskObj, 'this.outsourceForm');
+          this.outsourceForm.name = this.taskObj.taskTypeName + '委外';
+
+          if (res.data.outsource) {
+            this.isType = '3';
+            this.getTaskInstanceByIdFn(workOrderId);
+          } else {
+            return this.$message.warning('此工序不能委外');
+          }
+        });
+      },
+
+      //获取工单列表
+      getTaskInstanceByIdFn(workOrderId) {
+        getTaskInstanceById(workOrderId).then((res) => {
+          let { data } = res;
+          if (data.length) {
+            data = data.filter(
+              (item) => item.taskId != -2 && item.taskId != -1
+            );
+            let arr = data.findIndex(
+              (item) => item.sourceTaskId == this.taskObj.id
+            );
+            if (arr != -1) {
+              data.splice(0, arr);
+            }
+            this.$set(this.outsourceForm, 'newStepsList', data);
+          }
+        });
+      },
+
+      pickAdd() {
+        this.pickingShow = true;
+      },
+
+      // 关闭领料弹窗
+
+      pickingClose(val) {
+        if (val) {
+          this.$nextTick(() => {
+            this.$refs.pickListRef.getList(this.workListIds);
+          });
+        }
+        this.pickingShow = false;
+      },
+
+      rowClick(row, taskId) {
+        if (taskId) {
+          let params = {
+            categoryId: row.categoryId,
+            taskId: taskId
+          };
+          getByTaskId(params).then((res) => {
+            this.BomObj = res.data;
+            this.$forceUpdate();
+          });
+        }
+      }
+    },
+
+    mounted() {
+      this.$nextTick(() => {
+        const targetElements =
+          document.getElementsByClassName('ele-admin-tabs');
+
+        if (targetElements.length > 0) {
+          // 遍历所有具有 'ele-admin-tabs' 类的元素
+          Array.from(targetElements).forEach((element) => {
+            // 对每个元素添加 'new-ele-admin-tabs' 类
+            element.classList.add('new-ele-admin-tabs');
+          });
+        }
+      });
+    },
+
+    destroyed() {
+      this.$nextTick(() => {
+        const targetElements =
+          document.getElementsByClassName('ele-admin-tabs');
+        if (targetElements.length > 0) {
+          Array.from(targetElements).forEach((element) => {
+            element.classList.remove('new-ele-admin-tabs');
+          });
+        }
+      });
+    }
+  };
+</script>
+
+<style lang="scss">
+  // .content_box {
+  // display: flex;
+  // }
+
+  // .content_box_tab {
+  //   width: 220px;
+  //   padding: 5px;
+  //   height: 100vh;
+  //   background-color: #fff;
+  //   overflow-y: auto;
+  //   border: 1px solid blue;
+  // }
+
+  .footBtn {
+    position: absolute;
+    bottom: 20px;
+    left: 0;
+  }
+
+  .new-ele-admin-tabs {
+    display: none !important;
+  }
+
+  .c_title {
+    color: #157a2c;
+    font-size: 16px;
+    font-weight: bold;
+  }
+
+  .tableZ_box {
+    border: 1px solid #e3e5e5;
+    margin: 6px 0;
+
+    &:last-child {
+      border-bottom: none;
+    }
+
+    .row {
+      width: 100%;
+      display: flex;
+    }
+
+    .col {
+      width: calc(100% / 5);
+      display: flex;
+      align-items: center;
+      min-width: 200px;
+      min-height: 32px;
+      border-bottom: 1px solid #e3e5e5;
+      border-right: 1px solid #e3e5e5;
+
+      &:last-child {
+        border-right: none;
+      }
+
+      .name {
+        display: flex;
+        align-items: center;
+        padding: 4px;
+        width: 80px;
+        height: 100%;
+        background-color: #d0e4d5;
+        color: #000;
+      }
+
+      .content {
+        padding: 4px 6px;
+        color: #000;
+      }
+    }
+
+    .pd6 {
+      padding: 0 6px;
+    }
+  }
+</style>
+<style lang="scss" scoped>
+  .seek-list {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    padding: 10px 10px;
+  }
+
+  .right_main_box {
+    background-color: #fff;
+    height: 100%;
+    box-sizing: border-box;
+  }
+
+  .index_box {
+    padding: 10px;
+    padding-bottom: 0;
+    width: 100%;
+    box-sizing: border-box;
+    min-width: 1280px !important;
+    height: calc(100vh - 60px);
+    // overflow-x: auto;
+    /* 当内容超出宽度时,允许水平滚动 */
+    white-space: nowrap;
+    /* 防止内部文本换行,确保所有内容都在一行显示 */
+    scrollbar-width: thin;
+    /* 设置滚动条宽度(浏览器兼容性可能有所不同) */
+    scrollbar-color: #40a9ff transparent;
+    /* 设置滚动条颜色和轨道颜色(同样,浏览器兼容性) */
+  }
+
+  .main {
+    width: 100%;
+    min-width: 1280px;
+
+    // height: calc(100vh - 242px);
+    display: flex;
+    justify-content: space-between;
+  }
+
+  .left_main {
+    width: 100%;
+    height: 100%;
+    display: flex;
+    flex-direction: column;
+    justify-content: space-around;
+    // min-width: 640px;
+
+    .top {
+      width: 100%;
+      height: 100%;
+      overflow: auto;
+    }
+
+    // .bottom {
+    //   width: 100%;
+    //   min-height: calc((100vh - 70px - 50px - 80px - 20px) / 2);
+    //   overflow: hidden;
+    // }
+  }
+
+  ::v-deep .el-tabs__item.is-active {
+    background-color: #dffade;
+    /* 蓝色背景 */
+    color: #333;
+  }
+
+  ::v-deep .is-active {
+    color: #dffade;
+  }
+
+  .right_main {
+    width: 100%;
+    padding-bottom: 12px;
+    height: calc((100vh - 230px));
+    background: #f0f3f3;
+    border: 1px solid rgb(207, 215, 207);
+  }
+
+  .drawer_content {
+    margin: 5px 20px;
+    box-sizing: border-box;
+
+    .taskTitle {
+      display: flex;
+      width: 100%;
+      align-items: center;
+      flex-direction: row;
+      justify-content: center;
+      font-size: 18px;
+      color: green;
+      margin-bottom: 10px;
+      font-weight: bold;
+    }
+  }
+
+  ::v-deep .is-fullscreen {
+    width: 100vw !important;
+    height: 100vh !important;
+    overflow: hidden !important; /* 隐藏滚动条 */
+  }
+  ::v-deep .not-fullscreen {
+    width: calc(100vw - 230px) !important;
+    height: 100vh !important;
+    overflow: hidden !important; /* 隐藏滚动条 */
+  }
+
+  ::v-deep .active .is-text {
+    background: #ffa929; /* 背景色 */
+    border-color: #ffa929;
+    color: #ffffff; /* 图标文字颜色 */
+  }
+</style>