<!--
  @description: 新增澄清
  @Modifier: haoFx/肖文龙
  @routerPath:/bidding/projectDrive/clarification/clarificationAdd
  @date: 2020/3/13-17:32
-->
<template>
  <div>
    <el-form
      ref="fromData"
      :rules="rules"
      :inline-message="true"
      :model="formData"
    >
      <table class="from_table">
        <tr>
          <td>
            <el-form-item label="标段（包）" prop="isChangeTime" />
          </td>
          <td colspan="3">
            <packComponent
              ref="packComp"
              :selet-pack-list="selectPackList"
            />
          </td>
        </tr>
        <tr>
          <td>
            <el-form-item label="澄清标题" prop="clarificationTitle" />
          </td>
          <td colspan="3">
            <el-form-item prop="clarificationTitle">
              <gx-input
                v-model="formData.clarificationTitle"
                gx-maxlength="varchar200"
                type="text"
                placeholder="澄清标题"
              />
            </el-form-item>
          </td>
        </tr>
        <tr>
          <td>
            <el-form-item label="澄清版本号" />
          </td>
          <td colspan="3">
            {{ formData.versionNumber }}
          </td>
        </tr>
        <tr>
          <td>
            <el-form-item label="是否变更文件" prop="isChangeTime" />
          </td>
          <td>
            <el-radio-group v-model="formData.isChangeDoc">
              <el-radio v-for="(item,index) in isChangeBulletinList" :key="index" :label="item.typecode">
                {{ item.typename }}
              </el-radio>
            </el-radio-group>
          </td>
          <td>
            <el-form-item label="是否变更时间" prop="isChangeTime" />
          </td>
          <td>
            <el-radio-group v-model="formData.isChangeTime" @change="handleIsChangeTime">
              <el-radio
                v-for="(item,index) in isChangeTimeList"
                :key="index"
                :label="item.typecode"
              >
                {{ item.typename }}
              </el-radio>
            </el-radio-group>
          </td>
        </tr>
        <!--是否变更时间 01-->
        <tr v-show="formData.isChangeTime==='01'">
          <td>
            <el-form-item label="标书获取开始时间" />
          </td>
          <td>
            {{ $Moment(formData.tenderDocumentReceiveStartTime).format(momentDateTime) }}
          </td>
          <td>
            <el-form-item label="标书获取截止时间" />
          </td>
          <td>
            {{ $Moment(formData.tenderDocumentReceiveEndTime).format(momentDateTime) }}
          </td>
        </tr>
        <!--是否变更时间 01-->
        <tr v-show="formData.isChangeTime==='01'">
          <td>
            <el-form-item label="澄清截止时间" prop="clarificationEndTime" />
          </td>
          <td>
            <el-date-picker
              v-model="formData.clarificationEndTime"
              :format="elValueFormat"
              :clearable="false"
              :value-format="elValueSaveFormat"
              type="datetime"
              placeholder="选择日期时间"
              @change="clarificatioTimeRuleChange('clarificationEndTime')"
            />
          </td>
          <td>
            <el-form-item label="投标截止时间及开标时间" prop="submitEndTime" />
          </td>
          <td>
            <el-date-picker
              v-model="formData.submitEndTime"
              :format="elValueFormat"
              :value-format="elValueSaveFormat"
              :clearable="false"
              type="datetime"
              placeholder="选择日期时间"
              @change="clarificatioTimeRuleChange('submitEndTime')"
            />
          </td>
        </tr>
        <!--是否变更文件 01-->
        <tr v-show="formData.isChangeDoc==='01'">
          <td>
            <el-form-item label="修改招标文件" />
          </td>
          <td colspan="3">
            <el-button :loading="confirmLoading" type="primary" @click="saveNextStep('01')">
              修改招标文件
            </el-button>
          </td>
        </tr>
      </table>
    </el-form>
    <!--保存按钮-->
    <div class="but_footer">
      <div class="but_footer-h" />
      <div class="but_footer-but">
        <!--工作流进入不显示返回-->
        <el-button :loading="confirmLoading" type="primary" @click="saveNextStep('00')">
          保存，进入下一步
        </el-button>
        <el-button v-if="!flowStatus" @click="back">
          返 回
        </el-button>
      </div>
    </div>
  </div>
