<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"
    :fullscreen="fullscreen"
  >
    <template slot="title">
      <modalTitle
        :title="title"
        @setFullscreen="fullscreen = !fullscreen"
      ></modalTitle>
    </template>
    <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-show="activeComp == 'main'">
      <el-form ref="form" :model="form" :rules="rules" label-width="130px">
        <headerTitle title="收货信息"></headerTitle>
        <el-row>
          <el-col :span="8">
            <el-form-item label="供应商名称：" prop="supplierName">
              <el-input v-model="form.supplierName" 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"

          >
            {{ form.receiveAddress }}
          </el-form-item> -->
            <el-form-item label="车牌号：" prop="carNo">
              <el-input v-model="form.carNo" disabled></el-input>
            </el-form-item>
            <el-form-item prop="receiveDate" label="收货日期：">
              <el-input v-model="form.receiveDate" disabled></el-input>
            </el-form-item>
            <el-form-item label="附件：" prop="receiveFiles">
              <!--              <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>-->
              <fileMain v-model="form.receiveFiles" type="view"></fileMain>
            </el-form-item>
            <el-form-item label="质检回执：" prop="qualityReportFiles">
              <div
                v-if="
                  detailData.qualityReportFiles &&
                  detailData.qualityReportFiles?.length
                "
              >
                <el-link
                  v-for="link in detailData.qualityReportFiles"
                  :key="link.id"
                  type="primary"
                  :underline="false"
                  @click="downloadFile(link)"
                >
                  {{ link.name }}</el-link
                >
              </div>
            </el-form-item>
          </el-col>

          <el-col :span="8">
            <el-form-item label="收货单编码：" prop="receiveNo">
              <el-input v-model="form.receiveNo" 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="outsourceSendCode" label="委外发货单编码：">
              <el-input v-model="form.outsourceSendCode" disabled></el-input>
            </el-form-item>
            <!-- <el-form-item prop="pricingWay" 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="makerName">
              <el-input v-model="form.makerName" disabled></el-input>
            </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"
                  :label="item.label"
                  :value="item.value"
                ></el-option>
              </el-select>
            </el-form-item>
            <!-- <el-form-item prop="isQmsCheck" label="是否需要质检：">
              {{ form.isQmsCheck == 1 ? '是' : '否' }}
            </el-form-item> -->

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

          <el-col :span="8">
            <el-form-item label="合格数：" prop="qmsPassNum">
              <el-input v-model="form.qmsPassNum" disabled></el-input>
            </el-form-item>
            <el-form-item label="不合格数：" prop="qmsNopassNum">
              <el-input v-model="form.qmsNopassNum" disabled></el-input>
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>

      <headerTitle title="物品清单"></headerTitle>
      <ele-pro-table
        ref="table"
        :needPage="false"
        :columns="columns(1)"
        :toolkit="[]"
        :datasource="detailData.productList"
        row-key="id"
      >
        <template v-slot:technicalDrawings="{ row }">
          <fileMain v-model="row.technicalDrawings" type="view"></fileMain>
        </template>
      </ele-pro-table>
      <headerTitle
        title="质检清单"
        v-if="detailData.resultList.length > 0"
      ></headerTitle>
      <ele-pro-table
        v-if="detailData.resultList.length > 0"
        ref="table"
        :needPage="false"
        :columns="columns(2)"
        :toolkit="[]"
        :datasource="detailData.resultList"
        row-key="id"
        height="300px"
      >
        <template v-slot:technicalDrawings="{ row }">
          <fileMain v-model="row.technicalDrawings" type="view"></fileMain>
        </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>
    <!--入库详情-->
    <innertboundDetailsDialog
      v-if="innerboundDetailsDialogFlag"
      ref="innerboundDetailsDialogRef"
      :innerboundDetailsDialogFlag.sync="innerboundDetailsDialogFlag"
    ></innertboundDetailsDialog>
  </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 bpmDetail from '@/views/bpm/processInstance/detail.vue';

  import { getReceiveSaleOrderrecordDetail } from '@/api/purchasingManage/purchaseorderreceive';
  import innertboundDetailsDialog from '@/BIZComponents/innerboundDetailsDialog.vue';
  import fileMain from '@/components/addDoc/index.vue';
  import modalTitle from '@/BIZComponents/modalTitle.vue';

  export default {
    mixins: [dictMixins],
    components: {
      fileMain,
      innertboundDetailsDialog,
      bpmDetail,
      modalTitle
    },
    data() {
      return {
        fullscreen: false,
        activeComp: 'main',
        tabOptions: [
          { key: 'main', name: '收货单详情' },
          { key: 'bpm', name: '流程详情' }
        ],
        reviewStatusEnum,
        visible: false,
        innerboundDetailsDialogFlag: false,
        detailId: '',
        title: '详情',
        row: {},
        activeName: 'base',
        form: {
          orderFiles: [{ name: '222' }]
        },
        rules: {},
        detailData: {}
      };
    },
    created() {
      this.requestDict('产地');
      this.requestDict('生产类型');

    },
    computed: {
      columns() {
        return (v) => {
          console.log(v)
          return [
            {
              width: 45,
              type: 'index',
              columnKey: 'index',
              align: 'center',
              fixed: 'left'
            },
            {
              width: 200,
              prop: 'productName',
              label: '名称',
              slot: 'productName',
              align: 'center'
            },
            {
              width: 120,
              prop: 'productCode',
              label: '编码',
              slot: 'productCode',
              align: 'center'
            },
            {
              width: 200,
              prop: 'productCategoryName',
              label: '类型',
              slot: 'productCategoryName',
              align: 'center'
            },
            {
              minWidth: 150,
              prop: 'taskName',
              label: '工序',
              slot: 'taskName',
              align: 'center'
            },
            {
              width: 110,
              prop: 'batchNo',
              label: '批次号',
              slot: 'batchNo',
              align: 'center'
            },
            {
              width: 160,
              prop: 'productBrand',
              label: '牌号',
              slot: 'productBrand',
              align: 'center'
            },
            {
              width: 120,
              prop: 'modelType',
              label: '型号',
              slot: 'modelType',
              align: 'center'
            },
            {
            width: 120,
            prop: 'produceType',
            align: 'center',
            label: '属性类型',
            showOverflowTooltip: true,
            formatter: (row, column) => {
              return row.produceType && row.produceType.length
                ? row.produceType
                    .map((item) => this.getDictValue('生产类型', item + ''))
                    .join(',')
                : '';
            }
          },
            {
              width: 120,
              prop: 'supplierMark',
              label: '供应商代号',
              slot: 'supplierMark',
              align: 'center'
            },
            {
              width: 120,
              prop: 'specification',
              label: '规格',
              slot: 'specification',
              align: 'center'
            },
            {
              width: 200,
              prop: 'warehouseName',
              label: '仓库名称',
              slot: 'warehouseName',
              align: 'center'
            },
            {
              width: 80,
              prop: 'totalCount',
              label: '收货数量',
              slot: 'totalCount',
              align: 'center',
            },
            {
              width: 120,
              prop: 'orderTotalCount',
              label: '采购总数',
              slot: 'orderTotalCount',
              show:v!=2,
              align: 'center',
            },
            {
              width: 120,
              prop: 'receiveTotalCount',
              label: '已收货总数',
              slot: 'receiveTotalCount',
              show:v!=2,
              align: 'center',
            },
            {
              width: 80,
              prop: 'measuringUnit',
              label: '计量单位',
              slot: 'measuringUnit',
              align: 'center'
            },
            {
              width: 120,
              prop: 'singleWeight',
              label: '单重',
              slot: 'singleWeight',
              align: 'center'
            },
            {
              width: 200,
              prop: 'sendTotalWeight',
              label: '发货总重',
              slot: 'sendTotalWeight',
              align: 'center',
              headerSlot: 'headerTotalCount',
              show:v!=2,
            },
            {
              width: 100,
              prop: 'receiveTotalWeight',
              label: '收货总重',
              slot: 'receiveTotalWeight',
              align: 'center',
              show:v!=2,

            },
            {
              width: 100,
              prop: 'increaseTotalWeight',
              label: '增重重量',
              slot: 'increaseTotalWeight',
              align: 'center',
              show:v!=2,
            },
            {
              width: 100,
              prop: 'weightUnit',
              label: '重量单位',
              slot: 'weightUnit',
              align: 'center',
              show:v!=2,
            },
            {
              width: 160,
              prop: 'pricingWay',
              label: '计价方式',
              slot: 'pricingWay',
              align: 'center',
              show:v!=2,
              formatter: (row, column) => {
                return row.pricingWay == 1
                  ? '按数量计费'
                  : row.pricingWay == 2
                  ? '按重量计费'
                  : '';
              }
            },
            {
              width: 160,
              prop: 'singlePrice',
              label: '单价',
              slot: 'singlePrice',
              align: 'center',
              show:v!=2,

            },
            {
              width: 160,
              prop: 'discountSinglePrice',
              label: '折后单价',
              slot: 'discountSinglePrice',
              align: 'center',
              show:v!=2,

            },
            {
              width: 120,
              prop: 'totalPrice',
              label: '合计',
              slot: 'totalPrice',
              align: 'center',
              show:v!=2,

            },
            {
              width: 160,
              prop: 'discountTotalPrice',
              label: '折后合计',
              slot: 'discountTotalPrice',
              align: 'center',
              show:v!=2,

            },
            {
              prop: 'provenance',
              label: '产地',
              slot: 'provenance',
              align: 'center',
              minWidth: 200,
              showOverflowTooltip: true,
              formatter: (row, column) => {
                return row.provenance && row.provenance.length
                  ? row.provenance
                      .map((item) => this.getDictValue('产地', item))
                      .join(',')
                  : '';
              }
            },
            // {
            //   width: 80,
            //   prop: 'deliveryDays',
            //   label: '交期(天)',
            //   slot: 'deliveryDays',
            //   align: 'center',
            //   show:v!=2,

            // },
            {
              width: 160,
              prop: 'deliveryDeadline',
              label: '交期截止日期',
              slot: 'deliveryDeadline',
              align: 'center',
              show:v!=2,

            },
            {
              width: 200,
              prop: 'guaranteePeriod',
              label: '质保期',
              slot: 'guaranteePeriod',
              align: 'center',
              show:v!=2,
              formatter: (_row, _column, cellValue) => {
              return (
                (_row.guaranteePeriod || '') + _row.guaranteePeriodUnitName
              );
            },
            },
            {
              width: 160,
              prop: 'guaranteePeriodDeadline',
              label: '质保截止日期',
              slot: 'guaranteePeriodDeadline',
              align: 'center',
              show:v!=2,

            },
            {
              width: 130,
              prop: 'technicalAnswerName',
              label: '技术答疑人',
              slot: 'technicalAnswerName',
              align: 'center',
              show:v!=2,

            },
            {
              width: 220,
              prop: 'technicalParams',
              label: '技术参数',
              slot: 'technicalParams',
              align: 'center',
              show:v!=2,

            },
            {
              width: 240,
              prop: 'technicalDrawings',
              label: '技术图纸',
              slot: 'technicalDrawings',
              align: 'center',
              show:v!=2,

            },
            {
              width: 220,
              prop: 'remark',
              label: '备注',
              slot: 'remark',
              align: 'center',
              show:v!=2,
            },
            {
              width: 130,
              prop: 'qmsStatus',
              label: '质检状态',
              align: 'center',
              fixed:'right',
              show:v==2,
              formatter: (row, column) => {
                return row.qmsStatus==1?'已检':row.qmsStatus==2?'待检':'未检'
              }
            },
            {
              width: 200,
              prop: 'qmsDate',
              label: '质检完成日期',
              show:v==2,
              align: 'center',
              fixed:'right',
            },
            {
              width: 150,
              prop: 'qmsResult',
              label: '质检结果',
              show:v==2,
              align: 'center',
              fixed:'right',
              formatter: (row, column) => {
                return row.qmsResult==1?'合格':row.qmsResult==2?'不合格':row.qmsResult==3?'让步接收':''
              }
            }
          ];
        };
      }
    },
    methods: {
      async open(row) {
        this.form = row;
        this.visible = true;
        this.getDetailData(row.id);
        this.detailId = row.id;
      },
      //入库单详情
      handleInnerBound() {
        this.innerboundDetailsDialogFlag = true;
        this.$nextTick(() => {
          let row = {
            code: this.form.receiveNo
          };
          this.$refs.innerboundDetailsDialogRef.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 getReceiveSaleOrderrecordDetail(id);
        this.loading = false;
        if (data) {
          this.form = data;
          this.detailData = data;
          this.detailData.productList.forEach((item) => {
            item.receiveTotalWeight =
              item.receiveTotalWeight ||
              Number(item.orderTotalCount) * Number(item.singleWeight) ||
              0;
            item.increaseTotalWeight =
              item.increaseTotalWeight || item.receiveTotalWeight || 0;
          });
        }
      }
    }
  };
</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>
