<template>
  <div id="addDemandList">
    <el-card style="position: relative">
      <span>基本信息</span>
      <el-form
        :model="basicForm"
        :rules="basicRules"
        ref="basic"
        label-width="auto"
        :show-message="false"
      >
        <el-row :gutter="10">
          <el-col :span="1.5">
            <el-form-item
              label="业务类型"
              prop="billType"
              :rules="{
                required: true,
                message: '请选择业务类型',
                trigger: 'blur',
              }"
            >
              <el-select
                clearable
                v-model="basicForm.billType"
                @change="changeBillType(basicForm.billType)"
                :disabled="sonDisable"
                :size="size"
                style="width: 200px"
              >
                <el-option
                  v-for="dict in dict.type.sys_business"
                  :key="dict.value"
                  :label="dict.label"
                  :value="dict.value"
                >
                </el-option>
              </el-select>
            </el-form-item>
          </el-col>

          <el-col :span="1.5">
            <el-form-item label="需求客户">
              <el-select
                clearable
                :size="size"
                v-model="basicForm.customer"
                :disabled="sonDisable"
                @clear="cleanCustomer"
                @focus="chooseOrg('CUSTOMER_PARAM', true, '选择客户')"
                style="width: 200px"
              >
                <el-option
                  v-for="item in customerOptions"
                  :key="item.id"
                  :label="item.name"
                  :value="item.id"
                />
              </el-select>
            </el-form-item>
          </el-col>

          <el-col :span="1.5">
            <el-form-item label="需求人员">
              <el-select
                clearable
                :size="size"
                v-model="basicForm.demandPersonal"
                :disabled="sonDisable"
                @focus="chooseOrg('CONTACTS_PARAM', true, '需求人员')"
                style="width: 200px"
              >
                <el-option
                  v-for="item in personOptions"
                  :key="item.id"
                  :label="item.name"
                  :value="item.code"
                />
              </el-select>
            </el-form-item>
          </el-col>

          <el-col :span="1.5">
            <el-form-item
              label="需求部门"
              prop="demandDept"
              :rules="{
                required: true,
                message: '请选择需求部门',
                trigger: 'blur',
              }"
            >
              <el-select
                clearable
                v-model="basicForm.demandDept"
                :size="size"
                :disabled="sonDisable"
                @focus="chooseOrg('DEPT_PARAM', true, '需求部门')"
                style="width: 200px"
              >
                <el-option
                  v-for="item in deptOptions"
                  :key="item.id"
                  :label="item.name"
                  :value="item.id"
                >
                </el-option>
              </el-select>
            </el-form-item>
          </el-col>

          <el-col :span="1.5">
            <el-form-item
              label="需求计划"
              prop="planType"
              :rules="{
                required: true,
                message: '请选择需求计划',
                trigger: 'blur',
              }"
            >
              <el-select
                :disabled="sonDisable"
                v-model="basicForm.planType"
                :size="size"
                style="width: 200px"
                @change="changeplanType(basicForm.planType)"
              >
                <el-option
                  v-for="dict in dict.type.sys_plan_type"
                  :key="dict.value"
                  :label="dict.label"
                  :value="dict.value"
                >
                </el-option>
              </el-select>
            </el-form-item>
          </el-col>

          <el-col :span="1.5">
            <el-form-item
              label="需求日期"
              prop="demandDate"
              :rules="{
                required: true,
                message: '请选择需求日期',
                trigger: 'blur',
              }"
            >
              <el-date-picker
                v-model="basicForm.demandDate"
                disabled
                clearable
                type="date"
                value-format="yyyy-MM-dd"
                @change="changeDemandDate"
                :size="size"
                style="width: 200px"
              >
              </el-date-picker>
            </el-form-item>
          </el-col>

          <el-col :span="1.5">
            <el-form-item label="制单日期" prop="createTime">
              <el-date-picker
                v-model="basicForm.createTime"
                disabled
                clearable
                type="date"
                value-format="yyyy-MM-dd"
                :size="size"
                style="width: 200px"
              >
              </el-date-picker>
            </el-form-item>
          </el-col>

          <el-col :span="1.5">
            <el-form-item label="是否客户指定">
              <el-select
                clearable
                @change="isCustomer"
                v-model="basicForm.isCustomerSpecified"
                :disabled="sonDisable"
                :size="size"
                style="width: 200px"
              >
                <el-option
                  v-for="item in dict.type.sys_yes_no"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value"
                >
                </el-option>
              </el-select>
            </el-form-item>
          </el-col>

          <el-col :span="1.5">
            <el-form-item label="备注">
              <el-input
                v-model.trim="basicForm.remark"
                :size="size"
                :disabled="sonDisable"
                clearable
                style="width: 200px"
              />
            </el-form-item>
          </el-col>

          <!-- <el-col :span="1.5">
            <el-form-item label="需求客户名称">
              <el-input disabled v-model="basicForm.customerName" :size="size" style="width: 200px"></el-input>
            </el-form-item>
          </el-col> -->

          <el-col :span="1.5">
            <el-form-item label="需求单号">
              <el-input
                v-model="basicForm.code"
                :size="size"
                disabled
                style="width: 200px"
              />
            </el-form-item>
          </el-col>

          <!-- <el-col :span="1.5">
            <el-form-item label="组织" prop="org" :rules="{ required: true, message: '请选择组织', trigger: 'blur' }">
              <el-select clearable :size="size" v-model="basicForm.org" :disabled="sonDisable" @focus="chooseOrg('ORG_PARAM', true, '选择组织')" style="width: 200px">
                <el-option v-for="item in orgOptions" :key="item.id" :label="item.name" :value="item.id" />
              </el-select>
            </el-form-item>
         </el-col> -->

          <el-col :span="1.5">
            <el-form-item label="单据状态">
              <el-select
                disabled
                v-model="basicForm.status"
                :size="size"
                style="width: 200px"
              >
                <el-option
                  v-for="dict in dict.type.sys_status"
                  :key="dict.value"
                  :label="dict.label"
                  :value="dict.value"
                >
                </el-option>
              </el-select>
            </el-form-item>
          </el-col>

          <el-col :span="1.5">
            <el-form-item label="客户负责人">
              <el-select
                disabled
                :size="size"
                v-model="basicForm.customerPrincipal"
                style="width: 200px"
              >
                <el-option
                  v-for="item in manOptions"
                  :key="item.id"
                  :label="item.name"
                  :value="item.code"
                />
              </el-select>
            </el-form-item>
          </el-col>

          <el-col :span="1.5">
            <el-form-item label="单据来源">
              <el-select
                v-model="basicForm.source"
                disabled
                :size="size"
                style="width: 200px"
              >
                <el-option
                  v-for="dict in dict.type.sys_bill_source"
                  :key="dict.value"
                  :label="dict.label"
                  :value="dict.value"
                >
                </el-option>
              </el-select>
            </el-form-item>
          </el-col>

          <el-col :span="1.5">
            <el-form-item label="是否超需求可用周期">
              <el-select
                v-model="basicForm.isBeyondRap"
                disabled
                :size="size"
                style="width: 200px"
              >
                <el-option
                  v-for="item in dict.type.sys_yes_no"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value"
                >
                </el-option>
              </el-select>
            </el-form-item>
          </el-col>
        </el-row>

        <div class="btn_grooup">
          <span>明细信息</span>
          <div>
            <el-button
              type="primary"
              :size="size"
              @click="addLine"
              v-if="!sonDisable"
              >增行</el-button
            >
            <el-button
              type="primary"
              :size="size"
              @click="delLines"
              v-if="!sonDisable"
              >删行</el-button
            >
            <el-button
              type="primary"
              :size="size"
              v-if="!sonDisable"
              @click.stop="adjustPl"
              >批量调整</el-button
            >
            <el-button
              type="primary"
              :size="size"
              v-if="sonPageStu == 'check' || sonPageStu == 'edit'"
              @click="showReserved"
              >货权预留单</el-button
            >
          </div>
        </div>

        <ux-grid
          v-loading="loading"
          :data="basicForm.puDemandItemList"
          border
          :cell-style="{ borderColor: '#c0c0c0' }"
          :header-cell-style="{ borderColor: '#c0c0c0' }"
          class="exporttable"
          height="410"
          max-height="410"
          style="font-size: 12px"
          @selection-change="handleSelectionChange"
          :cell-class-name="cellClassName"
          ref="table"
          :rules="tableRules"
          show-header-overflow="tooltip"
          show-overflow="tooltip"
          keep-source
          beautifyTable
          show-summary
          :summary-method="jisuan"
          :checkbox-config="{ highlight: true, trigger: 'row' }"
          :edit-config="{ trigger: 'click', mode: 'row' }"
          :validConfig="{ autoPos: true }"
        >
          >
          <ux-table-column resizable type="checkbox" fixed="left" />
          <!-- <ux-table-column resizable title="序号" type="index" align="center" width="50px"/> -->
          <ux-table-column
            resizable
            title="行号"
            align="center"
            field="rowNo"
            width="50px"
          >
            <template v-slot="scope">
              {{ (scope.row.rowNo = scope.rowIndex + 1 + "0") }}
            </template>
          </ux-table-column>
          <ux-table-column
            resizable
            title="默认采购组织"
            align="center"
            field="purOrgName"
            width="100px"
          />
          <ux-table-column
            resizable
            title="需求客户"
            align="center"
            field="demandCustomerName"
            width="100px"
          />
          <ux-table-column
            resizable
            title="行状态"
            align="center"
            field="status"
            :formatter="hangStatus"
            width="100px"
          />
          <ux-table-column
            resizable
            title="物料编码"
            align="center"
            field="materialCode"
            width="150px"
            :render-header="addRedStar"
            :edit-render="{ autofocus: '.el-input__inner' }"
          >
            <template v-slot:edit="scope">
              <el-input
                clearable
                :disabled="sonDisable"
                :size="size"
                v-model="scope.row.materialCode"
                @paste.native="pasteMe($event, scope, scope.rowIndex)"
              >
                <el-button
                  :size="size"
                  :disabled="sonDisable"
                  slot="append"
                  icon="el-icon-more"
                  @click="chooseMaterial(scope.rowIndex)"
                ></el-button>
              </el-input>
            </template>
          </ux-table-column>
          <ux-table-column
            resizable
            title="物料名称"
            align="center"
            field="materialName"
            width="100px"
          />
          <ux-table-column
            resizable
            title="规格"
            align="center"
            field="specification"
            width="50px"
          />
          <ux-table-column
            resizable
            title="型号"
            align="center"
            field="model"
            width="50px"
          />
          <ux-table-column
            resizable
            title="物料备注"
            align="center"
            field="materialRemark"
            width="150px"
          />
          <ux-table-column
            resizable
            title="单位"
            align="center"
            field="unitName"
            width="50px"
          />
          <ux-table-column
            resizable
            title="生产厂家/代理人"
            align="center"
            field="manufacturerName"
            width="100px"
          />
          <ux-table-column
            resizable
            title="最小包装"
            align="center"
            field="minPackage"
            width="80px"
          />
          <ux-table-column
            resizable
            title="月均销量"
            align="center"
            field="averageQtyMonth"
            width="80px"
          />
          <ux-table-column
            resizable
            title="需求可用周期"
            align="center"
            field="demandPeriod"
            width="80px"
          />
          <ux-table-column
            resizable
            title="实际(业务)需求量"
            align="center"
            field="qty"
            width="150px"
            :render-header="addRedStar"
            edit-render
          >
            <template v-slot:edit="scope">
              <el-input
                type="number"
                min="0"
                clearable
                :disabled="sonDisable"
                :size="size"
                v-model="scope.row.qty"
                @paste.native="pasteMe($event, scope, scope.rowIndex)"
              />
            </template>
          </ux-table-column>
          <ux-table-column
            resizable
            title="紧急标识"
            align="center"
            field="isUrgency"
            width="100px"
            edit-render
          >
            <template v-slot:edit="scope">
              <el-switch
                v-model="scope.row.isUrgency"
                :disabled="sonDisable"
                active-value="Y"
                inactive-value="N"
                active-color="#13ce66"
                inactive-color="#a1a3a9"
              >
              </el-switch>
            </template>
            <template v-slot="{ row }">{{
              row.isUrgency == "Y" ? "是" : "否"
            }}</template>
          </ux-table-column>
          <ux-table-column
            resizable
            title="收货仓库"
            align="center"
            field="deliveryWarehouseName"
            width="200px"
            edit-render
          >
            <template v-slot:edit="scope">
              <el-input
                clearable
                :disabled="sonDisable"
                :size="size"
                v-model="scope.row.deliveryWarehouseName"
                @clear="clearHang(scope.rowIndex, '选择收货仓库')"
              >
                <el-button
                  :size="size"
                  :disabled="sonDisable"
                  slot="append"
                  icon="el-icon-more"
                  @click="
                    chooseCangKu(
                      scope.rowIndex,
                      'WAREHOUSE_PARAM',
                      true,
                      '选择收货仓库',
                      scope.row.puOrg
                    )
                  "
                ></el-button>
              </el-input>
            </template>
          </ux-table-column>
          <ux-table-column
            resizable
            title="收货货位"
            align="center"
            field="deliveryAllocationName"
            width="200px"
            edit-render
          >
            <template v-slot:edit="scope">
              <el-input
                clearable
                :disabled="sonDisable"
                :size="size"
                v-model="scope.row.deliveryAllocationName"
                @clear="clearHang(scope.rowIndex, '选择收货货位')"
              >
                <el-button
                  :size="size"
                  :disabled="sonDisable"
                  slot="append"
                  icon="el-icon-more"
                  @click="
                    choosehuoWei(
                      scope.rowIndex,
                      'ALLOCATION_PARAM',
                      true,
                      '选择收货货位',
                      scope.row.deliveryWarehouse
                    )
                  "
                ></el-button>
              </el-input>
            </template>
          </ux-table-column>
          <ux-table-column
            resizable
            title="业务备注"
            align="center"
            field="remark"
            width="150px"
            edit-render
          >
            <template v-slot:edit="scope">
              <el-input
                clearable
                :disabled="sonDisable"
                :size="size"
                v-model="scope.row.remark"
              />
            </template>
          </ux-table-column>
          <ux-table-column
            resizable
            title="物料一级分类"
            align="center"
            field="materialClassifyOneName"
            width="100px"
          />
          <ux-table-column
            resizable
            title="物料二级分类"
            align="center"
            field="materialClassifyTwoName"
            width="100px"
          />
          <ux-table-column
            resizable
            title="物料三级分类"
            align="center"
            field="materialClassifyThreeName"
            width="100px"
          />
          <ux-table-column
            resizable
            title="物料四级分类"
            align="center"
            field="materialClassifyFourName"
            width="100px"
          />
          <ux-table-column
            resizable
            title="最小批量"
            align="center"
            field="minBatch"
            width="100px"
          />
          <ux-table-column
            resizable
            title="最小订货量"
            align="center"
            field="minOrderQty"
            width="100px"
          />
          <ux-table-column
            resizable
            title="采购员"
            align="center"
            field="buyerName"
            width="100px"
          />
          <!-- <ux-table-column resizable title="采购员" align="center"  field="buyer"/> -->
          <ux-table-column
            resizable
            title="采购周期"
            align="center"
            field="puPeriod"
            width="100px"
          />
          <ux-table-column
            resizable
            title="交货日期"
            align="center"
            field="deliveryDate"
            width="230px"
          >
            <!-- edit-render -->
            <template v-slot:edit="scope">
              <el-date-picker
                v-model="scope.row.deliveryDate"
                :disabled="sonDisable"
                clearable
                type="date"
                :size="size"
                value-format="yyyy-MM-dd"
                :picker-options="pickerOptionsEnd"
                placeholder="选择日期"
              >
              </el-date-picker>
            </template>
          </ux-table-column>
          <ux-table-column
            resizable
            title="有效期"
            align="center"
            field="expiry"
            width="100px"
          />
          <ux-table-column
            resizable
            title="有效期单位"
            align="center"
            field="expiryUnit"
            width="100px"
          />
          <!-- <ux-table-column resizable title="安全库存" align="center"  field="safeStock" width="100px"/> -->
          <ux-table-column
            resizable
            title="注册人"
            align="center"
            field="registrant"
            width="100px"
          />
          <!-- <ux-table-column resizable title="预留比例" align="center" field="reservedProportion" width="120px" edit-render>
            <template v-slot:edit="scope">
                <el-select clearable :disabled="sonDisable" :size="size" v-model="scope.row.reservedProportion" @clear="cleanYLSL(scope)">
                  <el-option v-for=" dict in dict.type.sys_reserve_ratio" :key="dict.value" :label="dict.label" :value="dict.value">
                  </el-option>
                </el-select>
            </template>
          </ux-table-column> -->
          <!-- <ux-table-column resizable title="预留周期" align="center" field="reservedPeriod" width="120px" edit-render>
            <template v-slot:edit="scope">
                <el-input type="number" min="0" onkeyup="this.value=this.value.replace(/\D/g,'')" onafterpaste="this.value=this.value.replace(/\D/g,'')" clearable :disabled="sonDisable" :size="size" v-model="scope.row.reservedPeriod"></el-input>
            </template>
          </ux-table-column>
          <ux-table-column resizable title="预留数量" align="center"  field="reservedQty" width="120px" edit-render>
            <template v-slot:edit="scope">
                <el-input type="number" min="0" onkeyup="this.value=this.value.replace(/\D/g,'')" onafterpaste="this.value=this.value.replace(/\D/g,'')"  @input="scope.row.reservedQty=Math.ceil(scope.row.reservedQty)" clearable :disabled="sonDisable" :size="size" v-model="scope.row.reservedQty"></el-input>
            </template>
          </ux-table-column> -->
          <ux-table-column
            resizable
            title="集团预测分类"
            align="center"
            field="forecastClassify"
            width="120px"
          />
          <ux-table-column
            resizable
            title="近一月需求"
            align="center"
            field="onemonthAvgVolume"
            width="100px"
          />
          <ux-table-column
            resizable
            title="近三月需求"
            align="center"
            field="threemonthAvgVolume"
            width="100px"
          />
          <ux-table-column
            resizable
            title="采购在途"
            align="center"
            field="puFreight"
            width="100px"
          />
          <ux-table-column
            resizable
            title="补单标识"
            align="center"
            field="isReplenishment"
            width="100px"
            edit-render
          >
            <template v-slot:edit="scope">
              <el-switch
                v-model="scope.row.isReplenishment"
                disabled
                active-value="Y"
                inactive-value="N"
                active-color="#13ce66"
                inactive-color="#a1a3a9"
              >
              </el-switch>
            </template>
            <template v-slot="{ row }">{{
              row.isReplenishment == "Y" ? "是" : "否"
            }}</template>
          </ux-table-column>
          <ux-table-column
            resizable
            title="补单供应商"
            align="center"
            field="additionalSupplierName"
            width="200px"
            :render-header="anotherRedStar"
            edit-render
          >
            <template v-slot:edit="scope">
              <el-input
                clearable
                :disabled="sonDisable || BDZT"
                :size="size"
                v-model="scope.row.additionalSupplierName"
                @clear="clearHang(scope.rowIndex, '选择补单供应商')"
                @paste.native="pasteMe($event, scope, scope.rowIndex)"
              >
                <el-button
                  :size="size"
                  :disabled="sonDisable || BDZT"
                  slot="append"
                  icon="el-icon-more"
                  @click="
                    chooseDept(
                      scope.rowIndex,
                      'SUPPLIER_PARAM',
                      true,
                      '选择补单供应商'
                    )
                  "
                ></el-button>
              </el-input>
            </template>
          </ux-table-column>
          <ux-table-column
            resizable
            title="末级供应库存组织"
            align="center"
            field="lastStockOrgName"
            width="180px"
          ></ux-table-column>
          <ux-table-column
            resizable
            title="末级供应仓库"
            align="center"
            field="lastWarehouseName"
            width="150px"
          />
          <ux-table-column
            resizable
            title="末级供应货位"
            align="center"
            field="lastAllocationName"
            width="150px"
          />
          <ux-table-column
            resizable
            title="中心仓可用量"
            align="center"
            field="centralWarehouseQty"
            width="120px"
          />
          <ux-table-column
            resizable
            title="调拨状态"
            align="center"
            field="statusAllot"
            width="100px"
            edit-render
          >
            <template v-slot:edit="scope">
              <el-switch
                v-model="scope.row.statusAllot"
                :disabled="sonDisable"
                active-value="Y"
                inactive-value="N"
                active-color="#13ce66"
                inactive-color="#a1a3a9"
              >
              </el-switch>
            </template>
            <template v-slot="{ row }">{{
              row.statusAllot == "Y" ? "是" : "否"
            }}</template>
          </ux-table-column>
          <ux-table-column
            resizable
            title="调拨单号"
            align="center"
            field="allotCode"
          ></ux-table-column>
          <ux-table-column
            resizable
            title="调拨占有量"
            align="center"
            field="allotQty"
            width="100px"
          />
          <ux-table-column
            resizable
            title="最终净需求量"
            align="center"
            field="resDemandQty"
            width="120px"
          />
          <ux-table-column
            resizable
            title="关闭数量"
            align="center"
            field="closeQty"
            width="80px"
          />
          <ux-table-column
            resizable
            title="最终采购执行数量"
            align="center"
            field="executeQty"
            width="150px"
          >
            <template v-slot:edit="scope">
              {{ scope.row.executeQty ? scope.row.executeQty : 0 }}
            </template>
          </ux-table-column>
          <ux-table-column
            resizable
            title="收货地址"
            align="center"
            field="deliveryAddressName"
            width="200px"
            edit-render
          >
            <template v-slot:edit="scope">
              <el-input
                clearable
                :disabled="sonDisable"
                :size="size"
                v-model="scope.row.deliveryAddressName"
                @clear="clearHang(scope.rowIndex, '选择收货地址')"
                @paste.native="pasteMe($event, scope, scope.rowIndex)"
              >
                <el-button
                  :size="size"
                  :disabled="sonDisable"
                  slot="append"
                  icon="el-icon-more"
                  @click="
                    chooseDept(
                      scope.rowIndex,
                      'ADDRESS_PARAM',
                      true,
                      '选择收货地址'
                    )
                  "
                ></el-button>
              </el-input>
            </template>
          </ux-table-column>
          <ux-table-column
            resizable
            title="联系人"
            align="center"
            field="contacts"
            width="100px"
          />
          <ux-table-column
            resizable
            title="联系人电话"
            align="center"
            field="contactsPhone"
            width="150px"
          />
          <ux-table-column
            resizable
            title="详细地址"
            align="center"
            field="address"
            width="150px"
          />
          <ux-table-column
            resizable
            title="价格类型"
            align="center"
            field="priceType"
            width="120px"
            edit-render
          >
            <template v-slot:edit="scope">
              <el-select
                clearable
                :disabled="sonDisable"
                :size="size"
                v-model="scope.row.priceType"
              >
                <el-option
                  v-for="dict in dict.type.sys_price_type"
                  :key="dict.value"
                  :label="dict.label"
                  :value="dict.value"
                >
                </el-option>
              </el-select>
            </template>
            <template v-slot="{ row }">{{
              row.priceType == "order"
                ? "订货价"
                : row.priceType == "consignment"
                ? "寄售价"
                : row.priceType == "adjusted"
                ? "调货价"
                : ""
            }}</template>
          </ux-table-column>
          <ux-table-column
            resizable
            title="是否客户指定"
            align="center"
            field="isCustomerSpecified"
            width="120px"
            edit-render
          >
            <template v-slot:edit="scope">
              <el-switch
                v-model="scope.row.isCustomerSpecified"
                disabled
                active-value="Y"
                inactive-value="N"
                active-color="#13ce66"
                inactive-color="#a1a3a9"
              >
              </el-switch>
            </template>
            <template v-slot="{ row }">{{
              row.isCustomerSpecified == "Y" ? "是" : "否"
            }}</template>
          </ux-table-column>
          <!-- <ux-table-column resizable title="批号锁定标识" align="center" field="isBatchLock" width="100px">
            <template v-slot:edit="scope">
              <el-form-item class="hang">
                  <el-switch
                    v-model="scope.row.isBatchLock"
                    :disabled="sonDisable"
                    active-value="Y"
                    inactive-value="N"
                    active-color="#13ce66"
                    inactive-color="#a1a3a9">
                  </el-switch>
              </el-form-item>
            </template>
          </ux-table-column> -->
          <ux-table-column
            resizable
            title="采购备注"
            align="center"
            field="updateCause"
            width="100px"
          />
          <ux-table-column
            resizable
            title="可用量"
            align="center"
            field="availableQty"
            width="100px"
          />

          <ux-table-column
            fixed="right"
            title="操作"
            width="100px"
            align="center"
          >
            <template slot-scope="scope">
              <el-button
                type="text"
                :size="size"
                :disabled="sonDisable"
                @click="delLine(scope.rowIndex, scope.row)"
                >删除</el-button
              >
            </template>
          </ux-table-column>
        </ux-grid>
      </el-form>
      <div class="btn_group">
        <el-button
          type="primary"
          :size="size"
          @click="jumpOA"
          v-if="
            sonPageStu == 'check' &&
            (row.status == '1' || row.status == '2') &&
            basicForm.flowId
          "
          >流程跳转</el-button
        >
        <el-button
          type="primary"
          :size="size"
          @click="copy"
          v-if="sonPageStu == 'check'"
          >复制</el-button
        >
        <el-button
          type="primary"
          :size="size"
          @click="editPage"
          v-if="sonPageStu == 'check' && row.status == '0'"
          >编辑</el-button
        >
        <el-button
          type="primary"
          :size="size"
          @click="save"
          v-if="sonPageStu == 'add' || sonPageStu == 'edit'"
          >保存</el-button
        >
        <el-button
          type="primary"
          :size="size"
          @click="submit"
          v-if="
            sonPageStu == 'check' && (row.status == '0' || row.status == '3')
          "
          >提交</el-button
        >
        <el-button :size="size" plain @click="back">返回</el-button>
      </div>
    </el-card>

    <Reserved
      v-if="dialog.config"
      :isVisible="dialog.config"
      :info="row"
      @updateReserved="updateReserved"
    />

    <Refers ref="refer" @doSubmit="selectionsToInput" :single="true" />

    <popDialog ref="materialRefer" @doSubmit="selectMaterial" :single="false" />

    <!-- 批量调整参数 -->
    <el-dialog
      title="批量调整"
      :visible.sync="adjust.open"
      @close="closeEvent"
      width="38%"
    >
      <el-row style="margin-bottom: 10px">
        <el-col :span="6" class="pltzTxt">默认采购组织</el-col>
        <el-col :span="14">
          <el-input
            class="pltzIpt"
            clearable
            :size="size"
            v-model="adjust.purOrgName"
            @clear="clearHang(0, 'cgzz')"
            @focus="chooseOrg('ORG_PARAM', true, '采购组织')"
          >
            <el-button
              :size="size"
              slot="append"
              icon="el-icon-more"
              @click="chooseOrg('ORG_PARAM', true, '采购组织')"
            ></el-button>
          </el-input>
        </el-col>
      </el-row>
      <el-row style="margin-bottom: 10px">
        <el-col :span="6" class="pltzTxt">价格类型</el-col>
        <el-col :span="14">
          <el-select
            class="pltzIpt"
            clearable
            :size="size"
            v-model="adjust.priceType"
          >
            <el-option
              v-for="dict in dict.type.sys_price_type"
              :key="dict.value"
              :label="dict.label"
              :value="dict.value"
            >
            </el-option>
          </el-select>
        </el-col>
      </el-row>
      <el-row style="margin-bottom: 10px">
        <el-col :span="6" class="pltzTxt">采购员</el-col>
        <el-col :span="14">
          <el-select
            class="pltzIpt"
            clearable
            :size="size"
            v-model="adjust.purchaseMan"
            @focus="chooseOrg('CONTACTS_PARAM', true, '采购员')"
          >
            <el-option
              v-for="item in purchaseManOptions"
              :key="item.id"
              :label="item.name"
              :value="item.code"
            />
          </el-select>
        </el-col>
      </el-row>
      <el-row style="margin-bottom: 10px">
        <el-col :span="6" class="pltzTxt">收货仓库</el-col>
        <el-col :span="14">
          <el-input
            class="pltzIpt"
            clearable
            :size="size"
            v-model="adjust.warehouseName"
            @clear="clearHang(0, 'shck')"
            @focus="
              adjustCangku('WAREHOUSE_PARAM', true, '收货仓库', adjust.puOrg)
            "
          >
            <el-button
              :size="size"
              slot="append"
              icon="el-icon-more"
              @click="
                adjustCangku('WAREHOUSE_PARAM', true, '收货仓库', adjust.puOrg)
              "
            ></el-button>
          </el-input>
        </el-col>
      </el-row>
      <el-row style="margin-bottom: 10px">
        <el-col :span="6" class="pltzTxt">收货货位</el-col>
        <el-col :span="14">
          <el-input
            class="pltzIpt"
            clearable
            :size="size"
            v-model="adjust.allocationName"
            @clear="clearHang(0, 'shhw')"
            @focus="
              adjustHuoWei(
                'ALLOCATION_PARAM',
                true,
                '收货货位',
                adjust.warehouse
              )
            "
          >
            <el-button
              :size="size"
              slot="append"
              icon="el-icon-more"
              @click="
                adjustHuoWei(
                  'ALLOCATION_PARAM',
                  true,
                  '收货货位',
                  adjust.warehouse
                )
              "
            ></el-button>
          </el-input>
        </el-col>
      </el-row>
      <el-row style="margin-bottom: 10px">
        <el-col :span="6" class="pltzTxt">补单供应商</el-col>
        <el-col :span="14">
          <el-input
            class="pltzIpt"
            clearable
            :disabled="sonDisable || BDZT"
            :size="size"
            @clear="clearHang(0, 'bdgys')"
            v-model="adjust.additionalSupplierName"
            @focus="chooseOrg('SUPPLIER_PARAM', true, '补单供应商')"
          >
            <el-button
              :size="size"
              :disabled="sonDisable || BDZT"
              slot="append"
              icon="el-icon-more"
              @click="chooseOrg('SUPPLIER_PARAM', true, '补单供应商')"
            ></el-button>
          </el-input>
        </el-col>
      </el-row>
      <el-row style="margin-bottom: 10px">
        <el-col :span="6" class="pltzTxt">业务备注</el-col>
        <el-col :span="14">
          <el-input
            class="pltzIpt"
            clearable
            :size="size"
            v-model="adjust.remark"
          />
        </el-col>
      </el-row>
      <el-row style="margin-bottom: 10px">
        <el-col :span="6" class="pltzTxt">收货地址</el-col>
        <el-col :span="14">
          <el-input
            class="pltzIpt"
            clearable
            :size="size"
            @clear="clearHang(0, 'shdz')"
            v-model="adjust.deliveryAddressName"
          >
            <el-button
              :size="size"
              slot="append"
              icon="el-icon-more"
              @click="chooseOrg('ADDRESS_PARAM', true, '收货地址')"
            ></el-button>
          </el-input>
        </el-col>
      </el-row>
      <el-row style="margin-bottom: 10px">
        <el-col :span="6" class="pltzTxt">收货地址编码</el-col>
        <el-col :span="14">
          <el-input
            class="pltzIpt"
            disabled
            clearable
            :size="size"
            v-model="adjust.deliveryAddress"
          />
        </el-col>
      </el-row>
      <el-row style="margin-bottom: 10px">
        <el-col :span="6" class="pltzTxt">联系人</el-col>
        <el-col :span="14">
          <el-input
            class="pltzIpt"
            disabled
            clearable
            :size="size"
            v-model="adjust.contacts"
          />
        </el-col>
      </el-row>
      <el-row style="margin-bottom: 10px">
        <el-col :span="6" class="pltzTxt">联系人电话</el-col>
        <el-col :span="14">
          <el-input
            class="pltzIpt"
            disabled
            clearable
            :size="size"
            v-model="adjust.contactsPhone"
          />
        </el-col>
      </el-row>
      <el-row style="margin-bottom: 10px">
        <el-col :span="6" class="pltzTxt">详细地址</el-col>
        <el-col :span="14">
          <el-input
            class="pltzIpt"
            disabled
            clearable
            :size="size"
            v-model="adjust.address"
          />
        </el-col>
      </el-row>
      <div slot="footer">
        <el-button :size="size" type="primary" @click="confirmAdjust"
          >确 认</el-button
        >
        <el-button :size="size" @click="adjust.open = false">取 消</el-button>
      </div>
    </el-dialog>
  </div>
