<template>
  <div class="borderless">
    <div class="customer-head">
      <div class="customer-back">
        <el-button type="danger" style="border: none;background: none;color: red" icon="el-icon-arrow-left"
                   @click="backToList">返回列表
        </el-button>
      </div>
      <div class="upper_right_button">
        <el-button type="primary"
                   size="small"
                   v-if="viewDisabled"
                   class="el-button--small-yh "
                   :loading="buttonLoading"
                   @click.stop="openEdit()">编辑
        </el-button>
        <el-button type="primary"
                   size="small"
                   :loading="buttonLoading"
                   class="el-button--small-yh"
                   :disabled="!form.id || viewDisabled"
                   @click.stop="confirmGoods">
          {{goodsDisable ? "撤回发货":"确认发货"}}
        </el-button>

        <el-dropdown style="padding: 0 8px;line-height: 0">
          <el-button
            type="success"
            :loading="buttonLoading"
            :disabled="!form.id || viewDisabled"
            size="small"
          >
            业务处理<i class="el-icon-arrow-down el-icon--right"></i>
          </el-button>
          <el-dropdown-menu slot="dropdown">
            <el-dropdown-item
              :loading="buttonLoading"
              :disabled="!form.id  || viewDisabled"
              @click.native="createData()">创建单据
            </el-dropdown-item>
            <el-dropdown-item
              :loading="buttonLoading"
              :disabled="!form.id  || viewDisabled"
              @click.native="copyData()">复制单据
            </el-dropdown-item>
          </el-dropdown-menu>
        </el-dropdown>

        <el-button
          class="el-button--small-yh"
          type="primary"
          size="small"
          :loading="buttonLoading"
          :disabled="disabled  || goodsDisable || viewDisabled"
          @click="editCustomer"
        >保存数据
        </el-button>
      </div>
    </div>
    <div class="customer-main">
      <el-form :model="form" ref="form" label-width="130px" class="demo-ruleForm">
        <containerTitle title="基础信息"></containerTitle>
        <basic-container style="margin-bottom: 10px">
          <el-row>
            <el-col v-for="(item,index) in basicData.column" :key="index" :span="item.span?item.span:8">
              <el-form-item :label="item.label" :prop="item.prop" :rules="item.rules">
                <el-date-picker v-if="item.type === 'datetime'" style="width: 100%;" v-model="form[item.prop]" :disabled="goodsDisable || viewDisabled" size="small" type="date" placeholder="请选择日期" value-format="yyyy-MM-dd HH:mm:ss"/>
                <crop-select
                  v-else-if="item.prop === 'corpId'"
                  v-model="form[item.prop]"
                  corpType="KH"
                  :disabled="viewDisabled || goodsDisable"
                  style="width: 100%"
                ></crop-select>
                <el-select v-else-if="item.prop === 'storageId'" style="width: 100%" :disabled="goodsDisable || viewDisabled"  @change="warehouseChange" v-model="form[item.prop]" size="small" placeholder="请选择" clearable filterable>
                  <el-option v-for="(item,index) in storageList" :key="index" :label="item.stockName" :value="item.storageId"></el-option>
                </el-select>
                <el-input type="textarea" v-else-if="(item.prop === 'deliveryRemarks')" :disabled="goodsDisable || viewDisabled" v-model="form[item.prop]"   size="small" autocomplete="off" placeholder="请输入"></el-input>
                <el-input type="age" v-else v-model="form[item.prop]" :disabled="item.disabled?true:false || goodsDisable || viewDisabled" placeholder="请输入"  size="small" autocomplete="off"></el-input>
              </el-form-item>
            </el-col>
          </el-row>
        </basic-container>
        <containerTitle title="发货明细"></containerTitle>
        <basic-container style="margin-bottom: 10px">
          <avue-crud
            :option="customerContact"
            v-model="contactsForm"
            :data="contactsData"
            ref="crudContact"
            @row-save="rowSave"
            @row-click="handleRowClick"
            @row-update="rowUpdate"
            @saveColumn="saveColumn"
            @resetColumn="resetColumn"
            @row-del="rowDel"
          >
            <template slot-scope="{row}" slot="billNo">
              <span v-if="row.$cellEdit" class="required_fields">*</span>
              <el-input
                v-if="row.$cellEdit"
                v-model="row.billNo"
                style="width: 90%"
                placeholder=" "
                size="small"
                @change="bingOut(row)"
              ></el-input>
              <span v-else>{{ row.billNo }}</span>
            </template>
            <template slot-scope="{row}" slot="contractNumber">
              <span v-if="row.$cellEdit" class="required_fields">*</span>
              <el-select
                v-if="row.$cellEdit"
                style="width:90% !important;"
                v-model="row.contractNumber"
                placeholder=" "
                size="small"
                clearable
                filterable
              >
                <el-option
                  style="width:90%"
                  @change="sumOrderNo(row)"
                  v-for="(item,index) in contractDic"
                  :key="index"
                  :label="item.orderNo"
                  :value="item.orderNo"
                ></el-option>
              </el-select>
              <span v-else>{{ row.contractNumber }}</span>
            </template>
            <template slot="priceCategory" slot-scope="{row,index}">
              <span v-if="row.$cellEdit" class="required_fields">*</span>
              <goods-select
                v-if="row.$cellEdit"
                style="width:90%"
                v-model="row.priceCategoryNames"
                @valueName="(value) => valueName(value,row)"
                :configuration="itemConfiguration"
              >
              </goods-select>
              <span v-else>{{ row.priceCategoryNames }}</span>
            </template>
            <template slot="invoiceWeight" slot-scope="{ row }">
              <span v-if="row.$cellEdit" class="required_fields">*</span>
              <el-input
                style="width:90%"
                v-if="row.$cellEdit"
                v-model="row.invoiceWeight"
                placeholder="请输入"
                size="small"
                oninput='this.value=this.value.replace(/[^(\d.)]/g,"").replace(/^(\d+)\.(\d\d\d\d\d\d).*$/, "$1.$2")'
                @change="totalChange(row.invoiceWeight)"
              ></el-input>
              <span v-else>{{ row.invoiceWeight }}</span>
            </template>
            <template slot="billWeight" slot-scope="{ row }">
              <el-input
                v-if="row.$cellEdit"
                v-model="row.billWeight"
                placeholder="请输入"
                size="small"
                oninput='this.value=this.value.replace(/[^(\d.)]/g,"").replace(/^(\d+)\.(\d\d\d\d\d\d).*$/, "$1.$2")'
                @input="billWeightChange(row)"
                @change="totalChange(row.billWeight)"
              ></el-input>
              <span v-else>{{ row.billWeight }}</span>
            </template>
            <template slot="price" slot-scope="{ row }">
              <el-input
                v-if="row.$cellEdit"
                v-model="row.price"
                placeholder="请输入"
                size="small"
                oninput='this.value=this.value.replace(/[^(\d.)]/g,"").replace(/^(\d+)\.(\d\d).*$/, "$1.$2")'
                @input="priceChange(row)"
              ></el-input>
              <span v-else>{{ row.price }}</span>
            </template>
            <template slot="actualQuantity" slot-scope="{ row }">
              <span v-if="row.$cellEdit" class="required_fields">*</span>
              <el-input
                v-if="row.$cellEdit"
                v-model="row.actualQuantity"
                style="width: 90%"
                placeholder="请输入"
                size="small"
                oninput='this.value=this.value.replace(/[^(\d.)]/g,"").replace(/^(\d+)\.(\d\d).*$/, "$1.$2")'
              ></el-input>
              <span v-else>{{ row.actualQuantity | roundNumbers}}</span>
            </template>
            <template slot="contractAmount" slot-scope="{ row }">
              <el-input
                v-if="row.$cellEdit"
                v-model="row.contractAmount"
                placeholder="请输入"
                size="small"
                oninput='this.value=this.value.replace(/[^(\d.)]/g,"").replace(/^(\d+)\.(\d\d).*$/, "$1.$2")'
              ></el-input>
              <span v-else>{{ row.contractAmount }}</span>
            </template>
            <template slot="cntrNo" slot-scope="{ row }">
              <span v-if="row.$cellEdit" class="required_fields">*</span>
              <el-select v-if="row.$cellEdit"
                         v-model="row.cntrNo"
                         style="width:90% !important;"
                         size="small"
                         placeholder="请选择"
                         @change="selectInventory(row)"
                         clearable
                         filterable>
                <el-option v-for="(item,index) in cntrNoList"
                           :key="index"
                           :label="item.cntrNo"
                           :value="item.cntrNo"
                >
                </el-option>
              </el-select>
              <span v-else>{{ row.cntrNo }}</span>
            </template>
            <template slot-scope="{row,index}" slot="menu">
              <el-button
                type="text"
                size="small"
                :disabled="goodsDisable || viewDisabled"
                @click="rowCell(row,index)"
              >{{ row.$cellEdit ? '保存' : '修改' }}
              </el-button>
              <el-button
                type="text"
                size="small"
                :disabled="goodsDisable || viewDisabled"
                @click="rowDel(row,index)"
              >删除
              </el-button>
            </template>
            <template slot="menuLeft" slot-scope="{size}">
              <el-button type="primary"
                         icon="el-icon-plus"
                         size="small"
                         :disabled="goodsDisable || viewDisabled"
                         @click="openMarketDialog"
              >录入明细
              </el-button>
            </template>
          </avue-crud>
        </basic-container>
        <containerTitle title="附件上传"></containerTitle>
        <basic-container style="margin-bottom: 40px">
          <avue-crud
            :option="upLoadOption"
            v-model="upLoadForm"
            :data="upLoadData"
            @row-save="upLoadSave"
            @row-update="upLoadUpdate"
            @row-del="upLoadDel"
          ></avue-crud>
        </basic-container>
      </el-form>
    </div>

    <el-dialog
      title="导入销售"
      append-to-body
      class="el-dialogDeep"
      :visible.sync="marketDialog"
      width="60%"
      :close-on-click-modal="false"
      :destroy-on-close="true"
      :modal-append-to-body='false'
      :close-on-press-escape="false"
      v-dialog-drag>
      <market-detail
        :marketParams="marketParams"
        @closeFun="!marketDialog"
        @importMarket="importMarket"
        @close="closeMarkeDialog"
        systemType="JK"
      >
      </market-detail>
    </el-dialog>
  </div>
