
<!--
  @description: 采购-评标驱动-评标首页
  @Modifier：肖文龙
  @routerPath: /procurement/evaluationLobbyDrive
  @date：  2020/08/16
-->
<template>
  <div>
    <!-- 驱动模版 -->
    <drive
      ref="drive"
      :drive-data="driveData"
      :back="back"
      :ready-data="readyData"
      :init-data="initData"
      :load-drive="loadDrive"
      :drive-task-change="driveTaskChange"
      :no-main-flow-menu-list="noMainFlowMenuLoad()"
      :no-main-flow-menu-change="noMainFlowMenuChange"
      drive-type="evaluation"
    />
    <!-- 只有专家第一次进入评标室提示 -->
    <div v-if="isFirstEnter" class="p0-16 alertWrapper">
      <el-alert class="evaluation_tip" type="warning">
        <img src="@assets/img/procurement/procurementEvaluation/Prompt.png">
        <span>专家，您好，欢迎进入评标室！请您按照左侧步骤认真、公正、诚实、廉洁地履行评审职责！可通过点击左侧步骤或者每个页面的下一步按钮进行步骤切换。</span>
      </el-alert>
    </div>
    <!--  右上角小功能  -->
    <div class="rightHeader">
      <driveRight ref="driveRight" :get-tender-base="tenderBase" @refreshDrive="refreshDrive" />
    </div>
  </div>
</template>

