<template>
  <ele-modal
    custom-class="ele-dialog-form long-dialog-form"
    :centered="true"
    v-if="visible"
    :visible.sync="visible"
    :title="title"
    :append-to-body="true"
    :close-on-click-modal="false"
    width="70%"
    @close="cancel"
  >
  <div class="switch">
      <div class="switch_left">
        <ul>
          <li
            v-for="item in tabOptions"
            :key="item.key"
            :class="{ active: activeComp == item.key }"
            @click="activeComp = item.key"
          >
            {{ item.name }}
          </li>
        </ul>
      </div>
    </div>
  <div v-if="activeComp==='main'">
    <el-form ref="form" :model="form" :rules="rules" label-width="140px">
      <headerTitle title="发货信息"></headerTitle>
      <el-row>
        <el-col :span="12">
          <el-form-item
            label="客户名称："
            prop="contactName">
            <el-input v-model="form.contactName" disabled></el-input>
          </el-form-item>
          <el-form-item
            label="客户联系人："
            prop="linkName">
            <el-input v-model="form.linkName" disabled></el-input>
          </el-form-item>
          <el-form-item
            label="客户电话："
            prop="linkPhone">
            <el-input v-model="form.linkPhone" disabled></el-input>
          </el-form-item>

          <el-form-item
            label="客户地址："
            prop="partaAddress">
            <el-input v-model="form.partaAddress" disabled></el-input>
          </el-form-item>
          <el-form-item
            label="计价方式：">
            <el-select v-model="form.pricingWay" disabled style="width: 100%">
              <el-option label="按数量计费" :value="1"></el-option>
              <el-option label="按重量计费" :value="2"></el-option>
            </el-select>
          </el-form-item>
          <el-form-item
            label="发货附件："
            prop="sendFiles">
            <div v-if="detailData.sendFiles && detailData.sendFiles?.length">
              <el-link
                v-for="link in detailData.sendFiles"
                :key="link.id"
                type="primary"
                :underline="false"
                @click="downloadFile(link)"
              >
                {{ link.name }}</el-link
              >
            </div>
          </el-form-item>
          <el-form-item
            label="回执附件："
            prop="sendFiles"
            >
            <div v-if="detailData.repliedFiles && detailData.repliedFiles?.length">
              <el-link
                v-for="link in detailData.repliedFiles"
                :key="link.id"
                type="primary"
                :underline="false"
                @click="downloadFile(link)">
                {{ link.name }}</el-link>
            </div>
          </el-form-item>

          <el-form-item
            v-if="form.reviewStatus==2"
            label="出库单：">
            <el-link type="primary" @click="handleOutBound">点击查看出库单</el-link>
          </el-form-item>
        </el-col>

        <el-col :span="12">
          <el-form-item
            label="车牌号："
            prop="carNo">
            <el-input v-model="form.carNo" disabled></el-input>
          </el-form-item>
          <el-form-item
            label="受托收货单编码："
            prop="entrustedCode">
            <el-input v-model="form.entrustedCode" disabled></el-input>
          </el-form-item>
          <el-form-item
            label="发货单编码："
            prop="docNo"
            >
            <el-input v-model="form.docNo" disabled></el-input>
          </el-form-item>
          <el-form-item prop="orderNo" label="订单编码：">
            <el-input v-model="form.orderNo" disabled></el-input>
          </el-form-item>
          <el-form-item prop="replied" label="是否回执：">
            <el-select v-model="form.replied" disabled style="width: 100%">
              <el-option label="是" :value="1"></el-option>
              <el-option label="否" :value="0"></el-option>
            </el-select>
          </el-form-item>

          <el-form-item
            label="审核状态："
            prop="reviewStatus">
            <el-select v-model="form.reviewStatus" disabled style="width: 100%">
              <el-option v-for="item in reviewStatusEnum" :value="item.value" :label="item.label"></el-option>
            </el-select>
          </el-form-item>
          <el-form-item
            label="制单人："
            prop="makerName">
            <el-input v-model="form.makerName" disabled></el-input>
          </el-form-item>
        </el-col>
      </el-row>
    </el-form>

    <headerTitle title="产品清单"></headerTitle>
    <ele-pro-table
      ref="table"
      :needPage="false"
      :columns="competAnalysisListcolumns"
      :toolkit="[]"
      :datasource="detailData.productList"
      row-key="id"
    >
      <!-- <template v-slot:toolbar>
        <div class="headbox">
        <span class="amount">总计：{{detailData.totalAmount}}元</span>
        <span class="amount">应付金额：{{detailData.payAmount}}元</span>
      </div>
      </template> -->
      <template v-slot:technicalDrawings="{ row }">
        <div v-if="row.technicalDrawings && row.technicalDrawings?.length">
          <el-link
            v-for="link in row.technicalDrawings"
            :key="link.id"
            type="primary"
            :underline="false"
            @click="downloadFile(link)"
          >
            {{ link.name }}</el-link
          >
        </div>
      </template>
      <template v-slot:stockLedger="scope">
        <el-popover
          placement="right"
          width="60%"
          trigger="hover">
          <ele-pro-table :ref="'childrenTable'+scope.$index"
                         row-key="id"
                         max-height="300px"
                         :needPage="false"
                         :columns="childrenColumns"
                         :toolkit="[]"
                         :datasource="scope.row.sendProductDetail"
                         cache-key="stockLedgerRoleTable" class="time-form">
          </ele-pro-table>
          <el-button type="text" slot="reference">明细</el-button>

        </el-popover>
      </template>
    </ele-pro-table>
  </div>

    <bpmDetail v-if="activeComp==='bpm'&&form.processInstanceId" :id="form.processInstanceId"></bpmDetail>

    <div slot="footer" class="footer">
      <el-button @click="cancel">返回</el-button>
    </div>
    <!--出库详情-->
    <outbound-details-dialog v-if="outboundDetailsDialogFlag" ref="outboundDetailsDialogRef"
                             :outboundDetailsDialogFlag.sync="outboundDetailsDialogFlag"></outbound-details-dialog>
  </ele-modal>
