<template>
  <ele-modal
    custom-class="ele-dialog-form long-dialog-form"
    :centered="true"
    :visible.sync="detailDialogFlag"
    :title="title"
    :append-to-body="true"
    :close-on-click-modal="false"
    width="70%"
    @close="cancel"
    :maxable="true"
    :resizable="true"
  >
    <div class="switch">
      <div class="switch_left">
        <ul>
          <li
            v-for="item in tabOptions"
            :key="item.key"
            :class="{ active: activeComp == item.key }"
            @click="handleTag(item.key)"
          >
            {{ item.name }}
          </li>
        </ul>
      </div>
    </div>
    <div v-if="activeComp === 'main'">
      <el-form
        ref="form"
        :model="form"
        class="el-form-box"
        :rules="rules"
        label-width="120px"
      >
        <headerTitle title="收货信息"></headerTitle>
        <el-row :gutter="12">
          <el-col :span="12">
            <el-form-item label="选择订单：" prop="orderNo">
              <el-input v-model="form.orderNo" disabled></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="客户名称：" prop="contactName">
              <el-input v-model="form.contactName" disabled></el-input>
            </el-form-item>
          </el-col>

          <el-col :span="12">
            <el-form-item label="客户联系人：" prop="linkName">
              <el-input v-model="form.linkName" disabled></el-input>
            </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-col>
          <el-col :span="12">
            <el-form-item label="客户电话：" prop="linkPhone">
              <el-input v-model="form.linkPhone" disabled></el-input>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="12">
          <el-col :span="12">
            <el-form-item label="收货日期：" prop="receiveDate">
              <el-input v-model="form.receiveDate" disabled></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="收货单号：" prop="sendNoteNo">
              <el-input v-model="form.sendNoteNo" disabled></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item prop="files" label="附件：">
              <fileMain v-model="row.files" type="view"></fileMain>
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>

      <headerTitle title="物品清单"></headerTitle>
      <ele-pro-table
        ref="table"
        :needPage="false"
        :columns="columns"
        @columns-change="handleColumnChange"
        :cache-key="cacheKeyUrl"
        :datasource="detailData.productList"
        row-key="id"
      >
        <template v-slot:technicalDrawings="{ row }">
          <fileMain v-model="row.files" type="view"></fileMain>
        </template>
      </ele-pro-table>
    </div>

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

    <inner-bound-details
      v-if="activeComp === 'store'"
      ref="outBoundDetailsRef"
    ></inner-bound-details>
    <div slot="footer" class="footer">
      <el-button @click="cancel">返回</el-button>
    </div>
  </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 { getPSaleEntrustedReceiveDetailAPI } from '@/api/saleManage/entrustedReceive';
  import bpmDetail from '@/views/bpm/processInstance/detail.vue';
  import fileUpload from '@/components/upload/fileUpload.vue';
  import innerBoundDetails from '@/BIZComponents/innerdetails.vue';
  // import fileMain from '@/components/addDoc/index.vue';
  import tabMixins from '@/mixins/tableColumnsMixin';

  export default {
    mixins: [dictMixins, tabMixins],
    components: {
      // fileMain,
      fileUpload,
      bpmDetail,
      innerBoundDetails
    },
    props: {
      detailDialogFlag: Boolean
    },
    data() {
      return {
        cacheKeyUrl: 'eos-saleManage-entrustedReceive-inventoryTableDetail',
        activeComp: 'main',
        tabOptions: [
          { key: 'main', name: '收货单详情' },
          { key: 'bpm', name: '流程详情' },
          { key: 'store', name: '入库单详情' }
        ],
        reviewStatusEnum,
        detailId: '',
        title: '详情',
        row: {},
        activeName: 'base',
        form: {
          orderFiles: [{ name: '222' }]
        },
        rules: {},
        detailData: {},

        columns: [
          {
            width: 45,
            type: 'index',
            columnKey: 'index',
            align: 'center',
            fixed: 'left'
          },
          {
            minWidth: 140,
            prop: 'productName',
            label: '名称',
            slot: 'productName',
            align: 'center'
          },
          {
            minWidth: 120,
            prop: 'productCode',
            label: '编码',
            slot: 'productCode',
            align: 'center'
          },
          {
            minWidth: 100,
            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: 110,
            prop: 'orderTotalCount',
            label: '订单总数量',
            slot: 'orderTotalCount',
            align: 'center'
          },
          {
            width: 120,
            prop: 'totalCount',
            label: '本次收货数量',
            slot: 'totalCount',
            headerSlot: 'headerTotalCount',
            align: 'center'
          },
          {
            width: 100,
            prop: 'receiveTotalCount',
            label: '已收货总数',
            slot: 'receiveTotalCount',
            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: 100,
            prop: 'weightUnit',
            label: '重量单位',
            slot: 'weightUnit',
            align: 'center'
          },
          {
            width: 160,
            prop: 'pricingWay',
            label: '计价方式',
            slot: 'pricingWay',
            align: 'center',
            formatter: (row, column) => {
              return row.pricingWay == 1
                ? '按数量计费'
                : row.pricingWay == 2
                ? '按重量计费'
                : '';
            }
          },
          {
            width: 160,
            prop: 'singlePrice',
            label: '单价',
            slot: 'singlePrice',
            align: 'center'
          },
          {
            width: 100,
            prop: 'taxRate',
            label: '税率',
            formatter: (_row, _column, cellValue) => {
              return _row.taxRate ? _row.taxRate + '%' : '';
            },
            align: 'center'
          },
          {
            width: 100,
            prop: 'discountSinglePrice',
            label: '折让单价',
            slot: 'discountSinglePrice',
            align: 'center',
            formatter: (_row, _column, cellValue) => {
              return _row.discountSinglePrice
                ? Number(_row.discountSinglePrice).toFixed(2)
                : '';
            }
          },

          {
            width: 120,
            prop: 'totalPrice',
            label: '合计',
            slot: 'totalPrice',
            formatter: (_row, _column, cellValue) => {
              return _row.totalPrice + '元';
            },
            align: 'center'
          },
          {
            width: 100,
            prop: 'discountTotalPrice',
            label: '折让合计',
            slot: 'discountTotalPrice',
            align: 'center',
            formatter: (_row, _column, cellValue) => {
              return _row.discountTotalPrice
                ? Number(_row.discountTotalPrice).toFixed(2)
                : '';
            }
          },
          {
            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.getDetailData(row.id);
        this.detailId = row.id;
      },
      handleTag(val) {
        this.activeComp = val;
        if (val == 'store') {
          this.$nextTick(() => {
            this.$refs.outBoundDetailsRef._getInfo(this.form.code);
          });
        }
      },
      //关闭弹窗
      cancel() {
        this.$emit('update:detailDialogFlag', false);
      },
      downloadFile(file) {
        getFile({ objectName: file.storePath }, file.name);
      },
      async getDetailData(id) {
        this.loading = true;
        const data = await getPSaleEntrustedReceiveDetailAPI(id);
        this.loading = false;
        if (data) {
          data.productList.forEach((item) => {
            data.pricingWay = data.pricingWay || data?.saleOrder?.pricingWay;
          });
          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>