<script>
/* api*/
import {
  checkoutIsEvalLeaderInfo,
  listProtProjectProcurementEvalDriverByPackId,
  checkoutIsFirstEnterEvalHall,
  logoutEvalHall,
  updateProtProjectProcedureDriverTaskStatus,
  timingQryProtProjectDriverPackAlertTip
} from '@/api/procurement/procurementEvaluation.js'
/* 组件*/
import drive from '@comp/common/drive/drive'// 驱动
import driveRight from './components/procurementDriveStepRight'
// import driveStepRight from '../procurementEvaluationLobbyDrive/components/procurementDriveStepRight'
export default {
  name: 'ProcurementDrive',
  provide() {
    return {
      getTenderBase: this.getTenderBase// 项目信息
    }
  },
  components: {
    drive, // 驱动
    driveRight
  },
  data() {
    return {
      driveData: {
        tenderName: '', // 项目名称
        mainIdKey: 'driverId', // 获取子节点id-key名称
        driveIsOpenKey: 'processStatus', // 驱动主节点-状态-key名称
        driveOpenVal: '02', // 驱动主节点-状态-开启/完成value
        driveIsOpenOngoingVal: '01', // 驱动主节点-状态-进行中value
        driveNoOpenVal: '00', // 驱动主节点-状态-未开启value
        driveIconType: '02', // 驱动主节点-图标-01自定义00默认02序号
        childIconType: '01' // 驱动子阶段-图标-01自定义00默认
      },
      tenderBase: {
        packId: '', // 标段id
        // --------------------------------------------------------
        tenderName: '', // 项目名称
        evalRule: '', // 评审规则【00–整体步骤 01-单个评委步骤】
        isEvalLeader: '', // 当前评委会是否为组长 【00–不是，01–是组长】
        isSelectedLeader: '', // 是否已经设置过组长 【 00-未设置组长 ，01-已经设置过组长】
        evalExpertId: '', // 专家评审表ID
        driverId: '', // 驱动id
        isEdit: false, // 是否为编辑 根据驱动节点状态控制 00未开启 01 正在进行 为true 02 已完成为false
        taskNo: '', // 驱动唯一标识
        taskName: '', // 驱动名称
        isCommerceLeader: '', // 是否为商务组长 00 否 01 是
        isTechnologyLeader: '', // 是否为技术组长 00 否 01 是
        isRecommendCandidate: '' // 是否为推荐候选人 00 否 01 是
      },
      isFirstEnter: false, // 专家第一次进入评标室
      timer: null // 定时查询
    }
  },
  watch: {
    'tenderBase.evalExpertId'(val) {
      if (val) {
        // 判断是否为第一次进入
        this.isFirstEnterEvalHall()
      }
    }
  },
  beforeDestroy() {
    // 清除定时器
    this.clearEvaTimers()
  },
  created() {
  },
  methods: {
    // 需要初始化的内容
    readyData() {
      this.tenderBase = {
        ...this.tenderBase,
        ...this.$route.params
      }
    },
    // 返回
    back() {
      this.$router.push('/procurement/evaluationLobby-list')
    },
    // 获取项目信息
    getTenderBase() {
      return this.tenderBase
    },
    // 获取评标信息
    initData(setPackage) {
      // 是否为组长,评委是否有回避操作，当前评委是否为组长，专家评审表ID
      checkoutIsEvalLeaderInfo(this.tenderBase.packId).then(res => {
        this.tenderBase = {
          ...this.tenderBase,
          ...res.data
        }
        setPackage(this.tenderBase.packId)// 设置标段
      })
    },
    /* =========================================主流程菜单部分========================================= */
    /*
    * 获取驱动步骤菜单
    * packId 当前标段Id
    * */
    async loadDrive() {
      // 接口
      return await listProtProjectProcurementEvalDriverByPackId(this.tenderBase.packId).then(response => {
        const projectDriveListMap = {}// 子驱动
        response.data.forEach(item => {
          if (item.children) {
            projectDriveListMap[item.driverId] = item.children
            projectDriveListMap[item.driverId][0].icon = 'icon-pass'
          }
          delete item.children
        })
        return {
          driveTaskList: response.data, // 主驱动
          projectDriveListMap // 子驱动
        }
      })
    },
    /*
      * 切换驱动步骤节点tab
      * item 驱动步骤节点参数
      * */
    driveTaskChange(item) {
      this.$refs.driveRight.clearTimeer() // 切换驱动清楚下载采购文件驱动
      // 设置项目信息
      this.driveData.tenderName = item.tenderName
      this.tenderBase.evalExpertId = item.evalExpertId
      this.tenderBase.driverId = item.driverId
      this.tenderBase.evalRule = item.evalRule
      this.tenderBase.taskNo = item.taskNo
      this.tenderBase.taskName = item.taskName
      this.tenderBase.taskStatus = item.taskStatus
      // processStatus 00 为开启 01进行中 为编辑装填
      if (item.processStatus === '01' || item.processStatus === '00') {
        this.tenderBase.isEdit = true
      }
      // processStatus 02已完成 页面为查看状态
      if (item.processStatus === '02') {
        this.tenderBase.isEdit = false
      }
      // taskStatus判断驱动节点进入状态 00-驱动未进入 01-驱动已进入
      if (this.tenderBase.taskStatus !== '01') {
        this.updateExpertDriver()
      }
      this.clearEvaTimers() // 清楚倒计时
      // 定时查询当前驱动节点提示信息
      this.queryCurrentDriverInfo()
    },
    /* =========================================非主流程菜单部分========================================= */
    /*
    * 初始化当前非主流程节点的二级步骤tab
    * */
    noMainFlowMenuLoad() {
      // 判断当前登录是组长
      // if (this.tenderBase.isEvalLeader === '01') {
      // 2020/10/10 废标注释
      // return [
      // {
      //   name: '废标',
      //   icon: 'iconfont icon-feibiao',
      //   path: '/procurement/evaluationLobbyDrive/initiateWasteBid'
      // }
      //   ]
      // }
      const secondaryMenuArr = [{
        name: '澄清质疑',
        icon: 'iconfont icon-chengqingchuli',
        path: '/procurement/evaluationLobbyDrive/procClarificationQuestionReply',
        child: [
          {
            name: '投标人提出的问题',
            path: '/procurement/evaluationLobbyDrive/procClarificationQuestionReply/procClarificationQuestionExpertList'
          },
          {
            name: '采购方澄清',
            path: '/procurement/evaluationLobbyDrive/procClarification/procClarificationExpertList'
          },
          {
            name: '标中澄清',
            path: '/procurement/evaluationLobbyDrive/procEvaluateClarify/procEvaluateClarifyExpertList'
          }
        ]
      }]
      return secondaryMenuArr
    },
    /*
    * 切换二级步骤节点tab
    * item 二级步骤节点参数
    * */
    noMainFlowMenuChange(item) {
    },
    // 判断专家是否为第一次进入评标室
    isFirstEnterEvalHall() {
      checkoutIsFirstEnterEvalHall(this.tenderBase.evalExpertId).then(res => {
        // 第一次进入
        if (res.data) {
          this.$notify({
            title: '温馨提示',
            message: '专家，您好，欢迎进入评标室！请您按照左侧步骤认真、公正、诚实、廉洁地履行评审职责！可通过点击左侧步骤或者每个页面的下一步按钮进行步骤切换。',
            duration: 0
          })
          // 标识专家再次进入不在是第一次
          this.notIsFirstEnterEvalHall()
        }
      })
    },
    // 标识专家不在是第一次进入评标室
    notIsFirstEnterEvalHall() {
      logoutEvalHall(this.tenderBase.evalExpertId).then(res => {})
    },
    // 更新评委驱动进入状态
    updateExpertDriver() {
      updateProtProjectProcedureDriverTaskStatus(this.tenderBase.driverId).then(res => {
      })
    },
    // 定时查询当前驱动节点提示信息
    queryCurrentDriverInfo() {
      this.timer = setInterval(() => {
        const data = {
          evalExpertId: this.tenderBase.evalExpertId,
          driverId: this.tenderBase.driverId,
          packId: this.tenderBase.packId,
          evalRule: this.tenderBase.evalRule
        }
        timingQryProtProjectDriverPackAlertTip(data).then(res => {
          // alert是否显示弹框,返回false不需要弹框提示
          if (res.data.alert) {
            // "alertType": "弹框类型 00-变更指标专家,01-废标, 02-终止评审;03-提示评标信息;",
            if (res.data.alertType === '03') {
              this.$confirm(`${res.data.tip}`, '提示', {
                confirmButtonText: `${res.data.btnName}`,
                cancelButtonText: '取消',
                confirmButtonClass: 'confirmBtn',
                cancelButtonClass: 'cancelBtn',
                type: 'warning'
              }).then(() => {
                if (res.data.btnUrl) {
                  this.$router.push(`${res.data.btnUrl}`)
                  this.tenderBase.driverId = res.data.driverId
                }
                this.refreshDrive()
              })
            // alertType 01-废标 bizStatus01-已废标 ，02-废标表决中
            } else if (res.data.alertType === '01' && res.data.bizStatus === '01') {
              // 清除定时器
              clearInterval(this.timer)
              this.$router.push('/procurement/evaluationLobbyDrive/wasteBidVote')
            // alertType 01-废标 bizStatus 02-废标表决中
            } else if (res.data.alertType === '01' && res.data.bizStatus === '02') {
              this.$router.push('/procurement/evaluationLobbyDrive/wasteBidVote')
              // alertType 02-终止评审 bizStatus 00-终止 01-废标
            } else if (res.data.alertType === '02' && (res.data.bizStatus === '01' || res.data.bizStatus === '00')) {
              // 清除定时器
              clearInterval(this.timer)
              this.$message.warning('专家您好，此次评标工作已终止，请退出评标室。')
            // 00-变更指标专家 01-变更专家，02-变更指标
            } else if (res.data.alertType === '00' && (res.data.bizStatus === '01' || res.data.bizStatus === '02')) {
              // ysg 2020-10-15 修改 取消按钮隐藏 直接退出到首页
              this.$confirm(`${res.data.tip}`, '提示', {
                confirmButtonText: `${res.data.btnName}`,
                // cancelButtonText: '取消',
                confirmButtonClass: 'confirmBtn',
                // cancelButtonClass: 'cancelBtn',
                type: 'warning'
              }).then(() => {
                // this.refreshDrive()
                this.$router.push({
                  path: '/procurement/evaluationLobby-list'
                })
              })
            }
          }
          if (!res.data.alert && res.data.alertType === '01' && res.data.bizStatus === '02') {
            this.$router.push('/procurement/evaluationLobbyDrive/wasteBidVote')
          }
        }).catch(() => {
          this.clearEvaTimers() // 清楚倒计时
        })
      }, 10000)
    },
    // 刷新驱动
    refreshDrive() {
      this.$refs.drive.driveReload()
      this.$refs.drive.getProjectDriveTask()
    },
    // 清楚倒计时
    clearEvaTimers() {
      // 清除定时器
      clearInterval(this.timer)
      this.timer = ''
    }
  }
}
</script>

<style lang="less" scoped>
  .alertWrapper {
    position: absolute;
    left: 0;
    top: 35px;
    z-index: 99;
    width: 100%;
    height: 35px;
  }
  .evaluation_tip {
    width: 100%;
    height: 100%;
    font-size: 14px;
    color:#333;
    vertical-align: middle;
    background:#FEFAEE;
    border: 1px solid #F7D7B2;
    img {
      width: 22px;
      margin-right: 4px;
    }
    span {
      line-height: 35px;
      vertical-align: middle;
    }
  }
  .el-alert__content {
    display: table-cell;
    padding: 0;
  }
  .topText {
    position: absolute;
    right: 16px;
    top: 80px;
  }
  .rightHeader{
    position: absolute;
    right: 25px;
    top: 75px;
  }
</style>