</template>

<script>
import {
  addDemand,
  getDemandDetail,
  getDemandSonDetail,
  editDemand,
  submitDemand,
  queryMan,
  toOA,
  confirmSubmit,
  SetdemandDate,
} from "@/api/purchase/purchaseDemand.js";
// 用于回显参照框数据
import { getRefer } from "@/api/purchase/basic.js";
import ElTableInfiniteScroll from "el-table-infinite-scroll";
import "regenerator-runtime/runtime";
export default {
  directives: {
    "el-table-infinite-scroll": ElTableInfiniteScroll,
  },
  name: "addDemandList",
  props: ["pageStu", "row", "disable"],
  dicts: [
    "sys_yes_no",
    "sys_processing_mode",
    "sys_plan_type",
    "sys_status",
    "sys_bill_source",
    "sys_business",
    "sys_reserve_ratio",
    "sys_period_unit",
    "sys_price_type",
  ],
  components: {
    Reserved: () => import("./reserved/index.vue"),
    Refers: () => import("@/components/Refers/refers.vue"),
    popDialog: () => import("@/components/PopDialog/index.vue"),
  },
  model: {
    prop: "isList",
    event: "jugislist",
  },
  data() {
    return {
      size: "mini",
      loading: true,
      // 不能直接改变props传来的值
      sonPageStu: this.pageStu,
      sonDisable: this.disable,
      // BDZT是补单供应商是否可以编辑条件
      BDZT: true,
      dialog: {
        config: false,
      },
      basicForm: {
        code: "",
        org: "",
        orgName: "",
        demandBusinessType: "1",
        status: "0",
        customer: "",
        customerName: "",
        customerCode: "",
        customerPrincipal: "",
        demandPersonal: "",
        demandPersonalName: "",
        demandDept: "",
        demandDeptName: "",
        planType: "ZJH",
        demandDate: "",
        source: "4",
        isBeyondRap: "",
        billType: "ZQBH",
        isCustomerSpecified: "N",
        isProcess: "",
        isMonthleyCalculate: "",
        createTime: this.parseTime(new Date().getTime()),
        remark: "",
        puDemandItemList: [],
      },
      delDemandItemList: [],
      basicRules: {},
      tableList: [],
      referCondition: {
        type: "",
        isPage: true,
        title: "",
      },
      // referCondition: {
      //   type: '',
      //   isPage: true,
      //   title: '',
      // },
      tableIndex: null,
      ids: [],
      orgOptions: [],
      manOptions: [],
      personOptions: [],
      deptOptions: [],
      customerOptions: [],
      pickerOptionsEnd: {
        disabledDate: (time) => {
          return (
            time.getTime() <
            new Date(this.basicForm.demandDate).getTime() - 8.64e7
          );
        },
      },
      isBDXQ: false,
      isYl: false,
      // 批量调整参数
      adjust: {
        open: false,
        puOrg: "",
        purOrgName: "",
        priceType: "",
        purchaseMan: "",
        purchaseManName: "",
        warehouse: "",
        warehouseName: "",
        csFlag: "",
        allocation: "",
        allocationName: "",
        additionalSupplier: "",
        additionalSupplierName: "",
        remark: "",
        deliveryAddress: "",
        deliveryAddressName: "",
        contacts: "",
        contactsPhone: "",
        address: "",
      },
      purchaseManOptions: [],
      sonModel: {
        rowNo: null,
        contacts: null,
        id: null,
        demandId: null,
        status: null,
        materialCategory: null,
        buyer: null,
        buyerName: null,
        mateiralClassifyOne: null,
        materialClassifyOneName: null,
        materialClassifyTwo: null,
        materialClassifyTwoName: null,
        materialClassifyThree: null,
        materialClassifyThreeName: null,
        materialClassifyFour: null,
        materialClassifyFourName: null,
        materialCode: null,
        material: null,
        materialName: null,
        classifyId: null,
        specification: null,
        unit: null,
        unitName: null,
        manufacturerName: null,
        registrant: null,
        puPeriod: null,
        expiryUnit: null,
        expiry: null,
        minPackage: null,
        minOrderQty: null,
        minBatch: null,
        safeStock: null,
        averageQtyMonth: null,
        qty: null,
        adjustmentPersonal: null,
        adjustmentTime: null,
        manualRegulation: null,
        updateCause: null,
        reservedProportion: null,
        reservedPeriod: null,
        reservedQty: null,
        demandPeriod: null,
        forecastClassify: null,
        onemonthAvgVolume: null,
        threemonthAvgVolume: null,
        puFreight: null,
        deliveryDate: null,
        isUrgency: "N",
        isReplenishment: "N",
        isBatchLock: "N",
        isCustomerSpecified: "",
        remark: null,
        puRemark: null,
        lastWarehouseQty: null,
        resDemandQty: null,
        lastWarehouse: null,
        lastWarehouseName: null,
        deliveryWarehouse: null,
        deliveryWarehouseName: null,
        lastAllocation: null,
        lastAllocationName: null,
        deliveryAllocation: null,
        deliveryAllocationName: null,
        passageOn: null,
        puOrg: null,
        purOrgName: null,
        lastStockQty: null,
        superiorCenterQty: null,
        superiorAllotQty: null,
        availableQty: null,
        statusAllot: "N",
        additionalSupplier: null,
        additionalSupplierName: null,
        periodUnit: null,
        demandCustomer: null,
        demandCustomerName: null,
        lastStockOrg: null,
        lastStockOrgName: null,
        superiorStockOrg: null,
        superiorStockOrgName: null,
        allotCode: null,
        deliveryAddress: null,
        deliveryAddressName: null,
        contacts: null,
        contactsPhone: null,
        address: null,
        source: null,
        priceType: "order",
        puManagerApprover: null,
        puManagerApproverName: null,
        processTime: null,
        affirmer: null,
        tenantId: null,
        revision: null,
        createBy: null,
        createByName: null,
        createTime: null,
        updateBy: null,
        updateByName: null,
        updateTime: null,
        delFlag: 0,
        csFlag: "N",
        // 新增字段
        model: null,
        storageCondition: null,
        transportationCondition: null,
      },
      // 无限滚动配置
      loadDisabled: true,
      page: 0,
      total: 5,
      // 表格校验规则
      tableRules: {
        materialCode: [{ required: true, message: "物料编码必填" }],
        qty: [{ required: true, message: "实际业务需求量必填" }],
      },
    };
  },
  watch: {
    // "basicForm.demandDate": {
    //   handler(nVal, oVal) {
    //     if (nVal && nVal !== "") {
    //       交货日期=需求日期+采购周期+2    且不允许修改
    //       let { puDemandItemList } = this.basicForm;
    //       this.basicForm.puDemandItemList = puDemandItemList.map((item) => {
    //         let deliveryDate = new Date(
    //           new Date(nVal).setDate(
    //             new Date(nVal).getDate() + Number(item.puPeriod) + 2
    //           )
    //         ).Format("yyyy-MM-dd");
    //         return {
    //           ...item,
    //           deliveryDate,
    //         };
    //       });
    //     }
    //   },
    // },
  },
  created() {
    if (this.pageStu == "check") {
      this.getDetails(this.row);
    } else if (this.pageStu == "edit") {
      this.getDetails(this.row);
    } else if (this.pageStu == "add") {
      // 新增时判断需求日期
      this.dafaultDate();
      this.loading = false;
      this.basicForm.demandPersonal = this.$store.state.user.name;
      this.basicForm.demandPersonalName = this.$store.state.user.nickName;
      this.basicForm.demandDept = this.$store.state.user.deptId;
      this.basicForm.demandDeptName = this.$store.state.user.deptName;
      if (this.basicForm.demandPersonal) {
        this.reBackRefer(
          "CONTACTS_PARAM",
          this.basicForm.demandPersonal,
          "需求人员"
        );
      }
      if (this.basicForm.demandDept) {
        this.reBackRefer("DEPT_PARAM", this.basicForm.demandDept);
      }
    }
  },
  methods: {
    // 默认需求日期根据当天星期几判断
    async dafaultDate() {
      try {
        let { planType, demandDate } = this.basicForm;
        console.log();
        let { code, data } = await SetdemandDate({ planType });
        if (code == 200) {
          this.basicForm.demandDate = new Date(data).Format("yyyy-MM-dd");
        }
      } catch (error) {}
    },

    // 改变需求计划改变需求日期
    changeplanType(val) {
      this.dafaultDate();
      console.log(val);
      if (val == "JJXQ") {
        this.basicForm.billType = "JJXQ";
      } else {
        if (this.basicForm.billType == "JJXQ") {
          this.basicForm.billType = "";
        }
      }

      if (val == "JJXQ" && this.basicForm.puDemandItemList.length != 0) {
        this.basicForm.puDemandItemList.forEach((item) => {
          item.isUrgency = "Y";
        });
      } else {
        this.basicForm.puDemandItemList.forEach((item) => {
          item.isUrgency = "N";
        });
      }
    },
    // 无限滚动加载配置
    load() {
      if (this.loadDisabled) return;
      this.page++;
      if (this.page <= this.total) {
        this.basicForm.puDemandItemList =
          this.basicForm.puDemandItemList.concat(
            this.basicForm.puDemandItemList
          );
      }
      if (this.page === this.total) {
        this.loadDisabled = true;
      }
    },
    // 改变单据日期时清空子表的调拨日期
    changeDemandDate() {
      this.basicForm.puDemandItemList.forEach((item) => {
        item.deliveryDate = null;
      });
    },
    // 更改业务类型调整明细行内补单或紧急标识
    changeBillType(val) {
      if (val == "BDXQ" && this.basicForm.puDemandItemList.length != 0) {
        this.isBDXQ = true;
        this.BDZT = false;
        this.basicForm.puDemandItemList.forEach((item) => {
          item.isReplenishment = "Y";
        });
      } else {
        this.isBDXQ = false;
        this.BDZT = true;
        this.basicForm.puDemandItemList.forEach((item) => {
          item.isReplenishment = "N";
          item.additionalSupplier = null;
          item.additionalSupplierName = null;
        });
      }
      if (val == "JJXQ") {
        this.basicForm.planType = "JJXQ";
        // 判断需求日期
        this.dafaultDate();
      } else {
        if (this.basicForm.planType == "JJXQ") {
          this.basicForm.planType = "";
        }
      }
      if (val == "JJXQ" && this.basicForm.puDemandItemList.length != 0) {
        this.basicForm.puDemandItemList.forEach((item) => {
          item.isUrgency = "Y";
        });
      } else {
        this.basicForm.puDemandItemList.forEach((item) => {
          item.isUrgency = "N";
        });
      }
    },
    // 改变是否客户指定
    isCustomer() {
      if (
        this.basicForm.isCustomerSpecified == "Y" &&
        this.basicForm.puDemandItemList.length != 0
      ) {
        this.basicForm.puDemandItemList.forEach((item) => {
          item.isCustomerSpecified = "Y";
        });
      } else {
        this.basicForm.puDemandItemList.forEach((item) => {
          item.isCustomerSpecified = "N";
        });
      }
    },
    hangStatus(row) {
      switch (row.row.status) {
        case "0":
          return "需补货";
        case "1":
          return "待计划确认";
        case "2":
          return "计划已确认";
        case "3":
          return "计划已审核";
        case "4":
          return "行关闭";
        case "5":
          return "总供应可满足";
      }
    },
    // 清空
    cleanYLSL(scope) {
      scope.row.reservedQty = "";
      scope.row.reservedPeriod = "";
    },
    copy() {
      this.$modal.notifySuccess("复制成功");
      this.sonPageStu = "add";
      this.sonDisable = false;
      // this.getDetails(this.row)
      this.basicForm.id = "";
      this.basicForm.code = "";
      this.basicForm.createBy = "";
      this.basicForm.source = "4";
      this.basicForm.isCustomerSpecified = "N";
      this.basicForm.flowId = "";
      this.basicForm.demandPersonal = this.$store.state.user.name;
      this.basicForm.demandPersonalName = this.$store.state.user.nickName;
      this.basicForm.demandDept = this.$store.state.user.deptId;
      this.basicForm.demandDeptName = this.$store.state.user.deptName;
      // 复制时判断需求日期
      this.dafaultDate();
      if (this.basicForm.demandPersonal) {
        this.reBackRefer(
          "CONTACTS_PARAM",
          this.basicForm.demandPersonal,
          "需求人员"
        );
      }
      if (this.basicForm.demandDept) {
        this.reBackRefer("DEPT_PARAM", this.basicForm.demandDept);
      }
      this.basicForm.puDemandItemList.forEach((item) => {
        item.status = "";
        item.buyerName = "";
        item.buyer = "";
        item.reservedProportion = "";
        item.reservedPeriod = "";
        item.reservedQty = "";
        item.averageQtyMonth = "";
        item.demandPeriod = "";
        item.forecastClassify = "";
        item.onemonthAvgVolume = "";
        item.threemonthAvgVolume = "";
        item.puFreight = "";
        item.superiorAllotQty = "";
        item.resDemandQty = "";
        item.executeQty = "";
        item.deliveryWarehouseName = "";
        item.deliveryWarehouse = "";
        item.deliveryAllocationName = "";
        item.deliveryAllocation = "";
        item.lastWarehouseName = "";
        item.lastAllocationName = "";
        item.availableQty = "";
        item.lastStockOrgName = "";
        item.centralWarehouseQty = "";
        item.allotCode = "";
        item.allotQty = "";
        item.deliveryAddress = "";
        item.deliveryAddressName = "";
        item.contacts = "";
        item.contactsPhone = "";
        item.address = "";
        item.statusAllot = "N";
        item.puManagerApprover = "";
        item.puManagerApproverName = "";
      });
      this.dafaultDate();
    },
    editPage() {
      this.sonPageStu = "edit";
      this.sonDisable = false;
    },
    handleData() {
      // 复制新增把id,需求单号,创建人置为空,子表去掉id
      this.basicForm.id = "";
      this.basicForm.code = "";
      this.basicForm.createBy = "";
      this.basicForm.source = "4";
      if (this.basicForm.puDemandItemList.length !== 0) {
        this.basicForm.puDemandItemList.forEach((item) => {
          if (item.id) {
            delete item.id;
          }
          if (item.demandId) {
            delete item.demandId;
          }
          if (item.allotCode) {
            delete item.allotCode;
          }
        });
      }
    },
    async save() {
      console.log(this.basicForm, "this.basicForm");
      if (this.basicForm.puDemandItemList.length !== 0) {
        this.$refs["basic"].validate((valid, obj) => {
          if (valid) {
            // 加上表格校验
            this.$refs.table.fullValidate().then((data) => {
              if (!data) {
                this.$modal.loading("保存中...");
                if (this.sonPageStu == "add") {
                  this.handleData();
                  addDemand(this.basicForm)
                    .then((res) => {
                      if (res.code === 200) {
                        this.$modal.notifySuccess(res.msg);
                        this.$modal.closeLoading();
                        this.back();
                      }
                    })
                    .catch((err) => {
                      // 加入定时器防止报错关不掉遮罩
                      setTimeout(() => {
                        let errorList = JSON.parse(err.message).rowList;
                        console.log(errorList);
                        this.gainRed(errorList);
                      }, 500);
                      this.$modal.closeLoading();
                    });
                } else if (this.sonPageStu == "edit") {
                  let list = [];
                  list.push(
                    ...this.basicForm.puDemandItemList,
                    ...this.delDemandItemList
                  );
                  // 深拷贝一下参数对象
                  let param = JSON.parse(JSON.stringify(this.basicForm));
                  param.puDemandItemList = list;
                  // this.basicForm.puDemandItemList.push(...this.delDemandItemList)
                  editDemand(param)
                    .then((res) => {
                      if (res.code === 200) {
                        this.$modal.notifySuccess(res.msg);
                        this.$modal.closeLoading();
                        this.back();
                      }
                    })
                    .catch((err) => {
                      // 加入定时器防止报错关不掉遮罩
                      setTimeout(() => {
                        let errorList = JSON.parse(err.message).rowList;
                        // console.log(errorList)
                        this.gainRed(errorList);
                      }, 500);
                      this.$modal.closeLoading();
                    });
                }
              } else {
                let masStr = "";
                Object.values(data).forEach((errList) => {
                  // 将子表下标加入进入标识字段
                  this.basicForm.puDemandItemList.forEach((item, index) => {
                    item.rightIndex = index;
                  });
                  console.log("所有列表", this.basicForm.puDemandItemList);
                  // 将校验未通过的项与整个表格数据进行过滤对比，得出校验通过的数据
                  let rightList = this.basicForm.puDemandItemList.filter(
                    (item, index) => {
                      return errList.find((item2) => {
                        return item2.rowIndex !== item.rightIndex;
                      });
                    }
                  );
                  rightList.forEach((items) => {
                    if (
                      this.$refs.table.$el.querySelector(
                        `.elx-body--row:nth-of-type(${items.rightIndex + 1})`
                      )
                    ) {
                      this.$refs.table.$el.querySelector(
                        `.elx-body--row:nth-of-type(${items.rightIndex + 1})`
                      ).style.background = "";
                    }
                  });

                  errList.forEach((params) => {
                    let { rowIndex, column, rules } = params;
                    rules.forEach((rule) => {
                      masStr += `第 ${rowIndex + 1} 行${rule.message};`;
                    });
                    if (
                      this.$refs.table.$el.querySelector(
                        `.elx-body--row:nth-of-type(${rowIndex + 1})`
                      )
                    ) {
                      this.$refs.table.$el.querySelector(
                        `.elx-body--row:nth-of-type(${rowIndex + 1})`
                      ).style.background = "#f34b4bb8";
                    }
                  });
                });
                this.$modal.notifyError(masStr);
              }
            });
          } else {
            // 校验加弹窗
            const jiaoyan = [];
            for (let key in obj) {
              jiaoyan.push(obj[key][0].message);
            }
            this.$modal.notifyWarning(jiaoyan[0]);
            return false;
          }
        });
      } else {
        this.$modal.notifyWarning("明细信息不能为空！");
      }
    },
    // 后端校验标红方法
    gainRed(errList) {
      // 将子表下标加入进入标识字段
      this.basicForm.puDemandItemList.forEach((item, index) => {
        item.rightIndex = index;
      });
      console.log("所有列表", this.basicForm.puDemandItemList);
      // 将校验未通过的项与整个表格数据进行过滤对比，得出校验通过的数据
      let rightList = this.basicForm.puDemandItemList.filter((item, index) => {
        return errList.find((item2) => {
          return item2.rowIndex !== item.rightIndex;
        });
      });
      rightList.forEach((items) => {
        if (
          this.$refs.table.$el.querySelector(
            `.elx-body--row:nth-of-type(${items.rightIndex + 1})`
          )
        ) {
          this.$refs.table.$el.querySelector(
            `.elx-body--row:nth-of-type(${items.rightIndex + 1})`
          ).style.background = "";
        }
      });
      errList.forEach((item) => {
        if (
          this.$refs.table.$el.querySelector(
            `.elx-body--row:nth-of-type(${item / 10})`
          )
        ) {
          this.$refs.table.$el.querySelector(
            `.elx-body--row:nth-of-type(${item / 10})`
          ).style.background = "#f34b4bb8";
        }
      });
    },
    submit() {
      this.$modal.loading("提交中...");
      submitDemand(this.basicForm)
        .then((res) => {
          if (res.code === 200) {
            this.$modal.notifySuccess("提交成功");
            this.$modal.closeLoading();
            this.back();
          }
          if (res.code === 233) {
            this.$modal
              .confirm(res.msg)
              .then(function () {
                // 确认
              })
              .then(() => {
                confirmSubmit(this.basicForm)
                  .then((res) => {
                    if (res.code === 200) {
                      this.$modal.notifySuccess("提交成功");
                      this.$modal.closeLoading();
                      this.back();
                    }
                  })
                  .catch((err) => {
                    this.$modal.closeLoading();
                  });
                // 取消
              })
              .catch(() => {
                this.$modal.closeLoading();
              });
            this.$modal.closeLoading();
          }
        })
        .catch((err) => {
          // 加入定时器防止报错关不掉遮罩
          setTimeout(() => {
            let errorList = JSON.parse(err.message).rowList;
            console.log(errorList);
            this.gainRed(errorList);
          }, 500);
          this.$modal.closeLoading();
        });
    },
    // 增行
    addLine() {
      const newLine = { ...this.sonModel };
      newLine.isUrgency = this.basicForm.billType == "JJXQ" ? "Y" : "N";
      newLine.isReplenishment = this.basicForm.billType == "BDXQ" ? "Y" : "N";
      newLine.demandCustomer = this.basicForm.customer;
      newLine.demandCustomerName = this.basicForm.customerName;
      this.basicForm.puDemandItemList.push(newLine);
      // 补单需求状态改变
      if (this.basicForm.billType == "BDXQ") {
        this.BDZT = false;
      } else {
        this.BDZT = true;
      }
    },
    delLine(index, row) {
      row.delFlag = "2";
      let delList = [];
      delList = this.basicForm.puDemandItemList.filter((item) => {
        return item.delFlag == "2";
      });
      this.basicForm.puDemandItemList = this.basicForm.puDemandItemList.filter(
        (item) => {
          return item.delFlag == "0";
        }
      );
      this.delDemandItemList.push(...delList);
      console.log("删除的数组", this.delDemandItemList);
    },
    // 批量删除行
    delLines() {
      let delArr = this.$refs.table.getCheckboxRecords();
      if (delArr.length !== 0) {
        delArr.forEach((item) => {
          item.delFlag = "2";
        });
        let delList = [];
        delList = this.basicForm.puDemandItemList.filter((item) => {
          return item.delFlag == "2";
        });
        this.basicForm.puDemandItemList =
          this.basicForm.puDemandItemList.filter((item) => {
            return item.delFlag == "0";
          });
        this.delDemandItemList.push(...delList);
      } else {
        this.$modal.notifyWarning("请至少选择一条明细！");
      }
    },
    back() {
      this.$emit("jugislist", true);
      this.$emit("refresh");
    },
    // 如果需要回显则调用详情接口
    getDetails(row) {
      getDemandDetail(row.id).then((res) => {
        if (res.code === 200) {
          // this.basicForm = res.data
          let reciveForm = res.data;
          let params = { ...{ id: row.id }, ...{ pageNum: 1, pageSize: 10 } };
          getDemandSonDetail(params)
            .then((res) => {
              if (res.code === 200) {
                reciveForm.puDemandItemList = res.data;
                console.log("reciveForm", reciveForm);
                this.basicForm = reciveForm;
                if (this.basicForm.org) {
                  this.reBackRefer("ORG_PARAM", this.basicForm.org);
                }
                if (this.basicForm.customer) {
                  this.reBackRefer("CUSTOMER_PARAM", this.basicForm.customer);
                }
                if (this.basicForm.customerPrincipal) {
                  this.reBackRefer(
                    "CONTACTS_PARAM",
                    this.basicForm.customerPrincipal,
                    "客户负责人"
                  );
                }
                if (this.basicForm.demandPersonal) {
                  this.reBackRefer(
                    "CONTACTS_PARAM",
                    this.basicForm.demandPersonal,
                    "需求人员"
                  );
                }
                if (this.basicForm.demandDept) {
                  this.reBackRefer("DEPT_PARAM", this.basicForm.demandDept);
                }
                // 详情时将收货仓库id赋值给stordocId
                // 如果业务类型为补单需求，则明细内补单供应商编码可以编辑
                if (this.basicForm.billType == "BDXQ") {
                  this.BDZT = false;
                  this.isBDXQ = true;
                } else {
                  this.BDZT = true;
                  this.isBDXQ = false;
                }
              }
            })
            .then(() => {
              this.loading = false;
              if (this.pageStu == "edit") {
                this.dafaultDate();
              }
            })
            .catch((err) => {
              this.loading = false;
            });
        }
      });
    },
    // 单元格标红
    cellClassName({ row, column, rowIndex, columnIndex }) {
      if (
        this.basicForm.isCustomerSpecified == "N" &&
        column.title == "需求可用周期" &&
        Number(row.demandPeriod) > 1.5 &&
        Number(row.qty) > Number(row.minOrderQty)
      ) {
        return "success-row";
      }
    },
    handleSelectionChange(selection) {
      this.ids = selection.map((item) => {
        return item.id;
      });
      console.log("选中数组", this.ids);
    },
    rowSelect(row) {
      this.$refs.table.toggleRowSelection(row);
    },
    // 点击预留单展示
    showReserved() {
      this.dialog.config = true;
    },
    // 修改是否让页面显示与隐藏的事件
    updateReserved(val) {
      this.dialog.config = val;
    },
    // 回显参照框
    reBackRefer(type, id, title) {
      getRefer({ type: type, id: id }).then((res) => {
        if (type == "ORG_PARAM") {
          this.orgOptions = res.rows;
        }
        if (type == "CUSTOMER_PARAM") {
          this.customerOptions = res.rows;
        }
        if (type == "CONTACTS_PARAM" && title == "需求人员") {
          this.personOptions = res.rows;
        }
        if (type == "CONTACTS_PARAM" && title == "客户负责人") {
          this.manOptions = res.rows;
        }
        if (type == "DEPT_PARAM") {
          this.deptOptions = res.rows;
        }
      });
    },
    chooseOrg(type, isPage, title) {
      this.referCondition.type = type;
      this.referCondition.isPage = isPage;
      this.referCondition.title = title;
      this.$refs.refer.init(this.referCondition);
    },
    selectionsToInput(selection) {
      if (
        this.referCondition.type == "ORG_PARAM" &&
        this.referCondition.title == "选择组织"
      ) {
        this.orgOptions = selection;
        this.basicForm.org = selection[0].id;
        this.basicForm.orgName = selection[0].name;
      }
      if (
        this.referCondition.type == "CUSTOMER_PARAM" &&
        this.referCondition.title == "选择客户"
      ) {
        this.customerOptions = selection;
        this.basicForm.customer = selection[0].id;
        this.basicForm.customerName = selection[0].name;
        this.basicForm.customerCode = selection[0].code;
        if (this.basicForm.puDemandItemList.length !== 0) {
          this.basicForm.puDemandItemList.forEach((item) => {
            item.demandCustomerName = this.basicForm.customerName;
            item.demandCustomer = this.basicForm.customer;
            item.status = "";
            item.buyerName = "";
            item.buyer = "";
            item.reservedProportion = "";
            item.reservedPeriod = "";
            item.reservedQty = "";
            item.averageQtyMonth = "";
            item.demandPeriod = "";
            item.forecastClassify = "";
            item.onemonthAvgVolume = "";
            item.threemonthAvgVolume = "";
            item.puFreight = "";
            item.superiorAllotQty = "";
            item.resDemandQty = "";
            item.executeQty = "";
            item.deliveryWarehouseName = "";
            item.deliveryWarehouse = "";
            item.deliveryAllocationName = "";
            item.deliveryAllocation = "";
            item.lastWarehouseName = "";
            item.lastAllocationName = "";
            item.availableQty = "";
            item.lastStockOrgName = "";
            item.centralWarehouseQty = "";
            item.allotCode = "";
            item.deliveryAddress = "";
            item.deliveryAddressName = "";
            item.contacts = "";
            item.contactsPhone = "";
            item.address = "";
          });
        }
      }
      if (
        this.referCondition.type == "CONTACTS_PARAM" &&
        this.referCondition.title == "需求人员"
      ) {
        this.personOptions = selection;
        this.basicForm.demandPersonal = selection[0].code;
        this.basicForm.demandPersonalName = selection[0].name;
      }
      if (
        this.referCondition.type == "ORG_PARAM" &&
        this.referCondition.title == "采购组织"
      ) {
        this.adjust.puOrg = selection[0].id;
        this.adjust.purOrgName = selection[0].name;
      }
      if (
        this.referCondition.type == "CONTACTS_PARAM" &&
        this.referCondition.title == "采购员"
      ) {
        this.purchaseManOptions = selection;
        this.adjust.purchaseMan = selection[0].code;
        this.adjust.purchaseManName = selection[0].name;
      }
      if (
        this.referCondition.type == "SUPPLIER_PARAM" &&
        this.referCondition.title == "补单供应商"
      ) {
        this.adjust.additionalSupplier = selection[0].id;
        this.adjust.additionalSupplierName = selection[0].name;
      }
      if (
        this.referCondition.type == "WAREHOUSE_PARAM" &&
        this.referCondition.title == "收货仓库"
      ) {
        this.adjust.warehouse = selection[0].id;
        this.adjust.warehouseName = selection[0].name;
        this.adjust.csFlag = selection[0].csFlag;
        this.adjust.allocation = "";
        this.adjust.allocationName = "";
        this.adjust.deliveryAddressName = "";
        this.adjust.deliveryAddress = "";
        this.adjust.contacts = "";
        this.adjust.contactsPhone = "";
        this.adjust.address = "";
        // 选择完清空参数里面的组织id
        this.referCondition.pkOrg = "";
      }
      if (
        this.referCondition.type == "ALLOCATION_PARAM" &&
        this.referCondition.title == "收货货位"
      ) {
        this.adjust.allocation = selection[0].id;
        this.adjust.allocationName = selection[0].name;
      }
      if (
        this.referCondition.type == "ADDRESS_PARAM" &&
        this.referCondition.title == "收货地址"
      ) {
        this.adjust.deliveryAddressName = selection[0].name;
        this.adjust.deliveryAddress = selection[0].code;
        this.adjust.contacts = selection[0].contactsName;
        this.adjust.contactsPhone = selection[0].contactsPhone;
        this.adjust.address = selection[0].address;
      }
      if (this.referCondition.type == "DEPT_PARAM") {
        this.deptOptions = selection;
        this.basicForm.demandDept = selection[0].id;
        this.basicForm.demandDeptName = selection[0].name;
      }
      if (this.referCondition.title == "选择收货仓库") {
        this.basicForm.puDemandItemList[this.tableIndex].deliveryWarehouse =
          selection[0].id;
        this.basicForm.puDemandItemList[this.tableIndex].deliveryWarehouseName =
          selection[0].name;
        this.basicForm.puDemandItemList[this.tableIndex].csFlag =
          selection[0].csFlag;
        this.basicForm.puDemandItemList[this.tableIndex].deliveryAllocation =
          null;
        this.basicForm.puDemandItemList[
          this.tableIndex
        ].deliveryAllocationName = null;
        this.basicForm.puDemandItemList[this.tableIndex].deliveryAddressName =
          null;
        this.basicForm.puDemandItemList[this.tableIndex].deliveryAddress = null;
        this.basicForm.puDemandItemList[this.tableIndex].contacts = null;
        this.basicForm.puDemandItemList[this.tableIndex].contactsPhone = null;
        this.basicForm.puDemandItemList[this.tableIndex].address = null;
        // 选择完清空参数里面的组织id
        this.referCondition.pkOrg = "";
      }
      if (this.referCondition.title == "选择收货货位") {
        this.basicForm.puDemandItemList[this.tableIndex].deliveryAllocation =
          selection[0].id;
        this.basicForm.puDemandItemList[
          this.tableIndex
        ].deliveryAllocationName = selection[0].name;
      }
      if (this.referCondition.title == "选择补单供应商") {
        this.basicForm.puDemandItemList[this.tableIndex].additionalSupplier =
          selection[0].id;
        this.basicForm.puDemandItemList[
          this.tableIndex
        ].additionalSupplierName = selection[0].name;
      }
      if (this.referCondition.title == "选择收货地址") {
        this.basicForm.puDemandItemList[this.tableIndex].deliveryAddressName =
          selection[0].name;
        this.basicForm.puDemandItemList[this.tableIndex].deliveryAddress =
          selection[0].id;
        this.basicForm.puDemandItemList[this.tableIndex].contacts =
          selection[0].contactsName;
        this.basicForm.puDemandItemList[this.tableIndex].contactsPhone =
          selection[0].contactsPhone;
        this.basicForm.puDemandItemList[this.tableIndex].address =
          selection[0].address;
      }
    },
    // 粘贴来的数据
    async pasteMe(e, scope, index) {
      this.$modal.loading("正在处理数据...");
      e.preventDefault(); //阻止默认粘贴事件
      let source = e.clipboardData.getData("Text");
      console.log("scope", scope.column.property);
      // 首先对源头进行解析
      let rows = source.split("\r\n"); // 拆成一个数组
      // 数组去除空字符串
      rows = rows.filter((item) => {
        return item && item.trim();
      });

      if (rows.length < 100) {
        // 粘贴物料编码
        if (scope.column.property == "materialCode") {
          await getRefer({ type: "MATERIAL_PARAM", materialCodeList: rows })
            .then((res) => {
              this.$modal.closeLoading();
              if (res.code === 200) {
                let rowList = res.rows;
                let newLine = [];
                for (let i = 0; i < rowList.length; i++) {
                  let line = { ...this.sonModel };
                  line.isUrgency =
                    this.basicForm.billType == "JJXQ" ? "Y" : "N";
                  line.isReplenishment =
                    this.basicForm.billType == "BDXQ" ? "Y" : "N";
                  line.demandCustomer = this.basicForm.customer;
                  line.demandCustomerName = this.basicForm.customerName;
                  line.materialCode = rowList[i].code;
                  line.material = rowList[i].id;
                  line.materialName = rowList[i].name;
                  line.classifyId = rowList[i].classifyId;
                  line.materialClassifyOneName = rowList[i].oneClass;
                  line.materialClassifyTwoName = rowList[i].twoClass;
                  line.materialClassifyThreeName = rowList[i].threeClass;
                  line.materialClassifyFourName = rowList[i].fourClass;
                  line.specification = rowList[i].specification;
                  line.model = rowList[i].model;
                  line.unit = rowList[i].unitId;
                  line.unitName = rowList[i].unitIdName;
                  line.registrant = rowList[i].registrant;
                  line.manufacturerName = rowList[i].manufacturerIdName;
                  line.puPeriod = rowList[i].deliveryPeriod;
                  line.expiry = rowList[i].usefulLife;
                  line.expiryUnit = rowList[i].expiryUnitIdName;
                  // line.minPackage = rowList[i].usefulLife
                  line.minPackage = rowList[i].minPackQty;
                  line.minOrderQty = rowList[i].minOrderQty;
                  line.minBatch = rowList[i].minBatchQty;
                  line.safeStock = rowList[i].safeStock;
                  line.purOrgName = rowList[i].purchasingOrganizationName;
                  line.puOrg = rowList[i].purchasingOrganization;
                  // 物料存储条件和运输条件
                  line.transportationCondition =
                    rowList[i].transportationCondition;
                  line.storageCondition = rowList[i].storageCondition;
                  newLine.push(line);
                  console.log("临时数组", newLine);
                }
                // 删除指定下标
                this.basicForm.puDemandItemList.splice(
                  index,
                  this.basicForm.puDemandItemList.length - index,
                  ...newLine
                );
                this.$modal.notifySuccess("共粘贴" + rowList.length + "条数据");
              }
            })
            .then(() => {
              this.$refs.table.doLayout();
            })
            .catch((err) => {
              this.$modal.closeLoading();
            });
          // 粘贴实际业务需求量
        } else if (scope.column.property == "qty") {
          console.log("复制内容：", rows);
          let newLine = [];
          if (this.basicForm.puDemandItemList.length <= 1) {
            for (let i = 0; i < rows.length; i++) {
              let line = { ...this.sonModel };
              line.isUrgency = this.basicForm.billType == "JJXQ" ? "Y" : "N";
              line.isReplenishment =
                this.basicForm.billType == "BDXQ" ? "Y" : "N";
              line.demandCustomer = this.basicForm.customer;
              line.demandCustomerName = this.basicForm.customerName;
              line.qty = rows[i];
              newLine.push(line);
            }
            // 删除指定下标
            this.basicForm.puDemandItemList.splice(
              index,
              this.basicForm.puDemandItemList.length - index,
              ...newLine
            );
            this.$modal.notifySuccess("共粘贴" + rows.length + "条数据");
            this.$refs.table.doLayout();
            this.$modal.closeLoading();
          } else {
            for (
              let i = index, j = 0;
              i < this.basicForm.puDemandItemList.length;
              i++, j++
            ) {
              this.basicForm.puDemandItemList[i].qty = rows[j];
            }
            this.$refs.table.doLayout();
            this.$modal.closeLoading();
          }
          // 粘贴补单供应商
        } else if (scope.column.property == "additionalSupplierName") {
          await getRefer({ type: "SUPPLIER_PARAM", searchList: rows })
            .then((res) => {
              this.$modal.closeLoading();
              if (res.code === 200) {
                let rowList = res.rows;
                let newLine = [];
                for (let i = 0; i < rowList.length; i++) {
                  let line = { ...this.sonModel };
                  line.isUrgency =
                    this.basicForm.billType == "JJXQ" ? "Y" : "N";
                  line.isReplenishment =
                    this.basicForm.billType == "BDXQ" ? "Y" : "N";
                  line.demandCustomer = this.basicForm.customer;
                  line.demandCustomerName = this.basicForm.customerName;
                  line.additionalSupplier = rowList[i].id;
                  line.additionalSupplierName = rowList[i].name;
                  newLine.push(line);
                  console.log("临时数组", newLine);
                }
                if (this.basicForm.puDemandItemList.length <= 1) {
                  // 删除指定下标
                  this.basicForm.puDemandItemList.splice(
                    index,
                    this.basicForm.puDemandItemList.length - index,
                    ...newLine
                  );
                  this.$modal.notifySuccess(
                    "共粘贴" + rowList.length + "条数据"
                  );
                } else {
                  for (
                    let i = index, j = 0;
                    i < this.basicForm.puDemandItemList.length;
                    i++, j++
                  ) {
                    this.basicForm.puDemandItemList[i].additionalSupplier =
                      newLine[j].additionalSupplier;
                    this.basicForm.puDemandItemList[i].additionalSupplierName =
                      newLine[j].additionalSupplierName;
                  }
                  this.$refs.table.doLayout();
                  this.$modal.closeLoading();
                }
              }
            })
            .then(() => {
              this.$refs.table.doLayout();
            })
            .catch((err) => {
              this.$modal.closeLoading();
            });
        } else if (scope.column.property == "deliveryAddressName") {
          await getRefer({ type: "ADDRESS_PARAM", searchList: rows })
            .then((res) => {
              this.$modal.closeLoading();
              if (res.code === 200) {
                let rowList = res.rows;
                let newLine = [];
                for (let i = 0; i < rowList.length; i++) {
                  let line = { ...this.sonModel };
                  line.isUrgency =
                    this.basicForm.billType == "JJXQ" ? "Y" : "N";
                  line.isReplenishment =
                    this.basicForm.billType == "BDXQ" ? "Y" : "N";
                  line.demandCustomer = this.basicForm.customer;
                  line.demandCustomerName = this.basicForm.customerName;
                  line.deliveryAddressName = rowList[i].name;
                  line.deliveryAddress = rowList[i].code;
                  line.contacts = rowList[i].contactsName;
                  line.contactsPhone = rowList[i].contactsPhone;
                  line.address = rowList[i].address;
                  newLine.push(line);
                  console.log("临时数组", newLine);
                }
                if (this.basicForm.puDemandItemList.length <= 1) {
                  // 删除指定下标
                  this.basicForm.puDemandItemList.splice(
                    index,
                    this.basicForm.puDemandItemList.length - index,
                    ...newLine
                  );
                  this.$modal.notifySuccess(
                    "共粘贴" + rowList.length + "条数据"
                  );
                } else {
                  for (
                    let i = index, j = 0;
                    i < this.basicForm.puDemandItemList.length;
                    i++, j++
                  ) {
                    this.basicForm.puDemandItemList[i].deliveryAddressName =
                      newLine[j].deliveryAddressName;
                    this.basicForm.puDemandItemList[i].deliveryAddress =
                      newLine[j].deliveryAddress;
                    this.basicForm.puDemandItemList[i].contacts =
                      newLine[j].contacts;
                    this.basicForm.puDemandItemList[i].contactsPhone =
                      newLine[j].contactsPhone;
                    this.basicForm.puDemandItemList[i].address =
                      newLine[j].address;
                  }
                  this.$refs.table.doLayout();
                  this.$modal.closeLoading();
                }
              }
            })
            .then(() => {
              this.$refs.table.doLayout();
            })
            .catch((err) => {
              this.$modal.closeLoading();
            });
        }
      } else {
        this.$modal.notifyWarning("复制长度不能超过100!");
        this.$modal.closeLoading();
      }
    },
    // 明细行选择物料编码带出数据
    chooseMaterial(index) {
      console.log("🚀 ~ file: add.vue:790 ~ chooseMaterial ~ index:", index);
      this.tableIndex = index;
      // 传0只展示同步NC了的物料
      this.$refs.materialRefer.init(0);
    },
    selectMaterial(selection) {
      console.log("选中的物料", selection);
      if (selection.length <= 1) {
        // 选择新物料时先清空行内其他信息
        this.basicForm.puDemandItemList[this.tableIndex].reservedProportion =
          null;
        this.basicForm.puDemandItemList[this.tableIndex].reservedPeriod = null;
        this.basicForm.puDemandItemList[this.tableIndex].reservedQty = null;
        this.basicForm.puDemandItemList[this.tableIndex].qty = null;
        this.basicForm.puDemandItemList[this.tableIndex].deliveryDate = null;
        this.basicForm.puDemandItemList[this.tableIndex].remark = null;
        this.basicForm.puDemandItemList[this.tableIndex].resDemandQty = null;
        this.basicForm.puDemandItemList[this.tableIndex].deliveryWarehouse =
          null;
        this.basicForm.puDemandItemList[this.tableIndex].deliveryWarehouseName =
          null;
        this.basicForm.puDemandItemList[this.tableIndex].deliveryAllocation =
          null;
        this.basicForm.puDemandItemList[
          this.tableIndex
        ].deliveryAllocationName = null;
        this.basicForm.puDemandItemList[this.tableIndex].additionalSupplier =
          null;
        this.basicForm.puDemandItemList[
          this.tableIndex
        ].additionalSupplierName = null;
        this.basicForm.puDemandItemList[this.tableIndex].periodUnit = null;
        this.basicForm.puDemandItemList[this.tableIndex].deliveryAddressName =
          null;
        this.basicForm.puDemandItemList[this.tableIndex].deliveryAddress = null;
        this.basicForm.puDemandItemList[this.tableIndex].contacts = null;
        this.basicForm.puDemandItemList[this.tableIndex].contactsPhone = null;
        this.basicForm.puDemandItemList[this.tableIndex].address = null;
        this.basicForm.puDemandItemList[this.tableIndex].priceType = "order";
        this.basicForm.puDemandItemList[this.tableIndex].lastWarehouseName =
          null;
        this.basicForm.puDemandItemList[this.tableIndex].lastWarehouse = null;
        this.basicForm.puDemandItemList[this.tableIndex].lastAllocation = null;
        this.basicForm.puDemandItemList[this.tableIndex].lastAllocationName =
          null;
        this.basicForm.puDemandItemList[this.tableIndex].materialClassifyOne =
          null;
        this.basicForm.puDemandItemList[this.tableIndex].materialClassifyTwo =
          null;
        this.basicForm.puDemandItemList[this.tableIndex].materialClassifyThree =
          null;
        this.basicForm.puDemandItemList[this.tableIndex].materialClassifyFour =
          null;
        this.basicForm.puDemandItemList[this.tableIndex].lastStockOrg = null;
        this.basicForm.puDemandItemList[this.tableIndex].lastStockOrgName =
          null;
        this.basicForm.puDemandItemList[this.tableIndex].buyer = null;
        this.basicForm.puDemandItemList[this.tableIndex].buyerName = null;
        // 通过选择物料查询采购员
        queryMan(selection[0].id).then((res) => {
          if (res.code === 200 && res.rows.length !== 0) {
            this.basicForm.puDemandItemList[this.tableIndex].buyer =
              res.rows[0].buyer;
            this.basicForm.puDemandItemList[this.tableIndex].buyerName =
              res.rows[0].buyerName;
          }
        });
        // 2024.03.29 增加物料备注
        this.basicForm.puDemandItemList[this.tableIndex].materialRemark =
          selection[0].remark;
        this.basicForm.puDemandItemList[this.tableIndex].materialCode =
          selection[0].code;
        this.basicForm.puDemandItemList[this.tableIndex].material =
          selection[0].id;
        this.basicForm.puDemandItemList[this.tableIndex].materialName =
          selection[0].name;
        this.basicForm.puDemandItemList[this.tableIndex].classifyId =
          selection[0].classifyId;
        this.basicForm.puDemandItemList[
          this.tableIndex
        ].materialClassifyOneName = selection[0].oneClass;
        this.basicForm.puDemandItemList[
          this.tableIndex
        ].materialClassifyTwoName = selection[0].twoClass;
        this.basicForm.puDemandItemList[
          this.tableIndex
        ].materialClassifyThreeName = selection[0].threeClass;
        this.basicForm.puDemandItemList[
          this.tableIndex
        ].materialClassifyFourName = selection[0].fourClass;
        this.basicForm.puDemandItemList[this.tableIndex].specification =
          selection[0].specification;
        this.basicForm.puDemandItemList[this.tableIndex].model =
          selection[0].model;
        this.basicForm.puDemandItemList[this.tableIndex].unit =
          selection[0].unitId;
        this.basicForm.puDemandItemList[this.tableIndex].unitName =
          selection[0].unitIdName;
        this.basicForm.puDemandItemList[this.tableIndex].registrant =
          selection[0].registrant;
        this.basicForm.puDemandItemList[this.tableIndex].manufacturerName =
          selection[0].manufacturerIdName;
        this.basicForm.puDemandItemList[this.tableIndex].puPeriod =
          selection[0].deliveryPeriod;
        this.basicForm.puDemandItemList[this.tableIndex].expiry =
          selection[0].usefulLife;
        this.basicForm.puDemandItemList[this.tableIndex].expiryUnit =
          selection[0].expiryUnitIdName;
        // this.basicForm.puDemandItemList[this.tableIndex].minPackage = selection[0].usefulLife
        this.basicForm.puDemandItemList[this.tableIndex].minPackage =
          selection[0].minPackQty;
        this.basicForm.puDemandItemList[this.tableIndex].minOrderQty =
          selection[0].minOrderQty;
        this.basicForm.puDemandItemList[this.tableIndex].minBatch =
          selection[0].minBatchQty;
        this.basicForm.puDemandItemList[this.tableIndex].safeStock =
          selection[0].safeStock;
        this.basicForm.puDemandItemList[this.tableIndex].purOrgName =
          selection[0].purchasingOrganizationName;
        this.basicForm.puDemandItemList[this.tableIndex].puOrg =
          selection[0].purchasingOrganization;
        // 物料存储条件和运输条件
        this.basicForm.puDemandItemList[
          this.tableIndex
        ].transportationCondition = selection[0].transportationCondition;
        this.basicForm.puDemandItemList[this.tableIndex].storageCondition =
          selection[0].storageCondition;
        // 选中骨科耗材时候的物料，需求客户不必填
      } else {
        let newLine = [];
        for (let i = 0; i < selection.length; i++) {
          let line = { ...this.sonModel };
          line.isUrgency = this.basicForm.billType == "JJXQ" ? "Y" : "N";
          line.isReplenishment = this.basicForm.billType == "BDXQ" ? "Y" : "N";
          line.demandCustomer = this.basicForm.customer;
          line.demandCustomerName = this.basicForm.customerName;
          // 通过选择物料查询采购员
          queryMan(selection[i].id).then((res) => {
            if (res.code === 200 && res.rows.length !== 0) {
              line.buyer = res.rows[0].buyer;
              line.buyerName = res.rows[0].buyerName;
            }
          });
          line.materialCode = selection[i].code;
          line.material = selection[i].id;
          line.materialName = selection[i].name;
          line.classifyId = selection[i].classifyId;
          line.materialClassifyOneName = selection[i].oneClass;
          line.materialClassifyTwoName = selection[i].twoClass;
          line.materialClassifyThreeName = selection[i].threeClass;
          line.materialClassifyFourName = selection[i].fourClass;
          line.specification = selection[i].specification;
          line.model = selection[i].model;
          line.unit = selection[i].unitId;
          line.unitName = selection[i].unitIdName;
          line.registrant = selection[i].registrant;
          line.manufacturerName = selection[i].manufacturerIdName;
          line.puPeriod = selection[i].deliveryPeriod;
          line.expiry = selection[i].usefulLife;
          line.expiryUnit = selection[i].expiryUnitIdName;
          // line.minPackage = selection[i].usefulLife
          line.minPackage = selection[i].minPackQty;
          line.minOrderQty = selection[i].minOrderQty;
          line.minBatch = selection[i].minBatchQty;
          line.safeStock = selection[i].safeStock;
          line.purOrgName = selection[i].purchasingOrganizationName;
          line.puOrg = selection[i].purchasingOrganization;
          // 物料存储条件和运输条件
          line.transportationCondition = selection[i].transportationCondition;
          line.storageCondition = selection[i].storageCondition;
          // 2024.03.29 增加物料备注
          line.materialRemark = selection[i].remark;
          // this.basicForm.puDemandItemList.push(line)
          newLine.push(line);
        }
        // 删除指定下标
        this.basicForm.puDemandItemList.splice(this.tableIndex, 1, ...newLine);
        // this.basicForm.puDemandItemList.splice(this.tableIndex,1)
      }
    },
    // 明细行选择参照
    chooseDept(index, type, isPage, title) {
      this.tableIndex = index;
      this.referCondition.type = type;
      this.referCondition.isPage = isPage;
      this.referCondition.title = title;
      this.$refs.refer.init(this.referCondition);
    },
    // 明细行选择仓库需要先确认采购组织
    chooseCangKu(index, type, isPage, title, pkOrg) {
      this.tableIndex = index;
      this.referCondition.type = type;
      this.referCondition.isPage = isPage;
      this.referCondition.title = title;
      if (pkOrg) {
        this.referCondition.pkOrg = pkOrg;
        this.$refs.refer.init(this.referCondition);
      } else {
        this.$modal.notifyWarning("请先确认默认采购组织");
      }
    },
    // 明细行选择货位先确认仓库
    choosehuoWei(index, type, isPage, title, stordocId) {
      this.tableIndex = index;
      this.referCondition.type = type;
      this.referCondition.isPage = isPage;
      this.referCondition.title = title;
      // 选择收货货位前先选择收货仓库
      if (stordocId) {
        this.referCondition.stordocId = stordocId;
        this.$refs.refer.init(this.referCondition);
      } else {
        this.$modal.notifyWarning("请先选择收货仓库");
      }
    },
    // 明细行清空收货仓库，货位，收货地址档案等
    clearHang(index, title) {
      if (title == "选择收货仓库") {
        this.basicForm.puDemandItemList[index].deliveryWarehouseName = null;
        this.basicForm.puDemandItemList[index].deliveryWarehouse = null;
        this.basicForm.puDemandItemList[index].csFlag = null;
        this.basicForm.puDemandItemList[index].deliveryAllocationName = null;
        this.basicForm.puDemandItemList[index].deliveryAllocation = null;
      }
      if (title == "选择收货货位") {
        this.basicForm.puDemandItemList[index].deliveryAllocationName = null;
        this.basicForm.puDemandItemList[index].deliveryAllocation = null;
      }
      if (title == "选择收货地址") {
        this.basicForm.puDemandItemList[index].deliveryAddressName = null;
        this.basicForm.puDemandItemList[index].deliveryAddress = null;
        this.basicForm.puDemandItemList[index].contacts = null;
        this.basicForm.puDemandItemList[index].contactsPhone = null;
        this.basicForm.puDemandItemList[index].address = null;
      }
      if (title == "选择补单供应商") {
        this.basicForm.puDemandItemList[index].additionalSupplierName = null;
        this.basicForm.puDemandItemList[index].additionalSupplier = null;
      }
      // 清空批量调整内字段
      if (title == "cgzz") {
        this.adjust.purOrgName = "";
        this.adjust.puOrg = "";
        this.adjust.warehouse = "";
        this.adjust.warehouseName = "";
        this.adjust.allocation = "";
        this.adjust.allocationName = "";
      }
      if (title == "shck") {
        this.adjust.warehouse = "";
        this.adjust.warehouseName = "";
        this.adjust.allocation = "";
        this.adjust.allocationName = "";
        this.adjust.csFlag = "";
      }
      if (title == "shhw") {
        this.adjust.allocation = "";
        this.adjust.allocationName = "";
      }
      if (title == "bdgys") {
        this.adjust.additionalSupplier = "";
        this.adjust.additionalSupplierName = "";
      }
      if (title == "shdz") {
        this.adjust.deliveryAddressName = "";
        this.adjust.deliveryAddress = "";
        this.adjust.contacts = "";
        this.adjust.contactsPhone = "";
        this.adjust.address = "";
      }
    },
    // 清除需求客户将明细行内也清空
    cleanCustomer() {
      this.basicForm.customer = "";
      this.basicForm.customerName = "";
      this.basicForm.customerCode = "";
      if (this.basicForm.puDemandItemList.length !== 0) {
        this.basicForm.puDemandItemList.forEach((item) => {
          item.demandCustomerName = "";
          item.demandCustomer = "";
          item.status = "";
          item.buyerName = "";
          item.buyer = "";
          item.reservedProportion = "";
          item.reservedPeriod = "";
          item.reservedQty = "";
          item.averageQtyMonth = "";
          item.demandPeriod = "";
          item.forecastClassify = "";
          item.onemonthAvgVolume = "";
          item.threemonthAvgVolume = "";
          item.puFreight = "";
          item.superiorAllotQty = "";
          item.resDemandQty = "";
          item.executeQty = "";
          item.deliveryWarehouseName = "";
          item.deliveryWarehouse = "";
          item.deliveryAllocationName = "";
          item.deliveryAllocation = "";
          item.lastWarehouseName = "";
          item.lastAllocationName = "";
          item.availableQty = "";
          item.lastStockOrgName = "";
          item.centralWarehouseQty = "";
          item.allotCode = "";
          item.deliveryAddress = "";
          item.deliveryAddressName = "";
          item.contacts = "";
          item.contactsPhone = "";
          item.address = "";
        });
      }
    },
    // 批量调整
    adjustPl() {
      if (this.ids.length == 0) {
        this.$modal.notifyWarning("请至少选择一项数据进行操作!");
      } else {
        this.adjust.open = true;
      }
    },
    // 批量调整确认
    confirmAdjust() {
      console.log("data", this.adjust);
      if (
        this.adjust.csFlag == "N" ||
        this.adjust.csFlag == "" ||
        this.adjust.allocationName
      ) {
        this.basicForm.puDemandItemList.forEach((item) => {
          this.ids.some((val) => {
            if (val == item.id) {
              if (this.adjust.purchaseMan) {
                item.buyer = this.adjust.purchaseMan;
                item.buyerName = this.adjust.purchaseManName;
              }
              if (this.adjust.priceType) {
                item.priceType = this.adjust.priceType;
              }
              if (this.adjust.additionalSupplierName) {
                item.additionalSupplier = this.adjust.additionalSupplier;
                item.additionalSupplierName =
                  this.adjust.additionalSupplierName;
              }
              if (this.adjust.purOrgName) {
                item.purOrgName = this.adjust.purOrgName;
                item.puOrg = this.adjust.puOrg;
                item.deliveryWarehouse = this.adjust.warehouse;
                item.deliveryWarehouseName = this.adjust.warehouseName;
                item.deliveryAllocation = this.adjust.allocation;
                item.deliveryAllocationName = this.adjust.allocationName;
                item.deliveryAddressName = this.adjust.deliveryAddressName;
                item.deliveryAddress = this.adjust.deliveryAddress;
                item.contacts = this.adjust.contacts;
                item.contactsPhone = this.adjust.contactsPhone;
                item.address = this.adjust.address;
              }
              if (this.adjust.warehouseName) {
                item.deliveryWarehouse = this.adjust.warehouse;
                item.deliveryWarehouseName = this.adjust.warehouseName;
                item.csFlag = this.adjust.csFlag;
                item.deliveryAllocation = this.adjust.allocation;
                item.deliveryAllocationName = this.adjust.allocationName;
              }
              // if(this.adjust.allocationName) {
              //   item.deliveryAllocation = this.adjust.allocation
              //   item.deliveryAllocationName = this.adjust.allocationName
              // }
              if (this.adjust.remark) {
                item.remark = this.adjust.remark;
              }
              if (this.adjust.deliveryAddressName) {
                item.deliveryAddressName = this.adjust.deliveryAddressName;
                item.deliveryAddress = this.adjust.deliveryAddress;
                item.contacts = this.adjust.contacts;
                item.contactsPhone = this.adjust.contactsPhone;
                item.address = this.adjust.address;
              }
            }
            this.adjust.open = false;
          });
        });
      } else {
        this.$modal.notifyWarning("收货仓库存在收货货位，请填写！");
      }
    },
    // 批量调整选择仓库
    adjustCangku(type, isPage, title, pkOrg) {
      this.referCondition.type = type;
      this.referCondition.isPage = isPage;
      this.referCondition.title = title;
      if (pkOrg) {
        this.referCondition.pkOrg = pkOrg;
        this.$refs.refer.init(this.referCondition);
      } else {
        this.$modal.notifyWarning("请先选择默认采购组织");
      }
    },
    // 批量调整选择货位
    adjustHuoWei(type, isPage, title, stordocId) {
      this.referCondition.type = type;
      this.referCondition.isPage = isPage;
      this.referCondition.title = title;
      // 选择收货货位前先选择收货仓库
      if (stordocId) {
        this.referCondition.stordocId = stordocId;
        this.$refs.refer.init(this.referCondition);
      } else {
        this.$modal.notifyWarning("请先选择收货仓库");
      }
    },
    // 关闭清空批量调整数据
    closeEvent() {
      this.adjust = {
        open: false,
        puOrg: "",
        purOrgName: "",
        priceType: "",
        purchaseMan: "",
        purchaseManName: "",
        warehouse: "",
        warehouseName: "",
        csFlag: "",
        allocation: "",
        allocationName: "",
        additionalSupplier: "",
        additionalSupplierName: "",
        remark: "",
        deliveryAddress: "",
        deliveryAddressName: "",
        contacts: "",
        contactsPhone: "",
        address: "",
      };
    },
    // 必选标识
    addRedStar(h, { column }) {
      return [
        h("span", { style: "color: #F56C6C" }, "*"),
        h("span", " " + column.label),
      ];
    },
    // 表格表头标星
    anotherRedStar(h, { column }) {
      if (this.isBDXQ) {
        return [
          h("span", { style: "color: #F56C6C" }, "*"),
          h("span", " " + column.label),
        ];
      } else {
        return [h("span", " " + column.label)];
      }
    },
    // 流程跳转
    jumpOA() {
      toOA(this.$store.state.user.name, this.basicForm.flowId).then((res) => {
        if (res.code === 200) {
          window.open(res.oaUrl);
        }
      });
    },
    jisuan({ columns, data }) {
      const means = []; // 合计
      columns.forEach((column, columnIndex) => {
        if (columnIndex === 0) {
          means.push("合计");
        } else {
          const values = data.map((item) => Number(item[column.property]));
          // 合计
          if (column.property === "qty") {
            means[columnIndex] = values.reduce((prev, curr) => {
              const value = Number(curr);
              if (!isNaN(value)) {
                return prev + curr;
              } else {
                return prev;
              }
            }, 0);
            // means[columnIndex] += ' 元'
            // 改变了ele的合计方式，扩展了合计场景
            // 你以为就只有上面这样玩吗？错啦，你还可以自定义样式哦
            // means[columnIndex] = '<span style="color: red">' + means[columnIndex] + '元</span>'
            means[columnIndex] = +means[columnIndex];
          } else {
            means[columnIndex] = "";
          }
        }
      });
      // 返回一个二维数组的表尾合计(不要平均值，你就不要在数组中添加)
      return [means];
    },
  },
};
</script>

<style lang="scss" scoped>
.btn_group {
  // width: 100%;
  // margin: 20px 0;
  display: flex;
  justify-content: space-between;
  position: absolute;
  top: 10px;
  right: 20px;
}
.btn_grooup {
  margin-bottom: 10px;
  display: flex;
  justify-content: space-between;
}
.hang {
  margin: auto;
}
.hang ::v-deep .el-form-item__content {
  margin-left: 0px !important;
}
// .el-table ::v-deep .el-form-item__error{
//   padding-top: 0;
//   top: 70%
// }
::v-deep .elx-body--row .success-row {
  background-color: #ff8a8a !important;
}
::v-deep .uxbeautifyTableClass .elx-table--header-wrapper {
  color: #606266;
}
.pltzTxt {
  text-align: right;
  font-size: medium;
  padding-right: 2%;
}
.pltzIpt {
  width: 90%;
}
::v-deep .el-form-item {
  margin-bottom: 8px;
}
</style>