</template>

<script>
import customerContact from "./config/customerContact.json"
import {detailInvoiceList,
  submitInvoiceList,
  removeGoodsItem,
  confirmGoods,
  cancelGoods
} from "@/api/importTrade/invoice"
import { isPercentage,roundNumbers } from "@/util/validate";
import upLoadOption from "../../exportTrade/purchaseContract/config/uploadList.json";
import { contrastObj,contrastList } from "@/util/contrastData";
import {getStorage} from "@/api/importTrade/receipt"
import { getListOrgOrderNo } from "@/api/importTrade/salesContract"
import  marketDetail from "@/components/procurement/market";
import {selectJKGoodsNum} from "@/api/basicData/inventoryAccount"
import _ from "lodash";
import  {generateShipment} from "@/api/importTrade/salesContract"
import { getOrgOrderNo } from "@/api/importTrade/salesContract"

export default {
  name: "detailsPageEdit",
  props: {
    detailData: {
      type: Object
    }
  },
  components: {
    marketDetail,
  },
  filters: {
    isPercentage(val) {
      return isPercentage(val);
    },
    roundNumbers(val){
      return roundNumbers(val);
    }
  },
  data() {
    return {
      form: {},
      buttonLoading: false,
      disabled: false,
      goodsDisable: false,
      marketDialog: false,
      viewDisabled:false,
      customerContact: customerContact,
      contactsForm: {},
      marketParams:{},
      contactsData: [],
      currencyDic:[],
      storageIdDic: [],
      contractDic: [],
      creditList:[],
      cntrNoList:[],
      storageList:[],
      selectKind: -1,
      sConfiguration: {
        multipleChoices: false,
        multiple: false,
        disabled: false,
        searchShow: true,
        collapseTags: false,
        placeholder: '请点击右边按钮选择',
        dicData: []
      },
      itemConfiguration: {
        multipleChoices: false,
        multiple: false,
        disabled: false,
        searchShow: true,
        collapseTags: false,
        placeholder: '请点击右边按钮选择',
        dicData: []
      },
      basicData: {
        column: [
          {
            label: '系统号',
            prop: 'sysNo',
            disabled: true,
          },
          {
            label: '客户名称',
            prop: 'corpId',
            span: 16,
            type: 'component',
            rules: [
              {
                required: true,
                message: ' ',
                trigger: 'blur'
              }
            ]
          },
          {
            label: '合同号',
            prop: 'orderNo',
            rules: [
              {
                required: false,
                message: ' ',
                trigger: 'blur'
              }
            ]
          }, {
            label: '仓库名称',
            prop: 'storageId',
            rules: [
              {
                required: false,
                message: ' ',
                trigger: 'blur'
              }
            ]
          },
          {
            label: '收货日期',
            prop: 'businessDate',
            type: 'datetime',
            rules: [
              {
                required: false,
                message: ' ',
                trigger: 'blur'
              }
            ]
          },
          {
            label: '收货人',
            prop: 'arrivalContact',
            rules: [
              {
                required: false,
                message: ' ',
                trigger: 'blur'
              }
            ]
          },
          {
            label: '收货电话',
            prop: 'arrivalTel',
            rules: [
              {
                required: false,
                message: ' ',
                trigger: 'blur'
              }
            ]
          },
          {
            label: '收货地址',
            prop: 'arrivalAddress',
            rules: [
              {
                required: false,
                message: ' ',
                trigger: 'blur'
              }
            ]
          },
          {
            label: '业务员',
            prop: 'saleman',
            dicData: [],
            rules: [
              {
                required: false,
                message: ' ',
                trigger: 'blur'
              }
            ]
          },
          {
            label: '发票重量',
            prop: 'invoiceWeight',
            disabled: true,
            rules: [
              {
                required: false,
                message: ' ',
                trigger: 'blur'
              }
            ]
          },
          {
            label: '码单重量',
            prop: 'billWeight',
            disabled: true,
            rules: [
              {
                required: false,
                message: ' ',
                trigger: 'blur'
              }
            ]
          },
          {
            label: '备注',
            prop: 'deliveryRemarks',
            span: 24,
            mock: {
              type: 'county'
            }
          }
        ]
      },
      //上传文件
      upLoadOption: upLoadOption,
      upLoadData: [],
      upLoadForm: {},
      commodityData: false,
      tableData: [],
      //新旧值对比
      oldForm: {},
      oldContactsData: [],
      oldUpLoadData: [],
    }
  },
  async created() {
    this.customerContact = await this.getColumnData(this.getColumnName(44), customerContact);
    //币别
    this.getWorkDicts("currency").then(res =>{
      this.currencyDic = res.data.data
    })
    getStorage().then(res => {
      this.storageIdDic = res.data
    })

    if(this.detailData.view){
      this.viewDisabled = true
    }

    if (this.detailData.id) {
      this.buttonLoading = true;
      let id = this.detailData.id.replace(/\"/g, "")
      detailInvoiceList(id).then(res => {
        this.afterData(res.data.data)
      }).finally(() => {
        this.buttonLoading = false
      })
    }
    if (this.detailData.form) {
      this.buttonLoading = true;
      generateShipment(this.detailData.form).then(res=>{
        this.form = res.data.data

        this.$set(this.form,"saleman",this.form.salesName)
        //是否计算合同号
        this.form.id = null
        this.form.sysNo = null
        this.form.orderItemsList.forEach((item, index) => {
          item.srcOrgNo = this.form.orderNo
          item.srcOrderNo = this.form.orderNo
          item.srcId = item.id
          item.contractNumber = item.orgOrderNo  //合同号
          item.orgOrderNo = this.form.orgOrderNo
          item.contractAmount = item.amount
          item.currency = this.form.currency
          item.exRate = this.form.exchangeRate
          if (item.actualQuantity !== 0) {   //如果发过货
            item.actualQuantity = _.subtract(item.orderQuantity, item.actualQuantity); //发货件数 =  总件数 - 已发件数
          } else {
            item.actualQuantity = item.orderQuantity;
          }
          //生成时 将合同号放到 明细合同下拉列表里   去重
          this.contractDic.push({orderNo:item.contractNumber})
          this.checkCntrNoList(item)
          delete item.orderQuantity
          delete item.id
        })
        this.contactsData = this.form.orderItemsList
        this.contractDicList() //合同下拉列
        this.sumOrderNo();
        delete this.form.orderItemsList
      }).finally(()=>{
        this.buttonLoading = false
      })
    }
  },
  methods: {
    //币别选择
    // currencyChange(row){
    //   if(row.currency == "CNY"){
    //     this.$set(row,"exRate",1)
    //   }else if(row.currency == "USD"){
    //     this.$set(row,"exRate",6.3686)
    //   }else{
    //     this.$set(row,"exRate",7.1749)
    //   }
    // },
    //货品物种
    valueName(value, row) {
      this.$set(row, "priceCategory", value)
    },
    // 关闭导入销售弹窗
    closeMarkeDialog() {
      this.marketDialog = false
    },
    //选择仓库  带出库存
    warehouseChange() {
      this.contactsData.forEach(item => {
        this.selectInventory(item);
      })
    },
    //合同号合计
    sumOrderNo(row) {
      //拿到所有明细合同号 去重加逗号放到主表合同号
      const contractNumberList = this.contactsData.map(item => {
         return  item.contractNumber
      })
      this.$set(this.form, 'orderNo', Array.from(new Set(contractNumberList)).join(","))
      if (row) {
        //查询库存
        this.selectInventory(row)
        //查询箱号
        this.checkCntrNoList(row)
      }
    },
    //码单合计
    totalChange() {
      let invoiceList = this.contactsData.map(item => {
        if (item.invoiceWeight) {
          return parseFloat(item.invoiceWeight);
        } else return 0
      });
      let billList = this.contactsData.map(item => {
        if (item.billWeight) {
          return parseFloat(item.billWeight);
        } else return 0
      });
      this.$set(this.form, "invoiceWeight", invoiceList.reduce((n, m) => n + m))
      this.$set(this.form, "billWeight", billList.reduce((n, m) => n + m))
    },
    //提单号带出合同号
    bingOut(row) {
      getOrgOrderNo(row.billNo).then(res => {
        this.contractDic.push(res.data)
        if(res.data.length !== 0){
          row.contractNumber = res.data[0].orderNo
        }else{
          row.contractNumber = ''
        }
      })
      this.contractDicList() //合同下拉列
      this.sumOrderNo(row); //明细列表合成主表合同
      this.checkCntrNoList(row) //箱号 仓库下拉列表
      this.selectInventory(row) //查询库存
    },
    //合同号下拉合计
    contractDicList(){
      this.contractDic = this.contractDic.reduce((all, next) => all.some((atom) => atom['orderNo'] == next['orderNo']) ? all : [...all, next],[]);
    },
    //查询 箱号 仓库list
    checkCntrNoList(item){
      if(item.billNo && item.contractNumber && item.priceCategory){
        getListOrgOrderNo(item.billNo,item.contractNumber,item.priceCategory).then(res => {
          this.creditList = res.data
          let storageList = this.creditList.reduce((all, next) => all.some((atom) => atom['storageId'] == next['storageId']) ? all : [...all, next],[]);
          let cntrNoList = this.creditList.reduce((all, next) => all.some((atom) => atom['cntrNo'] == next['cntrNo']) ? all : [...all, next],[]);
          storageList.map(item=>{
            let param ={
              storageId:item.storageId,
              stockName:item.stockName
            }
            this.storageList.push(param)
          })
          cntrNoList.map(item=>{
            let params ={
              cntrNo:item.cntrNo,
            }
            this.cntrNoList.push(params)
          })
        }).finally(()=>{
          //再次去重
          this.storageList = this.storageList.reduce((all, next) => all.some((atom) => atom['storageId'] == next['storageId']) ? all : [...all, next],[]);
          this.cntrNoList = this.cntrNoList.reduce((all, next) => all.some((atom) => atom['cntrNo'] == next['cntrNo']) ? all : [...all, next],[]);
        })
      }
    },
    //查询库存
    selectInventory(row) {
      if (row.billNo && row.contractNumber && row.priceCategory && row.cntrNo && this.form.storageId) {
        const params = {
          billNo: row.billNo,
          contractNumber: row.contractNumber,
          priceCategory: row.priceCategory,
          storageId: this.form.storageId,
          cntrNo: row.cntrNo
        }
        selectJKGoodsNum(params).then(res => {
          if(res.data.data){
            this.$set(this.contactsData[row.$index],"inventoryNumber",res.data.data.inQuantity)
            this.$set(this.contactsData[row.$index],"inWeight",res.data.data.inWeight)
          }else {
            this.$set(this.contactsData[row.$index],"inventoryNumber",0.00)
            this.$set(this.contactsData[row.$index],"inWeight",0.00)
          }
        })
      }
    },
    //单价
    priceChange(row) {
      if (row.price && row.billWeight) {
        row.contractAmount = _.multiply(row.billWeight, row.price).toFixed(2);
      }
    },
    billWeightChange(row) {
      if (row.billWeight &&  row.price) {
        row.contractAmount = _.multiply(row.billWeight, row.price).toFixed(2);
      }
    },
    //导入销售明细
    importMarket(list) {
      list.forEach(item => {
        item.contractNumber = item.orgOrderNo;
        item.contractAmount = item.amount;
        item.actualQuantity = item.orderQuantity;
        item.srcOrgNo = item.orderNo;
        item.srcOrderNo = item.orderNo;
        item.srcId = item.id;
        //根据提单 合同 货品 查询箱号库存list
        this.contractDic.push({orderNo:item.contractNumber})
        this.checkCntrNoList(item)
        this.selectInventory(item);
        delete item.id
        this.$refs.crudContact.rowCellAdd(item);
      })

      this.totalChange();  //计算码单 发票
      this.sumOrderNo();   //合并合同号
      this.contractDicList() //合同下拉列
      this.marketDialog = false;
    },
    //选择货物品种
    choice(row) {
      this.dialogVisible = true;
      this.selectKind = row.$index;
    },
    //打开导入销售
    openMarketDialog(){
      this.marketDialog = true
      if(this.contactsData.length !=0){
        this.marketParams = {
          billNo:this.contactsData[0].billNo,
          contractNumber:this.contactsData[0].contractNumber
        }
      }
    },
    //新增商品信息保存触发
    rowSave(row, done, loading) {
      done()
    },
    //点击行可编辑
    handleRowClick(row, event, column) {

    },
    //商品编辑
    rowCell(row, index) {
      this.$refs.crudContact.rowCell(row, index)
    },
    //修改商品信息触发
    rowUpdate(row, index, done, loading) {
      done(row);
    },
    //删除商品信息触发
    rowDel(row, index, donerowDel) {
      this.$confirm("确定将选择数据删除?", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning"
      }).then(() => {
        //商品判断是否需要调用删除接口
        if (row.id) {
          removeGoodsItem(row.id).then(res => {
            this.$message({
              type: "success",
              message: "操作成功!"
            });
            this.contactsData.splice(index, 1);
          })
        } else {
          this.$message({
            type: "success",
            message: "操作成功!"
          });
          this.contactsData.splice(index, 1);
        }
      }).finally(()=>{
        this.totalChange()
      })
    },
    //上传文件保存
    upLoadSave(row, done, loading) {
      this.upLoadData.push(row)
      done()
    },
    //修改附件上传触发
    upLoadUpdate(row, done) {
      done(row);
    },
    //删除附件上传触发
    upLoadDel(row, index,) {
      this.$confirm("确定将选择数据删除?", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning"
      }).then(() => {
        this.$message({
          type: "success",
          message: "操作成功!"
        });
        this.bankOfDepositData.splice(index, 1);
      })
    },
    //发货
    confirmGoods() {
      if(this.verificationData()){
        if (!this.goodsDisable) {
          this.$confirm("是否确认发货?", {
            confirmButtonText: "确定",
            cancelButtonText: "取消",
            type: "warning"
          }).then(() => {
            if(!this.form.storageId){
              return this.$message.error(`发货时仓库名称不能为空!`);
            }

            this.buttonLoading = true;
            this.form.deliveryItemsList = this.contactsData;
            confirmGoods(this.form).then(res => {
              if (res.data.success) {
                this.$message.success("发货成功!")
                this.afterData(res.data.data)
              }
            }).finally(() => {
              this.buttonLoading = false
            })
          })
        } else {
          this.$confirm("是否撤回发货?", {
            confirmButtonText: "确定",
            cancelButtonText: "取消",
            type: "warning"
          }).then(() => {
            this.buttonLoading = true;
            this.form.deliveryItemsList = this.contactsData;
            cancelGoods(this.form).then(res => {
              if (res.data.success) {
                this.$message.success("撤销成功!")
                this.afterData(res.data.data)
              }
            }).finally(() => {
              this.buttonLoading = false
            })
          })
        }
      }
    },
    //修改提交触发
    editCustomer(status) {
      this.$refs["form"].validate((valid) => {
        for (let i = 0; i < this.contactsData.length; i++) {
          if (this.contactsData[i].billNo === "") {
            return this.$message.error(`请输入第${i + 1}行的提单号`);
          }
          if (this.contactsData[i].contractNumber === "") {
            return this.$message.error(`请输入第${i + 1}行的合同号`);
          }
          if (this.contactsData[i].priceCategory === "") {
            return this.$message.error(`请输入第${i + 1}行的货物品种`);
          }
          if (this.contactsData[i].actualQuantity === "") {
            return this.$message.error(`请输入第${i + 1}行的件数`);
          }
          if (this.contactsData[i].invoiceWeight === (null || "" )) {
            return this.$message.error(`请输入第${i + 1}行的发票重量`);
          }
        }

        for (let i = 0; i < this.contactsData.length; i++) {
          if (this.contactsData[i].billNo === (null || "" )) {
            return this.$message.error(`请输入第${i + 1}行的提单号`);
          }
          if (this.contactsData[i].contractNumber === (null || "" )) {
            return this.$message.error(`请输入第${i + 1}行的合同号`);
          }
          if (this.contactsData[i].priceCategory === (null || "" )) {
            return this.$message.error(`请输入第${i + 1}行的货物品种`);
          }
          if (this.contactsData[i].cntrNo === (null || "" )) {
            return this.$message.error(`请输入第${i + 1}行的箱号`);
          }
          if (this.contactsData[i].actualQuantity === (null || "" )) {
            return this.$message.error(`请输入第${i + 1}行的件数`);
          }
        }
        //提单号合体

        this.form.billNo =Array.from(new Set(this.contactsData.map(item =>{return item.billNo}))).join(",")

        if (valid) {
          let submitDto = {
            ...this.form,
            deliveryItemsList: this.contactsData
          };
          this.buttonLoading = true
          submitInvoiceList(submitDto).then(res => {
            if (res.data.success) {
              this.$message.success("操作成功!")
              detailInvoiceList(res.data.data.id).then(res => {
              this.afterData(res.data.data)
              })
            }
          }).finally(() => {
            this.buttonLoading = false
          })
          if (status === true) {
            this.$emit("goBack");
          }
        } else {
          return false;
        }
      });
    },
    //数据回显
    afterData(data){
      this.form = data;
      this.oldForm = Object.assign({},data);
      this.goodsDisable = data.deliveryStatus === "已发货" ?   true :false
      if (data.deliveryItemsList) {
        this.contactsData = this.form.deliveryItemsList
        this.contactsData.map(item=>{
          this.contractDic.push({orderNo:item.contractNumber})
          this.checkCntrNoList(item)
          this.contractDicList() //合同下拉列
        })
        this.oldContactsData = this.deepClone(this.form.deliveryItemsList)
      }
      if(data.deliveryFilesList){
        this.upLoadData = data.deliveryFilesList
        this.oldUpLoadData = this.deepClone(data.deliveryFilesList)
      }
      if(this.detailData.status === 'copy'){
        this.copyData()
      }
    },
    //验证
    verificationData(){
      if(contrastObj(this.form,this.oldForm) || contrastList(this.contactsData,this.oldContactsData)
        || contrastList(this.upLoadData,this.oldUpLoadData)
      ){
        this.$confirm("数据发生变化，请先提交保存!", "提示", {
          confirmButtonText: "保存",
          cancelButtonText: "取消",
          type: "warning",
        }).then(() => {
          this.editCustomer()
        }).catch(()=>{
          return false
        })
      }else{
        return true
      }
    },
    createData(){
      if(this.verificationData()){
        this.$confirm("确定创建新的单据吗?", "提示", {
          confirmButtonText: "保存",
          cancelButtonText: "取消",
          type: "warning",
        }).then(() => {
          this.form = {}
          this.oldForm = {}
          this.contactsData = []
          this.oldContactsData = []
          this.upLoadData = []
          this.oldUpLoadData = []
        })
      }
    },
    copyData(){
      if(this.verificationData()){
        this.goodsDisable = false

        delete  this.form.id  //删除id
        delete  this.form.deliveryStatus
        this.$set(this.form,"sysNo","")//系统编号

        this.contactsData.forEach(item =>{
          delete item.id  //删除id
        })

        this.upLoadData.forEach(item =>{
          delete item.id  //删除id
        })

        this.oldForm = {}
        this.oldContactsData = []
        this.oldUpLoadData = []
        this.$message.success("复制成功!")
      }
    },
    async openEdit() {
      //标签页保存key
      this.inDetailsKey(this.$route.name,this.detailData.lockData);
      //单据是否锁定
      if(!await this.checkLocks(this.detailData.lockData)){
        this.onLock(this.detailData.lockData); //上锁
        this.viewDisabled = false
      }else{
        this.$message.warning('此单据已被锁定,请稍后再进行操作!')
      }
    },
    //返回列表
    async backToList() {
      //如果单据已被锁定 并且编辑按钮存在  则直接返回
      if(this.viewDisabled || !this.detailData.lockData){
        this.$emit("goBack");
        return
      }

      if (contrastObj(this.form, this.oldForm) || contrastList(this.contactsData, this.oldContactsData)
        || contrastList(this.upLoadData, this.oldUpLoadData)
      ) {
        this.$confirm("是否保存当前页面？", "提示", {
          confirmButtonText: "保存",
          cancelButtonText: "取消",
          type: "warning",
        }).then(() => {
          this.editCustomer(true)
        }).catch(() => {
          this.$emit("goBack");
        }).finally(()=>{
          if(this.form.id){
            this.unLock(this.detailData.lockData);
            this.leaveDetailsKey(this.$route.name);
          }
        })
      }else {
        this.$emit("goBack");
        if (this.form.id) {
          this.unLock(this.detailData.lockData);
          this.leaveDetailsKey(this.$route.name);
        }
      }
    },
    //列保存触发
    async saveColumn() {
      const inSave = await this.saveColumnData(
        this.getColumnName(44),
        this.customerContact
      );
      if (inSave) {
        this.$message.success("保存成功");
        //关闭窗口
        this.$refs.crudContact.$refs.dialogColumn.columnBox = false;
      }
    },
    async resetColumn() {
      const inSave = await this.delColumnData(
        this.getColumnName(44),
        customerContact
      );
      if (inSave) {
        this.$message.success("重置成功");
        this.customerContact = customerContact;
        //关闭窗口
        this.$refs.crudContact.$refs.dialogColumn.columnBox = false;
      }
    },
  },
}
</script>

<style lang="scss" scoped>

.back-icon {
  line-height: 64px;
  font-size: 20px;
  margin-right: 8px;
}

::v-deep .el-form-item {
  margin-bottom: 0;
}

.el-dialogDeep {
  ::v-deep .el-dialog {
    margin: 1vh auto 0 !important;
    padding-bottom: 10px !important;

    .el-dialog__body, .el-dialog__footer {
      padding-bottom: 0 !important;
      padding-top: 0 !important;
    }
  }
}
.required_fields{
  color: #F56C6C;
  display:inline-block;
  width: 7%
}
.upper_right_button{
  display: flex;
  position: fixed;
  right: 12px;
  top: 47px;
}
::v-deep .el-form-item__content{
  line-height: 32px;
}
</style>
