<!--
  @description:采购人-报价大厅-未开启
  @Modifier:gmy
  @routerPath:/procurement/procurementDrive/offerPurchase/offerEnterLobby
  @date:2020/8/12-14:05
-->
<template>
  <div class="row-bg">
    <div class="offer-horologe">
      <!-- 倒计时组件动态监听倒计时情况 isCountShow 是否显示报价倒计时 默认显示单一来源不显示-->
      <count-down
        v-show="isCountShow"
        ref="count_Down"
        :countdown-text="countdownText"
        :end-text="endText"
        :end-time="quoteEndTime"
        :end-callback="endCallback"
      />
    </div>
    <div class="offer-purchase-content">
      <!--    供应商报价表格 询价 竞争性谈判展示表格    -->
      <offerSupplier-List :supplist-data="supplistData" />
    </div>
    <!--  查看报价按钮-->
    <el-button
      v-if="!IsSecondInquiry&& projectStats"
      :loading="confirmLoading"
      :disabled="disabled"
      type="primary"
      class="enterOffer"
      @click="enterRoom"
    >
      查看报价
    </el-button>
    <!-- 发起二次询价按钮 IsSecondInquiry 布尔值 默认 false purchaseProjectStatus 项目状态 05 采购终止  发起二次的询价项目状态变采购终止 后进入项目不显示发起二次-->
    <el-button
      v-if="IsSecondInquiry&&tenderBase.purchaseProjectStatus==='06'"
      :loading="confirmLoading"
      type="primary"
      class="enterOffer"
      @click="secondInquiry"
    >
      发起二次询价
    </el-button>
  </div>
</template>

