
<!--
  @description: 代理机构驱动模板--分为后审驱动和资审驱动
  @Modifier：haoFx/肖文龙
  @routerPath:/bidding/projectDrive
  @date：  2019/11/14-9:43
-->
<template>
  <div>
    <!-- 驱动模版 -->
    <drive
      :drive-data="driveData"
      :back="back"
      :ready-data="readyData"
      :init-data="initData"
      :load-drive="loadDrive"
      :package-change="packageChange"
      :drive-task-change="driveTaskChange"
      :no-main-flow-menu-list="noMainFlowMenuList"
      :no-main-flow-menu-change="noMainFlowMenuChange"
    />
  </div>
</template>

<script>
/* api*/
import { getProjectDriveTask } from '@/api/bidding/bid'
import { listPackage } from '@/api/bidding/biddingProject'// 标段
/* 组件*/
import drive from '@comp/common/drive/drive'// 驱动

export default {
  name: 'ProjectDrive',
  components: {
    drive // 驱动
  },
  data() {
    return {
      driveData: {
        tenderName: this.$route.query.tenderName // 项目名称
      },
      tenderId: this.$route.query.id, // 项目Id
      packId: this.$route.query.packId, // 标段id
      isPack: '', // 是否分包 00 不分包 01 分包
      tenderMethod: this.$route.query.tenderMethod, // 招标方式
      qualificationMethod: '', // 资格审查方式 00资格预审,01 资格后审
      flowStatus: '', // 是否工作流 00 否 01
      enterProjectDriveSource: sessionStorage.getItem('projectDriveBackType'), // 进入驱动来源 00项目管理列表 01领导-项目管理列表 02采购人-项目管理列表 03 工作流进来 04首页-代办事务
      sourceIsOnlyCheck: '', // 是否仅有查看权限 null/00:否 01:是
      noMainFlowMenuList: []// 非主流程节点的二级步骤tab
    }
  },
  destroyed() {
    // 清除项目-session存储信息
    sessionStorage.removeItem('setTenderBase')
    sessionStorage.removeItem('isShowOneStepsBidOpening')
  },
  created() {
    // 初始化当前非主流程节点的二级步骤tab
    this.noMainFlowMenuLoad()
  },
  methods: {
    // 需要初始化的内容
    readyData() {
      const source = this.enterProjectDriveSource
      // 进入驱动来源 00项目管理列表 01领导-项目管理列表 02采购人-项目管理列表 03 工作流进来 04 首页进来  67询比 89谈判 23磋商
      if (source === '00' || source === '03' || source === '04' || source === '67' || source === '89' || source === '23') {
        this.sourceIsOnlyCheck = '00' // 是否仅有查看权限 null/00:否 01:是
      } else {
        this.sourceIsOnlyCheck = '01' // 是否仅有查看权限 null/00:否 01:是
      }
      // 是否工作流
      if (source === '03' || source === '04') {
        // 工作流
        this.flowStatus = '01'
      } else {
        // 非工作流
        this.flowStatus = '00'
      }
    },
    // 返回
    back() {
      const back = this.enterProjectDriveSource
      // 返回路由
      const backPathObj = {
        '00': '/bidding/projectManager', // 00返回项目管理列表
        '01': '/operation/operationManger-list', // 01返回领导-项目管理列表
        // '02': '/bidding/buyerTenderProject', // 02返回采购人-项目管理列表
        '02': '/operation/buyerTenderProject', // 02返回采购人-项目管理列表
        '03': '/work/todo', // 03 返回工作流-我的事务-代办事务列表
        '04': '/bidding/bidSingleSourceProject', // 04 返回单一来源
        '67': '/bidding/bidInquiryProject', // 67 返回询比列表
        '89': '/bidding/bidNegotiableProject', // 89 返回谈判列表
        '23': '/bidding/bidConsultationProject', // 23 返回磋商列表
        '10': '/bidding/leaderInspectSetting' // 10 返回领导-监标人列表
      }
      this.$router.push(backPathObj[back])
    },
    // 获取标段(包)列表
    initData(setPackage) {
      listPackage(this.tenderId).then(response => {
        const { data } = response
        // 循环并找到当先所对应的标段
        const packId = this.packId // 当前标段id
        setPackage(packId, [...data])// 设置标段
      })
    },
    /*
    * 切换标段-回调
    *  packId 当前标段参数
    * */
    packageChange(item) {
      this.packId = item.packId// 标段id
      this.$router.push({
        query: {
          tenderName: this.driveData.tenderName, // 项目名称
          id: this.$route.query.id, // 项目Id
          packId: item.packId, // 标段Id
          tenderMethod: this.$route.query.tenderMethod // 招标方式
        }
      })
    },
    /* =========================================主流程菜单部分========================================= */
    /*
    * 获取驱动步骤菜单
    * packId 当前标段Id
    * */
    async loadDrive() {
      const params = {
        packId: this.$route.query.packId, // 标段Id
        tenderType: '00', // 项目类型（null/00 代表招标 01 代表采购）
        isOnlyCheck: this.sourceIsOnlyCheck // 是否仅有查看权限 null/00:否 01:是
      }
      //
      // 接口
      return await getProjectDriveTask(params.packId, params.tenderType, params.isOnlyCheck).then(response => {
        const { data: { isPack, currentStageType, qualificationMethod, mainBidtProjectDriverDriveProjectPackVoList, projectDriveListMap, qualificationProjectDriveMap }} = response
        this.isPack = isPack// 是否分包 00 不分包 01 分包
        this.qualificationMethod = qualificationMethod // 资格审查方式 00资格预审,01 资格后审
        return {
          currentStageType: currentStageType || '01', // 资格预审 00  资格后审 01 展示驱动
          driveTaskList: mainBidtProjectDriverDriveProjectPackVoList, // 主驱动
          projectDriveListMap, // 子驱动-后审
          qualificationProjectDriveMap// 子驱动-预审
        }
      })
    },
    /*
      * 切换二级步骤节点tab
      * item 二级步骤节点参数
      * */
    driveTaskChange(item) {
      const stageTypes = item.stageType
      const packInfo = {
        packId: item.packId, // 标包Id
        stageId: item.stageId // 标包阶段Id
      }
      const stageTypeData = {
        stageType: '', //  00 资审 01 后审
        bulletinType: '', // 21 资审 01 招标公告
        invitationType: '', // 01 普通邀请函 02 资审后邀请函（数据源不同）
        fileQualificationType: '', // 00:资审文件 01:后审文件
        isCanOperate: false, // 是否可以操作 00:否 01:是
        bidProcurementConfig: '', // 招标采购配置00招标 01采购
        qualificationMethod: this.qualificationMethod // 资格审查方式
      }
      // 资审后审判断
      if (stageTypes === '00') { // 资审
        stageTypeData.stageType = stageTypes //  00 资审
        stageTypeData.bulletinType = '21'// 资审公告
        stageTypeData.fileQualificationType = '00'// 资审文件
      } else if (stageTypes === '01' || !stageTypes) { // 后审
        stageTypeData.stageType = '01' // 01 后审
        stageTypeData.bulletinType = '01'// 招标公告
        stageTypeData.fileQualificationType = '01'// 招标文件
      }
      /*
      *招标方式 : 公开招标 00  邀请招标 01  竞争性谈判 02  询价 03  单一来源招标 04  其他 05
      * 资格审查方式 01 资格后审  00 资格预审
      * 后审项目邀请函或资审项目第一次发的邀请函（普通邀请函） invitationType = '01'
      * 邀请函(资审项目定标时发的邀请函)资审后邀请函 invitationType = '02'
      * */
      // 资格审查方式 01 资格后审
      if (this.qualificationMethod === '01') {
        stageTypeData.invitationType = '01' // 普通邀请函
      }
      // 资格审查方式 00 资格预审
      if (this.qualificationMethod === '00') {
        //  资格预审项目00资审阶段为普通邀请函 否则01是后审阶段资审后邀请函
        if (stageTypes === '00') {
          stageTypeData.invitationType = '01'// 普通邀请函
        } else {
          stageTypeData.invitationType = '02'// 资审后邀请函（数据源不同）
        }
      }
      // 当前用户权限-是否可以操作 00:否 01:是
      if (item.isCanOperate === '01') { // 有权限
        stageTypeData.isCanOperate = true
      } else { // 没有权限
        stageTypeData.isCanOperate = false
      }
      // router携带参数
      const query = {
        id: this.$route.query.id, // 项目Id
        tenderName: this.driveData.tenderName, // 项目名称
        packId: this.$route.query.packId, // 标段Id
        tenderMethod: this.$route.query.tenderMethod // 招标方式
      }
      if (this.tenderMethod === '00' || this.tenderMethod === '01') {
        stageTypeData.bidProcurementConfig = '00' // 招标采购配置00招标
      } else {
        stageTypeData.bidProcurementConfig = '01' // 招标采购配置01采购
      }
      this.setTenderBase(stageTypeData)// 存储招标项目信息
      this.setPackInfo(packInfo)// 存储标段信息
      // 路由跳转
      return { query }
    },
    // 存储项目信息
    setTenderBase(stageTypeData) {
      // 项目信息
      const data = {
        isPack: this.isPack, // 是否分包
        tenderId: this.$route.query.id, // 项目Id
        tenderName: this.driveData.tenderName, // 项目名称
        tenderMethod: this.$route.query.tenderMethod, // 招标方式
        ...stageTypeData// 资审信息
      }
      this.$store.dispatch('setTenderBase', data)
    },
    // 存储标包信息
    setPackInfo(packInfo) {
      // 标包信息
      this.$store.dispatch('setPackInfo', {
        packId: packInfo.packId, // 标包Id
        stageId: packInfo.stageId // 标包阶段Id
      })
    },
    /* =========================================非主流程菜单部分========================================= */
    /*
     *根据系统来源-配置非主流程菜单
     */
    getSystemDecryptMethod() {
      // 系统来源 00:新产品 01:hn
      this.$store.dispatch('getSystemSourceConfig').then(() => {
        const systemSource = this.$store.getters.systemConfigSourceVo.systemSource
        if (systemSource === '01') {
          this.noMainFlowMenuList[1].child.push({
            name: '招标失败',
            path: '/bidding/projectDrive/biddingFailure/biddingFailureList'
          })
        } else {
          this.noMainFlowMenuList[1].child.push({
            name: '变更采购方式',
            path: '/bidding/projectDrive/changePurchase/changePurchase-list'
          })
        }
      }).catch(() => {
      })
      //  公开招标 00 邀请招标 01
      //  公告磋商 02 邀请磋商 03
      //  公开询价 06 邀请询价 07
      //  公开谈判 08 邀请谈判 09
      if (this.tenderMethod === '00' || this.tenderMethod === '02' || this.tenderMethod === '06' || this.tenderMethod === '08') {
        this.noMainFlowMenuList[1].child.unshift({
          name: '变更公告',
          path: '/bidding/projectDrive/changeBulletin/changeBulletinList'
        })
      }
    },
    /*
    * 初始化当前非主流程节点的二级步骤tab
    * */
    noMainFlowMenuLoad() {
      this.noMainFlowMenuList = [{
        name: '澄清质疑',
        icon: 'iconfont icon-chengqingchuli',
        path: '/bidding/projectDrive/clarificationQuestionReply',
        child: [
          {
            name: '投标人提出的问题',
            path: '/bidding/projectDrive/clarificationQuestionReply/clarificationQuestionList'
          },
          {
            name: '项目经理澄清',
            path: '/bidding/projectDrive/clarification/clarificationList'
          },
          {
            name: '评标澄清',
            path: '/bidding/projectDrive/evaluateClarify/evaluateClarify-list'
          }
        ]
      },
      {
        name: '异常处理',
        icon: 'iconfont icon-yichangliucheng',
        path: '/bidding/projectDrive/changeBulletin',
        child: [
          {
            name: '重新招标',
            path: '/bidding/projectDrive/rebiddingRecord/rebiddingRecordList'
          },
          {
            name: '招标终止',
            path: '/bidding/projectDrive/stopbiddingRecord/stopbiddingRecordList'
          }
        ]
      }]
      this.getSystemDecryptMethod()// 根据系统来源-配置非主流程菜单
    },
    /*
    * 切换二级步骤节点tab
    * item 二级步骤节点参数
    * */
    noMainFlowMenuChange(item) {
      // router携带参数
      const query = {
        id: this.$route.query.id, // 项目Id
        tenderName: this.driveData.tenderName, // 项目名称
        packId: this.$route.query.packId, // 标段Id
        tenderMethod: this.$route.query.tenderMethod // 招标方式
      }
      return { query }
    }
  }
}
</script>

<style lang="less" scoped>
</style>
