<!--
  @description:采购立项-采购人-报价开启参与报价供应商查看货编辑开启新论次页面
  @Modifier:gmy
  @routerPath:/procurement/procurementDrive/offerPurchase/offerEnquirtEnquiry
  @date:2020/8/12-14:23
-->
<template>
  <div>
    <div>
      <!-- 项目报价轮次tab切换数据 数组长度大于1显示-->
      <el-tabs v-if="stageList.length>1" v-model="activeValue" class="main" style="margin-top:0" @tab-click="handleClick">
        <el-tab-pane
          v-for="(item,index) in stageList"
          :key="index"
          :label="item.name"
          :name="item.type"
        />
      </el-tabs>
      <!-- 需要判断报价开启的状态useStatus 00报价未开启 01 报价进行中 02报价暂停 03进入延迟倒计时 04延迟竞拍中 05报价结束-->
      <OfferLobbyIsopen
        v-if="useStatus!=='05' && quoteEndTime!==''&& useStatus!== '07'"
        :quote-end-time="quoteEndTime"
        :stage-no="stageNo"
        :stage-id="stageId"
      />
      <div v-if="(useStatus=== '05' || useStatus=== '07')&& useStatus!== ''&&tableData.tableData.length>0" class="main" style="margin-top:0">
        <!--供应商信息列表-->
        <supplierOfferHallInfoList
          v-if="tableData.tableData && tableData.tableData.length>0"
          ref="supplierInfo"
          :result-data="resultData"
          :table-data="tableData"
          :offer-single-click="offerSingleClick"
        />
        <div class="clearfix offerInfo">
          <p class="fl page-title">
            2.行项目列表
          </p>
        </div>
        <!-- 报价数据展示组件-->
        <offerHallTableComp
          :key="new Date()*1"
          ref="resultTableComp"
          :result-data="resultData"
          :offer-single-click="offerSingleClick"
          :label-info="labelInfo"
          :table-data="tableData"
        />
        <p v-if="nextStageInfo" class="page-title">
          3.下一轮次信息
        </p>
        <!-- 下一轮次信息 -->
        <procurementOfferRoundInformation v-if="nextStageInfo" :next-stage-info="nextStageInfo" />
      </div>
    </div>
    <!-- 开启新伦次 结束报价 评审办法 报价记录 导出比价分析表 打印供应商报价按钮-->
    <div v-if="useStatus==='05' || useStatus=== '07'" class="but_footer">
      <div class="but_footer-h">
        <div class="but_footer-but">
          <!--查看报记录 -->
          <gx-button :type="resStyle==='01'?'danger':'primary'" plain :code="'001_002_003'" @click="recordLook">
            查看报价记录
          </gx-button>
          <!-- 询价之外的即采购方式为 12 13 14均可开启多轮次 当次轮项目状态 useStatus 05 本轮报价结束  多轮次仅在最后一轮显示 -->
          <template v-if="setNewCyclyStatus()&& listLength===stageList.length-1">
            <!--开启新轮次报价 -->
            <gx-button :code="'001_002_006'" :loading="confirmLoading" type="primary" @click="nextOfferClick">
              开启新轮次报价
            </gx-button>
          </template>
          <!-- 导出比价分析表 -->
          <gx-button :code="'001_002_004'" :loading="confirmLoading" type="primary" @click="exportFile('00')">
            导出比价分析表
          </gx-button>
          <!-- 打印供应商报价 -->
          <gx-button :code="'001_002_007'" :loading="confirmLoading" type="primary" @click="exportFile('01')">
            打印供应商报价
          </gx-button>
        </div>
      </div>
    </div>
    <!-- 开启新论次报价弹框 -->
    <OfferEnquireDialog v-if="openRounddialog.dialog" :dialog-data="openRounddialog" @consignContractInfo="consignContractInfo" />
    <!-- 查看报价记录 -->
    <OfferRecordPurchasist :dialog-data="offerSupplierRecord" />
    <!-- 查看评审办法 -->
    <OfferReviewadd :dialog-data="reviewData" />
    <!--  查看供应商报价信息弹框-->
    <procurementSuplierOffer :dialog-data="supplierOfferDialog" />
  </div>
