<template>
  <div class="ele-body">
    <el-card shadow="never">
      <header-title title="基本信息">
        <el-upload
          ref="fileUploadBtn"
          action="#"
          :auto-upload="false"
          :on-change="onChange"
          :limit="1"
          :show-file-list="false"
          accept=".xls,.xlsx"
        >
          <el-button type="primary">导入excel</el-button>
        </el-upload>
      </header-title>
      <el-form
        :model="formData"
        ref="formName"
        label-width="110px"
        :rules="rules"
      >
        <el-row :gutter="20">
          <el-col :span="8">
            <el-form-item label="物品类型" prop="extInfo.assetType">
              <selectTree
                ref="tree"
                :isBindPlan="true"
                class="form-ipt"
                size="medium"
                style="width: 100%"
                clearable
                :value="formData.extInfo.assetType"
                :options="codeList"
                :props="{
                  value: 'id',
                  label: 'name',
                  children: 'children'
                }"
                @getValue="codeListValue"
                :isAll="false"
              />
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="入库类型" prop="bizType">
              <el-select
                :disabled="true"
                @change="onClear"
                filterable
                placeholder="请选择"
                v-model="formData.bizType"
              >
                <el-option
                  v-for="item in sceneState"
                  :key="item.code"
                  :value="item.code + ''"
                  :label="item.label"
                ></el-option>
              </el-select> </el-form-item
          ></el-col>
          <el-col :span="8">
            <el-form-item label="采购收货单" prop="documentSource">
              <el-input
                :disabled="true"
                placeholder="请输入"
                v-model="formData.extInfo.documentSource"
              >
              </el-input>
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="权属部门" prop="deptName">
              <el-input
                placeholder="权属部门"
                disabled
                v-model="formData.extInfo.deptName"
                clearable
              />
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="入库登记人">
              <el-input
                placeholder="登记人"
                disabled
                v-model="formData.extInfo.createUserName"
                clearable /></el-form-item
          ></el-col>
          <el-col :span="8" v-if="formData.bizType == 2">
            <el-form-item label="供应商" prop="supplierName">
              <el-input
                placeholder="请输入"
                clearable
                v-model="formData.extInfo.supplierName"
              />
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="送货人" prop="fromUser">
              <el-input
                placeholder="请输入"
                v-model="formData.fromUser"
                clearable
              /> </el-form-item
          ></el-col>
          <el-col :span="8">
            <el-form-item label="送货人联系方式" prop="deliveryPhone">
              <el-input
                placeholder="请输入"
                v-model="formData.extInfo.deliveryPhone"
                clearable /></el-form-item
          ></el-col>
          <el-col :span="24">
            <el-form-item label="备注" prop="remark">
              <el-input
                v-model="formData.remark"
                clearable
                type="textarea"
                placeholder="请详细说明"
                :rows="4"
              ></el-input>
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>

      <div class="material">
        <header-title title="产品信息">
          <!-- <el-button v-if="!isOutsourcing" type="primary" @click="addStock"
            >添加</el-button
          > -->
          <el-button
            :disabled="multipleSelection.length == 0"
            type="primary"
            @click="handleWareHouse"
            >批量设置货位</el-button
          >
        </header-title>

        <div class="mt10 form-table">
          <el-form
            ref="warehousingMaterialListRef"
            :model="{ warehousingMaterialList: warehousingMaterialList }"
            :show-message="false"
          >
            <!-- <el-button
              v-if="warehousingMaterialList.length != 0"
              type="success"
              plain
              style="margin-bottom: 20px; float: right; margin-right: 20px"
              size="mini"
              @click="listSaveArrs"
              >批量保存</el-button
            > -->
            <el-table
              v-if="isWeight"
              :header-cell-style="rowClass"
              :max-height="300"
              ref="warehousingMaterialListTable"
              :key="formData.extInfo.assetType"
              :data="warehousingMaterialList"
              tooltip-effect="dark"
              style="width: 100%"
              @selection-change="selectChange"
              stripe
            >
              <el-table-column
                fixed="left"
                align="center"
                type="selection"
                width="55"
              >
              </el-table-column>
              <el-table-column
                label="序号"
                type="index"
                width="50"
                align="center"
              >
              </el-table-column>

              <el-table-column
                label="编码"
                prop="assetCode"
                align="center"
                width="130"
                :show-overflow-tooltip="true"
              ></el-table-column>
              <el-table-column
                label="名称"
                align="center"
                width="200"
                prop="assetName"
                :show-overflow-tooltip="true"
              ></el-table-column>
              <el-table-column
                v-for="(item, index) in tableHeader"
                :key="index"
                align="center"
                :label="item.label"
                :width="item.width"
                :prop="item.prop"
                :show-overflow-tooltip="true"
              >
                <template slot-scope="{ row }">
                  <template v-if="item.formatter">{{
                    item.formatter(row)
                  }}</template>
                  <template v-else>{{ row[item.prop] }}</template>
                </template>
              </el-table-column>
              <el-table-column
                label="级别"
                prop="level"
                width="100"
                align="center"
              >
              </el-table-column>
              <el-table-column
                label="批号"
                width="100"
                prop="manualBatchNo"
              ></el-table-column>
              <el-table-column
                v-if="clientEnvironmentId != 2"
                label="批次号"
                prop="batchNo"
                width="70"
                align="center"
              >
              </el-table-column>
              <el-table-column
                label="最小包装单元"
                align="center"
                prop="minPackingCount"
                width="100"
              >
                <el-table-column label="" prop="minPackingCount" width="100">
                  <template slot-scope="{ row, $index }">
                    <template>
                      {{ row.minPackingCount }}
                    </template>
                  </template>
                </el-table-column>
                <el-table-column label="" prop="minPackingCount">
                  <template slot-scope="{ row, $index }">
                    {{ handleRowUnit(row) }} /{{ row.minPackUnit }}
                  </template>
                </el-table-column>
              </el-table-column>
              <el-table-column
                label="包装数量"
                prop="outInNum"
                width="150"
                align="center"
              >
                <template slot-scope="{ row, $index }">
                  <template>
                    {{ row.outInNum }} {{ row.minPackUnit }}
                  </template>
                </template>
              </el-table-column>
              <el-table-column label="计量数量" prop="counts">
                <template slot-scope="{ row, $index }">
                  {{ $math.format(row.minPackingCount * row.outInNum, 14) }}
                </template>
              </el-table-column>
              <el-table-column
                label="计量单位"
                prop="batchNo"
                width="100"
                align="center"
              >
                <!-- v-if="formData.extInfo.assetType == 1" -->

                <template slot-scope="{ row, $index }">
                  <template>
                    {{ row.measuringUnit }}
                  </template>
                </template>
              </el-table-column>
              <!-- <el-table-column
                label="计量单位"
                prop="batchNo"
                width="100"
                align="center"
                v-if="formData.extInfo.assetType == 4"
              >
                <template slot-scope="{ row, $index }">
                  <template>
                    {{ row.measuringUnit }}
                  </template>
                </template>
              </el-table-column> -->

              <!-- <el-table-column
                label="数量"
                prop="batchNo"
                width="150"
                align="center"
                v-if="formData.extInfo.assetType == 1"
              >
                <template slot-scope="{ row, $index }">
                  <template> {{ row.outInNum }} </template>
                </template>
              </el-table-column>
              <el-table-column
                label="数量"
                prop="batchNo"
                width="150"
                align="center"
                v-if="formData.extInfo.assetType == 4"
              >
                <template slot-scope="{ row, $index }">
                  <template>
                    {{ row.minPackingCount * row.outInNum }}
                  </template>
                </template>
              </el-table-column> -->

              <el-table-column
                label="重量"
                align="center"
                prop="contentImage"
                :show-overflow-tooltip="true"
              >
                <!-- v-if="formData.extInfo.assetType == 1" -->
                <template slot-scope="{ row, $index }">
                  {{ row.weight }}
                  <template slot="append">
                    {{ handleRowUnit(row) }}
                    <!-- {{
                          { yuan: '元', wanyuan: '万元' }[row.univalenceUnit]
                        }} -->
                  </template>
                </template>
              </el-table-column>
              <!-- <el-table-column
                label="重量"
                align="center"
                prop="contentImage"
                :show-overflow-tooltip="true"
                v-if="formData.extInfo.assetType == 4"
              >
                <template slot-scope="{ row, $index }">
                  {{
                    deviceWeight(
                      row.roughWeight,
                      row.minPackingCount * row.outInNum
                    )
                  }}
                  <template slot="append"> -->
              <!-- {{ handleRowUnit(row) }} -->
              <!-- {{
                          { yuan: '元', wanyuan: '万元' }[row.univalenceUnit]
                        }} -->
              <!-- </template>
                </template>
              </el-table-column> -->
              <el-table-column
                label="重量单位"
                align="center"
                prop="contentImage"
                :show-overflow-tooltip="true"
              >
                <template slot-scope="{ row, $index }">
                  {{ row.weightUnit }}
                  <template slot="append"> </template>
                </template>
              </el-table-column>
              <el-table-column
                label="单价"
                prop="univalence"
                width="150"
                align="center"
              >
                <template slot-scope="{ row, $index }">
                  <!-- <template v-if="row.isSave || formData.bizType == 5">
                    <template v-if="row.univalence || row.univalence === 0">
                      {{ row.univalence
                      }}{{
                        { yuan: '元', wanyuan: '万元' }[row.univalenceUnit]
                      }}
                    </template>
                  </template> -->
                  <!-- v-else -->
                  <el-form-item
                    :prop="`warehousingMaterialList.${$index}.univalence`"
                  >
                    {{ row.univalence }}元/{{ handleRowUnit(row) }}
                  </el-form-item>
                </template>
              </el-table-column>
              <el-table-column
                label="金额"
                align="center"
                prop="contentImage"
                :show-overflow-tooltip="true"
              >
                <template slot-scope="{ row, $index }">
                  {{
                    calcSumTotal(
                      row.outInNum,
                      row.minPackingCount,
                      row.univalence,
                      row
                    )
                  }}
                </template>
              </el-table-column>
              <el-table-column
                label="采购原因"
                align="center"
                width="200"
                prop="purpose"
                :show-overflow-tooltip="true"
              ></el-table-column>
              <el-table-column
                label="货位"
                prop="warehouseName"
                :show-overflow-tooltip="true"
                width="250"
                required
              >
                <template slot-scope="{ row, $index }">
                  <el-form-item
                    :prop="`warehousingMaterialList.${$index}.houseList`"
                    :required="true"
                  >
                    <div @click="handleWareHouse(row, $index)">
                      <div
                        style="color: #ff4949"
                        v-if="row.houseList.length == 0"
                      >
                        ---（必填）
                      </div>
                      <div v-else>
                        <div
                          class="fontOmitted"
                          v-for="(item, index) in row.houseList"
                          :key="index"
                        >
                          {{ item.warehouseName }}- {{ item.areaName }}-
                          {{ item.shelfCode }}- {{ item.cargoSpaceCode
                          }}<span style="color: #ff4949" v-if="item.num">
                            - {{ item.num }}(数)</span
                          >
                          <br />
                        </div>
                      </div>
                    </div>
                  </el-form-item>
                </template>
              </el-table-column>
            </el-table>
          </el-form>
        </div>
        <div class="mt20">
          <header-title :title="`包装明细`">
            <!-- <div class="switch_right">
              <span v-if="materialCodeReqList.length != 0">
                分拆<el-switch
                  v-model="isSplit"
                  active-color="#13ce66"
                  inactive-color="#ff4949"
                  @change="handleIsDetail"
                  style="margin-left: 10px"
                >
                </el-switch>
              </span>

              <el-button
                style="margin-left: 20px"
                type="text"
                @click="dateSetting"
                v-if="!isSplit && formData.bizType != 5"
                >批量设置{{
                  curDateType === 'manufactureTime' ? '生产日期' : '采购日期'
                }}</el-button
              >
            </div> -->
          </header-title>
          <!-- <el-button
            v-if="materialCodeReqList.length != 0"
            type="success"
            plain
            style="margin-bottom: 20px; float: right; margin-right: 20px"
            size="mini"
            @click="wrapListSave"
            >批量保存</el-button
          > -->
          <el-table
            v-if="isWrapTable"
            ref="materialCodeReqListTable"
            :data="showMaterialCodeReqList"
            tooltip-effect="dark"
            :key="formData.bizType"
            :header-cell-style="rowClass"
            style="width: 100%"
            stripe
            height="300px"
            v-el-table-infinite-scroll="wrapHandleScroll"
          >
            <el-table-column label="序号" type="index" width="50">
            </el-table-column>
            <el-table-column
              label="编码"
              prop="assetCode"
              width="130"
              :show-overflow-tooltip="true"
            ></el-table-column>
            <el-table-column
              label="名称"
              prop="assetName"
              width="200"
              :show-overflow-tooltip="true"
            ></el-table-column>
            <el-table-column
              label="批号"
              prop="manualBatchNo"
              width="100"
            ></el-table-column>
            <el-table-column
              v-if="clientEnvironmentId != 2"
              label="批次号"
              prop="batchNo"
              width="70"
            ></el-table-column>
            <el-table-column
              :label="`包装编码`"
              prop="onlyCode"
              width="200"
              :show-overflow-tooltip="true"
            ></el-table-column>
            <el-table-column
              label="包装数量"
              prop="packingCount"
              width="80"
            ></el-table-column>
            <el-table-column
              label="包装单位"
              prop="packingUnit"
            ></el-table-column>
            <el-table-column
              label="计量数量"
              prop="minPackingCount"
            ></el-table-column>
            <el-table-column
              label="计量单位"
              prop="measuringUnit"
            ></el-table-column>
            <el-table-column label="物料代号" prop="materielCode" width="130">
            </el-table-column>
            <el-table-column label="客户代号" prop="clientCode">
            </el-table-column>
            <el-table-column label="刻码" prop="engrave"> </el-table-column>
            <el-table-column label="重量" prop="weight" width="100">
            </el-table-column>
            <el-table-column label="重量单位" prop="weightUtil">
            </el-table-column>
            <el-table-column label="质检结果" prop="result" width="120">
              <template slot-scope="{ row }">
                <span>{{ qualityResults[row.result] }}</span>
              </template>
            </el-table-column>
            <el-table-column label="质检状态" prop="status" width="120">
              <template slot-scope="{ row }">
                <span>{{ qualityStatus[row.status] }}</span>
              </template>
            </el-table-column>
          </el-table>
          <!-- </el-tab-pane>
        </el-tabs> -->
        </div>
        <div class="mt20" v-if="isSplit">
          <header-title :title="`物料明细`"> </header-title>
          <!-- <el-button
            v-if="resultArray.length != 0"
            type="success"
            plain
            style="margin-bottom: 20px; float: right; margin-right: 20px"
            size="mini"
            @click="materialListSave"
            >批量保存</el-button
          > -->
          <el-table
            v-if="isMaterialTable"
            ref="resultArrayTable"
            :data="showResultArray"
            tooltip-effect="dark"
            :key="formData.bizType"
            :header-cell-style="rowClass"
            style="width: 100%"
            stripe
            height="300px"
            v-el-table-infinite-scroll="materielHandleScroll"
          >
            <el-table-column label="序号" type="index" width="50">
            </el-table-column>
            <el-table-column
              label="编码"
              width="130"
              prop="assetCode"
              :show-overflow-tooltip="true"
            ></el-table-column>
            <el-table-column
              label="名称"
              prop="assetName"
              width="200"
              :show-overflow-tooltip="true"
            ></el-table-column>
            <el-table-column
              label="批号"
              prop="manualBatchNo"
              width="100"
            ></el-table-column>
            <el-table-column
              v-if="clientEnvironmentId != 2"
              label="批次号"
              prop="batchNo"
              width="80"
            ></el-table-column>
            <el-table-column
              label="物料编码"
              prop="no"
              width="200"
              :show-overflow-tooltip="true"
            ></el-table-column>
            <el-table-column
              label="计量数量"
              prop="minPackingCount"
              width="90"
            ></el-table-column>
            <el-table-column
              width="80"
              label="计量单位"
              prop="measuringUnit"
            ></el-table-column>
            <el-table-column label="物料代号" prop="materielCode" width="130">
            </el-table-column>
            <el-table-column label="客户代号" prop="clientCode">
            </el-table-column>
            <el-table-column label="刻码" prop="engrave"> </el-table-column>
            <el-table-column label="重量" prop="weight" width="100">
            </el-table-column>
            <el-table-column
              label="重量单位"
              prop="weightUnit"
              width="100"
            ></el-table-column>
            <el-table-column label="质检结果" prop="result" width="120">
              <template slot-scope="{ row }">
                <span>{{ qualityResults[row.result] }}</span>
              </template>
            </el-table-column>
            <el-table-column label="质检状态" prop="status" width="120">
              <template slot-scope="{ row }">
                <span>{{ qualityStatus[row.status] }}</span>
              </template>
            </el-table-column>
          </el-table>
        </div>
      </div>
      <div class="center mt20">
        <el-button type="primary" @click="handleSave" :loading="saveLoading"
          >保存</el-button
        >
        <el-button @click="$router.go(-1)">返回</el-button>
      </div>
    </el-card>

    <selectType
      :visibleDialog.sync="visibleDialog"
      :title="title"
      :tableHeader="tableHeader"
      :bizScene="formData.bizType"
      :type="[selectEquiType]"
      :loadTree.sync="loadTree"
      @selectTableData="addProduct"
    />
    <WareHouseDailog
      ref="wareHouseDailogRef"
      @houseData="houseData"
    ></WareHouseDailog>
    <ReturnSelect
      ref="returnSelectRef"
      :tableHeader="tableHeader"
      :curDateType="curDateType"
    ></ReturnSelect>
    <el-dialog :visible.sync="dateVisible" title="选择日期" width="400px">
      <el-date-picker
        size="small"
        v-model="batchTime"
        type="datetime"
        style="width: 320px"
        value-format="yyyy-MM-dd HH:mm:ss"
        placeholder="选择日期"
      >
      </el-date-picker>
      <div style="text-align: right; margin-top: 20px">
        <el-button @click="dateVisible = false">取消</el-button>
        <el-button type="primary" @click="dateConfirm" :disabled="!batchTime"
          >确认</el-button
        >
      </div>
    </el-dialog>
    <!-- 出库单 -->
    <stockOutOrder ref="stockOutOrderRef" @success="stockOutOrderSuccess" />
    <!-- 销售订单 -->
    <picker ref="pickerRef" @success="pickerSuccess" />
    <!-- 委外订单 -->
    <outsourcedOrders
      ref="outsourcedOrdersRef"
      @success="outsourcedOrdersSuccess"
    />
  </div>
