<!--
  @description: 招标-招标公告-开标时间及地址
  @Modifier: 肖文龙
  @routerPath:/bidding/projectDrive/bulletin/tabs/bulletinOpenInfo-add
  @date: 2020/1/2-10:05
-->
<template>
  <div>
    <div style="width: 90%;margin-left: 4%;">
      <el-form ref="form" :model="formData" :rules="rules" label-width="220px">
        <!--================================================电子招标================================================-->
        <!--
        bidDocumentSubmitChannel==='00'电子招标
        -->
        <el-row v-if="bidDocumentSubmitChannel==='00'">
          <el-col>
            <el-row>
              <el-col :span="12">
                <!--标书解密方式-->
                <el-form-item ref="bidDocumentDecryptionMethod" :label="dict.bidDocumentDecryptionMethodLabel" prop="bidDocumentDecryptionMethod">
                  <el-radio-group v-show="isShowDecryptMethod" v-model="formData.bidDocumentDecryptionMethod">
                    <el-radio v-for="(item,index) in decryptionMethodList" :key="index" :label="item.typecode">
                      {{ item.typename }}
                    </el-radio>
                  </el-radio-group>
                </el-form-item>
              </el-col>
              <!--tenderBase.stageType 00资审 01后审-->
              <el-col v-if="tenderBase.stageType==='01'" :span="12">
                <!--开标方式-->
                <el-form-item ref="isTwoBidOpening" label="开标方式" prop="isTwoBidOpening">
                  <el-radio-group v-model="formData.isTwoBidOpening">
                    <el-radio v-for="(item,index) in openingMethodList" :key="index" :label="item.typecode">
                      {{ item.typename }}
                    </el-radio>
                  </el-radio-group>
                </el-form-item>
              </el-col>
            </el-row>
            <!--
            两步开标法规则
            isTwoBidOpening===‘01’ 两步开标法
            -->
            <el-row v-if="formData.isTwoBidOpening==='01'">
              <el-col :span="12">
                <!--第一阶段投标规则-->
                <el-form-item ref="isSubmitBidPrice" label="第一阶段投标规则" prop="isSubmitBidPrice">
                  <el-radio-group v-model="formData.isSubmitBidPrice">
                    <el-radio v-for="(item,index) in isSubmitBidPriceList" :key="index" :label="item.typecode">
                      {{ item.typename }}
                    </el-radio>
                  </el-radio-group>
                  <el-button
                    size="mini"
                    style="color: red;margin-left: 16px"
                    type="text"
                  >
                    注：一阶段需要递交投标报价文件为一投两开，不需要递交投标报价则为两投两开
                  </el-button>
                </el-form-item>
              </el-col>
            </el-row>
          </el-col>
          <!--时间-->
          <el-col>
            <!--
            开标时间
            isTwoBidOpening===‘00’ 一步开标法
            -->
            <el-row v-if="formData.isTwoBidOpening==='00'">
              <el-col>
                <el-form-item ref="openBidStartTime" :label="dict.kbsj" prop="openBidStartTime">
                  <el-date-picker
                    v-model="formData.openBidStartTime"
                    :picker-options="disabledPickerOptions"
                    :default-time="defaultTimeDateTime"
                    :value-format="elValueSaveFormat"
                    :clearable="false"
                    :format="elValueFormat"
                    type="datetime"
                    placeholder="选择日期时间"
                    @change="openBidStartTimeChange"
                  />
                </el-form-item>
              </el-col>
            </el-row>
            <!--
            开标时间
            isTwoBidOpening===‘01’ 两步开标法
            -->
            <el-row v-if="formData.isTwoBidOpening==='01'">
              <el-col :span="12">
                <!--商务技术开标时间-->
                <el-form-item ref="technicalOpenBidStartTime" label="商务技术开标时间" prop="timeData">
                  <el-date-picker
                    v-model="formData.technicalOpenBidStartTime"
                    :picker-options="disabledPickerOptions"
                    :clearable="false"
                    :default-time="defaultTimeDateTime"
                    :format="elValueFormat"
                    :value-format="elValueSaveFormat"
                    type="datetime"
                    placeholder="选择日期时间"
                    @change="openBidStartTimeChange"
                  />
                </el-form-item>
              </el-col>
              <!--经济开标时间 isPlatformEconomicOpeningTime 01平台录入 00工具录入-->
              <el-col v-if="isPlatformEconomicOpeningTime === '01'" :span="12">
                <el-form-item ref="economicOpenBidStartTime" label="经济开标时间" prop="economicOpenBidStartTime">
                  <el-date-picker
                    v-model="formData.economicOpenBidStartTime"
                    :picker-options="disabledPickerOptions"
                    :clearable="false"
                    :default-time="defaultTimeDateTime"
                    :format="elValueFormat"
                    :value-format="elValueSaveFormat"
                    type="datetime"
                    placeholder="选择日期时间"
                    @change="openBidStartTimeChange"
                  />
                </el-form-item>
              </el-col>
            </el-row>
          </el-col>
          <!--开标地点-->
          <el-col>
            <el-form-item ref="openBidDetailAddress" :label="dict.kbdd" prop="openBidDetailAddress">
              <span>{{ openBidDetailAddress }}</span>
            </el-form-item>
          </el-col>
        </el-row>
        <!--================================================线下招标================================================-->
        <!--
        bidDocumentSubmitChannel==='01'线下招标
        -->
        <el-row v-if="bidDocumentSubmitChannel==='01'">
          <el-col :span="18">
            <!--开标时间-->
            <el-form-item ref="openBidStartTime" :label="dict.kbsj" prop="openBidStartTime">
              <el-date-picker
                v-model="formData.openBidStartTime"
                :clearable="false"
                :picker-options="disabledPickerOptions"
                :default-time="defaultTimeDateTime"
                :format="elValueFormat"
                :value-format="elValueSaveFormat"
                type="datetime"
                placeholder="选择日期时间"
                @change="openBidStartTimeChange"
              />
            </el-form-item>
            <!--开标地点-->
            <el-form-item ref="openBidAddress" :label="dict.kbdd" prop="openBidAddress">
              <!--地区组件-->
              <cascader :region-text="formData.openBidAddress" style="width:220px" @regionData="regionData" />
              <el-input v-model="BTLopenBidDetailAddress" maxlength="500" placeholder="最多允许输入500个汉字(1000字符)" style="width:calc(100% - 226px)" />
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
    </div>
    <!--保存按钮-->
    <div class="but_footer">
      <div class="but_footer-h" />
      <div class="but_footer-but">
        <el-button @click="prevStep">
          上一步
        </el-button>
        <el-button :loading="confirmLoading" type="primary" @click="nextStep('form')">
          暂存，进入下一步
        </el-button>
      </div>
    </div>
  </div>