</template>

<script>
/* api接口*/
import { distinguishBetween } from '@/api/procurement/procurementProject' // 获取项目类型数据
import { queryWinningResultInfoByPackId } from '@/api/procurement/procurementResult' // 查询中标结果信息

import {
  goOfferHall,
  saveOfferStage,
  endQuote
} from '@/api/procurement/procurementOffer' // 报价大厅表格数据请求
/* api接口*/
import {
  exportPriceComparisonAnalysisTable,
  printSupplierOfferNew
} from '@/api/procurement/procurementResult'
import { checkOfferRecord } from '@/api/procurement/procurementOffer'
/* 公共方法 */
import { download, filterDictText } from '@/assets/js/utils' // 公共方法
import { procurementGroupMixins } from '@/views/procurement/mixins/procurementGrounpMixins' // 公共字典
/* 公共组件*/
import OfferEnquireDialog from './procurementOfferNewRounds-dialog' // 开启新伦次组件
import OfferLobbyIsopen from '../procurementOfferNotOpen/procurementOfferNotOpen-add' // 报价未开启态组件
import OfferRecordPurchasist from './procurementOfferRecord-dialog' // 报价记录
import OfferReviewadd from './procurementofferReviewSelect-dialog' // 查看评审办法弹框
import procurementSuplierOffer from '@/views/procurement/components/procurementLookSupplierOffer-dialog' // 查看供应商报价弹框
import procurementOfferRoundInformation from './procurementOfferRoundInformation' // 下一轮次信息
import offerHallTableComp from '../../components/offerHallTableComp' // 报价数据展示组件
import supplierOfferHallInfoList from '../../components/supplierOfferHallInfo-list' // 供应商报价信息列表

