<!--
  @description:二级驱动右侧加入视频会议
  @Modifier：wxy/yf
  @routerPath:
  @date：  2020-08-10 14:21:37
-->
<template>
  <div class="fr">
    <!-- taskNo 07价格评审 08推荐中标候选人01评标准备001签到 -->
    <!-- isEvalLeader 当前评委会是否为组长 【00–不是，01–是组长】 -->
    <el-button v-if="!getTenderBase.isEdit&&isReevalution()&&getTenderBase.taskNo!=='01'&&getTenderBase.taskNo!=='001'&&getTenderBase.taskNo!=='002'" type="text" class="mr10 proc-Eva-bth" @click="reapply">
      <span class="iconfont icon-zhongxin imgBg" />重新申请本步骤
    </el-button>
    <!-- taskNo 03符合性评审 04商务评审 05经济评审 06商务经济评审 -->
    <el-button v-if="getTenderBase.taskNo==='001'||getTenderBase.taskNo==='01'||getTenderBase.taskNo==='03'||getTenderBase.taskNo==='04'||getTenderBase.taskNo==='05'||getTenderBase.taskNo==='06'" :loading="downOfferLoading" type="text" class="mr10 proc-Eva-bth" @click.stop="downloadBidFile">
      <span class="iconfont icon-xiazai1 imgBg" />下载报价文件
    </el-button>
    <el-button v-if="getTenderBase.taskNo==='001'||getTenderBase.taskNo==='01'||getTenderBase.taskNo==='03'||getTenderBase.taskNo==='04'||getTenderBase.taskNo==='05'||getTenderBase.taskNo==='06'" :loading="downProcLoading" type="text" class="mr10 proc-Eva-bth" @click.stop="downloadProcFile">
      <span class="iconfont icon-xiazaiwenjian imgBg" />下载采购文件
    </el-button>
    <!--<span v-if="getTenderBase.taskNo==='03'">-->
    <!--<span class="iconfont icon-zhengxin imgBg"/>-->
    <!-- 供应商征询查询-->
    <!--</span>-->
    <!-- <el-button class="mr10 proc-Eva-bth" type="text" @click="joinVideoConference">
      <span class="iconfont icon-shipin imgBg" style="font-size:12px" />加入视频会议
    </el-button> -->
    <el-button class="mr10 proc-Eva-bth" type="text" @click="lookDetail">
      <span class="iconfont icon-chakan imgBg" />查看采购单
    </el-button>
    <!-- 申请重评本步骤弹框 -->
    <review-audit-dialog :dialog-data="dialogData" :get-tender-base="getTenderBase" @reloadDrive="reloadDrive" />
    <!-- 采购单查看弹框 -->
    <order-project-base :dialog-data="orderProjectDialog" />
  </div>
</template>