</template>

<script>
/* 接口*/
import { queryBidDocumentSubmitChannel, queryBulletinOpenInfo, saveBulletinOpenInfo }
  from '@/api/bidding/bidBulletin'
import { listIsTwoBidOpeningByStageIds } from '@/api/bidding/biddingProject'

/* 混合开发方法-参数字段*/
import { tenderBulletinInitGroupMixin } from './../mixins/tenderBulletinInitGroupMixin'// 字典信息
import { tenderStageTimeRule } from './../mixins/tenderStageTimeRule'// 招标公告时间规则
import { openInfoDecryptMethodConfig } from '../mixins/openInfoDecryptMethodConfig' // 解密方式配置
/* 组件*/
import cascader from '@comp/common/cascader'// 地区三级联动
import { formatTimeSecond } from '@/assets/js/utils' // 保存时间初始化00秒
export default {
  name: 'BulletinOpenInfoAdd',
  components: {
    cascader
  },
  mixins: [tenderBulletinInitGroupMixin, tenderStageTimeRule, openInfoDecryptMethodConfig],
  data() {
    return {
      confirmLoading: false, // 暂存、下一步Loding
      is_show: false, // 物料展示状态
      tenderBase: this.$store.getters.tenderBase, // 项目信息
      bulletinId: this.$route.query.bulletinId, // 公告Id
      stageId: this.$store.getters.groupId.stageId, // 阶段Id
      // 回填
      openBidDetailAddress: '', // 电子招标开标地点=>字典带回的字段
      BTLopenBidDetailAddress: '', // 线下招标开标地点
      bidDocumentSubmitChannel: '', // 投标文件递交途径 00:电子 01:线下 判断展示不同内容
      formData: {
        tenderId: '', // 项目Id
        bulletinId: '', // 公告Id
        isTwoBidOpening: '00', // 开标方式 00 一步开标法 01两步开标法
        bidDocumentDecryptionMethod: '', // 标书解密方式 00 投标人解密 01 服务器集中解密
        isSubmitBidPrice: '00', // 第一阶段投标规则 00 需要投标报价 01 不需要投标报价
        twoBidOpeningMethod: '00', // 两步法开标顺序 00 先开商务技术后经济 01 先经济后商务技术
        openBidStartTime: '', // 开标时间
        technicalOpenBidStartTime: '', // 商务技术开标时间
        economicOpenBidStartTime: '', // 经济开标时间
        openBidAddress: '', // 开标地点
        openBidAddressCode: '', // 开标地点编码
        openBidDetailAddress: ''// 开标详细地点
      },
      // 校验输入内容
      rules: {
        bidDocumentDecryptionMethod: [{ required: true, message: '请选择', trigger: 'change' }], // 标书解密方式
        isTwoBidOpening: [{ required: true, message: '请选择', trigger: 'change' }], // 开标方式
        isSubmitBidPrice: [{ required: true, message: '请选择', trigger: 'change' }], // 标书解密方式
        twoBidOpeningMethod: [{ required: true, message: '请选择', trigger: 'change' }], // 开标方式
        openBidStartTime: [{ required: true, message: '请选择', trigger: 'change' }], // 开标时间
        technicalOpenBidStartTime: [{ required: true, message: '请选择', trigger: 'change' }], // 商务技术开标时间
        economicOpenBidStartTime: [{ required: true, message: '请选择', trigger: 'change' }], // 经济开标时间
        openBidAddress: [{ required: true, message: '请选择', trigger: 'change' }]// 开标地点
      }
    }
  },
  watch: {
    // 投标文件递交途径
    openBidDetailAddress(val) {
      // bidDocumentSubmitChannel ==='01' 线下招标 && 电子招标开标地点 !== 开标地址
      if (this.bidDocumentSubmitChannel === '01' && val !== this.formData.openBidDetailAddress) {
        this.BTLopenBidDetailAddress = this.formData.openBidDetailAddress// 开标地址
      }
    },
    // 两步法开标顺序
    'formData.twoBidOpeningMethod'() {
      this.initTimeRule()// 设置开标时间和投标截止时间相同
    },
    // 开标方式
    'formData.isTwoBidOpening'() {
      this.initTimeRule()// 设置开标时间和投标截止时间相同
    },
    // 投标截止时间
    'timeRuleInfo.submitEndTime'() {
      this.initTimeRule()// 设置开标时间和投标截止时间相同
    }
  },
  created() {
    this.getBulletinOpenInitInfo('decryptMethod')// 字典信息
    this.initSubmitChannel()// 查询投标文件递交途径
    this.initData() // 加载数据
  },
  methods: {
    /* 时间规则处理--设置开标时间和投标截止时间相同-*/
    initTimeRule() {
      const val = this.timeRuleInfo.submitEndTime// 投标截止时间

      if (val) {
        // isTwoBidOpening 是否两步开标 00:否 01:是
        if (this.formData.isTwoBidOpening === '00') { // 一步开标
          if (!this.formData.openBidStartTime) this.formData.openBidStartTime = val // 开标时间
          /* 清空开标的时间*/
          this.formData.technicalOpenBidStartTime = '' // 商务技术开标时间(两步开标)
          this.formData.echnicalOpenBidStartTime = '' // 经济开标时间(两步开标)
        } else if (this.formData.isTwoBidOpening === '01') { // 两步开标
          // twoBidOpeningMethod 两步开标方式(开标顺序) 00:先开商务技术后开经济 01:先开经济后开商务技术
          if (this.formData.twoBidOpeningMethod === '00') { // 先开商务
            if (!this.formData.technicalOpenBidStartTime) this.formData.technicalOpenBidStartTime = val // 商务技术开标时间
            /* 清空开标的时间*/
            this.formData.openBidStartTime = '' // 开标时间
          } else if (this.formData.twoBidOpeningMethod === '01') { // 先开经济
            if (!this.formData.echnicalOpenBidStartTime) this.formData.echnicalOpenBidStartTime = val // 经济开标时间(两步开标)
            /* 清空开标的时间*/
            this.formData.openBidStartTime = '' // 开标时间
          }
        }
      }
    },
    // 根据标段id集合获取是否两步开标-华能项目
    getIsTwoBidOpening() {
      this.$store.dispatch('getSystemSourceConfig').then(() => {
        const systemSource = this.$store.getters.systemConfigSourceVo.systemSource
        // 系统来源 00:新产品 01:华能 02:能交
        if (systemSource === '01') {
          listIsTwoBidOpeningByStageIds(this.stageId).then((response) => {
            this.formData.isTwoBidOpening = response.data
          })
        } else {
          this.formData.isTwoBidOpening = '00'
        }
      })
    },
    // 查询投标文件递交途径
    initSubmitChannel() {
      if (!this.bulletinId) return
      queryBidDocumentSubmitChannel(this.bulletinId).then((response) => {
        this.bidDocumentSubmitChannel = response.data.bidDocumentSubmitChannel
      })
    },
    // 加载数据
    initData() {
      queryBulletinOpenInfo(this.bulletinId).then((response) => {
        this.formData = response.data
        // 解决进入页面调用接口后端返回null 必填校验显示问题
        if (!this.formData.openBidStartTime) this.formData.openBidStartTime = '' // 开标时间
        if (!this.formData.technicalOpenBidStartTime) this.formData.technicalOpenBidStartTime = '' // 商务技术开标时间
        if (!this.formData.economicOpenBidStartTime) this.formData.economicOpenBidStartTime = '' // 经济开标时间
        // 开标方式
        if (!this.formData.isTwoBidOpening) {
          // 根据标段id集合获取是否两步开标-华能项目
          this.getIsTwoBidOpening()
        }
        // 标书解密方式
        if (!this.formData.bidDocumentDecryptionMethod) {
          this.getSystemDecryptMethod()
        }
        // 第一阶段投标规则
        if (!this.formData.isSubmitBidPrice) {
          this.formData.isSubmitBidPrice = '00'
        }
        // 两步法开标顺序
        if (!this.formData.twoBidOpeningMethod) {
          this.formData.twoBidOpeningMethod = '00'
        }
        //  线下招标 && 电子招标开标地点 !== 开标地址
        if (this.bidDocumentSubmitChannel === '01' && this.openBidDetailAddress !== this.formData.openBidDetailAddress) {
          this.BTLopenBidDetailAddress = this.formData.openBidDetailAddress// 开标地址
        }
        //  线下招标
        if (this.bidDocumentSubmitChannel === '01') {
          // 初始化
          this.formData.isTwoBidOpening = '00'// 开标方式 00 一步开标法 01两步开标法
          this.formData.isSubmitBidPrice = '00' // 第一阶段投标规则 00 需要投标报价 01 不需要投标报价
          this.formData.twoBidOpeningMethod = '00' // 两步法开标顺序 00 先开商务技术后经济 01 先经济后商务技术
          this.initTimeRule()// 设置开标时间和投标截止时间相同
        }
        this.initTimeRule()// 时间规则处理--设置开标时间和投标截止时间相同
      })
    },
    // 开标地点三级联动组件使用
    regionData(regionName, location) {
      this.formData.openBidAddress = regionName
      this.formData.openBidAddressCode = location.join(',')
    },
    /*
     * 开标时间/商务技术开标时间/经济开标时间-时间校验规则
     * return 布尔值 true 通过 false 不通过
     */
    openBidStartTimeChange() {
      const data = {
        isTwoBidOpening: this.formData.isTwoBidOpening, // 开标方式 00 一步开标法 01两步开标法
        twoBidOpeningMethod: this.formData.twoBidOpeningMethod, // 两步法开标顺序 00 先开商务技术后经济 01 先经济后商务技术
        openBidStartTime: this.formData.openBidStartTime, // 开标时间
        technicalOpenBidStartTime: this.formData.technicalOpenBidStartTime, // 商务技术开标时间
        economicOpenBidStartTime: this.formData.economicOpenBidStartTime // 经济开标时间
      }
      if (this.toTheBidOpeningRule(data)) {
        // 判断开标时间是否是工作日
        if (!this.isWeekday(new Date(this.formData.openBidStartTime))) {
          this.$elAlert('【' + this.timeRuleCopyWriter.kbjzsj + '】非工作日', 'warning')
        }
      }
      return this.toTheBidOpeningRule(data)//  开标时间及地点-tab页-开标时间
    },
    // 保存组装数据
    assemblyData() {
      const data = {
        ...this.formData,
        tenderId: this.tenderBase.tenderId, // 项目Id
        bizId: this.bulletinId // 公告id
      }
      // 开标时间
      if (data.openBidStartTime) {
        data.openBidStartTime = formatTimeSecond(data.openBidStartTime)
      }
      // 商务技术开标时间
      if (data.technicalOpenBidStartTime) {
        data.technicalOpenBidStartTime = formatTimeSecond(data.technicalOpenBidStartTime)
      }
      // 经济开标时间
      if (data.economicOpenBidStartTime) {
        data.economicOpenBidStartTime = formatTimeSecond(data.economicOpenBidStartTime)
      }
      // 投标文件递交方式
      if (this.bidDocumentSubmitChannel === '00') { // 00 电子招标
        data.openBidDetailAddress = this.openBidDetailAddress// 电子招标开标地址
      } else if (this.bidDocumentSubmitChannel === '01') { // 01 线下招标
        data.openBidDetailAddress = this.BTLopenBidDetailAddress// 线下招标开标地址
      }
      return data
    },
    // 保存数据接口 暂存，下一步
    saveData(type) {
      this.confirmLoading = true// btnLoding
      const data = this.assemblyData()// 保存组装数据
      saveBulletinOpenInfo(data).then(response => {
        // route携带参数
        const pathData = {
          ...this.$route.query
        }
        if (type === 'draft') return false// 判断是否-点击步骤条切换-如果是则不执行next下一步
        this.$emit('stepPage', 'next', pathData)// 步骤条切换方法 next 下一步
        this.confirmLoading = false// btnLoding
      }).catch(() => {
        this.confirmLoading = false// btnLoding
      })
    },
    // 上一步
    prevStep() {
      // router携带参数
      const pathData = {
        ...this.$route.query
      }
      this.$emit('stepPage', 'prev', pathData)// 步骤条切换方法 prev 上一步
    },
    // 下一步
    nextStep(formName) {
      const isTimeRule = this.openBidStartTimeChange() // 开标时间/商务技术开标时间/经济开标时间-时间校验规则
      if (!isTimeRule) return
      // 校验输入内容
      this.$refs[formName].validate((valid, field) => {
        if (valid) { // 校验通过
          this.saveData()
        } else { // 校验不通过
          this.$confirm('开标时间及地点未完善, 是否进入下一步?', '提示', {
            confirmButtonText: '确定',
            cancelButtonText: '取消',
            confirmButtonClass: 'confirmBtn',
            cancelButtonClass: 'cancelBtn',
            type: 'warning'
          }).then(() => {
            this.saveData()
          }).catch(() => {
          })
        }
      })
    }
  }
}
</script>

<style lang="less" scoped>

</style>
