<template>
  <div>
    <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(0)">返回列表
        </el-button>
        <el-button v-if="detailData.id" type="danger" style="border: none;background: none;color: red" icon="el-icon-arrow-left"
                   @click="backToList(1)">返回审核列表
        </el-button>
      </div>
      <div class="add-customer-btn">
        <el-button class="el-button--small-yh" style="margin-right: 10px" type="primary" size="small" :disabled="form.status>0"
                   @click="confirmEdit" v-if="optionForm.disabled === true">编辑
        </el-button>
        <el-dropdown style="margin-right: 10px">
          <el-button type="primary" size="small">
            审核处理<i class="el-icon-arrow-down el-icon--right"></i>
          </el-button>
          <el-dropdown-menu slot="dropdown">
            <el-dropdown-item @click.native="pleaseCheck" :disabled="form.status>0">请核数据</el-dropdown-item>
            <el-dropdown-item @click.native="checkScheduleDialog = true,checkId = form.id">审核进度</el-dropdown-item>
            <el-dropdown-item @click.native="repealCancel" :disabled="form.status === 0 || !form.status"
                              v-if="!detailData.id">撤销请核
            </el-dropdown-item>
            <!--            <el-dropdown-item @click.native="changeApproveOpen">特殊审批</el-dropdown-item>-->
          </el-dropdown-menu>
        </el-dropdown>
        <el-button class="el-button--small-yh" type="primary" size="small" :disabled="form.status>0"
                   @click="editCustomer">保存数据
        </el-button>
      </div>
    </div>
    <trade-card title="基础资料" style="margin-top: 50px">
      <avue-form :option="optionForm" v-model="form" ref="form">
        <template slot="corpId" slot-scope="scope">
          <crop-select v-model="form.corpId" @getCorpData="(row)=>{getGSData(row,['form','corpName'])}"
                       :disabled="scope.disabled"
                       corpType="KH"/>
        </template>
        <template slot="shippingCompany" slot-scope="scope">
          <crop-select v-model="form.shippingCompanyId"
                       @getCorpData="(row)=>{getGSData(row,['form','shippingCompany'])}" :disabled="scope.disabled"
                       corpType="GS"/>
        </template>
        <template slot="departureHarbor" slot-scope="scope">
          <port-info :disabled="scope.disabled" v-model="form.departureHarborId" type="id"
                     @balabalaTow="(val)=>{balabala(val,['form','departureHarbor'])}"/>
        </template>
        <template slot="objectiveHarbor" slot-scope="scope">
          <port-info :disabled="scope.disabled" v-model="form.objectiveHarborId" type="id"
                     @balabalaTow="(val)=>{balabala(val,['form','objectiveHarbor'])}"/>
        </template>
      </avue-form>
    </trade-card>
    <trade-card title="箱信息">
      <avue-crud
          :option="option"
          :data="dataList"
          v-model="formTwo"
          ref="crud"
          :key="key"
          @row-save="rowSave"
          @row-update="rowUpdate"
          @selection-change="selectionChange"
          @resetColumn="resetColumnTwo('crud','option','optionBack',237.1)"
          @saveColumn="saveColumnTwo('crud','option','optionBack',237.1)">
        <template slot-scope="{type,size,row,index,disabled}" slot="menu">
          <el-button icon="el-icon-share" :size="size" :disabled="disabled" :type="type"
                     @click="track(row)">箱轨迹
          </el-button>
          <el-button icon="el-icon-edit" :size="size" :disabled="disabled" :type="type"
                     @click="$refs.crud.rowEdit(row,index)">编辑
          </el-button>
          <el-button icon="el-icon-delete" :size="size" :disabled="disabled" :type="type"
                     @click="rowDel(row,index,'MX')">删除
          </el-button>
        </template>
        <template slot="menuLeft" slot-scope="scope">

          <el-button type="success" size="small" :disabled="option.disabled" @click="importBox">导入</el-button>
          <el-dropdown>
            <el-button type="primary" size="small" :disabled="selectionList.length === 0 || option.disabled">
              起运港<i class="el-icon-arrow-down el-icon--right"></i>
            </el-button>
            <el-dropdown-menu slot="dropdown">
              <el-dropdown-item @click.native="statusUpdate('1','空箱离场')">空箱离场</el-dropdown-item>
              <el-dropdown-item @click.native="statusUpdate('1','重箱回场')">重箱回场</el-dropdown-item>
              <el-dropdown-item @click.native="statusUpdate('1','上船')">上船</el-dropdown-item>
            </el-dropdown-menu>
          </el-dropdown>
          <el-dropdown>
            <el-button type="primary" size="small" :disabled="selectionList.length === 0 || option.disabled">
              目的港<i class="el-icon-arrow-down el-icon--right"></i>
            </el-button>
            <el-dropdown-menu slot="dropdown">
              <el-dropdown-item @click.native="statusUpdate('2','重箱入场')">重箱入场</el-dropdown-item>
              <el-dropdown-item @click.native="statusUpdate('2','重箱出场')">重箱出场</el-dropdown-item>
              <el-dropdown-item @click.native="statusUpdate('2','空箱入场')">空箱入场</el-dropdown-item>
            </el-dropdown-menu>
          </el-dropdown>
        </template>
        <template slot="addressForm" slot-scope="scope">
          <port-info v-model="formTwo.addressId" type="id" :disabled="scope.disabled"
                     @balabalaTow="(val)=>{balabala(val,['formTwo','address'])}"/>
        </template>