export default {
  name: 'OfferLobbyYesEnquiryListVue',
  inject: ['getTenderBase', 'driveReload'],
  components: {
    offerHallTableComp, // 报价数据展示组件
    OfferRecordPurchasist, // 报价记录
    OfferEnquireDialog, // 开启新伦次组件
    OfferLobbyIsopen, // 报价未结束态组件
    OfferReviewadd, // 查看评审办法弹框
    procurementSuplierOffer, // 查看供应商报价信息弹框
    procurementOfferRoundInformation, // 下一轮次信息
    supplierOfferHallInfoList // 供应商报价信息列表
  },
  mixins: [procurementGroupMixins],
  data() {
    return {
      resStyle: '00', // 按钮文字标红状态 00 普通 01 标红
      confirmLoading: false,
      dynamicTableShow: true,
      projectStats: false, // 判断项目状态 05采购终止 06流标 08假流标的情况下未true
      isFirstTime: '01', // 非首次进入查看报价
      quoteMethod: '', // 询价方式 01:一次报价 02:二次报价
      nextStageInfo: {}, // 下一轮次信息
      auditState: '00', // 00表示一次询价 01表示二次询价
      activeValue: '', // 当前索引
      stageList: [], // 报价轮次数组
      stageNo: '', // 轮次数
      stageId: '', // 轮次id
      quoteEndTime: '', // 报价结束时间
      useStatus: '', // 报价状态字段 00报价未开启 01 报价进行中 02报价暂停 03进入延迟倒计时 04延迟竞拍中 05报价结束 07报价结束
      // 开启多轮次弹框
      openRounddialog: {
        dialog: false,
        tenderMethod: '', // 采购方式 单一来源情况下没有开心轮次截止时间
        selectedSuppliers: '', // 入围供应商名称
        packId: ''
      },
      // 查看报价记录弹框
      offerSupplierRecord: {
        stageId: '', // 当前项目的轮次id
        dialog: false
      },
      // 查看评审办法弹框
      reviewData: {
        isShowBeChosen: false, // 是否显示中选
        packId: '', // 项目标段id
        reviewMethod: '', // 评审办法 00 综合 02 最低
        line: '', // 评审方式 00线下 01线上
        isLine: false, // 是否显示评审方式 默认 false 当借口返回有值时显示
        dialog: false, // 是否开启弹框 默认不开启
        tenderMethod: ''
      },
      listLength: '', // 报价轮次的数据长度
      // 开启新轮次数据
      Rounddata: {
        packId: '',
        quoteEndTime: '', // 开启新轮次的结束时间
        quoteStartTime: '', // 开启讯轮次的开始时间
        tenderId: '', // 项目id
        offerIds: '', // 开启新伦次的供应商的id集合
        remarkFileBizId: '' // uuId
      },
      /* 表格组件需要的参数-start */
      // 表格组件数据
      tableData: {
        tableData: [], // 表头渲染
        tableList: [] // 数据渲染
      },
      // 表格其他参数
      resultData: {
        isButton: true, // 是否隐藏 操作按钮 默认 不隐藏 false 不隐藏 true隐藏
        tableIsEdit: false, // 表头是否可编辑 false 可以编辑 true 不可以编辑
        isEdit: true, // 是否可编辑 true 不可编辑 false 可以编辑
        auditStatus: ''// 审核状态  null 未提交 00 已提交  01审核通过   02审核驳回
      },
      // 供应商报价单查看弹框
      supplierOfferDialog: {
        dialog: false,
        stageId: '', // 轮次id
        packId: '', // 标段id
        supplierId: '' // 供应商id
      },
      // 获取报价页面展示值
      labelInfo: {
        reviewMethod: '', // 评审办法
        currency: '', // 币种
        line: '', // 评审方式
        isEdit: false // 评审办法是否可编辑
      },
      tenderBase: this.getTenderBase() // 获取项目信息
    }
  },
  watch: {
    // 监听-弹框展示状态
    stageList(val) {
    }
  },
  created() {
    // 查询项目规则字典
    this.initqueryProcurementProjectRuleInitInfo()
    // 调用修改数据方法
    this.getDistinguishBetween()
  },
  methods: {
    filterDictText,
    // 查看报价记录按钮
    recordLook() {
      this.offerSupplierRecord.dialog = true
    },
    // 点击tab切换事件
    handleClick(tab) {
      // 获取stageId
      const stageId = this.stageList.find(item => item.name === tab.label).id
      this.stageId = stageId
      // 当前轮次stageId
      this.offerSupplierRecord.stageId = stageId
      // 获取报价状态字段
      this.useStatus = this.stageList.find(item => item.name === tab.label).useStatus
      // 获取当前点击的项的下标
      this.listLength = this.stageList.findIndex(item => item.name === tab.label)
      // 动态修改下标值
      // 点击切换是调用获取数据报价数据方法
      this.goOfferHall(stageId, this.useStatus)
    },
    // 开启新伦次报价打开弹框
    nextOfferClick() {
      // 获取开启新轮次供应商的报价id,信息
      const { offerIds, supplierList } = this.$refs.supplierInfo.getExportSupplier()// 表格组件组装数据
      // 判断是否有选中的供应商
      if (offerIds.length === 0) {
        this.$elAlert('请选择进入下轮报价的供应商', 'warning', '我知道了')
        return
      }
      // 获取开启新轮次供应商的报价id拼串
      this.Rounddata.offerIds = offerIds.toString()
      // 获取标段id
      this.Rounddata.packId = this.tenderBase.packId
      // 获取项目id
      this.Rounddata.tenderId = this.tenderBase.tenderId
      // 入围供应商名称
      let supplierNames = ''
      supplierList.forEach((item) => {
        supplierNames += item.supplierName + ';'
      })
      this.openRounddialog.selectedSuppliers = supplierNames
      // 获取采购方式 11 询价 12单一来源 13 竞谈 14 竞价
      this.openRounddialog.tenderMethod = this.tenderBase.tenderMethod
      // 打开弹框
      this.openRounddialog.dialog = true
      this.openRounddialog.packId = this.tenderBase.packId
    },
    // 关闭弹框触发的回调
    consignContractInfo(openNewRoundData) {
      if (openNewRoundData) {
        // 获取报价截止时间 单一来源未 ''
        this.Rounddata.quoteEndTime = openNewRoundData.EndTime
        //  获取是否为最终轮次的字段
        this.Rounddata.isLast = openNewRoundData.isLast
        if (this.tenderBase.tenderMethod === '11') {
          this.Rounddata.isLast = ''
        }
        //  uuId
        this.Rounddata.remarkFileBizId = openNewRoundData.uuId
        this.Rounddata.negotiationsThat = openNewRoundData.negotiationsThat // 谈判说明
        // 延迟调用确认框
        setTimeout(() => {
          // 调用开启新伦次方法
          this.setNewRounds()
        }, 500)
      }
    },
    // 封装获取报价情况数据方法
    getDistinguishBetween() {
      const packId = this.tenderBase.packId
      distinguishBetween(packId).then(res => {
        // 非首次进入查看报价 00非首次 01首次
        this.isFirstTime = res.data.line
        // 询价方式 01:一次报价 02:二次报价
        this.quoteMethod = res.data.quoteMethod
        this.stageList = res.data.stageList.reverse().map((item, index) => {
        // 默认最后一轮默认高亮显示
          this.activeValue = index.toString()
          // 默认展示最后一组轮次id
          this.stageId = item.id
          // 获取轮次序号 数值 区分多轮次 判断是否限制报价大厅开启按钮(第二轮以致更多轮次的满足一家供应商就可开启报价)
          this.stageNo = item.stageNo
          // 默认展示最后一组轮报价结束时间
          this.quoteEndTime = item.quoteEndTime
          // 最后轮次id（请求参数）
          this.offerSupplierRecord.stageId = item.id
          // 默认展示最后一组报价状态数据 05结束本轮报价 07结束项目最终轮次报价 01 未报价
          this.useStatus = item.useStatus
          let roundsName = ''
          if (item.isLast === '01') {
            roundsName = '最终轮'
          } else {
            roundsName = '第' + (++index).toString() + '轮报价'
          }
          return {
            ...item,
            activeType: index.toString(),
            name: roundsName
          }
        })
        // 获取数据最后一项的下标
        this.listLength = this.stageList.length - 1
        // 调用查看报价数据方法
        this.goOfferHall(this.stageId, this.useStatus)
        const params = {
          stageId: this.offerSupplierRecord.stageId
        }
        checkOfferRecord(params).then(({ data }) => {
          this.resStyle = data
        })
      }).catch(res => {})
    },
    /**
     * 获取供应商报价数据
     * stageId: 轮次id
     * userstatus: 00报价未开启 01 报价进行中 02报价暂停 03进入延迟倒计时 04延迟竞拍中 05报价结束 07报价结束
     */
    goOfferHall(stageId, userstatus) {
      const data = {
        packId: this.tenderBase.packId, // 标段id
        stageId: stageId // 当前轮次的轮次id
      }
      goOfferHall(data).then(res => {
        const { goOfferHallList, offerList, reviewMethod, currency, line, nextStageInfo } = res.data
        this.nextStageInfo = nextStageInfo
        this.resultData.isEdit = this.isEdit // 表格组件是否可编辑 true 不可编辑 false 可编辑
        this.labelInfo.reviewMethod = reviewMethod // 评审办法 00 综合 01最低
        this.reviewData.reviewMethod = reviewMethod
        if (line) { // 评审方式 00 线下 01 线上
          this.reviewData.line = line
          this.reviewData.isLine = true
        } else {
          this.reviewData.line = '01'
        }
        this.labelInfo.currency = currency // 币种 00 人命币 01 欧元 02 美元
        this.tableData = {
          tableList: goOfferHallList, // 数据渲染
          tableData: offerList// 表头渲染
        }
      })
      // 调用查看中标结果请求
      this.queryWinningResultInfo()
    },
    /*
    * 查询中标结果
    * 入参 packId项目的标段id
    * */
    queryWinningResultInfo() {
      const data = {
        packId: this.tenderBase.packId
      }
      queryWinningResultInfoByPackId(data).then(res => {
        // 项目状态 05采购终止 06流标 08假流标
        this.projectStats = this.tenderBase.purchaseProjectStatus !== '05' && this.tenderBase.purchaseProjectStatus !== '06' && this.tenderBase.purchaseProjectStatus !== '08'
        // auditStatus 00 待审核 01 审核通过 02 不通过
        this.labelInfo.isEdit = res.data.auditStatus === '00' || res.data.auditStatus === '01'
      }).catch(() => {

      })
    },
    // -----------采购单表格组件-方法-Start-----------
    // 供应商-采购单点击事件 supplier获取供应商报价信息
    offerSingleClick(supplier) {
      this.supplierOfferDialog.stageId = supplier.stageId // 轮次id
      this.supplierOfferDialog.packId = supplier.packId // 项目标段id
      this.supplierOfferDialog.supplierId = supplier.supplierId // 项目标段id
      this.supplierOfferDialog.dialog = true
    },
    /* 导出比价分析表/打应供应商报价
    type 00导出比价分析表 01打应供应商报价
    */
    exportFile(type) {
      this.confirmLoading = true
      const { offerIds } = this.$refs.supplierInfo.getExportSupplier()// 获取已选的供应商信息
      if (offerIds.length > 0) {
        if (type === '00') {
          // 导出比价分析表
          this.exportPriceParityTable(offerIds)
          return
        }
        // 打应供应商报价
        this.exportSupplierOffer(offerIds)
        return
      }
      // 一家也未选中不得提交
      this.$alert('至少有一家供应商选中才可导出', '提示', {
        type: 'warning',
        confirmButtonText: '确定'
      })
      this.confirmLoading = false
    },
    // 导出比价分析表
    exportPriceParityTable(offerIds) {
      const data = {
        packId: this.tenderBase.packId, // 标段id
        stageId: this.stageId, // 阶段id
        offerIds: offerIds.join(',')// 供应商报价id
      }
      exportPriceComparisonAnalysisTable(data).then(res => {
        download(res, '【' + this.tenderBase.tenderName + ',' + this.tenderBase.tenderNo + '】比价分析表.xls')
        this.confirmLoading = false
      })
    },
    // 导出供应商报价信息
    exportSupplierOffer(offerIds) {
      // 获取项目名称
      const data = {
        stageId: this.stageId,
        subjectMatterIds: '',
        offerIds: offerIds.join(',')// 供应商报价id

      }
      printSupplierOfferNew(data).then(res => {
        // 调用下载文件方法
        download(res, '【' + this.tenderBase.tenderName + '】报价文件.pdf')
        this.confirmLoading = false
      }).catch(() => {
        this.confirmLoading = false
      })
    },
    // -----------采购单表格组件-方法-End-----------
    setNewRounds() {
      this.$confirm('确定开启新轮次报价吗？', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        confirmButtonClass: 'confirmBtn',
        cancelButtonClass: 'cancelBtn',
        type: 'warning'
      })
        .then(() => {
          // 获取结束时间
          // 调用开启新轮次方法
          this.setNewRound(this.Rounddata)
        })
        .catch(() => {})
    },
    // 封装开启新伦次方法
    setNewRound(data) {
      this.confirmLoading = true
      saveOfferStage(data)
        .then(res => {
          // 刷新驱动
          this.driveReload()
          this.confirmLoading = false
        })
        .catch(() => {
          this.confirmLoading = false
        })
    },
    // 结束报价
    endQuote(stageId) {
      this.confirmLoading = true
      const data = {
        stageId: stageId, // 项目的轮次id
        status: '07' // 多轮次报价的结束报价特殊标记服 status 07
      }
      endQuote(data).then(res => {
        this.driveReload()
        this.confirmLoading = false
      }).catch(() => {
        this.confirmLoading = false
      })
    },
    // 开启新伦次状态显示 布尔值
    setNewCyclyStatus() {
      // tenderMethod 采购方式除单一来源 项目报价未报价 非首次 isFirstTime00 非首次 01 首次
      if (this.tenderBase.tenderMethod === '11' && this.quoteMethod === '02' && this.isFirstTime === '00') {
        return true
      } else if (this.tenderBase.tenderMethod !== '11' && this.useStatus === '05' && this.isFirstTime === '00') {
        return true
      }
      return false
    }
  }
}
</script>

<style lang="less" scoped>
@import url("~@/assets/style/common/public.less");
.offerInfo{
  .tip-size;
}

// 去除表格固定的fixed的背景色
/deep/.el-table__fixed-right::before, .el-table__fixed::before{
  background-color: '';
}
</style>
