<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" v-if="!taskObj.isOrderListData">
          <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"
          v-if="!taskObj.isOrderListData"
        ></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="选择日期"
            style="margin-right: 25px; width: 190px"
          >
          </el-date-picker>

          执行人：
          <el-select
            v-model="teamId"
            placeholder="请选择班组"
            filterable
            style="width: 120px"
            @change="checkTeamList(teamId)"
          >
            <el-option
              v-for="item in teamList"
              :label="item.name"
              :value="item.id"
              :key="item.id"
            >
            </el-option>
          </el-select>
          <el-select
            v-model="executorIdList"
            placeholder="请选择执行人"
            filterable
            multiple
            @change="changeId"
          >
            <div class="checkboxWrapper">
              <el-checkbox v-model="checked" @change="checkChange">
                全选
              </el-checkbox>
            </div>
            <el-option
              v-for="item in teamUserList"
              :label="item.name"
              :value="item.id"
              :key="item.id"
            >
            </el-option>
          </el-select>
        </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"
          :item="item"
        ></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 &&
            clientEnvironmentId != 3
          "
          :item="item"
          :list="item.semiProductList"
          :equipmentList="item.equipmentList"
          :isChoose="isChoose"
          @chooseData="chooseData"
          :isEngrave="isEngrave"
          :isDisposal="isDisposal"
        ></semiProductJobBom>

        <semiProductJobBom
          :singleReport="item.singleReport"
          v-if="
            item.semiProductList &&
            item.semiProductList.length != 0 &&
            item.singleReport == 1 &&
            clientEnvironmentId == 3 &&
            taskObj.type != 4
          "
          :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
          "
          :item="item"
          :list="item.product"
          :equipmentList="item.equipmentList"
          :isChoose="isChoose"
          :isEngrave="isEngrave"
          :isDisposal="isDisposal"
          @chooseData="chooseData"
        ></batchSemiProductJobBom>

        <!-- <batchSemiProductJobBom
          :singleReport="item.singleReport"
          v-if="
            item.semiProductList &&
            item.semiProductList.length != 0 &&
            item.singleReport == 0 &&
            clientEnvironmentId == 3 &&
            taskObj.type == 4
          "
          :item="item"
          :list="item.semiProductList"
          :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 != 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> -->

        <packingTgBom
          v-if="
            item.semiProductList &&
            item.semiProductList.length != 0 &&
            taskObj.type == 4 &&
            clientEnvironmentId == 3 &&
            item.singleReport == 1
          "
          :list="item.semiProductList"
          :item="item"
          :isChoose="isChoose"
          :isEngrave="isEngrave"
          :isDisposal="isDisposal"
        ></packingTgBom>

        <div
          v-if="
            item &&
            item.currentTaskDiagram.type == 4 &&
            clientEnvironmentId == 3 &&
            item.singleReport == 0
          "
        >
          <batchPackagingGrouping
            ref="packagingGroupingRef"
            :objData="item"
            :workOrderId="item.workOrderId"
            :taskId="item.currentTaskDiagram.taskId"
          >
          </batchPackagingGrouping>
        </div>

        <div
          v-if="
            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> -->

        <!-- <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> -->

        <!-- <packingTgBom
          v-if="
            item.semiProductList &&
            item.semiProductList.length != 0 &&
            taskObj.type == 4 &&
            clientEnvironmentId == 3
          "
          :list="item.semiProductList"
          :item="item"
        ></packingTgBom> -->
        <semiProductJobBom
          v-if="
            item.pickOutInList &&
            item.pickOutInList.length != 0 &&
            taskObj.type == 4 &&
            clientEnvironmentId == 3
          "
          :singleReport="item.singleReport"
          :list="item.semiProductList"
          :equipmentList="item.equipmentList"
          :item="item"
          @chooseData="chooseData"
          :isEngrave="isEngrave"
          :isDisposal="isDisposal"
        ></semiProductJobBom>
      </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 semiProductJobBom from './components/newSemiProductJobBom.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.vue';
  import { timestampToDateTime } from '@/utils/index.js';
  import { parameterGetByCode } from '@/api/system/dictionary-data';
  import { getTeam } from '@/api/produce/job.js';

  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: {},
      workPlanType: {
        type: String,
        default: ''
      }
    },

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

        loading: null,
        loadingBtn: false,
        chooseListData: [],
        isChoose: false,
        isEngrave: false,
        isDisposal: false,
        teamList: [],
        teamAllList: [],
        teamUserList: [],
        executorIdList: [],
        teamId: '',
        checked: 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
      },
      workPlanType: {
        handler(val) {
          if (val == 1) {
            this.getList(this.idsList);
          }
        }
      }
    },

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

    mounted() {
      if (localStorage.getItem('singleUserInfo') == '1') {
        const data = JSON.parse(localStorage.getItem('chooseUserInfo'));
        this.getTeamList(data.teamId);
      } else {
        this.getTeamList(this.$store.state.user.info.teamId);
      }
    },

    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 getTeamList(id) {
        const ids = id.split(',');
        this.teamList = [];
        this.teamUserList = [];
        const list = ids.map((item) => getTeam(item));

        const dataList = await Promise.all(list);

        dataList.forEach((item) => {
          this.teamList.push({
            name: item.name,
            id: item.id
          });

          this.teamAllList.push(item.userVOList);
        });
      },

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

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

          if (this.isDefaultExecutor) {
            this.setDefaultIdList();
          }
        });
      },

      setDefaultIdList() {
        if (this.teamList.length != 0) {
          this.teamId = this.teamList[0].id;
          const index = this.teamList.findIndex(
            (item) => item.id == this.teamId
          );
          this.teamUserList = this.teamAllList[index];
          if (this.teamUserList) {
            const res = this.teamUserList.find(
              (it) => it.id == this.$store.state.user.info.userId
            );

            this.executorIdList.push(res.id);
          }
          // const res = this.teamUserList.find(
          //   (it) => it.id == this.$store.state.user.info.userId
          // );

          // this.executorIdList.push(res.id);
        }
      },

      changeId() {
        if (this.executorIdList.length == this.teamUserList.length) {
          this.checked = true;
        } else {
          this.checked = false;
        }
      },

      checkChange() {
        if (this.checked) {
          this.executorIdList = [];
          this.executorIdList = this.teamUserList.map((item) => item.id);
        } else {
          this.executorIdList = [];
        }
      },

      getList(ids) {
        this.idsList = ids || [];

        if (this.taskObj.id != -2) {
          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.semiProductList.forEach((item) => {
                    if (item.extInfo.taskId == -1) {
                      item.extInfo.taskId = item.extInfo.taskId + '';
                    }
                  });
                  obj.pickOutInList = [];

                  console.log('赋值了');
                } else if (
                  this.clientEnvironmentId == 3 &&
                  obj.singleReport == 0
                ) {
                  if (obj.pickOutInList && obj.pickOutInList.length != 0) {
                    obj.semiProductList = obj.pickOutInList;
                    obj.semiProductList.forEach((item) => {
                      if (item.extInfo.taskId == -1) {
                        item.extInfo.taskId = item.extInfo.taskId + '';
                      }
                    });
                    obj.pickOutInList = [];
                  }
                } 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
                ) {
                  if (obj.pickOutInList && obj.pickOutInList.length != 0) {
                    obj.product = obj.pickOutInList;
                    obj.pickOutInList = [];
                  }
                } else if (
                  this.taskObj.type == 4 &&
                  obj.singleReport == 1 &&
                  this.clientEnvironmentId != 2
                ) {
                  if (obj.pickOutInList && obj.pickOutInList.length != 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) => {
                    let feedQuantity = 0;
                    let reportWeight = 0;
                    let unFeedQuantity = 0;
                    let unReportWeight = 0;
                    if (
                      a.extInfo &&
                      a.extInfo.batchReportInfo &&
                      a.extInfo.batchReportInfo.length != 0
                    ) {
                      a.extInfo.batchReportInfo.forEach((it) => {
                        console.log(it, '1111111111');
                        feedQuantity += Number(it.allFeedQuantity);
                        reportWeight += Number(it.allReportWeight);
                      });
                    }

                    if (
                      a.extInfo &&
                      a.extInfo.notBatchReportInfo &&
                      a.extInfo.notBatchReportInfo.length != 0
                    ) {
                      a.extInfo.notBatchReportInfo.forEach((it) => {
                        unFeedQuantity += Number(it.allFeedQuantity);
                        unReportWeight += Number(it.allReportWeight);
                      });
                    }

                    a.extInfo.batchReportInfo = [
                      {
                        allFeedQuantity: feedQuantity,
                        allReportWeight: reportWeight,
                        taskId: '',
                        taskName: ''
                      }
                    ];

                    a.extInfo.notBatchReportInfo = [
                      {
                        allFeedQuantity: unFeedQuantity,
                        allReportWeight: unReportWeight,
                        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;
                  return item;
                });

                obj.product = obj.product.map((item) => {
                  if (this.taskObj.type != 6) {
                    if (item['extInfo']?.reportWeight) {
                      item['extInfo'].reportWeight = '';
                    }
                  }
                  item.confirm = 0;

                  return item;
                });

                obj.workReportInfo = {
                  executorTime: null,
                  formingNum: null,
                  formingWeight: null,
                  formedNum: null,
                  formedWeight: null,
                  taskId: this.taskObj.id,
                  notFormedNum: null,
                  notFormedWeight: null,
                  lossQuantity: null,
                  lossWeight: 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;
                  let notFormedNum = 0;
                  if (obj.semiProductList.length > 0) {
                    obj.semiProductList.map((fitem) => {
                      if (
                        !fitem.extInfo.isQualified ||
                        fitem.extInfo.isQualified == 1
                      ) {
                        numCot = numCot + fitem.feedQuantity || 1;
                      } else {
                        notFormedNum = notFormedNum + fitem.feedQuantity;
                      }
                    });
                    obj.workReportInfo.formedNum = numCot;
                    obj.workReportInfo.notFormedNum = notFormedNum;
                  }
                } else if (obj.product.length != 0) {
                  const formedNum = obj.product.reduce((acc, pro) => {
                    return pro.feedQuantity &&
                      (!pro.extInfo.isQualified || pro.extInfo.isQualified == 1)
                      ? acc + Number(pro.feedQuantity)
                      : acc;
                  }, 0);

                  const notFormedNum = obj.product.reduce((acc, pro) => {
                    return pro.feedQuantity && pro.extInfo.isQualified == 2
                      ? acc + Number(pro.feedQuantity)
                      : acc;
                  }, 0);

                  obj.workReportInfo.formedNum = formedNum;

                  obj.workReportInfo.notFormedNum = notFormedNum;
                }

                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
                };
              });
              if (this.clientEnvironmentId == 3) {
                this.List.forEach((item, index) => {
                  if (
                    item.semiProductList.length != 0 &&
                    item.singleReport == 0
                  ) {
                    this.countNumPl(item.semiProductList, index);
                  }
                });
              }
            })
            .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);
      },

      checkTeamList(id) {
        this.executorIdList = [];
        const index = this.teamList.findIndex((item) => item.id == id);
        this.teamUserList = this.teamAllList[index];
      },

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

        console.log(required, 'required');

        if (this.executorIdList.length == 0) {
          return this.$message.error('执行人不能为空！');
        }

        const executorList = [];

        this.executorIdList.forEach((item) => {
          const data = this.teamUserList.find((it) => it.id == item);
          if (data) {
            executorList.push({
              userId: data.id,
              jobNumber: data.jobNumber,
              name: data.name
            });
          }
        });

        this.List = this.List.map((item) => {
          item.workReportInfo.executorList = executorList;
          return item;
        });

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

        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('请选择执行时间');
        }

        // for (let i = 0; i < this.List.length; i++) {
        //   if (
        //     this.List[i].packInfo &&
        //     Object.keys(this.List[i].packInfo).length === 0
        //   ) {
        //     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;
        // }

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

        if (this.clientEnvironmentId == 3) {
          for (const item of this.List) {
            if (item.singleReport == 0) {
              if (item.currentTaskDiagram.type == 6) {
                for (const it of item.sampleQuality) {
                  const data = it.extInfo;
                  if (data.batchReportInfo.length == 0) {
                    if (!data.reportWeight) {
                      this.loading.close();
                      return this.$message.warning('报工重量不能为空');
                    }
                  } else if (data.batchReportInfo.length != 0) {
                    for (const i of data.batchReportInfo) {
                      if (i.allFeedQuantity) {
                        if (!i.allReportWeight) {
                          this.loading.close();
                          return this.$message.warning('报工重量不能为空');
                        }
                      }
                    }
                  }
                }
              } else {
                for (const it of item.semiProductList) {
                  const data = it.extInfo;
                  for (const i of data.batchReportInfo) {
                    if (i.allFeedQuantity) {
                      if (!i.allReportWeight) {
                        this.loading.close();
                        return this.$message.warning('报工重量不能为空');
                      }
                    }
                  }

                  for (const i of data.notBatchReportInfo) {
                    if (i.allFeedQuantity) {
                      if (!i.allReportWeight) {
                        this.loading.close();
                        return this.$message.warning('不合格品重量不能为空');
                      }
                    }
                  }
                }
              }
            } else {
              if (item.currentTaskDiagram.type != 4) {
                for (const it of item.semiProductList) {
                  const data = it.extInfo;
                  if (!data.reportWeight) {
                    this.loading.close();
                    return this.$message.warning('报工重量不能为空');
                  }
                }
              }
            }
          }
        }

        console.log('123456');

        if (this.clientEnvironmentId != 2) {
          for (let i = 0; i < this.List.length; i++) {
            for (let j = 0; j < this.List[i].productRecycleList.length; j++) {
              if (!this.List[i].productRecycleList[j].warehouseId) {
                const isRecycle = await this.checkRecycle();
                if (!isRecycle) {
                  return false;
                }
              }
            }
          }

          // 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) {
          if (this.clientEnvironmentId == 3) {
            this.List.forEach((it) => {
              if (it.singleReport == 0) {
                this.checkPack();
              }
            });
          } else {
            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.checked = false;
            this.executorIdList = [];
            this.teamId = '';
            this.getList(this.idsList);
            this.$emit('jobSuccess', 'Success');
          })
          .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;
  }

  .checkboxWrapper {
    padding: 8px 20px;
    border-bottom: 1px solid #ccc;
  }

  ::v-deep .el-select__tags {
    flex-wrap: nowrap;
    overflow: auto;
  }

  /* 输入框最大宽度*/
  ::v-deep .el-select__tags-text {
    max-width: 90px;
  }

  /* 底部滚动条的高度*/
  ::v-deep .el-select__tags::-webkit-scrollbar {
    height: 2px !important;
  }
</style>
