<template>
  <div>
    <div class="top_fixed">
      <div
        style="display: flex; align-items: center; margin-right: 10px"
        v-if="List.length > 1"
      >
        <div class="rx-bc">
          <div class="name">批量报工时间：</div>
        </div>
        <el-date-picker
          v-model="executorTime"
          type="datetime"
          value-format="yyyy-MM-dd HH:mm:ss"
          placeholder="选择日期"
          @change="handleCreate"
        >
        </el-date-picker>
      </div>

      <el-button
        type="primary"
        size="mini"
        :loading="loadingBtn"
        @click="save(2, 'all')"
        >一键报工</el-button
      >
      <el-button type="primary" size="mini" @click="removeCacheFn('all')"
        >清空缓存</el-button
      >
      <el-button
        v-if="taskObj.type == 1"
        type="primary"
        size="mini"
        @click="save(1, 'all')"
        >缓存</el-button
      >
    </div>

    <div class="job_box">
      <div
        v-for="(item, index) in List"
        :key="index"
        class="card_box"
        v-if="isLoad"
      >
        <div class="title_box rx-bc">
          <div class="name">工单信息 </div>

          <div class="rx-bc">
            <el-button
              type="text"
              size="mini"
              @click="openPicking(item.workOrderId, item)"
              >手动添加</el-button
            >
            <el-button
              type="text"
              size="mini"
              @click="removeCacheFn(item.workOrderId)"
              >清空缓存</el-button
            >
            <el-button
              v-if="taskObj.type == 1"
              type="text"
              size="mini"
              @click="save(1, index)"
              >缓存</el-button
            >
          </div>
        </div>
        <!-- // 工单信息 -->

        <workOrderBom :item="item"></workOrderBom>

        <!-- 报工时间 -->
        <div>
          <div class="title_box rx-bc">
            <div class="name">报工时间</div>
          </div>
          <el-date-picker
            v-model="item.workReportInfo.executorTime"
            type="datetime"
            value-format="yyyy-MM-dd HH:mm:ss"
            placeholder="选择日期"
          >
          </el-date-picker>
        </div>

        <paramBom
          v-if="item.paramDetailList.length != 0"
          :list="item.paramDetailList"
        ></paramBom>

        <!-- //报工信息 -->

        <div v-if="item.singleReport == 0">
          <jobBom
            :item="item"
            ref="jobBomRef"
            :notFormed="item.notFormedList"
            :warehouseList="warehouseList"
          ></jobBom>
        </div>
        <div v-if="item.singleReport == 1">
          <jobDdBom
            :item="item"
            ref="jobRef"
            :notFormed="item.notFormedList"
            :warehouseList="warehouseList"
          ></jobDdBom>
        </div>

        <!-- :item="item" :notFormed="item.notFormedList" :warehouseList="warehouseList"  @modeNum='modeNum'-->

        <deviceBom
          v-if="item.equipmentList.length != 0"
          :list="item.equipmentList"
        ></deviceBom>

        <modelBom
          v-if="item.modelList.length != 0"
          :list="item.modelList"
          pattern="job"
          ref="modelRef"
        ></modelBom>

        <palletBom
          v-if="item.palletList.length != 0"
          :list="item.palletList"
        ></palletBom>

        <revolvingDiskBom
          v-if="item.revolvingDiskList.length > 0"
          pattern="job"
          :list="objData.revolvingDiskList"
        >
        </revolvingDiskBom>

        <!-- 单件 报告信息 -->
        <semiProductJobBom
          :singleReport="item.singleReport"
          v-if="
            item.semiProductList &&
            item.semiProductList.length != 0 &&
            item.singleReport == 1
          "
          :item="item"
          :list="item.semiProductList"
          :equipmentList="item.equipmentList"
          :isChoose="isChoose"
          @chooseData="chooseData"
          :isEngrave="isEngrave"
          :isDisposal="isDisposal"
        ></semiProductJobBom>

        <!-- 通用批量报工 -->
        <batchSemiProductJobBom
          :singleReport="item.singleReport"
          v-if="
            item.product &&
            item.product.length != 0 &&
            item.singleReport == 0 &&
            clientEnvironmentId != 3 &&
            clientEnvironmentId != 2
          "
          :item="item"
          :list="item.product"
          :equipmentList="item.equipmentList"
          :isChoose="isChoose"
          :isEngrave="isEngrave"
          :isDisposal="isDisposal"
          @chooseData="chooseData"
        ></batchSemiProductJobBom>

        <!-- <checkbox :tableData="item.semiProductList" ></checkbox> -->
        <!-- :itemData="item" @tableDataFn="tableDataFn" -->
        <!-- 碳谷批量报工 -->
        <semiProductJobBomPL
          :singleReport="item.singleReport"
          v-if="
            item.semiProductList &&
            item.semiProductList.length != 0 &&
            taskObj.type != 4 &&
            taskObj.type != 6 &&
            item.singleReport == 0 &&
            clientEnvironmentId == 3
          "
          :item="item"
          :list="item.semiProductList"
          :equipmentList="item.equipmentList"
          @countNumPl="countNumPl"
          :isChoose="isChoose"
          :isEngrave="isEngrave"
          :isDisposal="isDisposal"
          :index="index"
        ></semiProductJobBomPL>

        <!-- <semiProductJobBom v-if="
          item.pickOutInList &&
          item.pickOutInList.length != 0 &&
          taskObj.type == 6 &&
          item.singleReport == 1
        " :item="item" :list="item.pickOutInList">
        </semiProductJobBom> -->

        <!-- 物料清单 -->
        <!-- <semiProductBom
          v-if="
            item.semiProductList.length != 0 &&
            item.singleReport == 0 &&
            clientEnvironmentId != 3
          "
          :list="item.semiProductList"
          :equipmentList="item.equipmentList"
          :workInfo="item"
        ></semiProductBom> -->

        <!-- 产品信息 -->
        <oneJobQualityBomPL
          v-if="
            item.semiProductList &&
            item.semiProductList.length != 0 &&
            taskObj.type == 6 &&
            item.singleReport == 0 &&
            clientEnvironmentId == 3
          "
          :item="item"
          :list="item.semiProductList"
        >
        </oneJobQualityBomPL>

        <byProductBom
          v-if="item.productRecycleList.length != 0"
          :list="item.productRecycleList"
        >
        </byProductBom>

        <turnoverBom
          v-if="item.turnover.length != 0"
          :list="item.turnover"
          :wordItem="item"
          pattern="job"
        >
        </turnoverBom>

        <aridRegion
          v-if="item.aridRegionList.length != 0"
          :list="item.aridRegionList"
          :isType="true"
        ></aridRegion>

        <!-- 这里是包装分组 -->

        <!-- <div
          v-if="
            item.currentTaskDiagram.type == 4 &&
            item.semiProductList.length != 0
          "
        >
          <semiProductJobBom
            :singleReport="item.singleReport"
            :item="item"
            :list="
              item.currentTaskDiagram.type == 4
                ? item.pickOutInList
                : item.semiProductList
            "
            :equipmentList="item.equipmentList"
          ></semiProductJobBom>
        </div>

        <div
          v-if="
            item.currentTaskDiagram.type == 4 && item.pickOutInList.length != 0
          "
        >
          <semiProductJobBom
            :singleReport="item.singleReport"
            :item="item"
            :list="
              item.currentTaskDiagram.type == 4
                ? item.pickOutInList
                : item.semiProductList
            "
            :equipmentList="item.equipmentList"
          ></semiProductJobBom>
        </div> -->

        <div
          v-if="
            clientEnvironmentId != 2 &&
            item &&
            item.currentTaskDiagram.type == 4 &&
            clientEnvironmentId != 3
          "
        >
          <!-- <packagingGrouping
            ref="packagingGroupingRef"
            :objData="item"
            :workOrderId="item.workOrderId"
            :taskId="item.currentTaskDiagram.taskId"
          >
          </packagingGrouping> -->

          <batchPackagingGrouping
            ref="packagingGroupingRef"
            :objData="item"
            :workOrderId="item.workOrderId"
            :taskId="item.currentTaskDiagram.taskId"
          >
          </batchPackagingGrouping>
        </div>

        <!--  <packingBom :taskId='taskObj.id' :workOrderId="item.workOrderId" :objData="item" ref="packRef"
          v-if='taskObj.type == 4 && clientEnvironmentId != 3 && item'></packingBom> -->

        <packingTgBom
          v-if="
            item.pickOutInList &&
            item.pickOutInList.length != 0 &&
            taskObj.type == 4 &&
            clientEnvironmentId == 3
          "
          :list="item.pickOutInList"
          :item="item"
        ></packingTgBom>
      </div>
    </div>

    <pickingList
      isType="job"
      ref="pickingListRef"
      @allSelection="allSelection"
    ></pickingList>
  </div>