</template>

<script>
  import elTableInfiniteScroll from 'el-table-infinite-scroll';
  import XLSX from 'xlsx';
  import { add, bignumber } from 'mathjs';
  import picker from './components/picker.vue';
  import stockOutOrder from './components/stockOutOrder.vue';
  import outsourcedOrders from './components/outsourcedOrders.vue';
  import outin from '@/api/warehouseManagement/outin';
  import {
    getTreeByPid,
    getTreeByGroup,
    getProductList
  } from '@/api/classifyManage';
  import warehouseDefinition from '@/api/warehouseManagement/warehouseDefinition';
  import selectUpload from '@/components/selectUpload';
  import upload from '@/components/uploadImg';
  import {
    warehousingType,
    sceneState,
    emergencyState,
    materialType
  } from '@/utils/dict/index';
  // import { getInfo, warehousingAdd, getAssetNum } from '@/api/stockManagement';
  import selectTree from '@/components/selectTree';
  import selectType from '../components/selectType.vue';
  import WareHouseDailog from '../components/WareHouseDailog.vue';
  import ReturnSelect from './components/ReturnSelect.vue';
  // import supplier from '@/api/main/supplier';
  // import org from '@/api/main/org';
  // import user from '@/api/main/user';
  import { tableHeader } from '../common';
  import { getCode } from '@/api/codeManagement/index.js';
  import { number } from 'echarts/core';
  import { purchaseorderGetById, contactlink, oneId } from '@/api/mes';
  export default {
    components: {
      selectUpload,
      selectTree,
      selectType,
      WareHouseDailog,
      upload,
      ReturnSelect,
      picker,
      outsourcedOrders,
      stockOutOrder
    },
    directives: {
      'el-table-infinite-scroll': elTableInfiniteScroll
    },
    data() {
      return {
        levelOptions: [
          {
            label: '特级',
            value: '0'
          },
          {
            label: '一级',
            value: '1'
          },
          {
            label: '二级',
            value: '2'
          },
          {
            label: '三级',
            value: '3'
          }
        ],
        pageSize: 20,
        wrapPageNum: 1,
        materielPageNum: 1,
        showResultArray: [],
        loadingWrapMore: false,
        loadingMaterielMore: false,
        showMaterialCodeReqList: [],
        qualityStatusOptions: [
          {
            label: '合格',
            value: '0'
          },
          {
            label: '不合格',
            value: '1'
          },
          {
            label: '让步接收',
            value: '3'
          }
        ],
        isWrapTable: true, // 包装表格显隐
        isMaterialTable: true, // 物料表格显隐
        isOutsourcing: false, // 是否委外
        stockOutOrders: '',
        isSplit: false, // 是否拆分到物料明细
        qualityStatus: {
          0: '未检',
          1: '已检',
          2: '部分检'
        }, // 质检状态 0未检 1已检
        qualityResults: {
          0: '合格',
          1: '不合格',
          3: '让步接收'
        }, // 质检结果 0合格 1不合格 3让步接收
        isWeight: true,
        resultArray: [],
        contactList: [],
        pickerRow: {},
        outsourcedOrdersRow: {},
        fromUserList: [],
        codeList: [],
        materialType,
        warehousingType,
        sceneState,
        emergencyState,
        saveLoading: false,
        visibleDialog: false,
        curDateType: 'manufactureTime',
        materialCodeReqListSelected: [],
        // warehouseList: [], //仓库数组
        // warehouse: {},
        title: '',
        tableData2: [],
        uploadList: [],
        supplierList: [],
        warehousingMaterialList: [],
        activeName: 'a',
        loadTree: true,
        selectEquiType: '',
        batchTime: '',
        dateVisible: false,
        treeList: [],
        staffList: [],

        formData: {
          extInfo: {
            assetType: '', //物品类型
            deptCode: '', //部门code
            deptName: '', //部门名称
            verifyDeptCode: '', //审核部门编码
            verifyDeptName: '', //审核部门名称
            deliveryName: '', //送货人名称
            deliveryPhone: '', //送货人电话
            documentSource: '', //销售订单
            urgent: '', //紧急状态
            supplierId: '', //供应商ID
            supplierName: '', //供应商名称
            createUserName: '', //创建人名字
            contentImage: [] //图片数组
          },
          fromUser: '', //送货人
          bizType: '2', //物品类型
          verifyId: '', //审核人Id
          verifyName: '', //审核人名称
          createUserId: '',
          remark: ''
        },
        multipleSelection: [],
        rules: {
          'extInfo.assetType': {
            required: true,
            message: '请选择物品类型',
            trigger: 'change'
          },
          bizType: {
            required: true,
            message: '请选择入库场景',
            trigger: 'change'
          }
        }
      };
    },
    computed: {
      // 条码信息
      materialCodeReqList() {
        return this.warehousingMaterialList
          .map((i) => i.warehouseLedgerDetails || [])
          .flat();
      },
      tableHeader() {
        return tableHeader(this.selectEquiType);
      },
      clientEnvironmentId() {
        return this.$store.state.user.info.clientEnvironmentId;
      }
    },
    created() {
      if (this.$route.query.id) {
        // this._getInfo()
      } else {
        let obj = localStorage.getItem('orgInfo')
          ? JSON.parse(localStorage.getItem('orgInfo'))
          : {};
        this.formData.createUserName = obj.name;
        this.formData.extInfo.deptName = obj.dept?.name;
        this.formData.deptCode = obj.dept?.code;
      }
      this.initData();
    },
    methods: {
      selectChange(val) {
        this.multipleSelection = val;
      },
      wrapHandleScroll() {
        console.log('---------wrapHandleScroll------------');
        if (
          this.showMaterialCodeReqList.length < this.materialCodeReqList.length
        ) {
          if (this.materialCodeReqList.length > this.pageSize) {
            this.wrapPageNum += 1;
          }
          this.wrapFetchData();
        }
      },
      wrapFetchData() {
        const start = (this.wrapPageNum - 1) * this.pageSize;
        const end = start + this.pageSize;
        this.showMaterialCodeReqList = this.showMaterialCodeReqList.concat(
          this.materialCodeReqList.slice(start, end)
        );
      },
      materielHandleScroll() {
        console.log('---------materielHandleScroll------------');
        if (this.showResultArray.length < this.resultArray.length) {
          if (this.resultArray.length > this.pageSize) {
            this.materielPageNum += 1;
          }
          this.materielFetchData();
        }
      },
      materielFetchData() {
        const start = (this.materielPageNum - 1) * this.pageSize;
        const end = start + this.pageSize;
        this.showResultArray = this.showResultArray.concat(
          this.resultArray.slice(start, end)
        );
      },
      handleAvatarSuccess() {
        this.$refs.fileUploadBtn.clearFiles(); //上传成功之后清除历史记录**加粗样式**
      },
      async onChange(file) {
        console.log(XLSX);
        this.warehousingMaterialList = [];
        this.resultArray = [];
        const loading = this.$loading({
          lock: true,
          text: '加载中...'
        });
        /**
         * 1. 使用原生api去读取好的文件
         * */
        // console.log("原始上传的文件", file);
        // 读取文件不是立马能够读取到的，所以是异步的，使用Promise
        let dataBinary = await new Promise((resolve) => {
          // Web API构造函数FileReader，可实例化对象，去调用其身上方法，去读取解析文件信息
          let reader = new FileReader(); // https://developer.mozilla.org/zh-CN/docs/Web/API/FileReader
          // console.log("实例化对象有各种方法", reader);
          reader.readAsBinaryString(file.raw); // 读取raw的File文件
          reader.onload = (ev) => {
            // console.log("文件解析流程进度事件", ev);
            resolve(ev.target.result); // 将解析好的结果扔出去，以供使用
          };
        });
        // console.log("读取出的流文件", dataBinary);

        /**
         * 2. 使用xlsx插件去解析已经读取好的二进制excel流文件
         * */
        let workBook = XLSX.read(dataBinary, {
          type: 'binary',
          cellDates: true
        });
        // excel中有很多的sheet，这里取了第一个sheet：workBook.SheetNames[0]
        let firstWorkSheet = workBook.Sheets[workBook.SheetNames[0]];
        // 分为第一行的数据，和第一行下方的数据
        // const header = this.getHeaderRow(firstWorkSheet);
        // console.log('读取的excel表头数据（第一行）', header);
        const xlsxData = XLSX.utils.sheet_to_json(firstWorkSheet);
        console.log('读取所有excel数据', xlsxData);
        let modelTypeList = xlsxData.map((item) => {
          return item['型号'];
        });
        let nameList = xlsxData.map((item) => {
          return item['物品名称'];
        });
        let codeList = xlsxData.map((item) => {
          return item['sap物料码'];
        });
        let functionType = {};
        xlsxData.map((item) => {
          functionType[item['sap物料码']] = item['采购原因'];
        });
        console.log(functionType);
        this.formData.extInfo.assetType = '6'; //备品备件
        this.selectEquiType = '6';
        this.title = '备品备件';
        this.formData.bizType = '2'; // 采购入库
        outin
          .getListByNameOrModeType({
            modelTypeList,
            nameList,
            codeList,
            categoryLevelId: '6'
          })
          .then(async (data) => {
            console.log('查询到的备件数据', data);
            let list = data.map((item) => {
              return {
                ...item,
                assetCode: item.code,
                assetId: item.id,
                assetName: item.name,
                curId: item.id,
                minPackUnit: item.packingUnit,
                unit: item.measuringUnit
              };
            });
            await this.onSelectTableData(list);
            this.warehousingMaterialList = this.warehousingMaterialList.map(
              (item) => {
                // 添加包装数量和最小包装单元
                let filterArray = xlsxData.filter(
                  (xlsxItem) =>
                    xlsxItem['物品名称'] == item.assetName &&
                    xlsxItem['sap物料码'] == item.assetCode
                );
                if (filterArray.length > 0) {
                  item.minPackingCount = 1;
                  item.outInNum = filterArray[0]['数量'];
                }
                // 添加固定货位
                item.houseList = [{}];
                item.purpose = functionType[item.assetCode];
                return { ...item };
              }
            );
            console.log(this.warehousingMaterialList);
            // 物品批量保存
            await this.listSaveArrs();
            // 分拆包装
            console.log('total--------------------');
            this.handleIsDetail(true);
            this.wrapFetchData();
            this.materielFetchData();
            this.handleAvatarSuccess();
            loading.close();
          })
          .catch(() => {
            loading.close();
          });
      },
      getHeaderRow(sheet) {
        const headers = []; // 定义数组，用于存放解析好的数据
        const range = XLSX.utils.decode_range(sheet['!ref']); // 读取sheet的单元格数据
        let C;
        const R = range.s.r;
        /* start in the first row */
        for (C = range.s.c; C <= range.e.c; ++C) {
          /* walk every column in the range */
          const cell = sheet[XLSX.utils.encode_cell({ c: C, r: R })];
          /* find the cell in the first row */
          let hdr = 'UNKNOWN ' + C; // <-- replace with your desired default
          if (cell && cell.t) hdr = XLSX.utils.format_cell(cell);
          headers.push(hdr);
        }
        return headers; // 经过上方一波操作遍历，得到最终的第一行头数据
      },
      // 键盘移动
      moveFocus(event, index, key, type, row) {
        let keyfield = [];
        let listLength = 0;
        switch (type) {
          case '产品':
            listLength = this.warehousingMaterialList.length;
            keyfield = [
              'manualBatchNo',
              'purpose',
              'minPackingCount',
              'outInNum',
              'univalence'
            ];
            break;
          case '包装':
            listLength = this.materialCodeReqList.length;
            if (row.measuringUnit != row.weightUtil) {
              keyfield = ['materielCode', 'clientCode', 'engrave', 'weight'];
            } else {
              keyfield = ['materielCode', 'clientCode', 'engrave'];
            }
            break;
          case '物料':
            listLength = this.resultArray.length;
            if (row.measuringUnit != row.weightUnit) {
              keyfield = ['materielCode', 'clientCode', 'engrave', 'weight'];
            } else {
              keyfield = ['materielCode', 'clientCode', 'engrave'];
            }
            break;
        }

        if (event.keyCode === 13) {
          // 回车
          if (
            index === listLength - 1 &&
            key === keyfield[keyfield.length - 1]
          ) {
            // 最后一行最后一个
            return;
          }

          this.$refs[key + index].blur();
          if (key === keyfield[keyfield.length - 1]) {
            // 当前行最后一个,跳转下一行第一个
            if (this.$refs[keyfield[0] + (index + 1)].value == 0) {
              this.$refs[keyfield[0] + (index + 1)].value = '';
            }
            this.$refs[keyfield[0] + (index + 1)].focus();
          } else {
            // 跳转下一个
            const nextkeyindex = keyfield.findIndex((k) => k === key) + 1;
            this.$nextTick(() => {
              if (this.$refs[keyfield[nextkeyindex] + index].value == 0) {
                this.$refs[keyfield[nextkeyindex] + index].value = '';
              }
              this.$refs[keyfield[nextkeyindex] + index].focus();
            });
          }
        }

        // 向上 =38
        if (event.keyCode === 38) {
          console.log('向上');
          if (index === 0) {
            // 第一行
            console.log('第一行无法向上');
            return;
          }
          this.$refs[key + index].blur();
          this.$nextTick(() => {
            if (this.$refs[key + (index - 1)].value == 0) {
              this.$refs[key + (index - 1)].value = '';
            }
            this.$refs[key + (index - 1)].focus();
          });
        }

        // 下 = 40
        if (event.keyCode === 40) {
          console.log('向下');
          if (index === listLength - 1) {
            // 最后一行
            console.log('最后一行无法向下');
            return;
          }
          this.$refs[key + index].blur();
          this.$nextTick(() => {
            if (this.$refs[key + (index + 1)].value == 0) {
              this.$refs[key + (index + 1)].value = '';
            }
            this.$refs[key + (index + 1)].focus();
          });
        }

        // 左 = 37
        if (event.keyCode === 37) {
          console.log('向左');
          if (index === 0 && key === keyfield[0]) {
            // 第一行第一个
            console.log('第一行第一个无法向左');
            return;
          }
          this.$refs[key + index].blur();
          if (key === keyfield[0]) {
            if (
              this.$refs[keyfield[keyfield.length - 1] + (index - 1)].value == 0
            ) {
              this.$refs[keyfield[keyfield.length - 1] + (index - 1)].value =
                '';
            }
            // 当前行第一个,跳转上一行最后一个
            this.$refs[keyfield[keyfield.length - 1] + (index - 1)].focus();
          } else {
            // 跳转上一个
            const prevkeyindex = keyfield.findIndex((k) => k === key) - 1;
            this.$nextTick(() => {
              if (this.$refs[keyfield[prevkeyindex] + index].value == 0) {
                this.$refs[keyfield[prevkeyindex] + index].value = '';
              }
              this.$refs[keyfield[prevkeyindex] + index].focus();
            });
          }
        }

        // 右 = 39
        if (event.keyCode === 39) {
          console.log('向右');
          if (
            index === listLength - 1 &&
            key === keyfield[keyfield.length - 1]
          ) {
            // 最后一行最后一个
            console.log('最后一行最后一个无法向左');
            return;
          }
          this.$refs[key + index].blur();
          if (key === keyfield[keyfield.length - 1]) {
            // 当前行最后一个,跳转下一行第一个
            if (this.$refs[keyfield[0] + (index + 1)].value == 0) {
              this.$refs[keyfield[0] + (index + 1)].value = '';
            }
            this.$refs[keyfield[0] + (index + 1)].focus();
          } else {
            // 跳转下一个
            const nextkeyindex = keyfield.findIndex((k) => k === key) + 1;
            this.$nextTick(() => {
              if (this.$refs[keyfield[nextkeyindex] + index].value == 0) {
                this.$refs[keyfield[nextkeyindex] + index].value = '';
              }
              this.$refs[keyfield[nextkeyindex] + index].focus();
            });
          }
        }
      },
      // 包装维度最小包装单元改变——>总重量
      minPackingCountChange(row, value) {
        if (value >= 0) {
          row.minPackingCount = value.replace(/^[0]+/, '');
        } else {
          row.minPackingCount = 0;
        }
        // row.minPackingCount = value.replace(/^(0+)|[^\d]+/g, '');
        if (row.outInNum >= 0 && value >= 0) {
          this.packNum(row, row.outInNum);
        }
      },
      // 选择质检结果改变质检状态
      changeWrapStatus(resultValue, row) {
        switch (resultValue) {
          case '':
            // 清空质检状态
            row.status = '0';
            break;
          default:
            // 默认已检质检状态
            row.status = '1';
            break;
        }
      },
      // 包装批量保存
      wrapListSave() {
        // 批量修改包装明细
        this.isWeight = false;
        this.bulkEditingWrap();
        this.$nextTick(() => {
          this.isWeight = true;
        });
      },
      // 物料批量保存
      materialListSave() {
        this.resultArray.forEach((item) => {
          if (!item.isPack) {
            this.materialBtn(item);
          }
        });
      },
      weightInput(value, row) {
        const newValue = value.replace(/[^\d.]/g, ''); // 保留数字和小数点
        const decimalCount = (newValue.match(/\./g) || []).length; // 计算小数点的个数
        if (decimalCount > 1) {
          // 如果小数点个数大于1，移除多余的小数点
          const lastIndex = newValue.lastIndexOf('.');
          row.weight =
            newValue.slice(0, lastIndex) + newValue.slice(lastIndex + 1);
        } else if (decimalCount === 1) {
          // 如果小数点个数等于1，允许小数点的输入
          row.weight = newValue;
        } else {
          row.weight = newValue === '' ? 0 : parseFloat(newValue); // 如果输入为空，则设为0
        }
      },
      handleIsDetail(event) {
        this.isSplit = event;
        const list = this.materialCodeReqList;
        if (event) {
          let resultArray = [];
          list.forEach((item) => {
            // 包装维度改成已保存状态
            item.isPack = true;
            // 拆分物料维度并生成列表
            for (let i = 1; i <= Number(item.minPackingCount); i++) {
              // console.log(item.weight);
              // console.log(item.minPackingCount);
              resultArray.push({
                onlyCode: item.onlyCode,
                no: item.onlyCode + i.toString().padStart(4, '0'),
                assetCode: item.assetCode,
                assetName: item.assetName,
                manualBatchNo: item.manualBatchNo,
                batchNo: item.batchNo,
                minPackingCount: 1,
                measuringUnit: item.measuringUnit,
                materielCode: item.materielCode,
                clientCode: item.clientCode,
                weight: this.$math.format(
                  item.weight / Number(item.minPackingCount),
                  14
                ),
                initWeight: this.$math.format(
                  item.weight / Number(item.minPackingCount),
                  14
                ),
                weightUnit: item.weightUnit,
                engrave: item.engrave,
                result: item.result,
                status: item.status,
                isPack: false
              });
            }
          });

          this.resultArray = resultArray;
          // 批量修改包装明细
          this.isWeight = false;
          this.bulkEditingWrap();
          this.$nextTick(() => {
            this.isWeight = true;
          });
        } else {
          // 包装维度改成编辑状态
          list.forEach((item) => {
            item.isPack = false;
          });
          // 清空物料维度列表
          this.resultArray = [];
        }
      },
      //包装明细保存
      packCout(row) {
        //true保存==》反之
        if (!row.isPack) {
          row.isPack = true;
          const code = row.assetCode;
          const batchNo = row.batchNo;
          //做防护，防止weight字符串类型
          this.materialCodeReqList.forEach((ele) => {
            ele.weight = Number(ele.weight);
          });
          // const count = this.materialCodeReqList.reduce(
          //   (acc, curr) => acc + curr.weight,
          //   0
          // );
          // 修改产品信息重量（包装维度累计）
          this.isWeight = false;
          this.warehousingMaterialList.forEach((item) => {
            if (item.assetCode == code && item.batchNo == batchNo) {
              let arr = [];
              for (const key in this.materialCodeReqList) {
                if (
                  this.materialCodeReqList[key].assetCode == item.assetCode &&
                  this.materialCodeReqList[key].batchNo == item.batchNo
                ) {
                  arr.push({ ...this.materialCodeReqList[key] });
                }
              }
              const count = arr.reduce((acc, curr) => {
                if (curr.isPack) {
                  this.$set(curr, 'initWeight', +curr.weight);
                  return Number(this.$math.format(+acc + +curr.weight, 14));
                } else {
                  return Number(this.$math.format(+acc + +curr.initWeight, 14));
                }
              }, 0);
              this.$set(item, 'weight', count);
            }
          });
          this.$nextTick(() => {
            this.isWeight = true;
          });
        } else {
          row.isPack = false;
        }
        this.$nextTick(() => {
          this.isWrapTable = false;
          this.$nextTick(() => {
            this.isWrapTable = true;
          });
        });
      },
      // 批量修改包装明细
      bulkEditingWrap() {
        // 批量修改包装明细列表状态（已保存）
        this.materialCodeReqList.forEach((item) => {
          item.isPack = true;
        });
        // 改变产品明细重量
        this.warehousingMaterialList.forEach((outItem) => {
          let arr = [];
          this.materialCodeReqList.forEach((inneritem) => {
            if (
              inneritem.assetCode == outItem.assetCode &&
              inneritem.batchNo == outItem.batchNo
            ) {
              arr.push(inneritem);
            }
          });
          const count = arr.reduce((acc, curr) => {
            if (curr.isPack) {
              this.$set(curr, 'initWeight', +curr.weight);
              return Number(this.$math.format(+acc + +curr.weight, 14));
            } else {
              return Number(this.$math.format(+acc + +curr.initWeight, 14));
            }
          }, 0);
          this.$set(outItem, 'weight', count);
        });
      },
      // 批量修改物料明细
      bulkEditingMaterial() {
        // 批量修改物料明细列表状态（已保存）
        this.resultArray.forEach((item) => {
          item.isPack = true;
        });
        // 改变包装明细重量
        this.materialCodeReqList.forEach((outItem) => {
          let arr = [];
          this.resultArray.forEach((inneritem) => {
            if (
              inneritem.assetCode == outItem.assetCode &&
              inneritem.batchNo == outItem.batchNo
            ) {
              arr.push(inneritem);
            }
          });
          const count = arr.reduce((acc, curr) => {
            if (curr.isPack) {
              this.$set(curr, 'initWeight', +curr.weight);
              return Number(this.$math.format(+acc + +curr.weight, 14));
            } else {
              return Number(this.$math.format(+acc + +curr.initWeight, 14));
            }
          }, 0);
          this.$set(outItem, 'weight', count);
        });
      },
      // 物料明细保存
      materialBtn(row) {
        console.log(row);
        console.log(this.resultArray);
        console.log(this.materialCodeReqList);
        // true保存 false编辑
        if (!row.isPack) {
          row.isPack = true;
          // 物料维度修改质检改变包装维度质检（结果和状态）
          this.materialCodeReqList.forEach((outItem) => {
            let arr = [];
            this.resultArray.forEach((inneritem) => {
              if (inneritem.onlyCode == outItem.onlyCode) {
                arr.push(inneritem);
              }
            });
            console.log(arr);
            // 首先判断是未填/合格不合格
            let boolen = arr.every((item) => {
              return item.result === '' || item.result === undefined;
            });
            // 判断只要物料全部质检结果(未填)——>包装质检结果(未填) 状态(未检)
            if (boolen) {
              this.$set(outItem, 'result', '');
              this.$set(outItem, 'status', '0');
            } else {
              // 判断只要物料有一个质检结果(不合格)——>包装质检结果(不合格) 状态(已检)
              let boolen = arr.some((item) => {
                return item.result === '1';
              });
              if (boolen) {
                this.$set(outItem, 'result', '1');
                this.$set(outItem, 'status', '1');
              } else {
                // 判断只要物料有一个质检结果(让步接收)——>包装质检结果(让步接收) 状态(已检)
                let boolen = arr.some((item) => {
                  return item.result === '3';
                });
                if (boolen) {
                  // 让步接收 已检
                  this.$set(outItem, 'result', '3');
                  this.$set(outItem, 'status', '1');
                } else {
                  // 判断只要物料有全部质检结果(合格)——>包装质检结果(合格) 状态(已检)
                  let boolen = arr.every((item) => {
                    return item.result === '0';
                  });
                  if (boolen) {
                    // 合格 已检
                    this.$set(outItem, 'result', '0');
                    this.$set(outItem, 'status', '1');
                  } else {
                    // 合格 部分检
                    this.$set(outItem, 'result', '0');
                    this.$set(outItem, 'status', '2');
                  }
                }
              }
            }
            // this.$set(outItem, 'result', boolen ? '1' : '0');
          });
          // 物料维度修改重量改变包装维度重量
          let onlyCode = row.onlyCode;
          this.materialCodeReqList.forEach((item) => {
            if (item.onlyCode === onlyCode) {
              let arr = [];
              for (const key in this.resultArray) {
                if (this.resultArray[key].onlyCode == item.onlyCode) {
                  arr.push(this.resultArray[key]);
                }
              }
              const count = arr.reduce((acc, curr) => {
                if (curr.isPack) {
                  this.$set(curr, 'initWeight', +curr.weight);
                  return Number(this.$math.format(+acc + +curr.weight, 14));
                } else {
                  return Number(this.$math.format(+acc + +curr.initWeight, 14));
                }
              }, 0);
              this.$set(item, 'weight', count);
            }
          });
          // 包装维度修改重量改变产品信息
          this.isWeight = false;
          // 批量修改包装明细
          this.bulkEditingWrap();
          this.$nextTick(() => {
            this.isWeight = true;
          });
        } else {
          row.isPack = false;
        }
        this.$nextTick(() => {
          this.isWrapTable = false;
          this.isMaterialTable = false;
          this.$nextTick(() => {
            this.isWrapTable = true;
            this.isMaterialTable = true;
          });
        });
      },
      packNum(row, value) {
        const total = {
          packingCount: Number(
            row.minPackingCount > 0 ? row.minPackingCount : 0
          ),
          outInNum: Number(row.outInNum > 0 ? row.outInNum : 0)
        };
        if (row.measuringUnit == row.weightUnit) {
          row.weight = Number(
            this.$math.format(
              total.packingCount * 1 * total.outInNum.toFixed(2),
              14
            )
          );
        } else {
          const totals = Number(
            this.$math.format(total.packingCount * total.outInNum, 14)
          );
          row.weight = Number(
            this.$math.format(
              totals * (row.netWeight > 0 ? row.netWeight.toFixed(2) : 0),
              14
            )
          );
        }
        return (row.outInNum = value.replace(/^(0+)|[^\d]+/g, ''));
      },
      async searchContact(id) {
        const data = await contactlink({ contactId: id });
        this.contactList = data.data;
      },
      outsourcedOrdersSuccess(row) {
        this.outsourcedOrdersRow = row;
        this.formData.extInfo.documentSource = row.code;
        this.$forceUpdate();
      },
      // 包装删除
      wrapDelete(row, index) {
        // 删除包装
        this.materialCodeReqList.splice(index, 1);
        let outIndex = 0;
        let arr = this.warehousingMaterialList.filter((item, index) => {
          if (item.assetCode == row.assetCode && item.batchNo == row.batchNo) {
            outIndex = index;
            return true;
          }
        });
        // 修改产品
        if (arr[0].minPackingCount * arr[0].outInNum === row.minPackingCount) {
          this.warehousingMaterialList.splice(outIndex, 1);
        } else {
          this.$set(
            this.warehousingMaterialList[outIndex],
            'outInNum',
            this.warehousingMaterialList[outIndex].outInNum - 1
          );
        }
        // 删除物料
        if (this.resultArray.length > 0) {
          let indexs = [];
          let arr = this.resultArray.filter((item, index) => {
            if (
              item.assetCode == row.assetCode &&
              item.batchNo == row.batchNo
            ) {
              indexs.push(index);
              return true;
            }
          });
          console.log(indexs);
          console.log(arr);
          this.resultArray = this.resultArray.filter((item, index) => {
            return !indexs.includes(index);
          });
        }
      },
      // 物料删除
      materialDelete(row, index) {
        console.log('row---------------');
        console.log(index);
        console.log(row);
        let isBoolen = false;
        // 删除物料
        this.resultArray.splice(index, 1);
        // 过滤物料对应包装
        let wrapOutIndex = 0;
        let wrapArr = this.materialCodeReqList.filter((item, index) => {
          if (
            item.assetCode == row.assetCode &&
            item.batchNo == row.batchNo &&
            item.onlyCode == row.onlyCode
          ) {
            wrapOutIndex = index;
            return true;
          }
        });
        console.log('wrapArr------------------');
        console.log(wrapArr);
        // 包装和物料数量一致（相同删除列/不同-1）
        if (wrapArr[0].minPackingCount === row.minPackingCount) {
          isBoolen = true;
          // 修改产品
          let materialOutIndex = 0;
          let materialArr = this.warehousingMaterialList.filter(
            (item, index) => {
              console.log(wrapOutIndex);
              console.log(this.materialCodeReqList);
              console.log(item.assetCode);
              console.log(this.materialCodeReqList[wrapOutIndex]);
              console.log(this.materialCodeReqList[wrapOutIndex].assetCode);
              console.log('----------------');
              if (
                item.assetCode ==
                  this.materialCodeReqList[wrapOutIndex].assetCode &&
                item.batchNo == this.materialCodeReqList[wrapOutIndex].batchNo
              ) {
                materialOutIndex = index;
                return true;
              }
            }
          );
          // 产品和包装数量一致（相同删除列/不同-1）———— 产品
          if (
            materialArr[0].minPackingCount * materialArr[0].outInNum ===
            this.materialCodeReqList[wrapOutIndex].minPackingCount
          ) {
            this.warehousingMaterialList.splice(materialOutIndex, 1);
          } else {
            this.$set(
              this.warehousingMaterialList[materialOutIndex],
              'outInNum',
              this.warehousingMaterialList[materialOutIndex].outInNum - 1
            );
          }
          this.materialCodeReqList.splice(wrapOutIndex, 1);
        } else {
          // 包装数量-1
          this.$set(
            this.materialCodeReqList[wrapOutIndex],
            'minPackingCount',
            this.materialCodeReqList[wrapOutIndex].minPackingCount - 1
          );
        }
        if (!isBoolen) {
          // 修改产品
          let materialOutIndex = 0;
          // 找到包装对应产品
          let materialArr = this.warehousingMaterialList.filter(
            (item, index) => {
              console.log(wrapOutIndex);
              console.log(this.materialCodeReqList);
              console.log(item.assetCode);
              console.log(this.materialCodeReqList[wrapOutIndex]);
              console.log(this.materialCodeReqList[wrapOutIndex].assetCode);
              console.log('----------------');
              if (
                item.assetCode ==
                  this.materialCodeReqList[wrapOutIndex].assetCode &&
                item.batchNo == this.materialCodeReqList[wrapOutIndex].batchNo
              ) {
                materialOutIndex = index;
                return true;
              }
            }
          );
          // 产品和包装数量一致（相同删除列/不同-1）———— 产品
          if (
            materialArr[0].minPackingCount * materialArr[0].outInNum ===
            this.materialCodeReqList[wrapOutIndex].minPackingCount
          ) {
            this.warehousingMaterialList.splice(materialOutIndex, 1);
          } else {
            this.$set(
              this.warehousingMaterialList[materialOutIndex],
              'outInNum',
              this.warehousingMaterialList[materialOutIndex].outInNum - 1
            );
          }
        }
      },
      async stockOutOrderSuccess(row) {
        console.log('--------------------------');
        console.log(row);
        this.stockOutOrders = row.bizNo;
        this.formData.bizType = '2';
        this.formData.extInfo = row.extInfo;
        this.selectEquiType = row.categoryLevelTopId;
        this.formData.sourceBizNo = row.receiveNo;
        this.formData.fromId = row.id;
        this.formData.clientName = row.partaName;
        this.formData.clientCode = row.partaId;
        // const data = await oneId(row.id);
        // if (this.warehousingMaterialList.length == 0) {
        //   let list = data.productList.map((item) => {
        //     return {
        //       ...item,
        //       assetName: item.productName,
        //       assetCode: item.productCode,
        //       categoryId: item.productCategoryId,
        //       minPackUnit: item.packingUnit
        //     };
        //   });
        //   await this.onSelectTableData(await this.serachMainCode(list));
        // }
        // // 委外发货入库(出库再入库)
        // if (row.outsourceSendCode) {
        this.isOutsourcing = true;
        this.formData.bizType = '12';
        this.title = '委外入库（非采购）';
        console.log('-------this.formData----');
        console.log(this.formData);
        outin.getById(row.id).then(async (res) => {
          console.log('-------res--------res-------');
          console.log(res);
          if (res.outInDetailVOList && res.outInDetailVOList.length > 0) {
            const batchNo = await getCode('lot_number_code');
            this.warehousingMaterialList = [];
            this.resultArray = [];
            let arr = res.outInDetailVOList.map(async (goodsiItem) => {
              return new Promise(async (outResolve) => {
                goodsiItem.isSave = true;
                goodsiItem.houseList = [];
                goodsiItem.batchNo = batchNo;
                goodsiItem.assetName = goodsiItem.name;
                goodsiItem.assetCode = goodsiItem.categoryCode;
                goodsiItem.outInNum =
                  goodsiItem.packingCount < 1 ? 1 : goodsiItem.packingCount;
                goodsiItem.minPackingCount = goodsiItem.minPackingCount;
                goodsiItem.minPackUnit = goodsiItem.packingUnit;
                this.warehousingMaterialList.push(goodsiItem);
                let res = await outin.getAssetNum({
                  assetCode: goodsiItem.assetCode,
                  batchNum: goodsiItem.batchNo,
                  num: goodsiItem.outInNum < 1 ? 1 : goodsiItem.outInNum
                });
                let arr = goodsiItem.outInDetailRecordVOList.map(
                  (wrapItem, index) => {
                    return new Promise(async (resolve) => {
                      wrapItem.onlyCode = res.shift().onlyCode;
                      wrapItem.packingCount =
                        wrapItem.packingCount < 1 ? 1 : wrapItem.packingCount;
                      wrapItem.isPack = true;
                      wrapItem.minPackingCount = wrapItem.totalCount;
                      wrapItem.assetName = goodsiItem.name;
                      wrapItem.assetCode = goodsiItem.categoryCode;
                      wrapItem.batchNo = batchNo;
                      wrapItem.result =
                        wrapItem.result === null ? '' : String(wrapItem.result);
                      // wrapItem.count =
                      //   wrapItem.outInDetailRecordMaterialDetailVOList.length; // 增加包装计量数量
                      // 增加内部重量(解决重量未保存同时参与计算问题)
                      wrapItem.initWeight = wrapItem.weight;
                      if (
                        wrapItem.outInDetailRecordMaterialDetailVOList?.length >
                        0
                      ) {
                        wrapItem.outInDetailRecordMaterialDetailVOList.forEach(
                          (materialItem, index) => {
                            materialItem.id = '';
                            materialItem.onlyCode = wrapItem.onlyCode;
                            materialItem.no =
                              materialItem.onlyCode +
                              index.toString().padStart(4, '0');
                            materialItem.result =
                              materialItem.result === null
                                ? ''
                                : String(materialItem.result);
                            materialItem.batchNo = batchNo;
                            materialItem.minPackingCount = 1;
                            materialItem.isPack = true;
                            // 增加内部重量(解决重量未保存同时参与计算问题)
                            materialItem.initWeight = materialItem.weight;
                            this.resultArray.push(materialItem);
                          }
                        );
                      }
                      resolve(wrapItem);
                    });
                  }
                );
                Promise.all(arr).then((data) => {
                  console.log(goodsiItem);
                  goodsiItem.warehouseLedgerDetails = data;
                  outResolve(goodsiItem);
                });
              });
            });
            Promise.all(arr).then((data) => {
              console.log(this.warehousingMaterialList);
              console.log(this.resultArray);
              this.warehousingMaterialList = data;
              if (this.resultArray.length > 0) {
                this.isSplit = true;
              }
            });
          }
        });
        // } else {
        //   this.formData.bizType = '2';
        //   this.title = '采购入库';
        // }
      },
      async pickerSuccess(row) {
        this.pickerRow = row;
        this.formData.extInfo.documentSource = row.orderNo;
        this.formData.clientName = row.partaName;
        this.formData.clientCode = row.partaId;
        this.formData.extInfo.supplierName = row.partbName;
        this.formData.extInfo.supplierId = row.partbId;
        await this.searchContact(row.partbId);
        const data = await oneId(row.id);
        if (this.warehousingMaterialList.length == 0) {
          console.log('data===', data);
          let list = data.data.productList.map((item) => {
            return {
              ...item,
              assetName: item.productName,
              assetCode: item.productCode,
              categoryId: item.productCategoryId,
              minPackUnit: item.packingUnit
            };
          });
          this.onSelectTableData(await this.serachMainCode(list));
        }
      },
      async serachMainCode(arr) {
        let newArr = [];
        // 使用 Promise.all 来等待所有异步操作完成
        await Promise.all(
          arr.map(async (item) => {
            const data = await getProductList({
              pageNum: 1,
              size: 10,
              categoryLevelId: item.categoryLevelPathIdParent,
              code: item.assetCode
            });
            newArr.push(data.list); // 将结果存储到 newArr 中
          })
        );
        let re = [];
        for (const item of newArr) {
          for (const it of item) {
            re.push(it);
          }
        }
        return re.map((item) => {
          return {
            ...item,
            minPackUnit: item.packingUnit,
            assetCode: item.code,
            assetName: item.name
          };
        });
      },
      onClear() {
        this.formData.extInfo.documentSource = '';
        this.pickerRow = {};
        this.outsourcedOrdersRow = {};
        this.formData.clientName = '';
        this.formData.clientCode = '';
        this.formData.extInfo.supplierName = '';
        this.formData.extInfo.supplierId = '';
        this.$forceUpdate();
      },

      handleStockOutOrder() {
        this.$refs.stockOutOrderRef.open();
      },
      handleOutsourcedOrders() {
        this.$refs.outsourcedOrdersRef.open();
      },
      handlePicker() {
        this.$refs.pickerRef.open();
      },
      codeListValue(val) {
        this.formData.extInfo.assetType = val.id;
        this.$forceUpdate();
        this.title = val?.name;
        this.selectEquiType = val?.id;
      },
      //计算生产设备重量
      deviceWeight(row, num) {
        if (row) {
          return Number(row * num);
        } else {
          return row;
        }
      },
      //计算金额
      calcSumTotal(PackingCount, outInNum, univalence) {
        //最小包装单元,包装数量,单价
        const total = {
          PackingCount: Number(PackingCount > 0 ? PackingCount : 0),
          outInNum: Number(outInNum > 0 ? outInNum : 0),
          univalence: Number(univalence > 0 ? univalence : 0)
        };
        return Number(
          this.$math.format(
            total.PackingCount * total.outInNum * total.univalence,
            14
          )
        );
      },
      handleRowUnit(row) {
        return row.measuringUnit;
        // if (this.formData.extInfo.assetType == 1) {
        //   return row.weightUnit;
        // } else if (this.formData.extInfo.assetType == 4) {
        //   return row.measuringUnit;
        // } else {
        //   return row.measuringUnit;
        // }
      },
      changeVerfy(it) {
        this.formData.verifyName = it.name;
      },
      //选择供应啥的操作
      ChangeSupplier(data) {
        this.formData.extInfo.supplierName = data.dictValue;
      },
      ChangeSuppliers(data) {
        this.formData.clientName = data.dictValue;
      },

      rowClass({ row, column, rowIndex, columnIndex }) {
        if (rowIndex === 1) {
          return {
            display: 'none',
            background: '#EEEEEE',
            border: 'none'
          };
        }

        return { background: '#EEEEEE', border: 'none' };
      },
      calcSum(a, b, c, row) {
        if (
          (Number.isNaN(+a) && a !== '') ||
          (Number.isNaN(+b) && b !== '') ||
          (Number.isNaN(+c) && c !== '')
        ) {
          return '';
        }

        return a * b * c + { yuan: '元', wanyuan: '万元' }[row.univalenceUnit];
        // return a * b * c;
      },
      // 部门 点击事件
      async auditorDeptClick(data) {
        this.formData.extInfo.verifyDeptCode = data?.id;
        this.formData.extInfo.verifyDeptName = data?.name;
        this.formData.verifyId = '';
        this.formData.verifyName = '';

        this.$refs.formName.validateField('verifyDeptName');
        if (data) {
          this.getStaffList(data);
        }
      },
      async getStaffList(data) {
        let res = await warehouseDefinition.getUserPage({
          groupId: data.id,
          size: 9999,
          page: 1
        });

        this.staffList = res.list;
      },
      // 详情接口
      // async _getInfo () {
      //   const res = await getInfo({ id: this.$route.query.id })

      //   if (res?.success) {
      //     this.warehousingMaterialList = res.data.warehouseLedgerInfos.map(i => {
      //       i.isSave = true
      //       return i
      //     })

      //     this.formData = res.data.outInWarehouse

      //     this.uploadList = this.formData.contentImage

      //   }
      // },
      chooseAssets(row, index) {
        this.$refs.returnSelectRef.open(row, (res) => {
          row.outInNum = res.length;

          this.$set(
            row,
            'selfWarehouseLedgerDetails',
            res.map((i) => {
              delete i.updateTime;
              delete i.createTime;
              return i;
            })
          );
        });
      },
      // 仓库编辑
      handleWareHouse(row, idx) {
        this.$refs.wareHouseDailogRef.open(row, idx);
      },
      // 入库操作
      listEdit(row) {
        this.$set(row, 'isSave', false);
        row.selfWarehouseLedgerDetails = row.warehouseLedgerDetails;
        row.warehouseLedgerDetails = [];
        // 重置重量
        this.packNum(row, row.outInNum);
        // 清空物料明细防止数据错乱
        if (this.isSplit && this.resultArray?.length > 0) {
          this.handleIsDetail(false);
        }
      },
      listSave(row, index) {
        if (this.isSplit && this.resultArray?.length > 0) {
          this.handleIsDetail(false);
        }
        let fileds = [`warehousingMaterialList.${index}.houseList`];
        if (this.formData.bizType == 1) {
          // fileds.push(...[`warehousingMaterialList.${index}.customCode`]);
        } else if (this.formData.bizType == 2) {
          // fileds.push(...[`warehousingMaterialList.${index}.supplierCode`]);
        }
        if (this.formData.bizType != 5) {
          // fileds.push(
          //   ...[
          //     `warehousingMaterialList.${index}.outInNum`,
          //     `warehousingMaterialList.${index}.minPackingCount`
          //   ]
          // );
        } else if (
          this.warehousingMaterialList.some(
            (i) => !i.selfWarehouseLedgerDetails?.length
          )
        ) {
          this.$message.error('请选择资产编号！');
          return;
        }
        Promise.all(
          fileds.map(
            (item) =>
              new Promise(async (resolve, rej) => {
                this.$refs.warehousingMaterialListRef.validateField(
                  item,
                  (err) => {
                    if (err) {
                      rej(err);
                    } else {
                      resolve();
                    }
                  }
                );
              })
          )
        )
          .then((res) => {
            this.$set(row, 'isSave', true);
            if (this.formData.bizType != 5) {
              this.createMaterialCode(row);
            } else {
              // 退还
              this.createMaterialCodeReturn(row);
            }
          })
          .catch((err) => {
            this.$message.error('请填入必填项！');
          });
      },
      listSaveArrs() {
        return new Promise((resolve, reject) => {
          // 已经拆分(还原到未拆封编辑状态)
          if (this.isSplit && this.resultArray.length > 0) {
            this.handleIsDetail(false);
          }
          const rows = this.warehousingMaterialList;
          const indexes = Array.from(
            { length: this.warehousingMaterialList.length },
            (_, index) => index
          );
          let showMessage = true;
          Promise.all(
            rows.map((row, i) => {
              const index = indexes[i];
              let fileds = [`warehousingMaterialList.${index}.houseList`];
              if (this.formData.bizType == 1) {
                // fileds.push(...[`warehousingMaterialList.${index}.customCode`]);
              } else if (this.formData.bizType == 2) {
                // fileds.push(...[`warehousingMaterialList.${index}.supplierCode`]);
              }
              if (this.formData.bizType != 5) {
                // fileds.push(
                //   ...[
                //     `warehousingMaterialList.${index}.outInNum`,
                //     `warehousingMaterialList.${index}.minPackingCount`
                //   ]
                // );
              } else if (
                this.warehousingMaterialList.some(
                  (i) => !i.selfWarehouseLedgerDetails?.length
                )
              ) {
                this.$message.error('请选择资产编号！');
                return;
              }
              console.log(fileds);
              return Promise.all(
                fileds.map(
                  (item) =>
                    new Promise(async (resolve, rej) => {
                      this.$refs.warehousingMaterialListRef.validateField(
                        item,
                        (err) => {
                          if (err) {
                            rej(err);
                          } else {
                            resolve();
                          }
                        }
                      );
                    })
                )
              )
                .then(async (res) => {
                  this.$set(row, 'isSave', true);
                  if (this.formData.bizType != 5) {
                    console.log(
                      'createMaterialCode__' + i + '-----------------------'
                    );
                    await this.createMaterialCode(row);
                    console.log(
                      'createMaterialCode__' +
                        i +
                        '---执行完了--------------------'
                    );
                  } else {
                    // 退还
                    await this.createMaterialCodeReturn(row);
                  }
                  return Promise.resolve();
                })
                .catch((err) => {
                  if (showMessage) {
                    showMessage = false;
                    this.$message.error('请填入必填项！');
                  }
                });
            })
          )
            .then(() => {
              console.log('全部执行完毕~~~~');
              resolve();
            })
            .catch(() => {
              reject();
            });
        });
      },
      // listSaveArrs() {
      //   console.log(this.warehousingMaterialList);
      // },
      // 批量设置生产日期
      handleSelectionChange(val) {
        this.materialCodeReqListSelected = val;
      },
      dateSetting() {
        if (!this.materialCodeReqListSelected.length) {
          return this.$message.error(`请选择${this.title}明细！`);
        }
        this.dateVisible = true;
      },
      dateConfirm() {
        this.materialCodeReqListSelected.forEach((item) => {
          this.$set(item, this.curDateType, this.batchTime);
        });
        this.dateVisible = false;
      },
      //入库明细删除
      listDel(row, index) {
        this.warehousingMaterialList.splice(index, 1);
        if (this.isSplit && this.resultArray?.length > 0) {
          this.handleIsDetail(false);
        }
      },
      // 入库明细生成条码信息
      async createMaterialCode(row) {
        // 添加相同物品、批次号重新更新明细 原料编码
        const list = this.warehousingMaterialList.filter(
          (i) =>
            i.assetCode === row.assetCode &&
            i.batchNo === row.batchNo &&
            i.isSave
        );
        const num = list.reduce((num, pre) => {
          num += row.isUnpack
            ? Number(this.$math.format(pre.outInNum * pre.minPackingCount, 14))
            : pre.outInNum - 0;
          return num;
        }, 0);

        const nums = list.reduce((num, pre) => {
          num += Number(
            this.$math.format(pre.outInNum * pre.minPackingCount, 14)
          );

          return num;
        }, 0);

        const res = await outin.getAssetNum({
          assetCode: row.assetCode,
          batchNum: row.batchNo,
          num: num
        });
        // row.measuringUnit == 'PCS' ? nums :

        list.forEach((item) => {
          if (item.warehouseLedgerDetails?.length) {
            item.warehouseLedgerDetails.forEach((i) => {
              i.onlyCode = res.shift().onlyCode;
            });
          } else {
            this.$set(
              item,
              'warehouseLedgerDetails',
              Array.from(
                new Array(
                  item.isUnpack
                    ? Number(
                        this.$math.format(
                          item.outInNum * item.minPackingCount,
                          14
                        )
                      )
                    : // : item.measuringUnit == 'PCS'
                      // ? +item.outInNum * parseInt(item.minPackingCount)
                      +item.outInNum
                ),
                (val, idx) => {
                  return {
                    ...item,
                    onlyCode: res.shift().onlyCode,
                    bizStatus: 1,
                    contentImage: []
                  };
                }
              )
            );
          }
        });

        // 添加相同物品，重复批次号 重新更新明细 包装编码
        const batchList = this.warehousingMaterialList.filter(
          (i) => i.batchNo === row.batchNo && i.isSave
        );
        if (batchList.length) {
          const num = batchList.reduce((num, pre) => {
            num += +pre.outInNum;
            return num;
          }, 0);
          // const res1 = await outin.getAssetNum({
          //   batchNum: row.batchNo,
          //   num
          // });
          // if (res1) {
          batchList.forEach((item) => {
            // let num = res1.shift()?.num;
            let minPackingCount = item.minPackingCount;
            if (item.warehouseLedgerDetails?.length) {
              item.warehouseLedgerDetails.forEach((i, index) => {
                // this.$set(i, 'num', num);
                if (row.code == i.code) {
                  if (item.measuringUnit == item.weightUnit) {
                    this.$set(i, 'weight', item.minPackingCount);
                    this.$set(i, 'initWeight', item.minPackingCount);
                  } else {
                    this.$set(
                      i,
                      'weight',
                      Number(
                        this.$math.format(
                          1 * item.minPackingCount * item.netWeight,
                          14
                        )
                      )
                    );
                    this.$set(
                      i,
                      'initWeight',
                      Number(
                        this.$math.format(
                          1 * item.minPackingCount * item.netWeight,
                          14
                        )
                      )
                    );
                  }
                }
                this.$set(i, 'weightUtil', item.weightUnit);

                this.$set(i, 'packingCount', 1);
                this.$set(i, 'packingUnit ', item.packingUnit);
                this.$set(i, 'minPackingCount ', item.minPackingCount);
                this.$set(i, 'measuringUnit', item.measuringUnit);
                this.$set(i, 'isPack', false);
                this.$set(i, 'result', '0');
                this.$set(i, 'status', '1');
                // if (this.formData.extInfo.assetType == 1) {
                //   this.$set(i, 'status', '0');
                // } else {
                //   this.$set(i, 'result', '0');
                //   this.$set(i, 'status', '1');
                // }

                // if (!item.isUnpack) {
                //   if (index < item.warehouseLedgerDetails.length - 1) {
                //     num = res1.shift()?.num;
                //   }
                // } else {
                //   // 拆包的包装编码一致
                //   minPackingCount--;
                //   if (
                //     minPackingCount === 0 &&
                //     index < item.warehouseLedgerDetails.length - 1
                //   ) {
                //     minPackingCount = item.minPackingCount;
                //     num = res1.shift()?.num;
                //   }
                // }
              });
            }
          });
          // }
        }
      },
      // 入库明细生成条码信息 退还
      async createMaterialCodeReturn(row) {
        // 添加相同物品重新更新明细 原料编码
        const list = this.warehousingMaterialList.filter(
          (i) => i.batchNo === row.batchNo && i.isSave
        );
        // 退还
        const res = await getAssetNum({
          batchNo: row.batchNo,
          num: list.reduce((num, pre) => {
            num += pre.selfWarehouseLedgerDetails.length;
            return num;
          }, 0)
        });
        if (res?.success) {
          list.forEach((item) => {
            let num = res.data.shift().num;
            let minPackingCount = item.minPackingCount;
            if (item.warehouseLedgerDetails?.length) {
              item.warehouseLedgerDetails.forEach((i, index) => {
                Object.assign(i, {
                  num,
                  manualBatchNo: item.manualBatchNo,
                  batchNo: item.batchNo,
                  cargoSpaceCode: item.cargoSpaceCode, //货位编码
                  cargoSpaceId: item.cargoSpaceId, //货位id
                  shelfId: item.shelfId, //货架id
                  shelfCode: item.shelfCode, //货架名称
                  areaId: item.areaId, //库区id
                  areaName: item.areaName, //库区名称
                  warehouseId: item.warehouseId, //仓库id
                  warehouseName: item.warehouseName //仓库名称
                });

                if (!item.isUnpack) {
                  // 拆包的包装编码一致

                  if (index < item.warehouseLedgerDetails.length - 1) {
                    num = res.data.shift()?.num;
                  }
                } else {
                  minPackingCount--;
                  if (
                    minPackingCount === 0 &&
                    index < item.warehouseLedgerDetails.length - 1
                  ) {
                    minPackingCount = item.minPackingCount;
                    num = res1.data.shift()?.num;
                  }
                }
              });
            } else {
              this.$set(
                item,
                'warehouseLedgerDetails',
                item.selfWarehouseLedgerDetails.map((val, idx) => {
                  let obj = {
                    ...val,
                    bizStatus: 1,
                    minPackingCount: item.minPackingCount,
                    batchNo: item.batchNo,
                    cargoSpaceCode: item.cargoSpaceCode, //货位编码
                    cargoSpaceId: item.cargoSpaceId, //货位id
                    shelfId: item.shelfId, //货架id
                    shelfCode: item.shelfCode, //货架名称
                    areaId: item.areaId, //库区id
                    areaName: item.areaName, //库区名称
                    warehouseId: item.warehouseId, //仓库id
                    warehouseName: item.warehouseName, //仓库名称
                    materialId: item.materialId,
                    num
                  };
                  if (!item.isUnpack) {
                    // 拆包的包装编码一致
                    if (idx < item.warehouseLedgerDetails.length - 1) {
                      num = res.data.shift()?.num;
                    }
                  } else {
                    minPackingCount--;
                    if (
                      minPackingCount === 0 &&
                      idx < item.warehouseLedgerDetails.length - 1
                    ) {
                      minPackingCount = item.minPackingCount;
                      num = res1.data.shift()?.num;
                    }
                  }
                  return obj;
                })
              );
            }
          });
        }
      },

      handleSave() {
        let boolen = this.warehousingMaterialList.every(
          (item) => item.houseList.length > 0 && item.houseList[0].areaId
        );
        if (!boolen) {
          this.$message.error('请选择产品仓库！');
          return false;
        }
        this.$refs.formName.validate(async (valid) => {
          if (valid) {
            if (!this.warehousingMaterialList?.length) {
              return this.$message.error('请添加入库明细！');
            } else if (
              this.warehousingMaterialList.some((item) => !item.isSave)
            ) {
              return this.$message.error('请保存入库明细！');
            }
            // // 默认全部保存
            // if (this.resultArray?.length > 0) {
            //   // 物料批量保存
            //   this.materialListSave();
            // } else {
            //   // 包装批量保存
            //   this.wrapListSave();
            // }
            this.saveLoading = true;
            this.formatWarehouseMaterialList();

            let arr = this.warehousingMaterialList.map((item) => {
              return {
                purpose: item.purpose,
                netWeight: item.netWeight > 0 ? item.netWeight : 0,
                num: item.num > 0 ? item.num : 0,
                manualBatchNo: item.manualBatchNo,
                batchNo: item.batchNo,
                categoryId:
                  this.formData.bizType == 2 || this.formData.bizType == 12
                    ? item.categoryId
                      ? item.categoryId
                      : item.id
                    : item.id,
                count:
                  item.outInNum > 0 && item.minPackingCount > 0
                    ? this.$math.format(
                        parseInt(item.outInNum) *
                          parseInt(item.minPackingCount),
                        14
                      )
                    : 0,
                minPackingCount:
                  item.minPackingCount > 0 ? item.minPackingCount : 0,
                packingCount: item.outInNum > 0 ? item.outInNum : 0,
                price: item.univalence > 0 ? item.univalence : 0,
                outInDetailRecordAddPOList: item.warehouseLedgerDetails,
                position: `${item.warehouseName}-${item.areaName}-${item.shelfCode}-${item.cargoSpaceCode}`,
                remark: '',
                pathIds: `${item.warehouseId},${item.areaId},${item.shelfId},${item.cargoSpaceId}`,
                pathName: `${item.warehouseName},${item.areaName},${item.shelfCode},${item.cargoSpaceCode}`,
                totalMoney:
                  item.outInNum > 0 &&
                  item.minPackingCount > 0 &&
                  item.univalence > 0
                    ? this.$math.format(
                        item.outInNum * item.minPackingCount * item.univalence,
                        14
                      )
                    : 0,
                weightUnit: item.weightUnit,
                customCode: item.customCode,
                supplierCode: item.supplierCode,
                weight: item.weight > 0 ? item.weight : 0
              };
            });

            arr.forEach((item) => {
              if (item.outInDetailRecordAddPOList.length > 0) {
                let list = item.outInDetailRecordAddPOList.map((it) => {
                  return this.formatOutInDetailRecordAddPO(it, item);
                });
                item.outInDetailRecordAddPOList = list;
              }
            });
            let obj = { ...this.formData, type: 1 };
            obj.sourceBizNo = this.formData.extInfo.documentSource;

            obj.outInDetailAddPOList = arr;
            console.log('=====>', obj);
            // this.saveLoading = true;
            try {
              if (obj.bizType == '12') {
                obj.storageSource = 1;
              }
              const res = await outin.save(obj);
              if (res.code == 0) {
                // 委外入库（非采购）
                if (obj.bizType == '12') {
                  await outin.outApproveQuality({ outInId: res.data[0] });
                } else {
                  await outin.outApproves({ outInId: res.data[0] });
                }
                this.$message.success('保存成功！');
                this.saveLoading = false;
                this.$router.push('/warehouseManagement/stockManagement');
              }
            } catch (error) {
              this.saveLoading = false;
              console.error('保存失败：', error);
            }
          }
        });
      },

      formatWarehouseMaterialList() {
        for (let key in this.warehousingMaterialList) {
          for (let k in this.warehousingMaterialList[key].houseList) {
            let house = this.warehousingMaterialList[key].houseList[k];
            this.warehousingMaterialList[key].warehouseName =
              house.warehouseName;
            this.warehousingMaterialList[key].areaName = house.areaName;
            this.warehousingMaterialList[key].shelfCode = house.shelfCode;
            this.warehousingMaterialList[key].cargoSpaceCode =
              house.cargoSpaceCode;
            this.warehousingMaterialList[key].warehouseId = house.warehouseId;
            this.warehousingMaterialList[key].areaId = house.areaId;
            this.warehousingMaterialList[key].shelfId = house.shelfId;
            this.warehousingMaterialList[key].cargoSpaceId = house.cargoSpaceId;
            this.warehousingMaterialList[key].num = house.num;
          }
        }
      },

      formatOutInDetailRecordAddPO(it, item) {
        return {
          code: it.onlyCode,
          dateType: this.curDateType === 'manufactureTime' ? 2 : 1,
          dateValue: it[this.curDateType],
          minUnit: it.minPackingCount,
          minPackingCount: it.minPackingCount,
          minPositionId: it.cargoSpaceId,
          name: it.assetName,
          pathIds: item.pathIds,
          unit: it.unit,
          packageNo: it.num,
          clientCode: it.clientCode,
          materielCode: it.materielCode,
          weight: it.weight,
          weightUtil: it.weightUtil,
          engrave: it.engrave,
          materialDetails: this.materialDetails(it.onlyCode),
          packingCount: it.packingCount,
          status: it.status,
          result: it.result
        };
      },
      materialDetails(onlyCode) {
        return this.resultArray.filter((item) => item.onlyCode === onlyCode);
      },
      async getOrderCode() {
        const data = await getCode('in_warehouse');
        return data;
      },
      // 添加物品明细
      addProduct(val) {
        // 已经拆分(还原到未拆封编辑状态)
        if (this.isSplit && this.resultArray.length > 0) {
          this.handleIsDetail(false);
        }
        console.log('--------val---------');
        console.log(val);
        this.onSelectTableData(val);
      },
      //添加明细
      async onSelectTableData(val) {
        console.log('val-----------', val);
        const res = await getCode('lot_number_code');
        this.warehousingMaterialList.push(
          ...val.map((next) => {
            next.batchNo = res;
            let cur = {};

            next.realInventoryAmount = next.realInventoryAmount || 0;
            cur = {
              ...next,
              cargoSpaceCode: '', //货位编码
              cargoSpaceId: '', //货位id
              shelfId: '', //货架id
              shelfCode: '', //货架名称
              areaId: '', //库区id
              areaName: '', //库区名称
              warehouseId: '', //仓库id
              warehouseName: '', //仓库名称
              assetType: this.formData.extInfo.assetType,
              expirationDate: '',
              outInNum: '',
              minPackingCount: '',
              bizStatus: 1,
              contentImage: [],
              warehouseLedgerDetails: [],
              houseList: []
            };
            return cur;
          })
        );
      },
      async initData() {
        const { data } = await getTreeByGroup({ type: 2 });
        this.codeList = data;
        // .map((item) => {
        //   return { dictCode: item.id, dictValue: item.name };
        // });
        const res = await warehouseDefinition.tree();
        this.treeList = this.$util.toTreeData({
          data: res,
          idField: 'id',
          parentIdField: 'parentId'
        });
        // const res111 = await warehouseDefinition.list();
        // this.warehouseList = res111.list;
        let res22 = await warehouseDefinition.getUserPage({
          size: -1,
          page: 1
        });
        this.fromUserList = res22.list;
        const info = JSON.parse(localStorage.getItem('info'));
        let obj = res.find(
          (item) => item.id === info.deptId[info.deptId.length - 1]
        );
        if (!obj) return;
        this.formData.extInfo.deptCode = obj.id;
        this.formData.extInfo.deptName = obj.name;
        this.formData.extInfo.createUserName = info.name;
        this.formData.createUserId = info.id;

        // this.treeList = res;
        // this.formData.extInfo.deptCode =

        // this.getTreeList().then((res) => {
        //   if (res?.success) {
        //     this.treeList = res.data;
        //   }
        // });
        // this.getSupplier().then((res) => {
        //   if (res?.success) {
        //     this.supplierList = res.data.items;
        //   }
        // });
        // this.getStaffList();
      },
      addStock() {
        // this.$refs.wareHouseDailogRef.open({});
        // return;
        if (!this.title) return this.$message.error('请选择入库产品类型');
        if (!this.formData.bizType)
          return this.$message.error('请选择入库场景');
        if (
          this.formData.bizType == 12 &&
          !this.formData.extInfo.documentSource
        ) {
          return this.$message.error('请选择委外申请单');
        }
        this.visibleDialog = true;
      },
      handleChange(data) {
        this.title = data?.dictValue;
        this.selectEquiType = data?.dictCode;
      },
      handleChanges(code) {
        const data = this.codeList.find((item) => item.dictCode == code);
        this.title = data?.dictValue;
        this.selectEquiType = data?.dictCode;
      },
      getSupplier() {
        return new Promise((resolve, reject) => {
          supplier.list({ page: 1, size: 999 }).then((res) => {
            if (res.success) {
              resolve(res);
            }
          });
        });
      },
      getTreeList() {
        return new Promise((resolve, reject) => {
          org.tree().then((res) => {
            if (res.success) {
              resolve(res);
            }
          });
        });
      },
      upload(data) {
        this.formData.contentImage = data;
        this.$refs.formName.validateField('contentImage');
      },
      houseData(argum, idx) {
        console.log(argum);
        if (idx > -1) {
          this.$set(this.warehousingMaterialList[idx], 'houseList', argum);
        } else {
          let ids = this.multipleSelection.map((item) => item.id);
          this.warehousingMaterialList.forEach((item, index) => {
            if (ids.includes(item.id)) {
              this.$set(
                this.warehousingMaterialList[index],
                'houseList',
                argum
              );
            }
          });
        }
      }
    },

    watch: {
      // 解决右侧悬浮操作栏不对称问题
      warehousingMaterialList: {
        handler() {
          this.$nextTick(() => {
            this.$refs.warehousingMaterialListTable?.doLayout();
          });
        },
        deep: true
      },
      // 解决右侧悬浮操作栏不对称问题
      materialCodeReqList: {
        handler() {
          this.$nextTick(() => {
            this.$refs.materialCodeReqListTable?.doLayout();
          });
        },
        deep: true
      },
      // 解决右侧悬浮操作栏不对称问题
      resultArray: {
        handler() {
          this.$nextTick(() => {
            this.$refs.resultArrayTable?.doLayout();
          });
        },
        deep: true
      }
    }
  };