<script>
/* api*/
import {
  ProcurementEvalManagerProcedureAuditStatus,
  qryProtProjectProcedureBidFileInfo,
  applyDownloadProcedureTenderFile,
  qryProtProjectProcedureFileInfo,
  applyDownloadProcedureBidFile // 申请下载报价文件
} from '@/api/procurement/procurementEvaluation.js'
import { downLoadFileUrl, downLoadFile } from '@/api/common/uploadCenter'
/* 组件*/
import reviewAuditDialog from '../../procurementReviewAudit/procurementReviewAudit-dialog'
import orderProjectBase from '@views/procurement/components/procurementProjectBaseInfo-dialog' // 采购单查看弹框
/* 公共方法*/
import { downloadUrlFile, download } from '@/assets/js/utils'
export default {
  components: {
    'review-audit-dialog': reviewAuditDialog,
    'order-project-base': orderProjectBase // 采购单查看弹框
  },
  props: {
    // 项目基本信息
    getTenderBase: {
      type: Object,
      default: function() {
        return {}
      }
    }
  },
  data() {
    return {
      dialogData: {
        dialog: false // 弹框显示隐藏
      },
      // 采购单查看弹框
      orderProjectDialog: {
        dialog: false,
        tenderId: '' // 项目id
      },
      applyQuotationTime: '', // 申请下载报价文件
      applyProcTime: '', // 申请下载采购文件
      downOfferLoading: false, // 下载报价文件 loading
      downProcLoading: false // 下载采购文件 loading
    }
  },
  created() {
  },
  // vue被销毁是清空定时器 防止页面无限调用
  destroyed() {
    this.clearTimeer()
  },
  methods: {
    // 重新申请本步骤
    reapply() {
      const data = {
        driverId: this.getTenderBase.driverId,
        packId: this.getTenderBase.packId
      }
      ProcurementEvalManagerProcedureAuditStatus(data).then(res => {
        if (res.header.ret === '0') {
          if (res.data.status !== 'false') {
            this.dialogData.dialog = true
          } else {
            this.$message.error(res.data.msg)
          }
          return
        }
        this.$message.warning('已经提交申请，请勿重复提交！')
      })
    },
    // 加入视频会议 - 暂时隐藏
    // joinVideoConference() {
    //   comeintoFSMeetingRoomByExpert(this.getTenderBase.packId).then(res => {
    //     if (res.data.code === '417') {
    //       this.$message.warning(res.data.msg)
    //       return
    //     }
    //     window.open(res.data.visitUrl)
    //   })
    // },
    // 刷新驱动
    reloadDrive() {
      this.$emit('refreshDrive')
    },

    // 查看采购单
    lookDetail() {
      // 获取项目id
      this.orderProjectDialog.tenderId = this.getTenderBase.tenderId
      // 打开采购单查看弹框
      this.orderProjectDialog.dialog = true
    },
    // 下载报价文件事件
    downloadBidFile() {
      this.clearOfferTimer()
      // 轮询查看下载报价文件
      this.applyDownloadProcedureBidFile()
    },
    // 下载采购文件
    downloadProcFile() {
      // 清除上一个定时器
      this.clearProcTimer()
      // 轮询查看下载采购文件
      this.downloadProcFiles()
    },
    /*
    * 申请下载报价文件 2s轮询一次
    * @params packId 项目标段id
    * 接口返回文件下载状态status： true， false， wait
    * status==='true'可以下载 清除定时器调用下载接口 status==='false'暂无报价信息清除定时器返回报错信息 status===wait 正在生成压缩文件继续轮询
    * status==='downloa' 调用公共下载接口
    */
    applyDownloadProcedureBidFile() {
      this.downOfferLoading = true // btnLoaing
      const _this = this
      this.applyQuotationTime = setInterval(function() {
        const packId = _this.getTenderBase.packId
        applyDownloadProcedureBidFile(packId).then(res => {
          if (res.data.status === 'true') {
            clearInterval(_this.applyQuotationTime)
            _this.applyQuotationTime = ''
            _this.downloadBidFiles(packId) // 下载采购文件方法
          } else if (res.data.status === 'false') {
            _this.clearOfferTimer() // 清除采购文件定时器
            _this.$message.warning(res.data.msg)
          } else if (res.data.status === 'download') {
            clearInterval(_this.applyQuotationTime)
            _this.applyQuotationTime = ''
            const data = { fileId: res.data.fileId, fileType: res.data.fileType }
            _this.comonDownFile(data, '投标文件.zip', 'offer') // 公共下载方法
          } else {

          }
        }).catch(() => {
          _this.clearOfferTimer() // 清除采购文件定时器
        })
      }, 2000)
    },
    /*
    * 下载报价文件
    * @params packId 项目标段id
    * 当申请下载报价文件返回true是后端去做文件压缩处理 次接口在压缩成功后返回附件id和附件类型，使用公共的下载方法下载文件
    */
    downloadBidFiles(packId) {
      qryProtProjectProcedureBidFileInfo(packId).then(res => {
        const data = {
          fileId: res.data.fileId, // 附件id
          fileType: res.data.fileType // 附件类型
        }
        this.downLoadCom(data, '投标文件.zip')
        this.downOfferLoading = false //  btnloading
        this.$message.success('下载成功')
      }).catch(() => {
        this.downOfferLoading = false
      })
    },
    /*
    * 申请下载采购文件 2s轮询一次
    * @params packId 项目标段id
    * 接口返回文件下载状态status： true， false， wait
    * status==='true'可以下载 清除定时器调用下载接口 status==='false'暂无报价信息清除定时器返回报错信息 status===wait 正在生成压缩文件继续轮询
    * status==='download' 调用公共下载接口
    */
    downloadProcFiles() {
      this.downProcLoading = true // btnLoading
      const _this = this
      this.applyProcTime = setInterval(function() {
        const packId = _this.getTenderBase.packId
        applyDownloadProcedureTenderFile(packId).then(res => {
          if (res.data.status === 'true') {
            clearInterval(_this.applyProcTime)
            _this.applyProcTime = ''
            _this.downProcFile(packId) // 下载采购文件方法
          } else if (res.data.status === 'false') {
            _this.clearProcTimer() // 清除采购文件定时器
            _this.$message.warning(res.data.msg)
          } else if (res.data.status === 'download') {
            clearInterval(_this.applyProcTime)
            _this.applyProcTime = ''
            const data = { fileId: res.data.fileId, fileType: res.data.fileType }
            _this.comonDownFile(data, '采购文件.zip', 'procFile') // 公共下载方法
          } else {

          }
        }).catch(() => {
          _this.clearProcTimer() // 清除采购文件定时器
        })
      }, 2000)
    },
    /*
    * 下载采购文件
    * @params packId 项目标段id
    * 当申请下载采购文件返回true是后端去做文件压缩处理 次接口在压缩成功后返回附件id和附件类型，使用公共的下载方法下载文件
    */
    downProcFile(packId) {
      qryProtProjectProcedureFileInfo(packId).then(res => {
        const data = {
          fileId: res.data.fileId, // 附件id
          fileType: res.data.fileType // 附件类型
        }
        this.downLoadCom(data, '采购文件.zip')
        this.downProcLoading = false
        this.$message.success('下载成功')
      }).catch(() => {
        this.downProcLoading = false
      })
    },
    /*
    * 报价文件/采购文件公用的下载方法
    * @params data{fileId 附件id， fileType附件类型}  downText 下载文案字段 downType 区分是采购文件 还是报价文件{offer: 报价, procFile: 采购文件} 根据字段清除按钮loading
    */
    comonDownFile(data, downText, downType) {
      // this.$message.success('下载成功')
      // this.downLoadCom(data, downText) // 调用公共的方法下载
      this.handDownLoad(data, downText)
      if (downType === 'offer') {
        this.downOfferLoading = false
      } else {
        this.downProcLoading = false
      }
    },
    // 下载
    handDownLoad(data, downText) {
      const params = {
        fileId: data.fileId,
        fileType: data.fileType
      }
      this.$nextTick(() => {
        downLoadFile(params).then((res) => {
          download(res, downText)
        }).catch(() => {
        })
      })
    },
    // a标签下
    downLoadCom(data, downText) {
      const downUrl = downLoadFileUrl + '?fileId=' + data.fileId + '&fileType=' + data.fileType
      downloadUrlFile(downUrl, downText) //  a标签下载文件
    },
    // 清除采购文件的定时
    clearProcTimer() {
      clearInterval(this.applyProcTime)
      this.applyProcTime = ''
      this.downProcLoading = false // 清除btnLoading
    },
    // 清除报价文件的定时
    clearOfferTimer() {
      clearInterval(this.applyQuotationTime)
      this.applyQuotationTime = ''
      this.downOfferLoading = false // 清除btnLoading
    },
    // 清除全部定时器和按钮loading状态 切换驱动节点清除
    clearTimeer() {
      this.clearOfferTimer()
      this.clearProcTimer()
    },
    // 判断重评是否显示
    isReevalution() {
      // 符合性评审/商务评审/技术评审的重评不区分组长有节点就显示
      if (this.getTenderBase.taskNo === '03' || this.getTenderBase.taskNo === '04' || this.getTenderBase.taskNo === '05') {
        return true
      }
      // 价格评审的重评，应该只有商务组长才可显示重评 taskNo 07 价格评审驱动 isCommerceLeader是否为商务组长 01–是组长，00–不是
      if (this.getTenderBase.taskNo === '07' && this.getTenderBase.isCommerceLeader === '01') {
        return true
      }
      // 推荐候选人的重评，应该只有推荐候选人可显示重评 isRecommendCandidate 是否推荐 00-否，01-是
      if (this.getTenderBase.taskNo === '08' && this.getTenderBase.isRecommendCandidate === '01') {
        return true
      }
      return false
    }
  }
}
</script>

<style lang='less' scoped>
 @import '~@assets/style/common/public.less';
.imgBg{
  font-size: 14px;
  margin: 0 2px;
  color: @hyacinthine;
}
.fr span {
  cursor: pointer;
}
.mr10 {
  margin-right: 10px;
}
.proc-Eva-bth{
  color: @font
}
</style>