</template>

<script>
  import { listByIdsReport } from '@/api/produce/job';
  import { getWarehouseList } from '@/api/produce/index';
  import {
    jobSave,
    saveCache,
    getCache,
    removeCache
  } from '@/api/produce/workOrder';
  import pickingList from '../picking/pickingList.vue';
  import packagingGrouping from './components/packagingGrouping.vue';
  import workOrderBom from '../feeding/components/workOrderBom.vue';
  import paramBom from '../feeding/components/paramBom.vue';
  import jobBom from './components/jobBom.vue';
  import deviceBom from '../feeding/components/deviceBom.vue';
  import modelBom from '../feeding/components/modelBom.vue';
  import palletBom from './components/palletBom.vue';
  import revolvingDiskBom from '../feeding/components/revolvingDiskBom.vue';
  import oneJobQualityBom from './components/oneJobQualityBom.vue';
  import oneJobQualityBomPL from './components/oneJobQualityBomPL.vue';
  import jobDdBom from './components/jobDdBom.vue';

  import semiProductJobBom from './components/semiProductJobBom.vue';
  import semiProductJobBomPL from './components/semiProductJobBomPL.vue';
  import semiProductJobBomQT from './components/semiProductJobBomQT.vue';
  import batchSemiProductJobBom from './components/batchSemiProductJobBom.vue';
  import batchPackagingGrouping from './components/batchPackagingGrouping.vue';
  import semiProductBom from '../feeding/components/semiProductBom';

  // import byProductBom from './components/byProductBom.vue';
  import byProductBom from './components/newByProductBom.vue';
  import turnoverBom from './components/turnoverBom.vue';
  import aridRegion from '../feeding/components/aridRegion.vue';
  import packingBom from './components/packingBom.vue';
  import packingTgBom from './components/packingTgBom';
  import { timestampToDateTime } from '@/utils/index.js';
  import { parameterGetByCode } from '@/api/system/dictionary-data';

  export default {
    components: {
      pickingList,
      packagingGrouping,
      workOrderBom,
      paramBom,
      jobBom,
      deviceBom,
      modelBom,
      palletBom,
      revolvingDiskBom,
      oneJobQualityBom,
      oneJobQualityBomPL,
      semiProductJobBomQT,
      semiProductJobBom,
      semiProductJobBomPL,
      byProductBom,
      turnoverBom,
      aridRegion,
      packingBom,
      jobDdBom,
      packingTgBom,
      semiProductBom,
      batchSemiProductJobBom,
      batchPackagingGrouping
    },
    props: {
      workListIds: {
        type: Array,
        default() {
          return [];
        }
      },
      reportNeedFeed: {}
    },

    data() {
      return {
        List: [],
        idsList: [],
        isLoad: false,
        executorTime: '',
        warehouseList: [],

        loading: null,
        loadingBtn: false,
        chooseListData: [],
        isChoose: false,
        isEngrave: false,
        isDisposal: false
      };
    },

    computed: {
      taskObj() {
        return this.$store.state.user.taskObj;
      },

      clientEnvironmentId() {
        return this.$store.state.user.info.clientEnvironmentId;
      }
    },

    watch: {
      workListIds: {
        handler(val) {
          this.getList(val);
        },
        deep: true,
        immediate: true
      }
    },

    created() {
      this.getWarehouseListFn();
      this.getChooseEngrave();
    },

    methods: {
      checkPack() {
        this.$refs.packagingGroupingRef[0].getData();
      },
      handleCreate(e) {
        if (e) {
          const list = JSON.parse(JSON.stringify(this.List));
          console.log(list);
          list.map((item) => {
            item.workReportInfo.executorTime = e;
          });
          this.$set(this, 'List', list);
        }
      },

      async getChooseEngrave() {
        await parameterGetByCode({
          code: 'choose_engrave'
        }).then((res) => {
          this.isChoose = res.value == '1' ? true : false;
        });

        await parameterGetByCode({
          code: 'batch_update_engrave'
        }).then((res) => {
          this.isEngrave = res.value == '1' ? true : false;
        });

        await parameterGetByCode({
          code: 'batch_disposal'
        }).then((res) => {
          this.isDisposal = res.value == '1' ? true : false;
        });
      },

      getList(ids) {
        this.idsList = ids || [];
        let param = {
          ids: ids,
          taskId: this.taskObj.id,
          type: 0
        };

        this.isLoad = false;
        listByIdsReport(param)
          .then((res) => {
            this.List = res.map((obj) => {
              if (!Object.prototype.hasOwnProperty.call(obj, 'turnover')) {
                obj['turnover'] = [];
              }
              if (
                !Object.prototype.hasOwnProperty.call(obj, 'aridRegionList')
              ) {
                obj['aridRegionList'] = [];
              }

              if (!Object.prototype.hasOwnProperty.call(obj, 'instanceList')) {
                obj['instanceList'] = [];
              }

              if (!Object.prototype.hasOwnProperty.call(obj, 'palletList')) {
                obj['palletList'] = [];
              }

              if (
                !Object.prototype.hasOwnProperty.call(obj, 'revolvingDiskList')
              ) {
                obj['revolvingDiskList'] = [];
              }

              if (obj.palletList.length > 0) {
                obj.palletList = obj.palletList.map((m) => {
                  return {
                    hideKc: true, // 不显示库存
                    quantity: m.feedQuantity,
                    ...m
                  };
                });
              }

              // console.log(this.taskObj.type, 'this.taskObj.type');

              if (
                (this.taskObj.type == 6 && obj.singleReport == 1) ||
                (this.clientEnvironmentId == 3 &&
                  obj.singleReport == 0 &&
                  this.taskObj.type == 6)
              ) {
                obj.semiProductList = obj.pickOutInList;
                obj.pickOutInList = [];

                console.log('赋值了');
              } else if (this.taskObj.type == 6 && obj.singleReport == 0) {
                obj.product = obj.pickOutInList;
                obj.pickOutInList = [];
              } else if (
                this.taskObj.type == 4 &&
                obj.singleReport == 0 &&
                this.clientEnvironmentId != 3 &&
                this.clientEnvironmentId != 2
              ) {
                if (obj.pickOutInList != 0) {
                  obj.product = obj.pickOutInList;
                  obj.pickOutInList = [];
                }
              } else if (
                this.taskObj.type == 4 &&
                obj.singleReport == 1 &&
                this.clientEnvironmentId != 3 &&
                this.clientEnvironmentId != 2
              ) {
                if (obj.pickOutInList != 0) {
                  obj.semiProductList = obj.pickOutInList;
                  obj.pickOutInList = [];
                }
              }

              if (
                obj.singleReport == 1 &&
                obj.currentTaskDiagram.type != 2 &&
                obj.currentTaskDiagram.type != 3 &&
                obj.currentTaskDiagram.type != 6
              ) {
                obj.semiProductList.map((item) => {
                  item.extInfo.taskId = '';
                  item.extInfo.taskName = '';
                });
              }

              if (
                obj.singleReport == 0 &&
                obj.currentTaskDiagram.type != 2 &&
                obj.currentTaskDiagram.type != 3 &&
                obj.currentTaskDiagram.type != 6
              ) {
                obj.product.map((item) => {
                  item.extInfo.taskId = '';
                  item.extInfo.taskName = '';
                });
              }

              if (
                this.clientEnvironmentId == 3 &&
                obj.singleReport == 0 &&
                this.taskObj.type != 6
              ) {
                obj.semiProductList.map((a) => {
                  a.extInfo.batchReportInfo = [
                    {
                      allFeedQuantity: '',
                      allReportWeight: '',
                      taskId: '',
                      taskName: ''
                    }
                  ];

                  a.extInfo.notBatchReportInfo = [
                    {
                      allFeedQuantity: '',
                      notType: '',
                      taskId: '',
                      taskName: '',
                      notReason: ''
                    }
                  ];

                  return {
                    a
                  };
                });

                obj.semiProductList = JSON.parse(
                  JSON.stringify(obj.semiProductList)
                );
              }
              obj.semiProductList = obj.semiProductList.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,
                formingWeight: null,
                formedNum: null,
                formedWeight: null,
                taskId: this.taskObj.id,
                notFormedNum: null,
                notFormedWeigh: null
              };

              obj.notFormedList = [
                {
                  notFormedNum: null,
                  notFormedWeight: null,
                  weightUnit: obj.weightUnit,
                  unit: obj.unit,
                  warehouseId: null // 处置 仓库id
                }
              ];

              if (obj.semiProductList.length > 0) {
                // 预制体报工
                obj.workReportInfo.formedNum = obj.semiProductList.length;
                let numCot = 0;
                if (obj.semiProductList.length > 0) {
                  obj.semiProductList.map((fitem) => {
                    numCot = numCot + fitem.feedQuantity || 1;
                  });
                  obj.workReportInfo.formedNum = numCot;
                }
              } else if (obj.product.length > 0) {
                const number = obj.product.reduce((acc, pro) => {
                  return pro.feedQuantity
                    ? acc + Number(pro.feedQuantity)
                    : acc;
                }, 0);

                obj.workReportInfo.formedNum = number;
              }

              obj.workReportInfo.formingNum = obj.formingNum;
              obj.workReportInfo.formingWeight = obj.formingWeight;
              obj.workReportInfo.unit = obj.unit;
              obj.workReportInfo.weightUnit = obj.weightUnit;
              obj.workReportInfo.workOrderId = obj.workOrderId;
              obj.workReportInfo.executorTime = obj.executorTime;

              obj.paramDetailList.map((m) => {
                if (m.extInfo.textType == 5) {
                  m.remainingTime = m.extInfo.remainingTime;
                }
                return {
                  ...m.extInfo
                };
              });

              console.log(obj, 4445555);

              if (this.taskObj.type == 4) {
                let numVal = 0;
                obj.pickOutInList.map((item) => {
                  numVal = numVal + item.feedQuantity;
                });
                obj.workReportInfo.formedNum = numVal;
              }
              return {
                ...obj
              };
            });
          })
          .finally(() => {
            this.isLoad = true;

            if (this.taskObj.type == 1) {
              this.getCacheFn();
            }
          });
      },

      openPicking(id, item) {
        this.$refs.pickingListRef.open(id, item);
      },

      allSelection(id, selectList) {
        console.log(id, selectList, 'allSelection');
        this.List.forEach((m) => {
          if (m.workOrderId == id) {
            let turnover = [];
            let equipmentList = []; // 生产设备

            selectList.forEach((f) => {
              if (f.rootCategoryLevelId == 4) {
                equipmentList = equipmentList.concat(f);
              }
              if (f.rootCategoryLevelId == 7) {
                turnover = turnover.concat(f);
              }
            });

            this.$set(m, 'equipmentList', equipmentList);
            this.$set(m, 'turnover', turnover);

            this.$forceUpdate();
          }
        });
      },

      chooseData(dataList) {
        this.chooseListData = this.deepCopy(dataList);

        // if (this.chooseListData.length > 0) {
        //   this.chooseListData.forEach((item) => {
        //     item.confirm = 1;
        //   });
        // } else {
        //   this.List.forEach((item) => {
        //     item.semiProductList.forEach((fitem) => {
        //       fitem.confirm = 0;
        //     });
        //   });
        // }
      },

      deepCopy(obj, hash = new WeakMap()) {
        if (obj === null) return null;
        if (obj instanceof Date) return new Date(obj);
        if (obj instanceof RegExp) return new RegExp(obj);
        if (typeof obj !== 'object' && typeof obj !== 'function') return obj;
        if (hash.has(obj)) return hash.get(obj); // 处理循环引用

        const result = Array.isArray(obj) ? [] : {};
        hash.set(obj, result); // 存储原始对象和其副本的映射关系

        return Object.keys(obj).reduce((acc, key) => {
          acc[key] = this.deepCopy(obj[key], hash);
          return acc;
        }, result);
      },

      async save(type) {
        const required = await parameterGetByCode({
          code: 'mes_report_engrave_required'
        }).then((res) => {
          return res;
        });

        console.log(required, 'required');

        let confirmList = [];

        // const confirmList = this.List[0].semiProductList.filter(
        //   (item) => item.confirm == 1
        // );
        this.List.forEach((item) => {
          item.semiProductList.forEach((it) => {
            if (it.confirm == 1) {
              confirmList.push(it);
            }
          });
        });

        if (required.value == '1' && this.List[0].singleReport == 1) {
          // if (this.chooseListData.length > 0) {
          //   this.checkChooseData(this.chooseListData, type, 'choose');
          //   return;
          // } else {
          //   this.checkChooseData(this.List, type, 'all');
          //   return;
          // }

          console.log(this.List, 'this.List');

          if (confirmList.length > 0) {
            for (let i = 0; i < confirmList.length; i++) {
              // if (
              //   !confirmList[i].extInfo.engrave &&
              //   confirmList[i].confirm == 1
              // ) {
              //   this.$message.warning('请输入刻码!');
              //   return;
              // }
              if (confirmList[i].confirm == 1) {
                if (!confirmList[i].extInfo.engrave) {
                  this.$message.warning('请输入刻码!');
                  return;
                }
              }
            }
          } else {
            if (this.List.length > 0) {
              console.log(this.List);
              for (let i = 0; i < this.List[0].semiProductList.length; i++) {
                // if (!this.List[0].semiProductList[i].extInfo.engrave) {
                //   this.$message.warning('请输入刻码!');
                //   return;
                // }
                if (this.List[0].semiProductList[i].confirm == 1) {
                  if (!this.List[0].semiProductList[i].extInfo.engrave) {
                    this.$message.warning('请输入刻码!');
                    return;
                  }
                }
              }
              // this.List.forEach((item) => {
              //   for (let i = 0; i < item.semiProductList.length; i++) {
              // if (!item.semiProductList[i].extInfo.engrave) {
              //   this.$message.warning('请输入刻码!');
              //   return;
              // }
              //   }
              // });
              // for (let i = 0; i < this.List.length; i++) {
              //   for(let j = 0; i < this.List[i].semiProductList.length; j++) {
              //   }
              //   // for (let j = 0; this.List[i].semiProductList.length; j++) {
              //   //   console.log(
              //   //     this.List[i].semiProductList[j],
              //   //     'this.List[i].semiProductList[j]'
              //   //   );
              //   // if (!this.List[i].semiProductList[j].extInfo.engrave) {
              //   //   this.$message.warning('请输入刻码!');
              //   //   return;
              //   // }
              //   //   }
              // }
            }
          }
        }

        console.log('11111', this.List);

        this.loading = this.$loading({
          lock: true,
          text: '加载中',
          background: 'rgba(0, 0, 0, 0.7)'
        });

        let arr = this.List.filter((L) => L.workReportInfo.executorTime);
        if (!arr.length) {
          this.loading.close();
          return this.$message.warning('请选择执行时间');
        }

        // if(this.taskObj.type !=6){
        //   if(this.reportNeedFeed==1&&!(this.List[0].semiProductList.length>0||this.List[0].pickOutInList.length>0)){
        //     this.loading.close();
        //     return this.$message.warning('请先投料再报工');
        //   }
        // }

        let bol2;
        bol2 = this.List.every((e) => {
          return (
            // e.workReportInfo['formedNum'] && e.workReportInfo['formedNum'] != 0
            e.workReportInfo['formedNum'] != ''
          );
        });

        // if (!bol2) {
        //   this.$message.warning('请输入合格品数量');
        //   this.loading.close();
        //   return false;
        // }

        // 预制体

        let wId;
        let bol = true;
        let _i;
        this.List.forEach((L) => {
          if (
            L.semiProductList.length > 0 &&
            this.taskObj.type != 4 &&
            L.singleReport == 1
          ) {
            bol = L.semiProductList.every((e, i) => {
              _i = i + 1;
              wId = L.code;

              if (this.taskObj.type == 6) {
                return (
                  Object.prototype.hasOwnProperty.call(e.extInfo, 'taskId') &&
                  e.extInfo.taskId
                );
              } else {
                if (e.extInfo.isQualified == 1 || e.extInfo.notType == 5) {
                  return (
                    Object.prototype.hasOwnProperty.call(e.extInfo, 'taskId') &&
                    e.extInfo.taskId &&
                    e.extInfo.reportWeight
                  );
                } else {
                  return (
                    Object.prototype.hasOwnProperty.call(
                      e.extInfo,
                      'notType'
                    ) && e.extInfo.notType
                  );
                }
              }
            });
          }

          if (L.workReportInfo.batchNo) {
            L.workReportInfo.batchNo = L.batchNo + L.workReportInfo.batchNo;
          }
        });

        // if (!bol) {
        //   this.$message.warning(`请完善工单${wId}第${_i}处置方式`);
        //   this.loading.close();

        //   return false;
        // }

        if (this.clientEnvironmentId != 2) {
          let succ = this.List.some((L) => {
            return L.productRecycleList.length > 0;
          });

          if (succ) {
            const isRecycle = await this.checkRecycle();
            if (!isRecycle) {
              return false;
            }
          }
        }

        console.log(this.item, '9999999999');
        if (
          this.taskObj.type == 4 &&
          this.clientEnvironmentId != 3 &&
          this.clientEnvironmentId != 2
        ) {
          this.checkPack();

          // if (!isPack) {
          // 	return false
          // }
        }
        console.log('4444444444', this.List);
        if (this.taskObj.type == 1) {
          const isCache = await this.checkCache(type);

          if (!isCache) {
            return false;
          }
        }

        if (
          this.clientEnvironmentId == 3 &&
          type == 2 &&
          this.taskObj.type == 6
        ) {
          this.List.forEach((L) => {
            if (L.singleReport == 0) {
              L.semiProductList = [];
            }
          });
          console.log('ashsaoghaoghoasg');
        }
        let isSemiProduct = false;
        this.List.map((semi) => {
          if (
            semi.semiProductList.length == 0 &&
            semi.singleReport == 1 &&
            semi.currentTaskDiagram.isFirstTask == 1 &&
            this.clientEnvironmentId != 3
          ) {
            isSemiProduct = true;
            this.loading.close();
            setTimeout(() => {
              this.$message.warning({
                message: '请工单编号：' + semi.code + '先创建在制品',
                key: semi.code // 使用当前时间作为key，确保唯一性
              });
            }, 500);
          }

          if (semi.semiProductList.length == 0 && semi.singleReport == 0) {
            semi.semiProductList.map((ditem) => {
              if (ditem.extInfo.batchReportInfo) {
                ditem.extInfo.batchReportInfo.map((baItem) => {
                  let idvalue = baItem.deviceId
                    ? baItem.deviceId.split('/')
                    : '';
                  baItem.deviceId = idvalue ? idvalue[0] : '';
                });
              }
              if (ditem.extInfo.notBatchReportInfo) {
                ditem.extInfo.notBatchReportInfo.map((noItem) => {
                  let idvalue = noItem.deviceId
                    ? noItem.deviceId.split('/')
                    : '';
                  noItem.deviceId = idvalue ? idvalue[0] : '';
                });
              }
            });
          }
        });
        if (isSemiProduct) {
          this.loading.close();
          return;
        }

        console.log(this.List, 'this.List');

        // this.List[0].product = this.List[0].semiProductList;
        this.loadingBtn = true;
        jobSave(this.List)
          .then((res) => {
            this.loadingBtn = false;
            this.loading.close();
            this.$message.success('报工成功');
            this.getList(this.idsList);
          })
          .catch(() => {
            this.loadingBtn = false;
            this.loading.close();
          });
        // .finally(() => {
        //   setTimeout(function () {
        //     this.loading.close();
        //   }, 3000);
        // });
      },

      async checkChooseData(dataList, type, chooseType) {
        if (chooseType == 'choose') {
          for (let i = 0; i < dataList.length; i++) {
            if (!dataList[i].extInfo.engrave) {
              this.$message.warning('请输入刻码!');
              return;
            }
          }
        } else {
          for (let i = 0; i < dataList.length; i++) {
            if (dataList[i].semiProductList.length > 0) {
              for (let j = 0; j < dataList[i].semiProductList.length; j++) {
                if (!dataList[i].semiProductList[j].extInfo.engrave) {
                  this.$message.warning('请输入刻码!');
                  return;
                }
              }
            }
          }

          if (chooseType == 'choose') {
            dataList.forEach((item) => {
              this.List.forEach((it) => {
                it.semiProductList.forEach((fitem) => {
                  if (fitem.extInfo.id == item.extInfo.id) {
                    fitem.extInfo.engrave = item.extInfo.engrave;
                    fitem.extInfo.confirm = item.extInfo.confirm;
                  }
                });
              });
            });
          }

          // for (let i = 0; i < this.List[0].semiProductList.length; i++) {
          //   if (!this.List[0].semiProductList[i].extInfo.engrave) {
          //     this.$message.warning('请输入刻码!');
          //     return;
          //   }
          // }
        }
        // for (let i = 0; i < dataList.length; i++) {
        //   if (!dataList[i].extInfo.engrave) {
        //     this.$message.warning('请输入刻码!');
        //     return;
        //   }
        // }

        // this.List[0].semiProductList = dataList;

        console.log('465646546', this.List);

        this.loading = this.$loading({
          lock: true,
          text: '加载中',
          background: 'rgba(0, 0, 0, 0.7)'
        });

        let arr = this.List.filter((L) => L.workReportInfo.executorTime);
        if (!arr.length) {
          this.loading.close();
          return this.$message.warning('请选择执行时间');
        }

        // if(this.taskObj.type !=6){
        //   if(this.reportNeedFeed==1&&!(this.List[0].semiProductList.length>0||this.List[0].pickOutInList.length>0)){
        //     this.loading.close();
        //     return this.$message.warning('请先投料再报工');
        //   }
        // }

        let bol2;
        bol2 = this.List.every((e) => {
          return (
            // e.workReportInfo['formedNum'] && e.workReportInfo['formedNum'] != 0
            e.workReportInfo['formedNum'] != ''
          );
        });

        // if (!bol2) {
        //   this.$message.warning('请输入合格品数量');
        //   this.loading.close();
        //   return false;
        // }

        // 预制体

        let wId;
        let bol = true;
        let _i;
        this.List.forEach((L) => {
          if (
            L.semiProductList.length > 0 &&
            this.taskObj.type != 4 &&
            L.singleReport == 1
          ) {
            bol = L.semiProductList.every((e, i) => {
              _i = i + 1;
              wId = L.code;

              if (this.taskObj.type == 6) {
                return (
                  Object.prototype.hasOwnProperty.call(e.extInfo, 'taskId') &&
                  e.extInfo.taskId
                );
              } else {
                if (e.extInfo.isQualified == 1 || e.extInfo.notType == 5) {
                  return (
                    Object.prototype.hasOwnProperty.call(e.extInfo, 'taskId') &&
                    e.extInfo.taskId &&
                    e.extInfo.reportWeight
                  );
                } else {
                  return (
                    Object.prototype.hasOwnProperty.call(
                      e.extInfo,
                      'notType'
                    ) && e.extInfo.notType
                  );
                }
              }
            });
          }
        });

        // if (!bol) {
        //   this.$message.warning(`请完善工单${wId}第${_i}处置方式`);
        //   this.loading.close();

        //   return false;
        // }

        if (this.clientEnvironmentId != 2) {
          let succ = this.List.some((L) => {
            return L.productRecycleList.length > 0;
          });

          if (succ) {
            const isRecycle = await this.checkRecycle();
            if (!isRecycle) {
              return false;
            }
          }
        }

        console.log(this.item, '9999999999');
        if (
          this.taskObj.type == 4 &&
          this.clientEnvironmentId != 3 &&
          this.clientEnvironmentId != 2 &&
          this.List[0].singleReport !== 1
        ) {
          this.checkPack();

          // if (!isPack) {
          // 	return false
          // }
        }
        console.log('4444444444', this.List);
        if (this.taskObj.type == 1) {
          const isCache = await this.checkCache(type);

          if (!isCache) {
            return false;
          }
        }

        if (
          this.clientEnvironmentId == 3 &&
          type == 2 &&
          this.taskObj.type == 6
        ) {
          this.List.forEach((L) => {
            if (L.singleReport == 0) {
              L.semiProductList = [];
            }
          });
          console.log('ashsaoghaoghoasg');
        }
        let isSemiProduct = false;
        this.List.map((semi) => {
          if (
            semi.semiProductList.length == 0 &&
            semi.singleReport == 1 &&
            semi.currentTaskDiagram.isFirstTask == 1 &&
            this.clientEnvironmentId != 3
          ) {
            isSemiProduct = true;
            this.loading.close();
            setTimeout(() => {
              this.$message.warning({
                message: '请工单编号：' + semi.code + '先创建在制品',
                key: semi.code // 使用当前时间作为key，确保唯一性
              });
            }, 500);
          }

          if (semi.semiProductList.length == 0 && semi.singleReport == 0) {
            semi.semiProductList.map((ditem) => {
              if (ditem.extInfo.batchReportInfo) {
                ditem.extInfo.batchReportInfo.map((baItem) => {
                  let idvalue = baItem.deviceId
                    ? baItem.deviceId.split('/')
                    : '';
                  baItem.deviceId = idvalue ? idvalue[0] : '';
                });
              }
              if (ditem.extInfo.notBatchReportInfo) {
                ditem.extInfo.notBatchReportInfo.map((noItem) => {
                  let idvalue = noItem.deviceId
                    ? noItem.deviceId.split('/')
                    : '';
                  noItem.deviceId = idvalue ? idvalue[0] : '';
                });
              }
            });
          }
        });
        if (isSemiProduct) {
          this.loading.close();
          return;
        }

        console.log(this.List, 'this.List');
        // this.loadingBtn = true;
        // jobSave(this.List)
        //   .then((res) => {
        //     this.loadingBtn = false;
        //     this.loading.close();
        //     this.$message.success('报工成功');
        //     this.getList(this.idsList);
        //   })
        //   .catch(() => {
        //     this.loadingBtn = false;
        //     this.loading.close();
        //   })
        //   .finally(() => {
        //     setTimeout(function () {
        //       // this.loading.close();
        //     }, 3000);
        //   });
      },

      checkRecycle() {
        this.loading.close();
        return new Promise((resolve) => {
          this.$confirm('是否跳过副产品回收处置！', '提示', {
            confirmButtonText: '确定',
            cancelButtonText: '取消',
            type: 'warning'
          })
            .then(() => {
              resolve(true);
            })
            .catch(() => {
              resolve(false);
            });
        });
      },

      checkCache(type) {
        return new Promise((resolve) => {
          if (type == 1) {
            saveCache(this.List).then((rr) => {
              this.$message.success('缓存成功');
              this.loading.close();
            });
            resolve(false);
          } else if (type == 2) {
            resolve(true);
          }
        });
      },

      getCacheFn() {
        let parma = {
          workOrderIds: this.idsList,
          taskId: this.taskObj.id,
          type: 1
        };

        getCache(parma).then((res) => {
          this.List.forEach((f, index) => {
            res.forEach((o) => {
              if (f.workOrderId == o.workOrderId) {
                f['product'] = o.extInfo.product;
                f['workReportInfo'] = o.extInfo.workReportInfo;
                f['notFormedList'] = o.extInfo.notFormedList;
                f['turnover'] = o.extInfo.turnover;
                f['productRecycleList'] = o.extInfo.productRecycleList;
                f['semiProductList'] = o.extInfo.semiProductList;
                f['modelList'] = o.extInfo.modelList;
                // this.$set(this.List[index].workReportInfo,'executorTime',timestampToDateTime(o.extInfo.workReportInfo.executorTime))
                this.$forceUpdate();
              }
            });
          });
        });
      },

      removeCacheFn(type) {
        this.$confirm('是否清空缓存', '缓存')
          .then(() => {
            let parma = {
              workOrderIds: type == 'all' ? this.idsList : [type],
              taskId: this.taskObj.id,
              type: 1
            };
            removeCache(parma).then((res) => {
              this.$message.success('已经清空缓存');
              this.getList(this.idsList);
            });
          })
          .catch(() => {});
      },

      getWarehouseListFn() {
        getWarehouseList().then((res) => {
          this.warehouseList = res.data;
        });
      },

      //批量报工合格不合格重量统计
      countNumPl(list, index) {
        console.log('11111122222333', list);
        //合格总数
        let formedNumCount = 0;
        //合格总重量
        let formedWeightCount = 0;
        //不合格总数
        let notFormedNumCount = 0;
        //不合格总重量
        let notFormedWeightCount = 0;
        list.map((item) => {
          //合格总数
          item.extInfo.batchReportInfo.forEach((m) => {
            formedNumCount = formedNumCount + Number(m.allFeedQuantity || 0);
          });
          //合格总重量
          item.extInfo.batchReportInfo.forEach((w) => {
            formedWeightCount =
              formedWeightCount + Number(w.allReportWeight || 0);
          });
          //不合格总数
          item.extInfo.notBatchReportInfo.forEach((nf) => {
            notFormedNumCount =
              notFormedNumCount + Number(nf.allFeedQuantity || 0);
          });
          //不合格总重量
          item.extInfo.notBatchReportInfo.forEach((nw) => {
            notFormedWeightCount =
              notFormedWeightCount + Number(nw.allReportWeight || 0);
          });
        });
        this.$set(this.List[index].workReportInfo, 'formedNum', formedNumCount); //合格总数
        this.$set(
          this.List[index].workReportInfo,
          'formedWeight',
          formedWeightCount
        ); //合格总重量
        this.$set(
          this.List[index].workReportInfo,
          'notFormedNum',
          notFormedNumCount
        ); //不合格总数
        this.$set(
          this.List[index].workReportInfo,
          'notFormedWeight',
          notFormedWeightCount
        ); //不合格总重量
      }
    }
  };
</script>

<style scoped lang="scss">
  .top_fixed {
    width: 100%;
    height: 40px;
    background: #fff;
    display: flex;
    align-items: center;
    justify-content: flex-end;
  }

  .title_box {
    padding: 10px 0;

    .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;
      }
    }
  }

  .job_box {
    margin-top: 6px;
    width: 100%;
    height: calc(100vh - 70px - 50px - 80px - 60px);
    overflow-y: scroll;
    overflow-x: hidden;
  }

  .card_box {
    background: #fff;
    padding: 8px;
    border-radius: 2px;
  }
</style>