<!--        <template slot="boxMakingCompanyIdForm" slot-scope="scope">-->
<!--          <crop-select v-model="formTwo.boxMakingCompanyId" :disabled="scope.disabled" :refresh="false"-->
<!--                       @getCorpData="(row)=>{getGSData(row,['formTwo','boxMakingCompany'])}" corpType="GS"/>-->
<!--        </template>-->
      </avue-crud>
    </trade-card>
    <!--    费用信息组件-->
    <box-cost :listData="dataListTwo" :codeValue="237.2" activeName="first" ref="boxCost"
              url="/api/blade-box-tube/transportItemFees/remove" @resetTrigger="resetTrigger"></box-cost>
    <trade-card title="附件明细">
      <c-upload
          basic
          :data="tradingBoxFilesList"
          :disabled="disabled"
          deleteUrl="/api/blade-box-tube/transportFiles/remove"
          :enumerationValue="237.3"
          display
      />
    </trade-card>
    <el-dialog
        append-to-body
        title="审批进度"
        class="el-dialogDeep"
        :visible.sync="checkScheduleDialog"
        width="40%"
        :close-on-click-modal="false"
        :destroy-on-close="true"
        :close-on-press-escape="false"
        v-dialog-drag
    >
      <check-schedule
          :checkId="checkId"
          :batchNo="batchNo"
          @choceScheduleFun="choceScheduleFun"
      ></check-schedule>
    </el-dialog>
    <el-dialog
        title="导入箱信息"
        :visible.sync="importOpen"
        :append-to-body="true"
        :destroy-on-close="true"
        :close-on-click-modal="false"
        top="1vh"
        width="70%">
      <span>
        <box-information v-model="importList"></box-information>
      </span>
      <span slot="footer" class="dialog-footer">
        <el-button @click="importOpen = false">取 消</el-button>
        <el-button type="primary" @click="confirmImport" :disabled="importList.length === 0">导 入</el-button>
      </span>
    </el-dialog>
    <el-dialog
        :title="title"
        :visible.sync="dialogVisible"
        :append-to-body="true"
        :destroy-on-close="true"
        :close-on-click-modal="false"
        v-if="dialogVisible"
        width="60%">
      <span>
        <avue-form :option="optionState" v-model="formState" ref="formState">
          <template slot="addressId" slot-scope="scope">
            <port-info v-model="formState.addressId" type="id" :disabled="scope.disabled"
                       @balabalaTow="(val)=>{balabala(val,['formState','address'])}"/>
          </template>
        </avue-form>
      </span>
      <span slot="footer" class="dialog-footer">
        <el-button @click="dialogVisible = false">取 消</el-button>
        <el-button type="primary" :disabled="disabledVisible" @click="confirmChange">确 定</el-button>
      </span>
    </el-dialog>
    <el-dialog
        title="箱轨迹"
        :visible.sync="boxTrack"
        :append-to-body="true"
        :destroy-on-close="true"
        :close-on-click-modal="false"
        width="80%">
      <span>
        <avue-crud
            ref="crudTrack"
            :option="optionTrack"
            :data="dataTrackList"
            :search.sync="search"
            :page.sync="page"
            :table-loading="loading"
            @on-load="onLoadTrack"
            @search-change="searchChange"
            @row-update="rowUpdateTrack"
            v-model="formTrack">
          <template slot-scope="{type,size,row,index,disabled}" slot="menu">
            <el-button icon="el-icon-edit" :size="size" :disabled="disabled" :type="type"
                       @click="$refs.crudTrack.rowEdit(row,index)">编辑
            </el-button>
            <el-button icon="el-icon-delete" :size="size" :disabled="disabled" :type="type"
                       @click="rowDel(row,index,'GJ')">删除
            </el-button>
          </template>
        </avue-crud>
      </span>
    </el-dialog>
  </div>
</template>

<script>
import {
  detail,
  submit,
  tradingBoxItem,
  tradingBoxFees,
  pleaseCheck,
  repealCancel, statusUpdate, archivestrajectory, update, tradingBoxGJ
} from "@/api/boxManagement/exportShipment/index.js";

