<template>
  <el-form ref="form" :model="form" :rules="rules" :disabled="disabled">
    <ele-pro-table
      ref="table"
      :needPage="false"
      :columns="columns"
      :toolkit="[]"
      :datasource="form.datasource"
      cache-key="systemRoleTable17"
      class="time-form"
    >
      <!-- 表头工具栏 -->
      <template v-slot:toolbar>
        <!-- <div class="headbox">
          <el-button
            v-if="isShowAdd"
            size="small"
            type="primary"
            icon="el-icon-plus"
            class="ele-btn-icon"
            @click="handlAdd"
          >
            新增
          </el-button>
        </div> -->
      </template>
      <template v-slot:technicalDrawings="{ row, $index }">
        <el-form-item :prop="'datasource.' + $index + '.technicalDrawings'">
          <fileMain v-model="row.technicalDrawings" type="view"></fileMain>
          <!--          <div v-if="row.technicalDrawings && row.technicalDrawings?.length">-->
          <!--            <el-link-->
          <!--              v-for="link in row.technicalDrawings"-->
          <!--              :key="link.id"-->
          <!--              type="primary"-->
          <!--              :underline="false"-->
          <!--              @click="download(link)"-->
          <!--            >-->
          <!--              {{ link.name }}-->
          <!--            </el-link>-->
          <!--          </div>-->
        </el-form-item>
      </template>
      <template v-slot:remark="{ row, $index }">
        <el-form-item :prop="'datasource.' + $index + '.remark'">
          <el-input
            clearable
            v-model="row.remark"
            type="textarea"
            placeholder="请输入"
          />
        </el-form-item>
      </template>
      <template v-slot:stockLedger="scope">
        <el-form-item>
          <el-popover
            @hide="() => (selection = [])"
            placement="right"
            width="60%"
            trigger="hover"
          >
            <ele-pro-table
              :ref="'childrenTable' + scope.$index"
              row-key="id"
              max-height="300px"
              :selection.sync="selection"
              :needPage="false"
              :columns="childrenColumns"
              :toolkit="[]"
              :datasource="scope.row.sendProductDetail"
              cache-key="stockLedgerRoleTable"
              class="time-form"
            >
              <!-- 表头工具栏 -->
              <template v-slot:toolbar="childrenScope">
                <div class="headbox">
                  <el-button
                    size="small"
                    type="primary"
                    icon="el-icon-plus"
                    class="ele-btn-icon"
                    @click="stockLedgerSelect(scope.row, scope.$index)"
                  >
                    选择
                  </el-button>

                  <el-button
                    size="small"
                    type="danger"
                    icon="el-icon-delete"
                    class="ele-btn-icon"
                    :disabled="!selection.length"
                    @click="stockLedgerRemove(scope.$index)"
                  >
                    删除
                  </el-button>
                </div>
              </template>
            </ele-pro-table>
            <el-button type="text" slot="reference">明细</el-button>
          </el-popover>
        </el-form-item>
      </template>

      <template v-slot:packagingStrength="scope">
        <el-form-item
          :prop="'datasource.' + scope.$index + '.packagingStrength'"
        >
          <DictSelection
            dict-name="包装强度"
            v-model="scope.row.extField.packagingStrength"
          ></DictSelection>
        </el-form-item>
      </template>
      <template v-slot:packagingDensity="scope">
        <el-form-item
          :prop="'datasource.' + scope.$index + '.packagingDensity'"
        >
          <DictSelection
            dict-name="包装密度"
            v-model="scope.row.extField.packagingDensity"
          ></DictSelection>
        </el-form-item>
      </template>

      <template v-slot:totalCount="scope">
        <el-form-item
          :prop="'datasource.' + scope.$index + '.totalCount'"
          :rules="[
            { required: true, message: '请输入数字', trigger: 'blur' },
            { validator: validateTotalCount(scope.row), trigger: 'blur' }
          ]"
        >
          <el-input
            v-model="scope.row.totalCount"
            @input="(val) => changeNum(val, scope.$index)"
          ></el-input>
        </el-form-item>
      </template>
      <template v-slot:batchNo="scope">
        <el-form-item :prop="'datasource.' + scope.$index + '.batchNo'">
          <el-input v-model="scope.row.batchNo" v-no-chinese></el-input>
        </el-form-item>
      </template>
      <template v-slot:blockCount="scope">
        <el-form-item
          :prop="'datasource.' + scope.$index + '.blockCount'"
          :rules="[{ required: true, message: '请输入', trigger: 'blur' }]"
        >
          <el-input
            v-model="scope.row.blockCount"
            @input="
              (val) => tableHandleKeyUp(scope.row, scope.$index, 'blockCount')
            "
          ></el-input>
        </el-form-item>
      </template>

      <template v-slot:receiveTotalWeight="scope">
        <el-form-item
          :prop="'datasource.' + scope.$index + '.receiveTotalWeight'"
          :rules="[
            {
              required: entrustedCode && pricingWay == 2,
              message: '请输入数字',
              trigger: 'blur'
            }
          ]"
        >
          <!-- :disabled="!entrustedCode"         -->
          <el-input-number
            :controls="false"
            v-model="scope.row.receiveTotalWeight"
            @blur="changeSendTotalWeight(scope.$index)"
            style="width: 60%; margin-right: 10px"
          >
          </el-input-number>
          <el-button
            size="small"
            type="primary"
            v-if="entrustedCode"
            @click.native="(e) => handleInnerBound(e, scope.row, scope.$index)"
            >选择
          </el-button>
        </el-form-item>
      </template>
      <template v-slot:sendTotalWeight="scope">
        <el-form-item :prop="'datasource.' + scope.$index + '.sendTotalWeight'">
          <el-input-number
            :controls="false"
            v-model="scope.row.sendTotalWeight"
            style="width: 100%"
          >
          </el-input-number>
        </el-form-item>
      </template>
      <template v-slot:increaseTotalWeight="scope">
        <el-form-item
          :prop="'datasource.' + scope.$index + '.increaseTotalWeight'"
        >
          <el-input-number
            :controls="false"
            v-model="scope.row.increaseTotalWeight"
            style="width: 100%"
          >
          </el-input-number>
        </el-form-item>
      </template>
      <template v-slot:warehouseId="scope">
        <el-form-item
          :prop="'datasource.' + scope.$index + '.warehouseId'"
          :rules="[{ required: true, message: '请选择仓库', trigger: 'blur' }]"
        >
          <el-select
            v-model="scope.row.warehouseId"
            placeholder="请选择"
            @change="warehouseChange(scope.$index, scope.row)"
          >
            <el-option
              v-for="item in warehouseList"
              :key="item.id"
              :label="item.name"
              :value="item.id"
            >
            </el-option>
          </el-select>
        </el-form-item>
      </template>
      <template v-slot:customerMark="{ row, $index }">
        <el-form-item
          :prop="'datasource.' + $index + '.customerMark'"
          :rules="{
            required: false,
            message: '请输入客户代号',
            trigger: 'change'
          }"
        >
          <el-input v-model="row.customerMark" placeholder="请输入"></el-input>
        </el-form-item>
      </template>
      <template v-slot:guaranteePeriod="scope">
        <div class="period">
          <div class="borderleftnone">
            <el-form-item
              style="margin-bottom: 20px"
              :prop="'datasource.' + scope.$index + '.guaranteePeriod'"
              :rules="{
                pattern: numberReg,
                message: '请输入数字',
                trigger: 'blur'
              }"
            >
              <el-input
                v-model="scope.row.guaranteePeriod"
                @change="
                  setDeliveryDays(scope.row, scope.$index, 'guaranteePeriod')
                "
                placeholder="请输入"
              ></el-input>
            </el-form-item>
          </div>
          <div class="borderrightnone">
            <DictSelection
              dictName="质保期单位"
              clearable
              v-model="scope.row.guaranteePeriodUnitCode"
              @change="
                setDeliveryDays(scope.row, scope.$index, 'guaranteePeriod')
              "
            >
            </DictSelection>
          </div>
        </div>
      </template>
      <template v-slot:singleWeight="scope">
        <el-form-item
          style="margin-bottom: 20px"
          :rules="{
            required: false,
            trigger: ['change', 'blur']
          }"
          :prop="'datasource.' + scope.$index + '.singleWeight'"
        >
          <el-input
            v-model="scope.row.singleWeight"
            @input="singleWeightChange(scope.row, scope.$index)"
            placeholder="请输入"
          ></el-input>
        </el-form-item>
      </template>
      <template v-slot:singlePrice="scope">
        <el-form-item
          style="margin-bottom: 20px"
          :prop="'datasource.' + scope.$index + '.singlePrice'"
          :rules="{
            required: false,
            pattern: numberReg,
            message: '请输入正确的单价',
            trigger: 'change'
          }"
        >
          <el-input
            v-model="scope.row.singlePrice"
            placeholder="请输入"
            @input="getNumTotalPrice"
          >
            <template slot="append">元</template>
          </el-input>
        </el-form-item>
      </template>
      <template v-slot:warehouseNum="scope">
        <el-form-item>
          {{ scope.row.warehouseNum }}
        </el-form-item>
      </template>
      <template v-slot:headerWarehouseId="{ column }">
        <span class="is-required">{{ column.label }}</span>
      </template>
      <template v-slot:headerTotalCount="{ column }">
        <span :class="{ 'is-required': entrustedCode && pricingWay == 2 }">{{
          column.label
        }}</span>
      </template>

      <!-- 操作列 -->
      <template v-slot:action="scope">
        <el-popconfirm
          class="ele-action"
          title="确定要删除吗？"
          @confirm="remove(scope.$index)"
        >
          <template v-slot:reference>
            <el-link type="danger" :underline="false" icon="el-icon-delete">
              删除
            </el-link>
          </template>
        </el-popconfirm>
      </template>
    </ele-pro-table>

    <!--入库详情-->
    <innertboundDetailsDialog
      v-if="innerboundDetailsDialogFlag"
      ref="innerboundDetailsDialogRef"
      :innerboundDetailsDialogFlag.sync="innerboundDetailsDialogFlag"
      @saveDate="saveInnerDate"
    ></innertboundDetailsDialog>
  </el-form>