</script>

<style lang="scss" scoped>
  ::v-deep .el-row {
    display: flex;
    flex-wrap: wrap;
  }
  ::v-deep.form-table {
    .el-form-item {
      margin-bottom: 0;
    }
    .el-input__inner {
      padding: 0 10px;
    }
    ::-webkit-scrollbar {
      width: 8px;
      height: 8px;
      background-color: transparent;
    }
  }
  .p20 {
    padding: 20px;
  }
  .el-select,
  .el-date-editor {
    width: 100%;
  }
  .el-form-item {
    margin-bottom: 22px;
  }
  .material {
    margin-top: 20px;
    .flex {
      display: flex;
      justify-content: space-between;
      font-size: 14px;
      align-items: center;
      .red {
        color: #ff4949;
      }
    }
  }
  .mt10 {
    margin-top: 10px;
  }
  .mt20 {
    margin-top: 20px;
  }
  .center {
    text-align: center;
  }

  .switch_left li {
    border-right: 1px solid rgba(222, 222, 222, 1);
    border-left: 1px solid rgba(222, 222, 222, 1);
  }
  .fontOmitted {
    text-overflow: ellipsis;
    overflow: hidden;
    word-break: break-all;
    white-space: nowrap;
  }
  .table-fixed {
    .el-table__fixed-right {
      height: 100% !important;
    }
    .el-table__fixed-left {
      height: 100% !important;
    }
    .el-table__fixed {
      height: 100% !important;
    }
  }
</style>