import checkSchedule from "@/components/check/checkSchedule";
import {selectByName} from "@/api/boxManagement";
import {selectArchivesList} from "@/api/boxManagement/buyContainer";
import {dateFormat} from "@/util/date";

export default {
  name: "detailsPage",
  props: {
    onLoad: Object,
    detailData: Object
  },
  components: {checkSchedule},
  data() {
    return {
      key: 0,
      importList: [],
      title: '',
      loading: false,
      disabledVisible: false,
      boxTrack: false,
      importOpen: false,
      dialogVisible: false,
      checkScheduleDialog: false,
      checkId: '',
      batchNo: '',
      breakConfiguration: {
        multipleChoices: false,
        multiple: false,
        disabled: false,
        searchShow: true,
        collapseTags: false,
        clearable: true,
        placeholder: "请点击右边按钮选择",
        dicData: []
      },
      page: {
        pageSize: 20,
        currentPage: 1,
        total: 0,
        pageSizes: [10, 20, 30, 40, 50, 100, 200, 300, 400, 500]
      },
      formState: {},
      form: {},
      formTwo: {},
      formTrack: {},
      search: {},
      optionTrack: {},
      optionTrackBack: {
        align: 'center',
        index: true,
        addBtnText: "录入明细",
        refreshBtn: false,
        addBtn: false,
        span: 8,
        searchMenuPosition: "right",
        searchSpan: 8,
        searchIcon: true,
        searchIndex: 2,
        addRowBtn: false,
        cellBtn: false,
        editBtn: false,
        delBtn: false,
        menuWidth: 200,
        dialogTop: 25,
        dialogWidth: "80%",
        column: [{
          label: '箱号',
          prop: 'code',
          width: 100,
          overHidden: true,
          remote: true,
          filterable: true,
          type: "select",
          dicUrl: "/api/blade-box-tube/archives/selectArchivesList?size=10&current=1&code={{key}}",
          props: {
            label: "code",
            value: "code"
          },
          disabled: true
        }, {
          label: '地点',
          prop: 'address',
          width: 200,
          overHidden: true,
          formProp: 'address',
          search: true
        }, {
          label: '日期',
          prop: 'newDate',
          search: true,
          searchProp: 'newDateList',
          overHidden: true,
          type: "date",
          searchRange: true,
          searchDefaultTime: ["00:00:00", "23:59:59"],
          format: "yyyy-MM-dd",
          valueFormat: "yyyy-MM-dd HH:mm:ss"
        }, {
          label: '状态',
          prop: 'status',
          overHidden: true,
          filterable: true,
          type: 'select',
          dicUrl: "/api/blade-system/dict-biz/dictionary?code=box_access_status",
          props: {
            label: "dictValue",
            value: "dictKey"
          },
          search: true,
          disabled: true
        }]
      },
      dataTrackList: [],
      formSearch: {},
      optionState: {
        menuBtn: false,
        span: 12,
        column: [{
          label: '地点',
          prop: 'addressId',
          rules: [{
            required: true,
            message: " ",
            trigger: "blur"
          }]
        }, {
          label: '最新日期',
          prop: 'date',
          width: 100,
          search: true,
          overHidden: true,
          type: "date",
          format: "yyyy-MM-dd",
          valueFormat: "yyyy-MM-dd HH:mm:ss",
          rules: [{
            required: true,
            message: " ",
            trigger: "blur"
          }]
        }]
      },
      optionForm: {
        menuBtn: false,
        span: 6,
        column: [{
          label: '系统号',
          prop: 'sysNo',
          disabled: true
        }, {
          label: '客户',
          prop: 'corpId',
          width: 100,
          search: true,
          overHidden: true,
          rules: [{
            required: true,
            message: " ",
            trigger: "blur"
          }]
        }, {
          label: '船公司',
          prop: 'shippingCompany',
          width: 100,
          search: true,
          overHidden: true,
          rules: [{
            required: true,
            message: " ",
            trigger: "blur"
          }]
        }, {
          label: '提单号',
          prop: 'billNo',
          width: 100,
          search: true,
          overHidden: true
        }, {
          label: '船名',
          prop: 'shipName',
          width: 100,
          search: true,
          overHidden: true
        }, {
          label: '航次',
          prop: 'voyageNumber',
          width: 100,
          search: true,
          overHidden: true
        }, {
          label: '开船日期',
          prop: 'sailDate',
          width: 100,
          search: true,
          overHidden: true,
          type: "date",
          format: "yyyy-MM-dd",
          valueFormat: "yyyy-MM-dd HH:mm:ss",
        }, {
          label: '起运港',
          prop: 'departureHarbor',
          width: 100,
          search: true,
          overHidden: true,
          rules: [{
            required: true,
            message: " ",
            trigger: "blur"
          }]
        }, {
          label: '目的港',
          prop: 'objectiveHarbor',
          width: 100,
          search: true,
          overHidden: true,
          rules: [{
            required: true,
            message: " ",
            trigger: "blur"
          }]
        }, {
          label: '合同生效日期',
          prop: 'effectiveDate',
          width: 100,
          search: true,
          overHidden: true,
          type: "date",
          format: "yyyy-MM-dd",
          valueFormat: "yyyy-MM-dd HH:mm:ss",
          labelWidth:100,
          rules: [{
            required: true,
            message: " ",
            trigger: "blur"
          }]
        }, {
          label: '合同失效日期',
          prop: 'expiryDate',
          width: 100,
          search: true,
          overHidden: true,
          type: "date",
          format: "yyyy-MM-dd",
          valueFormat: "yyyy-MM-dd HH:mm:ss",
          labelWidth:100,
          rules: [{
            required: true,
            message: " ",
            trigger: "blur"
          }]
        }, {
          label: '起租日期',
          prop: 'startingRentDate',
          width: 100,
          search: true,
          overHidden: true,
          type: "date",
          format: "yyyy-MM-dd",
          valueFormat: "yyyy-MM-dd HH:mm:ss",
          rules: [{
            required: true,
            message: " ",
            trigger: "blur"
          }]
        }, {
          label: '出场日期',
          prop: 'exitDate',
          width: 100,
          search: true,
          overHidden: true,
          type: "date",
          format: "yyyy-MM-dd",
          valueFormat: "yyyy-MM-dd HH:mm:ss",
        }, {
          label: '入场日期',
          prop: 'admissionDate',
          width: 100,
          search: true,
          overHidden: true,
          type: "date",
          format: "yyyy-MM-dd",
          valueFormat: "yyyy-MM-dd HH:mm:ss",
        }, {
          label: '租金合计',
          prop: 'totalAmount',
          disabled: true
        }, {
          label: '超期箱使合计',
          prop: 'overdueAmount',
          disabled: true
        }, {
          label: '备注',
          prop: 'remarks',
          type: 'textarea',
          minRows: 3,
          span: 24
        }]
      },
      option: {},
      optionBack: {
        align: 'center',
        index: true,
        selection: true,
        addBtnText: "录入明细",
        refreshBtn: false,
        addBtn: true,
        span: 8,
        addRowBtn: false,
        cellBtn: false,
        editBtn: false,
        delBtn: false,
        menuWidth: 200,
        dialogTop: 25,
        dialogWidth: "80%",
        showSummary: true,
        sumColumnList: [{
          name: 'amount',
          type: 'sum',
          decimals: 2
        },{
          name: 'emptyWeight',
          type: 'sum',
          decimals: 2
        },{
          name: 'grossWeight',
          type: 'sum',
          decimals: 2
        },{
          name: 'tare',
          type: 'sum',
          decimals: 2
        },{
          name: 'loadingWeight',
          type: 'sum',
          decimals: 2
        },{
          name: 'volume',
          type: 'sum',
          decimals: 2
        }],
        column: [{
          label: '箱号',
          prop: 'code',
          width: 100,
          overHidden: true,
          remote: true,
          filterable: true,
          type: "select",
          dicUrl: "/api/blade-box-tube/archives/selectArchivesList?size=10&current=1&code={{key}}",
          props: {
            label: "code",
            value: "code"
          },
          rules: [{
            required: true,
            message: " ",
            trigger: "blur"
          }]
        }, {
          label: '地点',
          prop: 'address',
          overHidden: true,
          width: 100,
          rules: [{
            required: true,
            message: " ",
            trigger: "blur"
          }]
        }, {
          label: '日期',
          prop: 'newDate',
          overHidden: true,
          width: 100,
          type: "date",
          format: "yyyy-MM-dd",
          valueFormat: "yyyy-MM-dd HH:mm:ss",
          rules: [{
            required: true,
            message: " ",
            trigger: "blur"
          }]
        }, {
          label: '箱类型',
          prop: 'boxTypeId',
          width: 100,
          overHidden: true,
          filterable: true,
          type: 'select',
          props: {
            label: 'name',
            value: 'id'
          },
          dicUrl: '/api/blade-client/container/listMessage',
          rules: [{
            required: true,
            message: " ",
            trigger: "blur"
          }]
        }, {
          label: '币别',
          prop: 'currency',
          width: 100,
          overHidden: true,
          filterable: true,
          type: "select",
          dicUrl: "/api/blade-system/dict-biz/dictionary?code=currency",
          props: {
            label: "dictValue",
            value: "dictKey"
          },
          rules: [{
            required: true,
            message: " ",
            trigger: "blur"
          }]
        }, {
          label: '租金收入',
          prop: 'amount',
          type: 'number',
          value:0,
          controls: false,
          overHidden: true,
          rules: [{
            required: true,
            message: " ",
            trigger: "blur"
          }]
        }, {
          label: '超期单价/天',
          prop: 'price',
          type: 'number',
          value:0,
          controls: false,
          overHidden: true,
          rules: [{
            required: true,
            message: " ",
            trigger: "blur"
          }]
        }, {
          label: '超期箱使收入',
          prop: 'overdueAmount',
          overHidden: true,
          disabled: true
        }, {
          label: '状态',
          prop: 'status',
          width: 100,
          overHidden: true,
          filterable: true,
          type: 'select',
          dicUrl: "/api/blade-system/dict-biz/dictionary?code=box_access_status",
          props: {
            label: "dictValue",
            value: "dictKey"
          },
          disabled: true
        }]
      },
      dataList: [],
      dataListTwo: [],
      tradingBoxFilesList: [],
      selectionList: [],
      disabled: false,
      costData: {}
    }
  },
  async created() {
    this.option = await this.getColumnData(this.getColumnName(237.1), this.optionBack);
    this.optionTrack = await this.getColumnData(this.getColumnName(237.4), this.optionTrackBack);
    this.option.selectable = (row, index) => {
      return row.id;
    }
    selectByName("租金").then(res => {
      this.costData = res.data.data
    })
    //下拉箱号带出对应信息
    this.findObject(this.option.column, "newDate").value = dateFormat(new Date(), "yyyy-MM-dd") + " 00:00:00"
    this.findObject(this.option.column, "code").change = ({value, column}) => {
      selectArchivesList({code: value}).then(res => {
        for (let item of res.data.data) {
          if (value == item.code) {
            this.formTwo = {
              boxTypeId: item.typeId,
              boxType: item.name,
              addressId:item.addressId,
              address:item.address
            }
          }
        }
      })
    }
    if (this.onLoad.id && this.detailData.id) {
      this.refresh(this.onLoad.id, true)
    }else if (this.onLoad.id){
      this.refresh(this.onLoad.id, true)
    }
    this.key++
  },
  methods: {
    confirmEdit() {
      if (this.form.status > 0) {
        //基础资料
        this.$set(this.optionForm, "disabled", true)
        //箱信息
        this.$set(this.option, "disabled", true)
        this.$set(this.option, "addBtn", false)
        this.$set(this.option, "menu", false)
        //费用信息
        this.$set(this.$refs.boxCost.option, "disabled", true)
        this.$set(this.$refs.boxCost.option, "addBtn", false)
        this.$set(this.$refs.boxCost.option, "menu", false)
        //附件和顶部按钮
        this.disabled = true
      } else {
        //基础资料
        this.$set(this.optionForm, "disabled", false)
        //箱信息
        this.$set(this.option, "disabled", false)
        this.$set(this.option, "addBtn", true)
        this.$set(this.option, "menu", true)
        //费用信息
        this.$set(this.$refs.boxCost.option, "disabled", false)
        this.$set(this.$refs.boxCost.option, "addBtn", true)
        this.$set(this.$refs.boxCost.option, "menu", true)
        //附件和顶部按钮
        this.disabled = false
      }
    },
    //打开箱档案导入
    importBox() {
      this.importOpen = true
    },
    //确认导入箱信息
    confirmImport() {
      this.importOpen = false
      for (let item of this.importList) {
        this.dataList.push({
          code: item.code,
          address: item.address,
          addressId: item.addressId,
          newDate: item.newDate,
          boxType: item.name,
          boxTypeId: item.typeId,
          currency: "CNY"
        })
        this.getWorkDicts("currency").then(res => {
          for (let li of res.data.data){
            if (li.dictValue == item.currency){
              item.exchangeRate = li.remark
            }
          }
          this.dataListTwo.push({
            corpId: this.form.corpId,
            corpName: this.form.corpName,
            code: item.code,
            itemId: this.costData.id,
            itemName: this.costData.cname,
            currency: "CNY",
            price: item.amount,
            quantity: 1,
            autoGenerate: 1,
            feesType: 1,
            exchangeRate:item.exchangeRate || 1,
            amount: item.amount
          })
        });
      }
    },
    confirmChange() {
      let data = []
      for (let item of this.selectionList) {
        data.push(item.id)
      }
      this.$refs["formState"].validate((valid, done) => {
        done()
        if (valid) {
          this.disabledVisible = true
          statusUpdate({
            ...this.formState,
            ids: data.join(',')
          }).then(res => {
            this.$message.success("操作成功")
            this.dialogVisible = false
            this.disabledVisible = false
            this.formState = {}
            this.refresh(this.form.id)
          }).catch(()=>{
            this.disabledVisible = false
          })
        }
      })
    },
    statusUpdate(status, type) {
      if (this.form.id) {
        this.title = type
        if (status === '1'){
          if(type === "空箱离场"){
            this.formState = {
              type: type,
              status: status,
              transportId: this.form.id,
              addressId:this.form.departureHarborId,
              address:this.form.departureHarbor,
              date:dateFormat(new Date(), "yyyy-MM-dd") + " 00:00:00"
            }
          }else {
            this.formState = {
              type: type,
              status: status,
              transportId: this.form.id,
              date:dateFormat(new Date(), "yyyy-MM-dd") + " 00:00:00"
            }
          }
        }else {
          if(type === "空箱入场"){
            this.formState = {
              type: type,
              status: status,
              transportId: this.form.id,
              addressId:this.form.objectiveHarborId,
              address:this.form.objectiveHarbor,
              date:dateFormat(new Date(), "yyyy-MM-dd") + " 00:00:00"
            }
          }else {
            this.formState = {
              type: type,
              status: status,
              transportId: this.form.id,
              date:dateFormat(new Date(), "yyyy-MM-dd") + " 00:00:00"
            }
          }
        }
        this.dialogVisible = true
      } else {
        this.$message.error('请保存后操作')
      }
    },
    selectionChange(list) {
      this.selectionList = list
    },
    track(row) {
      // this.dataTrackList = row
      this.formSearch = row
      this.boxTrack = true
    },
    searchChange(params, done) {
      done();
      this.onLoadTrack(this.page, params)
    },
    onLoadTrack(page, params = {}) {
      params = {
        ...params,
        current: page.currentPage,
        size: page.pageSize,
        code: this.formSearch.code
      }
      this.loading = true
      archivestrajectory(params).then(res => {
        this.dataTrackList = res.data.data.records
        this.page.total = res.data.data.total
        this.loading = false
      }).finally(() => {
        this.loading = false
      })
    },
    // 明细删除
    rowDel(row, index, type) {
      this.$confirm("确定将选择数据删除?", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning"
      }).then(() => {
            if (type == "GJ") {
              if (row.id){
                tradingBoxGJ(row.id).then(res => {
                  if (res.data.success) {
                    this.$message.success("操作成功!");
                    this.dataTrackList.splice(index, 1);
                  }
                })
              }else {
                this.$message.success("操作成功!");
                this.dataTrackList.splice(index, 1);
              }
            } else {
              if (row.id) {
                tradingBoxItem(row.id).then(res => {
                  if (res.data.success) {
                    this.$message.success("操作成功!");
                    this.dataList.splice(index, 1);
                    if (this.dataListTwo.length > 0) {
                      for (let item in this.dataListTwo) {
                        if (this.dataListTwo[item].code == row.code) {
                          if (this.dataListTwo[item].autoGenerate == 1) {
                            if (this.dataListTwo[item].id) {
                              tradingBoxFees(this.dataListTwo[item].id).then(res => {
                                if (res.data.success) {
                                  this.dataListTwo.splice(index, 1);
                                }
                              });
                            } else {
                              this.dataListTwo.splice(Number(item), 1);
                            }
                          }
                        }
                      }
                    }
                  }
                });
              } else {
                this.dataList.splice(index, 1);
                this.$message.success("操作成功!");
                if (this.dataListTwo.length > 0) {
                  for (let item in this.dataListTwo) {
                    if (this.dataListTwo[item].code === row.code) {
                      if (this.dataListTwo[item].autoGenerate == 1) {
                        this.dataListTwo.splice(Number(item), 1);
                      }
                    }
                  }
                }
              }
            }
          }
      )
      ;
    },
    balabala(val, type) {
      if (val === null) {
        this[type[0]][type[1]] = ''
      } else {
        this[type[0]][type[1]] = val.name
      }
    },
    //撤销
    repealCancel() {
      this.$confirm("您确定撤回此次申请吗？", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning"
      }).then(() => {
        const data = {
          id: this.form.id,
          pageLabel: "出库装运",
          checkFlag: 1,
        }
        const loading = this.$loading({
          lock: true,
          text: '加载中',
          spinner: 'el-icon-loading',
          background: 'rgba(255,255,255,0.7)'
        });
        repealCancel(data).then(res => {
          loading.close();
          this.$message.success('撤回成功')
          this.refresh(this.form.id)
        })
      })
    },
    // 请核
    pleaseCheck() {
      for (let item of this.dataList) {
        if (item.status !== "空箱入场") return this.$message.error("有未空箱入场的明细，禁止请核！")
      }
      if (this.dataList.length === 0) {
        return this.$message.error("箱信息不能为空")
      }
      if (this.dataListTwo.length === 0) {
        return this.$message.error("费用信息不能为空")
      }
      this.$confirm("您确定提交请核申请吗?", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning"
      }).then(() => {
        this.$refs["form"].validate((valid, done) => {
          done()
          if (valid) {
            let data = {
              ...this.form,
              transportItemList: this.dataList,
              transportItemFeesList: this.dataListTwo,
              transportFilesList: this.tradingBoxFilesList,
              billType: "CKZY",
              checkFlag: 1
            }
            const loading = this.$loading({
              lock: true,
              text: '加载中',
              spinner: 'el-icon-loading',
              background: 'rgba(255,255,255,0.7)'
            });
            submit(data).then(res => {
              const data = {
                id: res.data.data.id,
                url: '/boxManagement/exportShipment/index',
                pageStatus: "this.$store.getters.domSaleStatus",
                pageLabel: "出口装运",
                checkFlag: 1,
              }
              pleaseCheck({
                ...data,
                billType: "CKZY"
              }).then(rest => {
                loading.close();
                this.$message.success('请核成功')
                this.refresh(res.data.data.id)
              }).catch(()=>{
                loading.close();
              })
            }).catch(()=>{
              loading.close();
            })
          }
        });
      })
    },
    //审核关闭
    choceScheduleFun() {
      this.checkScheduleDialog = false
    },
    refresh(id, type) {
      const loading = this.$loading({
        lock: true,
        text: '加载中',
        spinner: 'el-icon-loading',
        background: 'rgba(255,255,255,0.7)'
      });
      detail({id: id}).then(res => {
        this.form = res.data.data
        this.dataList = res.data.data.transportItemList
        this.dataListTwo = res.data.data.transportItemFeesList
        this.tradingBoxFilesList = res.data.data.transportFilesList
        delete this.form.transportItemList
        delete this.form.transportItemFeesList
        delete this.form.transportFilesList
        loading.close();
        if (type) {
          //基础资料
          this.$set(this.optionForm, "disabled", true)
          //箱信息
          this.$set(this.option, "disabled", true)
          this.$set(this.option, "addBtn", false)
          this.$set(this.option, "menu", false)
          //费用信息
          this.$set(this.$refs.boxCost.option, "disabled", true)
          this.$set(this.$refs.boxCost.option, "addBtn", false)
          this.$set(this.$refs.boxCost.option, "menu", false)
          //附件和顶部按钮
          this.disabled = true
        }else {
          if (this.form.status > 0) {
            //基础资料
            this.$set(this.optionForm, "disabled", true)
            //箱信息
            this.$set(this.option, "disabled", true)
            this.$set(this.option, "addBtn", false)
            this.$set(this.option, "menu", false)
            //费用信息
            this.$set(this.$refs.boxCost.option, "disabled", true)
            this.$set(this.$refs.boxCost.option, "addBtn", false)
            this.$set(this.$refs.boxCost.option,"menu",false)
            //附件和顶部按钮
            this.disabled = true
          } else {
            //基础资料
            this.$set(this.optionForm, "disabled", false)
            //箱信息
            this.$set(this.option, "disabled", false)
            this.$set(this.option, "addBtn", true)
            this.$set(this.option, "menu", true)
            //费用信息
            this.$set(this.$refs.boxCost.option, "disabled", false)
            this.$set(this.$refs.boxCost.option, "addBtn", true)
            this.$set(this.$refs.boxCost.option, "menu", true)
            //附件和顶部按钮
            this.disabled = false
          }
        }
      })
    },
    //新增修改
    editCustomer() {
      this.$refs["form"].validate((valid, done) => {
        done()
        if (valid) {
          let data = {
            ...this.form,
            transportItemList: this.dataList,
            transportItemFeesList: this.dataListTwo,
            transportFilesList: this.tradingBoxFilesList,
            billType: "CKZY"
          }
          const loading = this.$loading({
            lock: true,
            text: '加载中',
            spinner: 'el-icon-loading',
            background: 'rgba(255,255,255,0.7)'
          });
          submit(data).then(res => {
            if (this.form.id) {
              this.$message.success("修改成功")
            } else {
              this.$message.success("新增成功")
            }
            loading.close();
            this.refresh(res.data.data.id)
          }).catch(()=>{
            loading.close();
          })
        }
      });
    },
    rowSave(form, done, loading) {
      let result = this.dataList.some((item) => {
        if (item.code == form.code) {
          return true
        }
      })
      if (result === true) {
        this.$message.error("已存在此箱号");
        return loading();
      }
      done(form)
      this.getWorkDicts("currency").then(res => {
        for (let item of res.data.data){
          if (item.dictValue == form.currency){
            form.exchangeRate = item.remark
          }
        }
        this.dataListTwo.push({
          corpId: this.form.corpId,
          corpName: this.form.corpName,
          code: form.code,
          itemId: this.costData.id,
          itemName: this.costData.cname,
          currency: form.currency,
          price: form.amount,
          quantity: 1,
          autoGenerate: 1,
          feesType: 1,
          exchangeRate:form.exchangeRate || 1,
          amount: form.amount,
        })
      });
    },
    rowUpdateTrack(form, index, done, loading) {
      update(form).then(res => {
        done()
        this.$message.success("操作成功")
        this.onLoadTrack(this.page, this.search)
      })
    },
    rowUpdate(form, index, done, loading) {
      form.boxType = form.$boxTypeId
      done(form)
      this.getWorkDicts("currency").then(res => {
        for (let item of res.data.data){
          if (item.dictValue == form.currency){
            form.exchangeRate = item.remark
          }
        }
        if (this.dataListTwo.length > 0) {
          for (let item in this.dataListTwo) {
            if (this.dataListTwo[item].code == form.code) {
              if (this.dataListTwo[item].autoGenerate == 1) {
                console.log(form.exchangeRate)
                this.dataListTwo.splice(Number(item), 1, {
                  ...this.dataListTwo[item],
                  corpId: this.form.corpId,
                  corpName: this.form.corpName,
                  code: form.code,
                  currency: form.currency,
                  price: form.amount,
                  exchangeRate:form.exchangeRate || 1,
                  amount: form.amount
                })
                this.key++
              }
            }
          }
        }
      });
    },
    getGSData(row, type) {
      this[type[0]][type[1]] = row.cname
    },
    backToList(type) {
      if (type == 0){
        if (this.detailData.id){
          this.$router.push({
            path: '/boxManagement/exportShipment/index'
          });
        }
        this.$emit("backToList",type);
      }else if (type == 1){
        this.$router.push({
          path: '/approveData/index'
        });
        this.$emit("backToList",type);
      }
    },
    //自定义列保存
    async saveColumnTwo(ref, option, optionBack, code) {
      /**
       * 已定义全局方法，直接使用，saveColumnData保存列数据方法,参数传值(表格名称，当前表格的option数据)
       * 已定义全局方法，直接使用，getColumnName方法用来获取枚举值，参数根据自己定义的code值获取中文名
       * 一定要执行异步操作，要等接口成功返回，才能执行下一行代码
       */
      const inSave = await this.saveColumnData(this.getColumnName(code), this[option]);
      if (inSave) {
        this.$message.success("保存成功");
        //关闭窗口
        this.$refs[ref].$refs.dialogColumn.columnBox = false;
      }
    },
    resetTrigger() {
      if (this.optionForm.disabled == true) {
        if (this.form.status > 0) {
          //基础资料
          this.$set(this.optionForm, "disabled", true)
          //箱信息
          this.$set(this.option, "disabled", true)
          this.$set(this.option, "addBtn", false)
          this.$set(this.option, "menu", false)
          //费用信息
          this.$set(this.$refs.boxCost.option, "disabled", true)
          this.$set(this.$refs.boxCost.option, "addBtn", false)
          this.$set(this.$refs.boxCost.option,"menu",false)
          //附件和顶部按钮
          this.disabled = true
        } else {
          //基础资料
          this.$set(this.optionForm, "disabled", false)
          //箱信息
          this.$set(this.option, "disabled", false)
          this.$set(this.option, "addBtn", true)
          this.$set(this.option, "menu", true)
          //费用信息
          this.$set(this.$refs.boxCost.option, "disabled", false)
          this.$set(this.$refs.boxCost.option, "addBtn", true)
          this.$set(this.$refs.boxCost.option, "menu", true)
          //附件和顶部按钮
          this.disabled = false
        }
      }else {
        //基础资料
        this.$set(this.optionForm, "disabled", false)
        //箱信息
        this.$set(this.option, "disabled", false)
        this.$set(this.option, "addBtn", true)
        this.$set(this.option, "menu", true)
        //费用信息
        this.$set(this.$refs.boxCost.option, "disabled", false)
        this.$set(this.$refs.boxCost.option, "addBtn", true)
        this.$set(this.$refs.boxCost.option, "menu", true)
        //附件和顶部按钮
        this.disabled = false
      }
    },
    //自定义列重置
    async resetColumnTwo(ref, option, optionBack, code) {
      this[option] = this[optionBack];
      const inSave = await this.delColumnData(this.getColumnName(code), this[optionBack]);
      if (inSave) {
        //下拉箱号带出对应信息
        this.findObject(this.option.column, "newDate").value = dateFormat(new Date(), "yyyy-MM-dd") + " 00:00:00"
        this.findObject(this.option.column, "code").change = ({value, column}) => {
          selectArchivesList({code: value}).then(res => {
            for (let item of res.data.data) {
              if (value == item.code) {
                this.formTwo = {
                  boxTypeId: item.typeId,
                  boxType: item.name,
                  addressId:item.addressId,
                  address:item.address
                }
              }
            }
          })
        }
        this.resetTrigger()
        this.$message.success("重置成功");
        this.$refs[ref].$refs.dialogColumn.columnBox = false;
      }
    }
  }
}
</script>

<style scoped>
::v-deep .el-form-item {
  margin-bottom: 8px;
}
</style>