</template>
<script>

  import { numberReg } from 'ele-admin';
  import dictMixins from '@/mixins/dictMixins';
  import {
    getWarehouseList,
    getWarehouseOutStock
  } from '@/api/saleManage/saleorder';

  import { copyObj } from '@/utils/util';
  import innertboundDetailsDialog from '@/BIZComponents/innerboundDetailsDialog.vue';
  import stockLedgerDialog from './stockLedger/stockLedgerDialog.vue';
  import getDynamicsColumns from '@/mixins/getDynamicsColumns';
  // import fileMain from '@/components/addDoc/index.vue';
  import { lbjtList } from '@/enum/dict.js';

  export default {
    mixins: [dictMixins, getDynamicsColumns],
    props: {
      orderId: String,
      entrustedCode: String,
      pricingWay: [String, Number],
      isShowAdd: {
        type: Boolean,
        default: true
      },
      disabled:{
        type: Boolean,
        default: false
      },
    },
    components: {
      // fileMain,
      innertboundDetailsDialog,
      stockLedgerDialog
    },
    data() {
      const defaultForm = {
        key: null,
        endTime: '',
        isFirst: 0,
        name: '',
        startTime: '',
        workHour: '',
        technicalDrawings: []
        // warehouseCode:"",
        // warehouseId:'',
        // warehouseName:'',
      };
      return {
        current: {},
        childrenColumns: [
          {
            width: 45,
            type: 'selection',
            columnKey: 'selection',
            align: 'center'
          },
          {
            width: 45,
            type: 'index',
            columnKey: 'index',
            align: 'center',
            fixed: 'left'
          },
          {
            minWidth: 100,
            prop: 'code',
            label: '编码',
            align: 'center'
          },
          {
            minWidth: 140,
            prop: 'barcodes',
            label: '发货条码',
            align: 'center'
          },
          {
            minWidth: 100,
            prop: 'engrave',
            label: '刻码',
            align: 'center'
          }
        ],
        selection: [],
        discountTotalPrice: 0.0,
        allPrice: 0.0,
        curIndex: null,
        innerboundDetailsDialogFlag: false,
        stockLedgerDialogFlag: false,
        numberReg,
        defaultForm,
        warehouseList: [],
        dynamicsColumns: [],

        form: {
          datasource: []
        },
        rules: {}
      };
    },
    created() {
      getWarehouseList().then((res) => {
        this.warehouseList = res;
      });
    },
    computed: {
      canHandl() {
        return this.form.datasource.length;
      },
      contractId() {
        return this.$store.state.order.contractId;
      },
      clientEnvironmentId() {
        return this.$store.state.user.info.clientEnvironmentId;
      },
      columns() {
        return [
          {
            width: 45,
            type: 'index',
            columnKey: 'index',
            align: 'center',
            fixed: 'left'
          },
          {
            width: 200,
            prop: 'productName',
            label: '名称',
            slot: 'productName',
            align: 'center'
          },
          {
            width: 120,
            prop: 'productCode',
            label: '编码',
            slot: 'productCode',
            align: 'center'
          },
          {
            width: 120,
            prop: 'specification',
            label: '规格',
            slot: 'specification',
            align: 'center'
          },

          {
            width: 120,
            prop: 'totalCount',
            label: '发货数量',
            slot: 'totalCount',
            headerSlot: 'headerTotalCount',
            align: 'center'
          },
          {
            width: 80,
            prop: 'measuringUnit',
            label: '计量单位',
            slot: 'measuringUnit',
            align: 'center'
          },

          {
            width: 120,
            prop: 'blockCount',
            label: '发货块数',
            slot: 'blockCount',
            align: 'center',
            show: this.clientEnvironmentId == '4'
          },
          {
            width: 120,
            prop: 'customerMark',
            label: '客户代号',
            slot: 'customerMark',
            align: 'center'
          },
          {
            width: 200,
            prop: 'warehouseId',
            label: '仓库名称',
            slot: 'warehouseId',
            headerSlot: 'headerWarehouseId',
            align: 'center'
          },
          {
            width: 100,
            prop: 'stockLedger',
            label: '发货明细',
            slot: 'stockLedger',
            align: 'center'
          },
          {
            width: 120,
            prop: 'singleWeight',
            label: '单重',
            slot: 'singleWeight',
            align: 'center'
          },
          {
            width: 200,
            prop: 'receiveTotalWeight',
            label: '收货总重',
            slot: 'receiveTotalWeight',
            align: 'center',
            headerSlot: 'headerTotalCount'
          },
          {
            width: 100,
            prop: 'sendTotalWeight',
            label: '发货总重',
            slot: 'sendTotalWeight',
            align: 'center'
          },

          {
            width: 100,
            prop: 'increaseTotalWeight',
            label: '增重重量',
            slot: 'increaseTotalWeight',
            align: 'center'
          },
          {
            width: 100,
            prop: 'weightUnit',
            label: '重量单位',
            slot: 'weightUnit',
            align: 'center'
          },
          {
            width: 160,
            prop: 'singlePrice',
            label: '单价',
            slot: 'singlePrice',
            align: 'center'
          },
          {
            width: 160,
            prop: 'discountSinglePrice',
            label: '折后单价',
            slot: 'discountSinglePrice',
            align: 'center'
          },
          {
            width: 120,
            prop: 'totalPrice',
            label: '合计',
            slot: 'totalPrice',
            align: 'center'
          },
          {
            width: 120,
            prop: 'discountTotalPrice',
            label: '折后合计',
            slot: 'discountTotalPrice',
            align: 'center'
          },
          {
            width: 200,
            prop: 'productCategoryName',
            label: '类型',
            slot: 'productCategoryName',
            align: 'center'
          },
          {
            width: 160,
            prop: 'batchNo',
            label: '批次号',
            slot: 'batchNo',
            align: 'center'
          },
          {
            width: 160,
            prop: 'productBrand',
            label: '牌号',
            slot: 'productBrand',
            align: 'center'
          },
          {
            width: 120,
            prop: 'modelType',
            label: '型号',
            slot: 'modelType',
            align: 'center'
          },

          {
            width: 120,
            prop: 'imgCode',
            align: 'center',
            label: '图号/件号',
            showOverflowTooltip: true
          },
          {
            width: 120,
            prop: 'produceType',
            align: 'center',
            label: '属性类型',
            showOverflowTooltip: true,
            formatter: (row, column) => {
              if(row.produceType){
                return row.produceType.map(item=>{
                  return lbjtList[item]
                }).toString()
              }
          
            }
          },
          ...this.dynamicsColumns,
          {
            width: 80,
            prop: 'deliveryDays',
            label: '交期(天)',
            slot: 'deliveryDays',
            align: 'center'
          },
          {
            width: 160,
            prop: 'deliveryDeadline',
            label: '交期截止日期',
            slot: 'deliveryDeadline',
            align: 'center'
          },
          {
            width: 200,
            prop: 'guaranteePeriod',
            label: '有效期',
            slot: 'guaranteePeriod',
            formatter: (_row, _column, cellValue) => {
              return (
                (_row.guaranteePeriod || '') + _row.guaranteePeriodUnitName
              );
            },
            align: 'center'
          },
          {
            width: 160,
            prop: 'guaranteePeriodDeadline',
            label: '有效截止日期',
            slot: 'guaranteePeriodDeadline',
            align: 'center'
          },
          {
            width: 130,
            prop: 'technicalAnswerName',
            label: '技术答疑人',
            slot: 'technicalAnswerName',
            align: 'center'
          },
          {
            width: 220,
            prop: 'technicalParams',
            label: '技术参数',
            slot: 'technicalParams',
            align: 'center'
          },
          {
            width: 240,
            prop: 'technicalDrawings',
            label: '技术图纸',
            slot: 'technicalDrawings',
            align: 'center'
          },
          {
            width: 220,
            prop: 'remark',
            label: '备注',
            slot: 'remark',
            align: 'center'
          },
          {
            columnKey: 'action',
            label: '操作',
            width: 180,
            align: 'center',
            resizable: false,
            slot: 'action',
            fixed: 'right',
            showOverflowTooltip: true
          }
        ];
      }
    },
    methods: {
      //发货明细选择
      stockLedgerSelect(row, index) {
        this.curIndex = index;
        this.stockLedgerDialogFlag = true;
        this.$nextTick(() => {
          this.$refs.stockLedgerDialogRef.init(row.sendProductDetail, row);
        });
      },
      //获取
      getStockLedger(sendProductDetail) {
        if (!this.form.datasource[this.curIndex].sendProductDetail)
          this.form.datasource[this.curIndex].sendProductDetail = [];
        let row = this.form.datasource[this.curIndex];
        row.sendProductDetail.push(...sendProductDetail);
        this.form.datasource[this.curIndex] = row;
        this.$refs['childrenTable' + this.curIndex].reload();
        this.$refs.table.reload();
      },
      //删除发货明细
      stockLedgerRemove(PIndex) {
        let row = this.form.datasource[PIndex];
        this.selection.forEach((item) => {
          let index = row.sendProductDetail.findIndex((i) => i.id == item.id);
          row.sendProductDetail.splice(index, 1);
        });
        this.form.datasource[PIndex] = row;
        this.$refs['childrenTable' + PIndex].reload();
        this.$refs.table.reload();
        this.selection = [];
      },

      async warehouseChange(index, row) {
        let warehouseIds =
          this.form.datasource
            .filter(
              (item, i) => row.productCode == item.productCode && index != i
            )
            .map((item) => item.warehouseId) || [];
        const data = this.warehouseList.find(
          (item) => item.id == row.warehouseId
        );
        if (warehouseIds.length > 0 && warehouseIds.includes(row.warehouseId)) {
          row.warehouseId = '';
          return this.$message.error('同一个产品不能选择相同的仓库');
        }

        this.$set(this.form.datasource[index], 'warehouseName', data.name);
        this.$set(this.form.datasource[index], 'warehouseCode', data.code);
        const warehouseOutStock = await getWarehouseOutStock({
          warehouseId: data.id,
          code: row.productCode
        });
        this.$set(
          this.form.datasource[index],
          'warehouseNum',
          warehouseOutStock
        );
      },

      //修改发货总重
      changeSendTotalWeight(index) {
        this.curIndex = index;
        this.setIcreaseTotalWeight();
      },
      //入库单详情
      handleInnerBound(e, rows, index) {
        this.curIndex = index;
        this.innerboundDetailsDialogFlag = true;
        this.$nextTick(() => {
          let row = {
            code: this.entrustedCode
          };
          this.$refs.innerboundDetailsDialogRef.init(row);
        });
      },
      //选择入库单信息
      saveInnerDate(data = []) {
        let totalWeight = data.reduce((num, row) => {
          num += Number(row.weight);
          return num;
        }, 0);
        this.$set(
          this.form.datasource[this.curIndex],
          'receiveTotalWeight',
          totalWeight
        );
        this.setIcreaseTotalWeight();
      },

      //修改数量更新合计/总重
      changeNum(val, index) {
        this.curIndex = index;
        if (this.pricingWay == 2) {
          if (val != this.form.datasource[index].orderTotalCount) {
            this.$set(this.form.datasource[index], 'receiveTotalWeight', '');
            this.$set(
              this.form.datasource[index],
              'sendTotalWeight',
              Number(val) * Number(this.form.datasource[index].singleWeight)
            );
          } else {
            let find =
              this.oldReceiveTotalWeight.find(
                (key) =>
                  key.productCode == this.form.datasource[index].productCode
              ) || {};
            this.$set(
              this.form.datasource[index],
              'receiveTotalWeight',
              find.oldReceiveTotalWeight || ''
            );
            this.$set(
              this.form.datasource[index],
              'sendTotalWeight',
              Number(val) * Number(this.form.datasource[index].singleWeight)
            );
          }
          this.setIcreaseTotalWeight();
          this.getWeightPrice();
        } else {
          if (this.form.datasource[index].singlePrice) {
            this.$set(
              this.form.datasource[index],
              'totalPrice',
              (Number(this.form.datasource[index].singlePrice) * val).toFixed(2)
            );
            this.$set(
              this.form.datasource[index],
              'discountTotalPrice',
              (
                Number(this.form.datasource[index].discountSinglePrice) * val
              ).toFixed(2)
            );
          }

          this.$set(
            this.form.datasource[index],
            'sendTotalWeight',
            Number(this.form.datasource[index].totalCount) *
              Number(this.form.datasource[index].singleWeight)
          );
          this.$set(
            this.form.datasource[index],
            'increaseTotalWeight',
            Number(this.form.datasource[index].totalCount) *
              Number(this.form.datasource[index].singleWeight)
          );
        }
        this.tableHandleKeyUp(this.form.datasource[index], index, 'sum');
      },
      //计算单重
      singleWeightChange(row, index) {
        if (row && row.singleWeight && row.totalCount) {
          row.totalWeight = (row.singleWeight * row.totalCount).toFixed(2) || 0;
          this.$set(
            this.form.datasource[index],
            'totalWeight',
            row.totalWeight
          );
        } else {
          this.$set(this.form.datasource[index], 'totalWeight', '');
        }
      },
      getWeightPrice() {
        let increaseTotalWeight =
          this.form.datasource[this.curIndex].increaseTotalWeight;
        let singlePrice = this.form.datasource[this.curIndex].singlePrice;
        let discountSinglePrice =
          this.form.datasource[this.curIndex].discountSinglePrice;
        this.$set(
          this.form.datasource[this.curIndex],
          'totalPrice',
          (Number(increaseTotalWeight) * Number(singlePrice)).toFixed(2)
        );
        this.$set(
          this.form.datasource[this.curIndex],
          'discountTotalPrice',
          (Number(discountSinglePrice) * Number(increaseTotalWeight)).toFixed(2)
        );
      },
      //设置增重总重
      setIcreaseTotalWeight() {
        let receiveTotalWeight = Number(
          this.form.datasource[this.curIndex].receiveTotalWeight
        );
        let sendTotalWeight = Number(
          this.form.datasource[this.curIndex].sendTotalWeight
        );
        this.$set(
          this.form.datasource[this.curIndex],
          'increaseTotalWeight',
          (sendTotalWeight - receiveTotalWeight).toFixed(2)
        );
        if (this.pricingWay == 2) {
          this.getWeightPrice();
        }
        this.$refs.table.reload();
      },

      // 表格：模数、数量(方)、块数输入框 输入事件
      tableHandleKeyUp(row, index, name) {
        console.log(row, 'row');
        // && this.clientEnvironmentId == '4'
        if (row.specification && this.clientEnvironmentId == '4') {
          let modelArr = row.specification.split('*');
          let modelLong = modelArr[0]; // model规格长度
          let modeWide = modelArr[1]; // model规格宽度
          let modeHight = modelArr[2].substr(0, modelArr[2].indexOf('cm')); // model规格高度
          modeHight = Number(modeHight);
          if (name === 'sum') {
            row.blockCount = Math.floor(
              row.totalCount / ((modelLong * modeWide * modeHight) / 1000000)
            );
          } else if (name === 'blockCount') {
            row.totalCount =
              (Number(row.blockCount) * modelLong * modeWide * modeHight) /
              1000000;
            this.changeNum(row.totalCount, index);
          }
        }
      },
      //改变数量
      changeCount(row, index, type) {
        this.getNumTotalPrice();
        if (type != 'tableHandleKeyUp') {
          this.tableHandleKeyUp(this.form.datasource[index], index, 'sum');
        }
      },

      //计算总金额
      getNumTotalPrice(sum = 0) {
        this.form.datasource.forEach((r, index) => {
          this.$set(
            r,
            'discountSinglePrice',
            r.singlePrice ? Number(r.singlePrice) : ''
          );
          if (r.singlePrice && r.totalCount) {
            console.log(r, 'r.totalPrice');
            r.totalPrice = this.getAllPrice(r);
            r.discountTotalPrice = this.getDiscountTotalPrice(r);
            this.$set(
              this.form.datasource[index],
              'totalPrice',
              Number(r.totalPrice)
            );
            this.$set(
              this.form.datasource[index],
              'discountTotalPrice',
              Number(r.discountTotalPrice)
            );
            sum += Number(r.totalPrice);
          } else {
            this.$set(r, 'totalPrice', '');
            this.$set(r, 'discountTotalPrice', '');
          }
        });
        return isNaN(sum) ? 0 : sum;
      },

      //设置优惠后总金额修改产品单价
      discountInputByOrder(val) {
        this.form.discountTotalPrice = val;
        //获取优惠金额和总计的差价
        this.form.datasource.forEach((item) => {
          if (val === 0) {
            item.discountTotalPrice = 0;
            item.discountSinglePrice = 0;
            return;
          }
          if (!val) {
            item.discountTotalPrice = item.totalPrice;
            item.discountSinglePrice = item.singlePrice;
            return;
          }
          //获取折让单价
          item.discountSinglePrice = this.getDiscountSinglePrice(item);
          item.discountTotalPrice = this.getDiscountTotalPrice(item);
        });
        this.$refs.table.reload();
      },
      //获取折让单价
      getDiscountSinglePrice(row) {
        let num =
          (Number(this.form.discountTotalPrice) / Number(this.allPrice)) *
          Number(row.singlePrice);
        return isNaN(num) ? '' : num;
      },
      //获取合计
      getAllPrice(row) {
        let num = 0;
        switch (this.pricingWay) {
          case 1: //按数量计价计算总金额
            num = Number(row.singlePrice) * Number(row.totalCount);
            break;
          case 2: //按重量计价计算总金额
            num =
              Number(row.singlePrice) *
              Number(row.totalCount) *
              Number(row.singleWeight);
            break;
        }
        return isNaN(num) ? '' : num.toFixed(2);
      },
      //获取折让合计
      getDiscountTotalPrice(row) {
        let num = 0;
        switch (this.pricingWay) {
          case 1: //按数量计价计算折让合计
            num = Number(row.discountSinglePrice) * Number(row.totalCount);
            break;
          case 2: //按重量计价计算折让合计
            num =
              Number(row.discountSinglePrice) *
              Number(row.totalCount) *
              Number(row.singleWeight);
            break;
        }
        return isNaN(num) ? '' : num.toFixed(2);
      },
      validateTotalCount(row) {
        return (rule, value, callback) => {
          if (isNaN(value) || Number(value) <= 0) {
            this.$message.error('请输入大于0的数');
            callback(new Error('请输入大于0的数字'));
          } else if (Number(value) > row.warehouseNum) {
            // this.$message.error('输入的数字不能大于仓库物品数');
            // callback(new Error('输入的数字不能大于仓库物品数'));
            callback();
          } else if (Number(value) > row.orderTotalCount) {
            this.$message.error('输入的数字不能大于最大发货值');
            callback(new Error('输入的数字不能大于最大发货值'));
          } else {
            callback();
          }
        };
      },
      // 返回列表数据
      getTableValue() {
        let comitDatasource = this.form.datasource;
        if (comitDatasource.length === 0) return [];
        comitDatasource.forEach(async (v) => {
          v.totalCount = Number(v.totalCount);
          v.technicalDrawings = Array.isArray(v.technicalDrawings)
            ? v.technicalDrawings
            : [];
          v.customerReqFiles = Array.isArray(v.customerReqFiles)
            ? v.customerReqFiles
            : [];
          v.industryArtFiles = v.industryArtFiles || [];
          v.otherFiles = v.otherFiles || [];
        });
        return comitDatasource;
      },
      getPrice() {
        return [this.allPrice];
      },

      //修改回显
      putTableValue(data, type) {
        if (data) {
          if (type == 'add') {
            data.forEach((item) => {
              const data = this.warehouseList.find(
                (val) => val.id == item.warehouseList[0]?.warehouse_id
              );
              item['warehouseId'] = data.id;
              item['warehouseName'] = data.name;
              item['warehouseCode'] = data.code;
              item.totalPrice = 0;
              item.singlePrice = 0;
              item.discountSinglePrice = 0;
              item.discountTotalPrice = 0;
            });
          }

          this.form.datasource = [...this.form.datasource,...data];
          data.forEach(async (item, index) => {
            if (item.warehouseId) {
              this.$set(
                this.form.datasource[index],
                'warehouseNum',
                await getWarehouseOutStock({
                  warehouseId: item.warehouseId,
                  code: item.productCode
                })
              );
            }
            //保存初始收货总重
            this.oldReceiveTotalWeight = this.form.datasource.map((item) => {
              return {
                productCode: item.productCode,
                oldReceiveTotalWeight: item.receiveTotalWeight
              };
            });
            this.form.datasource.forEach((item, index) => {
              item.sendTotalWeight =
                item.sendTotalWeight ||
                Number(item.totalCount) * Number(item.singleWeight) ||
                0;
              if (this.outsourceSendCode) {
                item.increaseTotalWeight =
                  Number(item.receiveTotalWeight) -
                  Number(item.sendTotalWeight);
              } else {
                item.increaseTotalWeight =
                  item.increaseTotalWeight || item.receiveTotalWeight || 0;
              }
              this.changeNum(item.totalCount, index);
            });
          });
        }
      },

      remove(i) {
        this.form.datasource.splice(i, 1);
        this.setSort();
      },
      // 清空表格
      restTable() {
        this.form.datasource = [];
      },
      // 重新排序
      setSort() {
        this.form.datasource.forEach((n, index) => {
          n.key = index + 1;
        });
      },

      validateForm(callback) {
        //开始表单校验
        this.$refs.form.validate((valid) => {
          callback(valid);
        });
      }
    }
  };
</script>
<style lang="scss" scoped>
  .headbox {
    display: flex;
    justify-content: flex-start;
    align-items: center;

    .amount {
      font-size: 14px;
      font-weight: bold;
      padding-right: 30px;
    }
  }

  .time-form .el-form-item {
    margin-bottom: 0 !important;
  }

  ::v-deep .period {
    display: flex;

    .borderleftnone {
      .el-input--medium .el-input__inner {
        border-top-right-radius: 0;
        border-bottom-right-radius: 0;
      }
    }

    .borderrightnone {
      .el-input--medium .el-input__inner {
        border-top-left-radius: 0;
        border-bottom-left-radius: 0;
      }
    }
  }

  ::v-deep .time-form tbody > tr:hover > td {
    background-color: transparent !important;
  }

  ::v-deep .time-form .el-table tr {
    background-color: #ffffff;
  }

  .pricebox {
    display: flex;
    justify-content: flex-start;
    align-items: center;
    font-weight: bold;
  }
</style>