<script>
/* api接口*/
import { endQuote, querySupplierOfferMessage } from '@/api/procurement/procurementOffer'
import { sendSecondTime } from '@/api/procurement/procurementProject'
import { getProjectDrawOffEntityId } from '@/api/procurement/procurementEvaluation'
/* 组件*/
import countdown from '@comp/common/countDown/countDown' // 倒计时组件
import offerSupplierList from './procurementOfferSupplierComp-detail' // 供应商报价家数组件
export default {
  name: 'OfferLobbyPurchaseBeginDetailVue',
  inject: ['getTenderBase', 'driveReload', 'getDriveTask'],

  components: {
    'count-down': countdown, // 倒计时组件
    // 'offer-Clock': offerClock, // 钟表组件
    'offerSupplier-List': offerSupplierList // 供应商报价家数组件
  },
  props: {
    // 当前轮次的轮次id
    stageId: {
      type: String,
      default: () => {
        return ''
      }
    },
    // 当前轮次项目报价截止时间
    quoteEndTime: {
      type: String,
      default: () => {
        return ''
      }
    },
    // 当前轮次序号
    stageNo: {
      type: Number,
      default: () => {
        return 0
      }
    }
  },
  data() {
    return {
      endText: '报价已截止',
      isCountShow: true, // 是否显示倒计时组件
      countdownText: '距离报价截止时间',
      confirmLoading: false, // loading
      disabled: true, // 按钮禁用状态
      projectStats: true, // 项目状态 默认true
      whetherDelay: '', // 是否延时
      countDownFlag: false, // 倒计时状态 默认false
      supplistData: [], // 供应商报价数据
      offerFlag: false, // 进入报价大厅按钮禁用状态 默认false
      IsSecondInquiry: false, // 发起二次按钮是否显示
      tenderBase: this.getTenderBase() // 获取项目信息
    }
  },
  watch: {
    /**
     * @quoteEndTime 当前轮次项目报价截止时间
     * @countDownFlag 倒计时状态字段 默认false （时间结束 ||截止时间未空死返回true）
     * @offerFlag 进入报价大厅按钮禁用状态 默认false
     * 当countDownFlag为true时 && 供应商请求接口完成时offerFlag为true
     * 单一来源无报价截止时间countDownFlag也会返回trre
     *
     */
    'offerFlag'(val) {
      // 报价截止返回布尔值 true
      if (val) {
        // 询价
        if (this.tenderBase.tenderMethod === '11') {
          // 询价紧急采购询价 不区分公开邀请满足1家供应商报价即可开标
          if (this.tenderBase.isEmergencyProcurement === '01' && this.supplistData.length > 0) {
            this.disabled = false
            return
          }
          // 询价 公开类 紧急采购 报价截止 供应商报价家数不满足1家显示流标
          if (this.tenderBase.isEmergencyProcurement === '01' && this.tenderBase.tenderType === '00' && this.supplistData.length < 1) {
            this.IsSecondInquiry = true
            return
          }
          // 非紧急类的询价 供应商报价家数满足3家即可开标
          if (this.supplistData.length > 2) {
            this.disabled = false
            return
          }
          // 采购方式询价(tenderMethod=11)&& 项目类型为公开&&供应商家数不满足3家就可发起二次询价
          if (this.tenderBase.tenderType === '00' && this.tenderBase.isSecondProject === '00' && this.supplistData.length < 3) {
            // IsSecondInquiry发起二次询价按钮开启
            this.IsSecondInquiry = true
            return
          }
          // 采购方式询价(tenderMethod=11)&& 项目类型为公开&&供应商家数不满足3家就可发起二次询价
          if (this.tenderBase.tenderType === '00' && this.tenderBase.isSecondProject !== '00' && this.supplistData.length < 1) {
            // IsSecondInquiry发起二次询价按钮开启
            this.IsSecondInquiry = true
            return
          }
          // 采购方式询价(tenderMethod=11)&& 项目类型为公开&& 是发起二次询价后的项目(isSecondProject 00不是) 供应商列满足1家就可已报价
          if (this.tenderBase.tenderType === '00' && this.tenderBase.isSecondProject !== '00' && this.supplistData.length > 0) {
            this.disabled = false

            return
          }
          return
        }
        // 单一来源
        if (this.tenderBase.tenderMethod === '12') {
          // 采购方式单一来源(tenderMethod=12)供应商列满足1家就可以报价
          if (this.supplistData.length > 0) {
            this.disabled = false
            return
          }
          return
        }
        // 竞争性谈盘
        if (this.tenderBase.tenderMethod === '13') {
          // 采购方式竞争性谈判(tenderMethod=13)公开类 报价供应商列满足3家就可以报价
          if (this.tenderBase.tenderType === '00' && this.supplistData.length > 2 && this.stageNo === 1) {
            this.disabled = false
            return
          }
          // 采购方式竞争性谈判(tenderMethod=13)邀请类 报价供应商列满足1家就可以报价
          if (this.tenderBase.tenderType === '01' && this.supplistData.length > 1 && this.stageNo === 1) {
            this.disabled = false
            return
          }
          // 采购方式竞争性谈判地二轮至以后轮次供应商家数满足1家则可报价
          if (this.supplistData.length > 0 && this.stageNo !== 1) {
            this.disabled = false
            return
          }
          return
        }
        return
      }
    }
  },
  created() {
    // 初始化获取倒计时显示文案
    this.initCountDownText()
    if (this.stageId) {
      // 查看报价按钮是否禁用 purchaseProjectStatus 05采购终止 06流标 08假流标的情况的项目查看按钮不许操作
      this.projectStats = this.tenderBase.purchaseProjectStatus !== '05' && this.tenderBase.purchaseProjectStatus !== '06' && this.tenderBase.purchaseProjectStatus !== '08'
      this.querySupplierOfferMessageData(this.stageId)
    }
  },
  methods: {
    /*
    * 进入报价大厅
    * 调用结束报价请求
    */
    enterRoom() {
      this.endQuote(this.stageId)
    },
    /*
    * 点击发起二次询价事件
    * @params：data：{offerNum:供应商报价家数，quoteEndTime：当前轮次的报价截止时间，tenderId：项目id}
    * 仅在公开询价下支持发起二次按钮
    */
    secondInquiry() {
      const data = {
        offerNum: this.supplistData.length,
        quoteEndTime: this.quoteEndTime,
        tenderId: this.tenderBase.tenderId
      }
      if (data.quoteEndTime && data.tenderId) {
        this.$confirm('确认发起二次询价吗？', '提示', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          confirmButtonClass: 'confirmBtn',
          cancelButtonClass: 'cancelBtn',
          type: 'warning'
        })
          .then(() => {
            // 调用发起二次请求方法
            this.setSendSecondTime(data)
          })
          .catch(() => {
            this.confirmLoading = false
          })
        return
      }
      this.confirmLoading = false // loading
      this.$message.warning('参数不全')
    },
    // 监听倒计时回调
    endCallback(data) {
      // 时间截止后返回data对象中的isTimeStop为true
      this.countDownFlag = data.isTimeStop
      // 时间截止后刷新供应商参与列表公开供应商名称（仅针对公开类的项目，邀请类的项目直接展示供应商名称）
      if (this.countDownFlag) {
        this.querySupplierOfferMessageData(this.stageId)
      }
    },
    // 获取参加的供应商请求
    querySupplierOfferMessageData(stageId) {
      querySupplierOfferMessage(stageId).then(res => {
        this.supplistData = res.data
        // 请求成功之后设置未true并且倒计时结束
        if (this.countDownFlag) {
          this.offerFlag = true
          this.$forceUpdate()
        }
        //
      }).catch(() => {
      })
    },
    /*
    * 结束报价
    * @params data:{stageId: 当前轮次id}
    * 修改轮次报价状态，单一来源需要另外调用获取评审cgformId请求单一来源直接走评审的步骤
    * 请求成功刷新页面刷新驱动节点
    */
    endQuote(stageId) {
      const data = {
        stageId
      }
      this.confirmLoading = true // btnLoading
      endQuote(data).then(res => {
        if (this.tenderBase.tenderMethod === '12') {
          this.initGetProjectDrawOffEntityId()
        } else {
          this.confirmLoading = false // btnLoading
          this.driveReload()
          this.getDriveTask()
        }
      }).catch(() => {
        this.confirmLoading = false // btnLoading
      })
    },
    // 发起二次询价请求
    setSendSecondTime(data) {
      this.confirmLoading = true // btnloading
      sendSecondTime(data).then(res => {
        this.confirmLoading = false // btnloading
        this.$router.push('/procurement/enquiryManageList') // 跳转回询价采购单管理列表
        this.$store.dispatch('setSidebarIsCollapse', false) // 驱动菜单 展开隐藏
      }).catch(() => {
        this.confirmLoading = false // btnloading
      })
    },
    /*
    * 单一来源获取评审cgformId
    *@params packId 项目标段id
    * 单一来源开启报价默认走评审 需要代用获取评审cgformId的方法保存id
    * 请求成功刷新页面
    */
    initGetProjectDrawOffEntityId() {
      getProjectDrawOffEntityId(this.tenderBase.packId).then(res => {
        this.confirmLoading = false // btnLoaing
        // 刷新页面
        this.driveReload()
        // 刷新驱动节点
        this.getDriveTask()
      }).catch(() => {
        this.confirmLoading = false // btnLoaing
      })
    },
    /*
    * 初始化倒计时显示文案
    * 单一来源没有报价截止时间，在供应商点击提交报价时的时间作为报价截止时间，供应商未报价前单一来源报价
    * 隐藏倒计时
    */
    initCountDownText() {
      if (this.tenderBase.tenderMethod === '12') {
        this.isCountShow = false
        // this.endText = '报价中'
      }
    }
  }
}
</script>

<style lang="less" scoped>
@import "~@assets/style/procurement/procurement.bidding.less";

</style>