</template>

<script>
/* 接口*/
import { getClarificationVesionNumber, getEditClarificationInfo, saveClarificationInfo } from '@/api/bidding/bidClarification'// 澄清
import { selectStageTimeRuleInfoByStageId } from '@/api/bidding/changeBulletin'
/* 公用方法*/
import { cloneObject } from '@/assets/js/utils'// 常用方法
import { validateInput, characters1_50 } from '@/assets/js/validate'// 校验输入内容
/* 混合开发方法-参数字段*/
import { clarificationGroupMixin } from '../../mixins/clarificationGroupMixin'// 澄清质疑-字典信息
import { clarificationMixin } from '../../mixins/clarificationMixin'// 澄清质疑-公共方法
import { tenderStageTimeRule } from '@/views/bidding/bulletin/mixins/tenderStageTimeRule.js' // 招标公共
import { formatTimeSecond } from '@/assets/js/utils' // 保存时间初始化00秒
/* 组件*/
import packComponent from './packComponent'// 选择标包组件
export default {
  name: 'ClarificationAdd',
  components: {
    packComponent
  },
  mixins: [clarificationMixin, clarificationGroupMixin, tenderStageTimeRule],
  data() {
    return {
      clarificationSystemSourceType: '', // 是否使用工具端制作
      confirmLoading: false, // 暂存、下一步Loding
      tenderId: this.$route.query.id, // 项目id
      tenderBase: this.$store.getters.tenderBase, // 项目基本信息
      stageType: '', // 资格审查方式 00 资审 01 后审  （使用招标公告规则时需要）
      selectPackList: [], // 获取的已选择的标段（包）
      formData: {
        clarificationId: '', // 澄清Id
        isChangeDoc: '00', // 是否变更文件 00:否 01:是 补疑时有值
        isChangeTime: '00', // 是否变更时间 00:否 01:是 补疑时有值
        tenderDocumentReceiveEndTime: '', // 原始标书获取截止时间
        tenderDocumentReceiveStartTime: '', // 原始标书获取开始时间
        submitEndTime: '', // 投标截止时间及开标时间
        clarificationEndTime: '', // 澄清截止时间
        clarificationType: '01', // 澄清类型 00答疑 01补疑 补疑时有值
        content: '', // 澄清内容 答疑时有值
        versionNumber: '', // 澄清版本号
        requestSource: '', // 请求来源 00:保存 01:修改招标文件
        clarificationTitle: '' // 澄清标题
      },
      // 校验
      rules: {
        clarificationTitle: [{ required: true, validator: characters1_50, trigger: 'blur' }, { validator: validateInput, trigger: 'blur' }], // 澄清标题
        isChangeDoc: [{ required: true, message: '请选择', trigger: 'change' }], // 是否变更文件
        isChangeTime: [{ required: true, message: '请选择', trigger: 'change' }] // 是否变更时间
      }
    }
  },
  watch: {
    // 已选择的标段（包）
    selectPackList: {
      handler: function(val) {
        // 设置 资格审查方式 （使用招标公告规则时需要）
        this.stageType = val[0] && val[0].stageType
      },
      deep: true
    }
  },
  created() {
    // 判断是否有澄清Id
    if (this.clarificationId) { // 编辑
      this.initData()// 获取澄清信息
    } else { // 新增
      this.getClarificationVesionNumber()// 获取澄清版本号
    }
    // 获取系统来源
    this.$store.dispatch('getSystemSource', 'addendumClarification').then(() => {
      this.clarificationSystemSourceType = this.$store.getters.systemSourceVo.systemSourceCode // 01 工具制作模式 00 平台制作模式
    }).catch(() => {
    })
  },
  methods: {
    /*
     * 时间变更时触发时
     * type : clarificationEndTime 澄清截止时间
     *        submitEndTime 投标截止时间及开标时间
     *        next 点击下一步，保存
    */
    clarificatioTimeRuleChange(type) {
      this.momentDiff('days', this.formData.submitEndTime, this.formData.clarificationEndTime)// 时间差
      const data = {
        tenderDocumentReceiveStartTime: this.formData.tenderDocumentReceiveStartTime, // 原始标书获取开始时间
        tenderDocumentReceiveEndTime: this.formData.tenderDocumentReceiveEndTime, // 原始标书获取结束时间
        acceptAnsweringQuestionsEndTime: this.formData.clarificationEndTime, // 澄清截止时间
        submitEndTime: this.formData.submitEndTime// 投标截止时间及开标时间
      }
      if (type === 'clarificationEndTime') {
      // 澄清截止时间
        this.acceptAnsweringQuestionsEndTimeRule(data)// 校验公告时间规则
      } else if (type === 'submitEndTime') {
      // 投标截止时间及开标时间
        this.submitEndTimeRule(data)
      } else if (type === 'next') {
        // 判断招标公告校验时间、非招标公告不需要校验
        if (this.tenderBase.tenderMethod === '00' || this.tenderBase.tenderMethod === '01') {
          // 点击下一步，保存
          return this.tenderStageTimeRule(data)
        } else {
          return new Promise((resolve, reject) => {
            resolve()
          })
        }
      }
    },
    // 获取已选标段阶段id集合
    getStageIds() {
      const stageId = []// 阶段id集合
      this.selectPackList.map(item => {
        stageId.push(item.stageId)// 阶段id集合
      })
      return stageId
    },
    // 选择是否变更时间
    handleIsChangeTime(val) {
      // 未选择标包时不可变更
      if (this.selectPackList.length < 1 && val === '01') {
        this.formData.isChangeTime = '00'
        if (!this.$refs.packComp.isCheck()) {
          return // 校验是否选择标段（包）
        }
      } else {
        // 选择变更
        if (val === '01') {
          this.selectStageTimeRuleInfo()// 根据阶段id集合查询时间规则信息
        } else {
          // 不变更清空
          this.formData.submitEndTime = '' // 投标截止时间及开标时间
          this.formData.clarificationEndTime = ''// 澄清截止时间
        }
      }
    },
    /*
     * 根据阶段id集合查询时间规则信息
    */
    selectStageTimeRuleInfo() {
      const data = {
        stageId: this.getStageIds()
      }
      selectStageTimeRuleInfoByStageId(data).then(res => {
        // 改变是否变更时间的时候
        const data = res.data && res.data[0]
        // 原始标书获取开始时间
        this.formData.tenderDocumentReceiveStartTime = data.tenderDocumentReceiveStartTime
        // 原始标书获取结束时间
        this.formData.tenderDocumentReceiveEndTime = data.tenderDocumentReceiveEndTime
        // 原始接收答疑截止时间
        this.formData.clarificationEndTime = this.formData.clarificationEndTime || data.acceptAnsweringQuestionsEndTime
        // 原始投标截止时间及开标时间
        this.formData.submitEndTime = this.formData.submitEndTime || data.submitEndTime
      })
    },
    // 返回
    back() {
      this.$router.push({
        path: '/bidding/projectDrive/clarification/clarificationList',
        query: {
          ...this.$route.query
        }
      })
    },
    // 获取澄清信息
    initData() {
      getEditClarificationInfo(this.clarificationId).then(res => {
        this.formData = {
          ...this.formData,
          ...res.data// 澄清信息
        }
        this.selectPackList = cloneObject(res.data.packInfoVoList)// 已选的标段(包)列表
        // 查询标书获取时间
        if (this.selectPackList.length > 0) this.selectStageTimeRuleInfo()
      })
    },
    // 新增时获取澄清版本
    getClarificationVesionNumber() {
      const data = {
        tenderId: this.tenderId// 项Id
      }
      getClarificationVesionNumber(data).then(res => {
        this.formData.versionNumber = res.data.versionNumber// 澄清版本号
        this.formData.clarificationTitle = `【${this.tenderBase.tenderName}】澄清函`// 澄清标题
      })
    },
    // 保存组装数据
    assemblyData(requestSource) {
      const data = {
        ...cloneObject(this.formData),
        tenderId: this.tenderId, // 项目Id
        clarificationId: this.clarificationId, // 澄清Id
        packInfoDtoList: cloneObject(this.selectPackList), // 标段集合
        requestSource: requestSource // 请求来源 00:保存 01:修改招标文件
      }
      // 投标截止时间及开标时间
      if (data.submitEndTime) {
        data.submitEndTime = formatTimeSecond(data.submitEndTime)
      } else {
        data.submitEndTime = null
      }
      // 澄清截止时间
      if (data.clarificationEndTime) {
        data.clarificationEndTime = formatTimeSecond(data.clarificationEndTime)
      } else {
        data.clarificationEndTime = null
      }
      // 删除不需要的参数
      data.packInfoDtoList.forEach(item => {
        delete item.tenderDocumentReceiveEndTime
      })
      delete data.tenderDocumentReceiveEndTime // 原始标书获取截止时间
      delete data.tenderDocumentReceiveStartTime // 原始标书获取开始时间
      delete data.packInfoVoList// 标段信息集合 补疑时有值
      delete data.questionIdDetailList// 问题详情id集合
      delete data.questionIdList// 问题id集合
      return data
    },
    /*
    * 保存接口
    * saveRequestSource 请求来源 00:保存 01:修改招标文件
    * */
    saveData(saveRequestSource) {
      // 已选中的标段-进行规则校验 then 通过 catch 不通过
      this.$refs.packComp.packSelectRule().then(() => {
        const data = this.assemblyData(saveRequestSource)// 保存组装数据
        this.$refs.fromData.validate((valid, field) => {
          if (valid) { // 校验通过
            this.confirmLoading = true// btnLoding
            saveClarificationInfo(data).then(response => {
            // 00:保存 01:修改招标文件
              if (saveRequestSource === '01') {
                this.clarificationId = response.data.clarificationId // 澄清Id
                window.open(response.data.openUrl, '_self')
              } else {
                this.getSystemSourceUrl(response.data.clarificationId) // clarificationId 澄清Id
              }
              this.confirmLoading = false// btnLoding
            }).catch(() => {
              this.confirmLoading = false// btnLoding
            })
          }
        })
      })
    },
    /*
    * 保存下一步
    * saveRequestSource 请求来源 00:保存 01:修改招标文件
    * */
    saveNextStep(saveRequestSource) {
      if (!this.$refs.packComp.isCheck()) {
        return // 校验是否选择标段（包）
      }
      // 判断是否为变更时间
      if (this.formData.isChangeTime === '01') {
        // 变更时间时
        this.clarificatioTimeRuleChange('next').then(() => {
          // 判断招标公告校验时间（依法必招）、非招标公告不需要校验
          if ((this.tenderBase.tenderMethod === '00' || this.tenderBase.tenderMethod === '01') && this.legalLimitData.isLegalTender === '01') {
          // 获取投标截止时间和澄清时间相差天数
            const timeDifference = this.momentDiff('days', this.formData.clarificationEndTime, this.formData.submitEndTime)
            if (timeDifference < 10) {
              return this.$elAlert('澄清时间应在投标截止时间10日前提出', 'warning')
            }
          }
          // 校验公告时间规则
          this.saveData(saveRequestSource)
        })
      } else {
        // 不变更时间时
        this.saveData(saveRequestSource)
      }
    },
    // 获取系统来源 配置使用工具制作或者是平台制作跳转url
    getSystemSourceUrl(clarificationId) {
      // 01 工具制作模式 00 平台制作模式
      if (this.clarificationSystemSourceType === '01') {
        this.$router.push({
          path: this.clarificationPath.toolMakePath,
          query: {
            ...this.$route.query,
            clarificationId: clarificationId// 澄清Id
          }
        })
      } else {
        this.$router.push({
          path: this.clarificationPath.makeClarificationLetterAddPath,
          query: {
            ...this.$route.query,
            clarificationId: clarificationId // 澄清Id
          }
        })
      }
    }
  }
}
</script>

<style scoped lang="less">

</style>
