<!--
  @description:代理机构-项目管理--定标-候选人公示
  @Modifier: 肖文龙
  @Modifier: hfx联调 2020/2/19-09:54
  @routerPath:/bidding/projectDrive/calibration/candidatePublicity-add
  @date: 2020/02/06 10:04
  isCanOperate: true可以操作 false不可以查看只有查看权限
-->
<template>
  <div class="main">
    <template v-if="tenderBase.isCanOperate">
      <!--公示发布时间-->
      <div>
        <el-form ref="form" :model="formData" :rules="rules" label-width="90px">
          <el-form-item
            ref="candidateBulletinTime"
            label="公示时间"
            prop="candidateBulletinTime"
          >
            <el-date-picker
              v-model="formData.candidateBulletinTime[0]"
              :clearable="false"
              :picker-options="disabledPickerOptions"
              :format="elValueFormat"
              :default-time="defaultTimeDateTime"
              :value-format="elValueSaveFormat"
              type="datetime"
              placeholder="开始日期"
              @change="candidateBulletinTimeChange"
            />
            至
            <el-date-picker
              v-model="formData.candidateBulletinTime[1]"
              :clearable="false"
              :picker-options="disabledPickerOptions"
              :format="elValueFormat"
              :value-format="elValueSaveFormat"
              :default-time="defaultTimeDateTime"
              type="datetime"
              placeholder="结束日期"
              @change="candidateBulletinTimeChange"
            />
            <span style="padding-left: 10px;">共
              <span v-if="candidateBulletinTimeDays===''" style="padding-left: 16px" />
              <span style="padding: 0 4px">{{ candidateBulletinTimeDays }}</span>天
            </span>
          </el-form-item>
        </el-form>
      </div>
      <!--未制作标段-->
    </template>
    <div>
      <div class="makeTenderDocument_title">
        <p>未制作标段（包）</p>
        <div v-if="tenderBase.isCanOperate" class="fr">
          <span class="makeTenderDocument_number">已选择
            <span class="makeTenderDocument_orange">{{ seletunPackList.length }}</span>标段
          </span>
          <el-button v-if="systemSourceType==='01'" :loading="confirmLoading" type="primary" @click="makeCandidatePublicityClick('00')">
            制作候选人公示
          </el-button>
          <el-button
            v-if="systemSourceType==='00'"
            :loading="confirmLoading"
            type="primary"
            @click="makeCandidatePublicityClick('01')"
          >
            生成候选人公示
          </el-button>
        </div>
      </div>
      <unCandidateBulletinPackComp ref="unPackComp" @unPackChange="unPackChange" />
    </div>
    <!--已制作标段-->
    <div>
      <div class="makeTenderDocument_title ">
        <p> 已制作标段（包）</p>
      </div>
      <hasCandidateBulletinPackComp ref="hasMakePack" @initData="initUnPackList" @revamped="revampedmake" />
    </div>
    <candidateDialog v-if="dialogData.visible" :dialog-data="dialogData" />
  </div>
</template>

<script>
/* api*/
import { saveCandidateBulletinPackage } from '@api/bidding/bidCalibration'
/* 混入 */
import { bidLawTimeRule } from '@/views/bidding/mixins/bidLawTimeRule'// 招标法-时间规则
import { tenderStageTimeRule } from '@/views/bidding/bulletin/mixins/tenderStageTimeRule.js' // 招标公共
/* 组件*/
import unCandidateBulletinPackComp from './unCandidateBulletinPackComp'// 未制作候选组件
import hasCandidateBulletinPackComp from './hasCandidateBulletinPackComp'// 已制作候选人公示组件
import candidateDialog from './candidate-dialog'