</template>

<script>
  import { getFile } from '@/api/system/file';
  import dictMixins from '@/mixins/dictMixins';
  import { reviewStatusEnum } from '@/enum/dict';
  import { copyObj } from '@/utils/util';
  import { getSendSaleOrderrecordDetail } from '@/api/saleManage/saleordersendrecord';
  import bpmDetail from '@/views/bpm/processInstance/detail.vue';
  import OutboundDetailsDialog from "@/BIZComponents//outboundDetailsDialog.vue";


  export default {
    mixins: [dictMixins],
    components: {
      OutboundDetailsDialog,
      bpmDetail
    },
    data() {
      return {
        activeComp: 'main',
        tabOptions: [
          { key: 'main', name: '发货单详情' },
          { key: 'bpm', name: '流程详情' }
        ],
        reviewStatusEnum,
        visible: false,
        outboundDetailsDialogFlag: false,
        detailId: '',
        title: '详情',
        row: {},
        activeName: 'base',
        form: {
          orderFiles: [{ name: '222' }]
        },
        rules: {},
        detailData: {},
        childrenColumns: [
          {
            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',
          }
        ],
        competAnalysisListcolumns: [
          {
            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: 200,
            prop: 'productCategoryName',
            label: '类型',
            slot: 'productCategoryName',
            align: 'center',
          },
          {
            width: 160,
            prop: 'productBrand',
            label: '牌号',
            slot: 'productBrand',
            align: 'center',
          },
          {
            width: 120,
            prop: 'modelType',
            label: '型号',
            slot: 'modelType',
            align: 'center',
          },
          {
            width: 120,
            prop: 'specification',
            label: '规格',
            slot: 'specification',
            align: 'center',
          },
          {
            width: 200,
            prop: 'customerMark',
            label: '客户代号',
            slot: 'customerMark',
            align: 'center',
          },
          {
            width: 200,
            prop: 'warehouseName',
            label: '仓库名称',
            slot: 'warehouseName',
            align: 'center',
          },
          {
            width: 100,
            prop: 'stockLedger',
            label: '发货明细',
            slot: 'stockLedger',
            align: 'center'
          },

          {
            width: 120,
            prop: 'totalCount',
            label: '数量',
            slot: 'totalCount',
            align: 'center',
          },
          {
            width: 120,
            prop: 'measuringUnit',
            label: '计量单位',
            slot: 'measuringUnit',
            align: 'center',
          },
          {
            width: 120,
            prop: 'singleWeight',
            label: '单重',
            slot: 'singleWeight',
            align: "center"
          },
          {
            width: 100,
            prop: 'receiveTotalWeight',
            label: '收货总重',
            slot: 'receiveTotalWeight',
            align: "center"
          },
          {
            width: 200,
            prop: 'sendTotalWeight',
            label: '发货总重',
            slot: 'sendTotalWeight',
            align: "center",
            headerSlot: 'headerTotalCount'
          },

          {
            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: 120,
            prop: 'deliveryDays',
            label: '交期(天)',
            slot: 'deliveryDays',
            align: 'center',
          },
          {
            width: 200,
            prop: 'guaranteePeriod',
            label: '质保期',
            slot: 'guaranteePeriod',
            formatter: (_row, _column, cellValue) => {
              return (_row.guaranteePeriod||'') + _row.guaranteePeriodUnitName;
            },
            align: 'center',
          },
          // {
          //   width: 120,
          //   prop: 'guaranteePeriodUnitCode',
          //   label: '',
          //   slot: 'guaranteePeriodUnitCode'
          // },
          {
            width: 120,
            prop: 'technicalAnswerName',
            label: '技术答疑人',
            slot: 'technicalAnswerName',
            align: 'center',
          },
          {
            width: 220,
            prop: 'technicalParams',
            label: '技术参数',
            slot: 'technicalParams',
            align: 'center',
          },
          {
            width: 240,
            prop: 'technicalDrawings',
            label: '技术图纸',
            slot: 'technicalDrawings',
            formatter: (_row, _column, cellValue) => {
              return (_row.guaranteePeriod||'') + _row.guaranteePeriodUnitName;
            },
            align: 'center',
          },
          {
            width: 220,
            prop: 'remark',
            label: '备注',
            slot: 'remark',
            align: 'center',
          }
        ]
      };
    },
    methods: {
      async open(row) {
        this.form = row;
        this.visible = true;
        await this.getDetailData(row.id);
        this.detailId = row.id;
      },
      //出库单详情
      handleOutBound() {
        this.outboundDetailsDialogFlag = true
        this.$nextTick(() => {
          let row = {
            sendNo: this.form.docNo,
          }
          this.$refs.outboundDetailsDialogRef.init(row)
        })
      },
      cancel() {
        this.$nextTick(() => {
          // 关闭后，销毁所有的表单数据
          (this.form = copyObj(this.formDef)),
            (this.otherForm = copyObj(this.otherFormDef)),
            (this.tableBankData = []);
          this.tableLinkData = [];
          this.visible = false;
        });
      },
      downloadFile(file) {
        getFile({ objectName: file.storePath }, file.name);
      },
      async getDetailData(id) {
        this.loading = true;
        const data = await getSendSaleOrderrecordDetail(id);
        this.loading = false;
        if (data) {
          this.form = data;
          this.detailData = data;
          this.form.pricingWay = data?.saleOrder?.pricingWay
        }
      }
    }
  };
</script>

<style scoped lang="scss">
  .ele-dialog-form {
    .el-form-item {
      margin-bottom: 10px;
    }
  }

  .headbox {
    display: flex;
    justify-content: flex-start;
    align-items: center;
    .amount {
      font-size: 14px;
      font-weight: bold;
      margin-right: 20px;
    }
  }
</style>