export default {
  name: 'MakeTenderDocumentAdd',
  components: {
    candidateDialog,
    unCandidateBulletinPackComp,
    hasCandidateBulletinPackComp
  },
  mixins: [tenderStageTimeRule],
  data() {
    return {
      dialogData: {
        visible: false
      },
      confirmLoading: false, // 控制按钮重复点击Loding
      tenderBase: this.$store.getters.tenderBase, // 项目信息
      systemSourceType: '', // 系统来源-是否使用工具制作公告
      seletunPackList: [], // 当前选择的标段
      candidateBulletin_TIME_Date: bidLawTimeRule, // 招标法-时间规则
      // 回填
      candidateBulletinTimeDays: '', // 候选人公示时间差 天数
      // 提交信息
      formData: {
        candidateBulletinTime: [], // 候选人公示时间 =》前端展示，不需要传给后端
        bulletinEndTime: '', // 公示截止时间
        bulletinStartTime: '', // 公示开始时间
        tenderId: this.$route.query.id, // 项目id
        candidateBulletinId: '', // 候选人公示主表id
        packageStage: [] // 要制作的标段
      },
      // 校验输入内容
      rules: {
        candidateBulletinTime: [{ required: true, message: '请选择', trigger: 'change' }] // 候选人公示时间
      }
    }
  },
  watch: {
    // 候选人公示时间
    'formData.candidateBulletinTime'(val) {
      if (val[0] && val[1]) {
        this.candidateBulletinTimeDays = this.momentDiff('days', val[0], val[1])// 时间差
      } else {
        this.candidateBulletinTimeDays = ''
      }
    }
  },
  created() {
    // 获取系统来源
    this.$store.dispatch('getSystemSource', 'candidateBulletin').then(() => {
      // 系统来源-是否使用工具制作公告
      this.systemSourceType = this.$store.getters.systemSourceVo.systemSourceCode // 01 工具制作模式 00 平台制作模式
    }).catch(() => {
    })
  },
  methods: {
    // 调用未制作标段查询接口
    initUnPackList() {
      this.$refs.unPackComp.initData()
    },
    // 公示发布时间
    candidateBulletinTimeChange() {
      // 公示发布开始时间
      this.formData.bulletinStartTime = this.$Moment(this.formData.candidateBulletinTime[0]).format(this.momentSaveFormat)
      // 公示发布截止时间
      this.formData.bulletinEndTime = this.$Moment(this.formData.candidateBulletinTime[1]).format(this.momentSaveFormat)
      if (this.formData.candidateBulletinTime[0] && this.formData.candidateBulletinTime[1]) {
        this.bulletinTransformTime()// 候选人公示期时间控制
      }
    },
    // 候选人公示期时间控制
    bulletinTransformTime() {
      // 判断招标流程间隔天数大于5 非招标流程间隔天数大于0
      // isLegalTender 00非法定 01法定
      // stageType 资格审查方式 00 资审 01 后审
      if ((this.tenderBase.tenderMethod === '00' || this.tenderBase.tenderMethod === '01') && (this.legalLimitData.isLegalTender === '01' || this.stageType === '01')) {
        this.candidateBulletin_TIME_Date.TIMEDATE5 = 3
      } else {
        this.candidateBulletin_TIME_Date.TIMEDATE5 = 0
      }
      let isTimeRule = true
      if (isTimeRule) {
      // 计算天数
        isTimeRule = this.transformTime(
          'days',
          this.formData.candidateBulletinTime[0], // 公示开始时间
          this.formData.candidateBulletinTime[1], // 公告结束时间
          this.candidateBulletin_TIME_Date.TIMEDATE5, // 间隔天数
          '【候选人公示结束时间】距离【候选人公示开始时间】应不小于' + this.candidateBulletin_TIME_Date.TIMEDATE5 + '天'// 提示文案
        )
      }
      return isTimeRule
    },
    // 制作候选人公示
    makeCandidatePublicityClick(type) {
      if (this.seletunPackList.length > 0) { // 已选标段（包）
        this.$confirm('确定制作已选标段（包）吗?', '提示', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          confirmButtonClass: 'confirmBtn',
          cancelButtonClass: 'cancelBtn',
          type: 'warning'
        }).then(() => {
          this.makePack(type, '')// 制作候选人接口
        }).catch(() => {
        })
      } else {
        this.$message({
          message: '请选择要制作的标段（包）',
          type: 'warning'
        })
      }
    },
    /*
    * 修改已制作候选人公示
    * row 修改时的 候选人公示参数
    * */
    revampedmake(type, row) {
      this.$confirm('确定修改已选标段（包）吗?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        confirmButtonClass: 'confirmBtn',
        cancelButtonClass: 'cancelBtn',
        type: 'warning'
      }).then(() => {
        this.makePack(type, row)// 制作候选人接口
      }).catch(() => {
      })
    },
    /*
    * 保存组装数据
    * row 修改时的 候选人参数
    * */
    assemblyData(row) {
      const data = {
        ...this.formData,
        packageStage: []
      }
      /*
      * row 为空时是制作候选人公示
      * */
      if (!row) { // 多个制作
        // 已选标段
        this.seletunPackList.map(item => {
          data.packageStage.push({
            packId: item.packId, // 公告Id
            stageId: item.stageId// 阶段Id
          })
        })
      } else { // 修改
        data.candidateBulletinId = row.id// 候选人公示Id
        data.packageStage.push({
          packId: row.packId, // 公告Id
          stageId: row.stageId// 阶段Id
        })
      }
      // 删除不需要的参数
      delete data.candidateBulletinTime // 候选公示时间
      return data
    },
    /*
    * 制作候选人公示接口
    * row 为空时是制作候选人公示
    * */
    makePack(type, row) {
      if (this.formData.candidateBulletinTime[0] && this.formData.candidateBulletinTime[1]) {
        const isTimeRule = this.bulletinTransformTime()// 候选人公示期时间控制
        if (!isTimeRule) return
      } else {
        this.$message.warning('请选择公示时间')
        return false
      }
      this.confirmLoading = true
      const data = this.assemblyData(row)
      if (type === '00') {
        this.makePackOpenUrl(data)
      } else if (type === '01') {
        this.createPackopenUrl(data)
      }
    },
    // 调用工具制作
    makePackOpenUrl(data) {
      saveCandidateBulletinPackage(data).then(res => {
        this.dialogData.visible = true
        this.dialogData.type = '00' // 00 不显示制作工具
        this.dialogData.row = res.data.candidateBulletinId
        window.open(`${res.data.openUrl}`, '_self')
        this.seletunPackList = []
        /*
        * 定时刷新
        * candidateBulletinId 当前正在制作的公示
        * */
        this.$refs.hasMakePack.initData(res.data.candidateBulletinId)// 已制作公示列表
        this.$refs.unPackComp.initData()
        this.confirmLoading = false
      }).catch(() => {
        this.confirmLoading = false
      })
    },
    // 生成候选人公示
    createPackopenUrl(data) {
      // 校验输入内容
      this.$refs.form.validate((valid, field) => {
        if (valid) { // 校验通过
          saveCandidateBulletinPackage(data).then(res => {
            this.$router.push({
              path: '/bidding/projectDrive/calibration/makeCandidateBulletin-add',
              query: {
                ...this.$route.query,
                candidateBulletinId: res.data.candidateBulletinId
              }
            })
            this.seletunPackList = []
            this.$refs.hasMakePack.initData()
            this.$refs.unPackComp.initData()
          })
          this.confirmLoading = false
        } else { // 校验不通过
          this.confirmLoading = false
        }
      })
    },
    // 选择未制作标段（包）
    unPackChange(val) {
      this.seletunPackList = val
    }
  }
}
</script>
<style lang="less" scoped>
  @import '~@assets/style/common/public.less';
  .makeTenderDocument_title{
    height: 50px;
    font-size: 14px;
    line-height: 49px;
    margin-bottom: 16px;
    border-bottom: 1px solid @cut-off;
    p{
      padding: 0 6px;
      font-weight: bold;
      box-sizing: border-box;
      float: left;
      border-bottom: 2px solid @hyacinthine;
    }
    .makeTenderDocument_number{
      .makeTenderDocument_orange{
        color: @orange;
        padding: 6px;
      }

      margin-right: 20px;
    }
  }
  .downlLeft{
    display: flex;
    justify-content: flex-end;
    align-items: center;
  }
</style>
