<!--
  @description:供应商-报价-填写报价明细组件
  @Modifier:gmy
  @date:2020/8/12-14:58
-->
<template>
  <div class="main">
    <div class="fram-content">
      <!-- <div v-if="tenderBase.tenderMethod !== '11'" :class="offerList.length>1?'video-meet':'video-first'">
        <div class="pointer" @click="videoMeet">
          <span class="iconfont icon-shipin imgBg" style="font-size: 12px;" />
          加入视频会议
        </div>
      </div> -->
      <el-form
        v-if="JSON.stringify(dynamicValidateForm)!=='{}'"
        ref="form"
        :model="dynamicValidateForm"
        :inline-message="true"
      >
        <p class="page-title">
          1.采购项目概况1
        </p>
        <!--   采购项目基本信息   -->
        <projectBase :project-base="dynamicValidateForm.offerByPackIdVo" :stage-id="supplierInfo.stageId" :activeValue="activeValue"/>
        <div class="clearfix offerInfo mb10">
          <p class="fl page-title">
            2.报价物资明细
          </p>
          <el-button v-if="pageIsEdit.allowEdit==='01'" type="primary" class="fl" style="margin-left: 10px;" @click="exportLineItems()">
            导出行项目
          </el-button>
          <el-upload
            v-if="pageIsEdit.allowEdit==='01'"
            ref="uploads"
            :on-success="handleSuccess"
            :limit="1"
            :show-file-list="false"
            :headers="importHeaders"
            :action="action"
            accept=".xls"
            multiple
            class="fl"
            style="display: inline-block;margin-left: 10px"
          >
            <el-button>导入报价信息</el-button>
          </el-upload>
          <p class="fr mt10 tip-size">
            币种：<span class="mr10 currency-col">{{ filterDictText(protproject_currencyList, dynamicValidateForm.offerByPackIdVo.currency) }}</span>
          </p>
        </div>
        <div>
          <!-- 供应商物资明细组件 -->
          <offerGoodsDetail
            ref="offerGoodsDetail"
            :line-item-other="lineItemOther"
            :line-item-file-click="lineItemFileClick"
            :offer-subject-matter-list="dynamicValidateForm.offerSubjectMatterList"
          />
        </div>
        <p class="page-title">
          <span v-if="isUploadReplyFile==='01'" class="response-col">*</span>
          3.应答文件
        </p>
        <div>
          <div class="content-btn">
            <!--   pageIsEdit.allowEdit页面编辑字段 00 不允许 01允许         -->
            <upload
              v-if="pageIsEdit.allowEdit==='01'&&isTimeOver"
              ref="upload"
              class="upload-manage"
              :title="''"
              :data="responseFileData"
              :auto-delete="true"
              :auto-upload="true"
              :multiple="false"
              :before-upload="beforeUpload"
              :success="success"
              tip-text="请上传pdf格式的文件"
              accept=".pdf"
              file-ref="fileRef"
              but-text="上传pdf文件"
              :show-file-list="false"
            />
          </div>
          <!-- 应答文件列表 -->
          <responseFile
            v-loading="responseFileLoading"
            :response-file-list="responseFileList"
            :set-signature-click="setSignatureClick"
            :delete-signature-click="deleteSignatureClick"
            :page-is-edit="pageIsEdit"
          />
        </div>
        <p class="page-title">
          4.附件上传
        </p>
        <table class="tableData">
          <tr class="singleRow">
            <td>
              报价单
            </td>
            <td colspan="3">
              <downloadFile :key="down_key" :down-load="true" :data="procurementOfferFileData" />
            </td>
          </tr>
          <tr class="singleRow">
            <td>其他附件</td>
            <td colspan="3">
              <upload
                v-if="pageIsEdit.allowEdit==='01'&&isTimeOver"
                ref="upload"
                :on-change="principalElseFile"
                :data="procurementAttachFile"
                :file-list="elseFileList"
                :auto-delete="true"
                :auto-upload="true"
                title
                tip-text="上传附件格式（*.doc;*.docx;*.pdf;*.zip;*.png;*.jpg;*.jpeg;*.txt;*.xlsx;*.xls;*.ppt;*.pptx;*.rar）"
                accept=".doc,.docx,.pdf,.zip,.png,.jpg,.jpeg,.txt,.xlsx,.xls,.ppt,.pptx,.rar"
                file-ref="fileRef"
                but-text="点击上传"
              />
              <downloadFile v-else :data="procurementAttachFile" />
            </td>
          </tr>
        </table>
      </el-form>
    </div>
    <div class="but_footer">
      <div class="but_footer-h">
        <div class="but_footer-but">
          <!--
          isTimeOver： 倒计时是否结束 布尔值 结束false 没结束 true
          默认false不可编辑
           -->
          <template v-if="isTimeOver">
            <!-- showSave 00 隐藏 01显示 -->
            <el-button v-if="offerButtonShow.showSave==='01'" :loading="confirmLoading" @click="saveData('form')">
              保存
            </el-button>
            <!-- 生成报价单并电子签章 -->
            <el-button v-if="offerButtonShow.showGenerateOfferSignature==='01'" :loading="confirmLoading" type="primary" @click="nextSetp('form')">
              生成报价单
            </el-button>
            <el-button v-if="offerButtonShow.showSubmitOffer==='01'" :loading="confirmLoading" type="primary" @click="submitOffer('form')">
              提交报价
            </el-button>
          </template>
          <!-- 编辑状态下 单一来源 没有撤销报价 isEdit true 可编辑  -->
          <template v-if="tenderBase.tenderMethod!=='12'&&isTimeOver">
            <el-button v-if="offerButtonShow.showRevokeOffer==='01'" :loading="confirmLoading" @click="returnPage">
              撤销报价
            </el-button>
          </template>
          <el-button v-if="offerButtonShow.showOfferRecord==='01'" :loading="confirmLoading" @click="record">
            报价记录
          </el-button>
        </div>
      </div>
    </div>
    <!-- 生成电子盖章弹框 -->
    <signatureDialog v-if="signatureDialog.dialog" :dialog-data="signatureDialog" />
    <!-- 查看附件弹框 -->
    <offerMaterials v-if="lookFileData.dialog" :dialog-data="lookFileData" />
    <!-- 查看报价记录弹框 -->
    <offerRecordList :dialog-data="offerRecordList" />
  </div>
</template>

<script>
/* api*/
import {
  queryNoOfferByPackId, // 查询报价信息api
  saveOrUpdateOffer, // 保存报价信息api
  submitOrUndoOffer, // 提交报价api
  comeintoFSMeetingRoomBySupplier,
  getOfferFunctionButton,
  uploadBidReply,
  generateQuotationTemplate,
  getProtProcurementBidReplyList,
  delBidReply,
  importOfferInfoList, // 导入报价信息
  exportOfferList // 导出报价信息
} from '@/api/procurement/procurementOffer' // 报价 saveOrUpdateOffer
/* 公共方法*/
import { ListMixin } from '@/mixins/ListMixin' // 分页
import { commonMxin } from '@/mixins/commonMxin' // 时间方法
import { randomData, filterDictText, download } from '@/assets/js/utils'
/* 混合开发-参数字段*/
import { procurementGroupMixins } from '@/views/procurement/mixins/procurementGrounpMixins' // 公共字典
import { procurementOfferMixin } from '../mixins/procurementOfferMixin' // 公共方法
import { procurementMixins } from '@/views/procurement/mixins/procurementMixins'
import Cookies from 'js-cookie'
/* 公共组件*/
import upload from '@comp/common/updownload/upload' // 文件上传组件
import downloadFile from '@comp/common/updownload/downloadFile' // 文件回显组件
import offerRecordList from './procurementOfferRecordList-dialog' // 报价记录弹框
import offerGoodsDetail from './procurementOfferGoodsDetail-add' // 报价物资明细
import projectBase from './procurementOfferProjectBaseCpmp' // 采购项目的基本信息
import signatureDialog from './procurementOfferElectronicSeal-dialog' // 报价单签章弹框
import responseFile from './procurementOfferResponseFileComp' // 应答文件列表
import offerMaterials from '@/views/procurement/procurementProject/procurementProjectLineItemInfo/lookLineItemInfoAccessory-dialog.vue' // 查看附件弹框

export default {
  name: 'OfferNoBiddingTablesAddVue',
  inject: ['driveReload', 'getTenderBase'],
  components: {
    upload, // 文件上传
    downloadFile, // 文件回显
    offerRecordList, // 报价记录弹框
    offerMaterials, // 查看附件弹框
    offerGoodsDetail, // 报价物资明细组件
    projectBase, // 采购项目的基本信息
    signatureDialog, // 报价单签章弹框
    responseFile // 应答文件列表
  },
  mixins: [
    procurementGroupMixins,
    procurementOfferMixin,
    ListMixin,
    commonMxin,
    procurementMixins
  ],
  props: {
    // 项目报价数据
    supplierInfo: {
      type: Object,
      default: () => {
        return {
          isEdit: false,
          offerStatus: '', // 供应商最最新轮次报价状态
          stageId: '', // 轮次id
          quoteEndTime: '', // 报价截止时间
          supplierId: '' // 供应商id
        }
      }
    },
    offerList: {
      type: Array,
      default: function() {
        return []
      }
    },
    // 当前轮次
    activeValue: {
      type: String,
      default: ''
    }
  },
  data() {
    return {
      loading: true,
      confirmLoading: false,
      responseFileLoading: false, // 应答文件loading
      isTimeOver: true, // 判断报价截止时间有无结束 结束返回true 否则 false
      down_key: '',
      fastestDeliveryDate: '', // 最有效交货时间
      offerTotal: '', // 总报价金额
      offerTotalChinese: '', // 总报价金额大写
      isUploadReplyFile: '', // 是否上传应答文件 00 否 01 是
      action: importOfferInfoList + `?stageId=${this.supplierInfo.stageId}`, // 导入请求地址
      importHeaders: {}, // 导入headers
      // 生成电子盖章弹框
      signatureDialog: {
        dialog: false, // 是否显示弹框按钮
        offerId: '', // 文件id
        fileId: '', // 主键id
        bizId: '', // 签章文件的主键id
        fileType: '', // 签章文件的文件类型
        filePath: '', // 文件路径
        fileIndex: '', // 点击路径
        reduit: '', // 是否重新生成签章 02 是  默认 ''
        signatureType: '', // 签章类型
        signatureClass: '' // 00 报价单 01应答文件

      },
      // 查看附件弹框
      lookFileData: {
        bizId: '',
        type: '00',
        dialog: false // 是否显示弹框按钮
      },
      // 报价数据
      dynamicValidateForm: {
        conditionList: [], // 报价响应条件
        offerByPackIdVo: {}, // 报价附件信息
        offerSubjectMatterList: [] // 报价物资明细数据
      },
      // 其他数据
      lineItemOther: {
        allowEdit: '', // 报价表是否可编辑 00 不允许 01允许
        isverify: true, // 是否校验 全部报价时需校验
        isEdit: false // 是否可编辑
      },
      // 按钮状态显示数据
      offerButtonShow: {
        showGenerateOfferSignature: '', // 生成报价单显示隐藏 00隐藏 01显示
        showOfferRecord: '', // 报价记录 显示隐藏 00隐藏 01显示
        showRevokeOffer: '', // 撤销报价按钮 显示隐藏 00隐藏 01显示
        showSave: '', // 保存报价按钮 显示隐藏 00隐藏 01显示
        showSubmitOffer: '' // 提交按钮 显示隐藏 00隐藏 01显示
      },
      // 页面编辑字段
      pageIsEdit: {
        allowEdit: '' // 报价表是否可编辑 00 不允许 01允许
      },
      // 报价数据
      tenderId: '', // 项目id
      offerIds: '', // 保存的主键id
      responseFileList: [], // 应答文件列表
      elseFileList: [], // 其他附件
      successFlag: false, // 应答文件上传状态
      isverify: false, // 是否校验 全部报价时需校验
      isUpload: false, // 判断附件是否上传完
      tenderBase: this.getTenderBase() // 获取项目信息

    }
  },
  watch: {
    // 监听报价单弹框关闭
    'signatureDialog.dialog'(val) {
      if (!val) {
        // 重新加载页面
        this.down_key = new Date() * 1 // 动态修改key值 触发报价单回显
        this.getProtProcurementresponseFileList()
        this.confirmLoading = false // btnLoding
      }
    }
  },
  created() {
    // 导入headers
    this.importHeaders['X-AUTH-TOKEN'] = Cookies.get('X-AUTH-TOKEN')
    // 初始化加载页面时回去时间有无截止
    this.getPresentTime()
    // 查询项目字典方法
    this.initqueryProcurementProjectRuleInitInfo()
    // 调用获取供应商的数据方法
    this.getqueryNoOfferByPackId()
  },
  methods: {
    filterDictText, // 引入字典值替换文本通用方法
    // 导出行项目
    exportLineItems() {
      const params = {
        stageId: this.supplierInfo.stageId // 轮次id
      }
      exportOfferList(params).then(res => {
        download(res, '报价信息.xls')
      })
    },
    // 导入成功时触发
    handleSuccess(response, file, fileList) {
      if (response.header.ret === '0') {
        this.$message.success('导入成功')
        this.$refs.uploads.clearFiles()
        // 调用获取供应商的数据方法
        this.getqueryNoOfferByPackId()
      } else {
        this.$refs.uploads.clearFiles()
        this.$message.error(response.header.msg)
        // 调用获取供应商的数据方法
        this.getqueryNoOfferByPackId()
      }
    },
    // 保存
    saveData(formName) {
      const assemblyData = this.$refs.offerGoodsDetail.assemblyData()
      // 提交各行项目单价与供应商报价输入校验是否通过
      if (!assemblyData) {
        return false
      }
      const { fastestDeliveryDate, offerTotal, offerTotalChinese } = assemblyData
      this.fastestDeliveryDate = fastestDeliveryDate // 获取报价有效期
      this.offerTotal = offerTotal // 获取总报价
      this.offerTotalChinese = offerTotalChinese // 获取大写的总金额
      // 调用保存方法
      this.setSaveOfferData('save')
    },
    // 撤销报价
    returnPage() {
      // tenderMethod采购方式(12)单一来源无报价截止时间限制
      if (this.tenderBase.tenderMethod === '12') {
        // 调用撤销报价方法
        this.setRevocation()
        return
      }
      // 询价竞谈类的采购方式有报价截止时间
      this.countDown(this.supplierInfo.quoteEndTime, '报价已截止，无法撤销报价').then(() => {
        // 调用撤销报价方法
        this.setRevocation()
      }).catch(() => {
        // 初始化加载页面时回去时间有无截止
        this.getPresentTime()
        // 调用获取供应商的数据方法
        this.getqueryNoOfferByPackId()
      })
    },
    // 报价数据校验
    verification(valid, field) {
      const assemblyData = this.$refs.offerGoodsDetail.assemblyData()
      // 行项目报价校验
      if (!assemblyData) {
        return false
      }
      const { offerSubjectMatterList } = assemblyData
      if (this.supplierInfo.quoteType === '01') { // 全部报价
        if (!valid) {
          this.$message.warning('应全部报价并填写品牌/生产厂家')
          return false
        }
      } else { // 部分报价
        let isOffer = false
        for (let i = 0; i < offerSubjectMatterList.length; i++) {
          if (offerSubjectMatterList[i].taxUnitPrice && offerSubjectMatterList[i].taxUnitPrice !== '0' && offerSubjectMatterList[i].offerRemarks) {
            isOffer = true
          }
          var arr = [...new Set([(offerSubjectMatterList[i].taxUnitPrice && offerSubjectMatterList[i].taxUnitPrice !== '0'), !!offerSubjectMatterList[i].offerRemarks])]
          if (arr.length !== 1) {
            this.$message.warning('请将报价行填写完整')
            return false
          }
        }
        if (!isOffer) {
          this.$message.warning('至少报价一条')
          return isOffer
        }
      }
      return true
    },
    // 生成报价单按钮
    nextSetp(formName) {
      const { fastestDeliveryDate, offerTotal, offerTotalChinese } = this.$refs.offerGoodsDetail.assemblyData()
      this.fastestDeliveryDate = fastestDeliveryDate // 获取报价有效期
      this.offerTotal = offerTotal // 获取总报价
      this.offerTotalChinese = offerTotalChinese // 获取大写的总金额
      // 全部报价的情况
      this.$refs[formName].validate((valid, field) => {
        if (!this.verification(valid, field)) { // 报价数据校验
          return false
        }
        // 是否强制上传应答文件isUploadReplyFile 00否 01是
        if (this.isUploadReplyFile === '01' && this.responseFileList.length > 0) {
          if (this.tenderBase.tenderMethod === '12') {
            // 保存报价单信息
            this.setSaveOfferData('next')
            return
          }
          // 判断时间是否截止
          this.countDown(this.supplierInfo.quoteEndTime, '报价时间已过，不可生成报价单').then(() => {
            // 保存报价单信息
            this.setSaveOfferData('next')
          }).catch(() => {
            // 初始化加载页面时回去时间有无截止
            this.getPresentTime()
            // 调用获取供应商的数据方法
            this.getqueryNoOfferByPackId()
          })
          return
        }
        if (this.tenderBase.tenderMethod === '12') {
          // 保存报价单信息
          this.setSaveOfferData('next')
          return
        }
        // 判断时间是否截止
        this.countDown(this.supplierInfo.quoteEndTime, '报价时间已过，不可生成报价单').then(() => {
          // 保存报价单信息
          this.setSaveOfferData('next')
        }).catch(() => {
          // 初始化加载页面时回去时间有无截止
          this.getPresentTime()
          // 调用获取供应商的数据方法
          this.getqueryNoOfferByPackId()
        })
        // 点击撤销报价前判断报价截止时间
        // this.getCurrentTime().then(res => {
        //   // 小于返回true 大于等于返回false
        //   const days = this.computationTime(res.nowTime, this.supplierInfo.quoteEndTime, '报价时间已过，不可生成报价单')
        //   this.isTimeOver = days
        //   if (days) {
        //     // 保存报价单信息
        //     this.setSaveOfferData('next')
        //   }
        // })
      })
    },
    // 提交报价
    submitOffer(formName) {
      this.$refs[formName].validate((valid, field) => {
        if (!this.verification(valid, field)) { // 报价数据校验
          return false
        }
        // 校验是否上传应答文件
        if (this.isUploadReplyFile === '01' && this.responseFileList.length <= 0) {
          this.$message.warning('请上传应答文件')
          return false
        }
        // if (!this.isChangeData()) {
        //   this.$message.warning('数据有改动，请从新生成报价单')
        //   return false
        // }
        // 获取报价数据提交后端处理修改报价数据判断是否修改
        const offerDetailList = this.getOfferDetailList()
        this.$confirm('确认提交报价吗？', '提示', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          confirmButtonClass: 'confirmBtn',
          cancelButtonClass: 'cancelBtn',
          type: 'warning'
        })
          .then(() => {
            const params = {
              id: this.offerIds, // 获取报价id
              useStatus: '01', // 报价状态判断 01 提交
              offerDetailList: offerDetailList
            }
            // 调用提交报价方法
            this.submitOrrevocationOffer(params)
          })
          .catch(() => {
            this.confirmLoading = false
          })
      })
    },
    // 撤销报价方法
    setRevocation() {
      this.$confirm('您确定要撤销报价吗？', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        confirmButtonClass: 'confirmBtn',
        cancelButtonClass: 'cancelBtn',
        type: 'warning'
      })
        .then(() => {
          this.confirmLoading = true // btnLoding
          const params = {
            id: this.offerIds, // 报价id
            useStatus: '02' // 02 撤销报价状态
          }
          // 调用提交报价方法
          this.submitOrrevocationOffer(params)
        })
        .catch(() => {
          this.confirmLoading = false // btnLoding
        })
    },
    // 查看附件
    lineItemFileClick(row) {
      // 获取文件主键id
      this.lookFileData.bizId = row.planDetailId
      // 打开弹框
      this.lookFileData.dialog = true
    },
    // 查看报价记录弹框
    record() {
      // 获取供应商id
      this.offerRecordList.supplierId = this.supplierInfo.supplierId
      // 获取轮次id
      this.offerRecordList.stageId = this.supplierInfo.stageId
      // 打开弹框
      this.offerRecordList.dialog = true
    },
    // 其他附件上传
    principalElseFile(file, fileList) {
      this.elseFileList = fileList //
      if (file.status === 'ready') {
        // 上传中为true
        this.isUpload = true
        return
      }
      if (file.status === 'success') {
        this.isUpload = false
        return
      }
    },
    /*
      提交报价时获取报价明细数据提供后端判断在提交报价时有无修改报价数据
     */
    getOfferDetailList() {
      const offerList = this.dynamicValidateForm.offerSubjectMatterList.map(offerItem => {
        return {
          subjectMatterId: offerItem.subjectMatterId, // 报价行项目id
          taxUnitPrice: offerItem.taxUnitPrice, // '
          fastestDeliveryDate: offerItem.fastestDeliveryDate ? this.$Moment(offerItem.fastestDeliveryDate).format(this.momentSaveFormat) : null // 最快交货日期
        }
      })
      return offerList
    },
    // ====================================应答文件 Start==========================================
    // 应答文件的点击事件-暂时没有使用
    setSignatureClick(signatureData) {
      this.signatureDialog.bizId = this.responseFileData.bizId // 应答文件的主键id
      this.signatureDialog.fileId = signatureData.id // 主键id
      this.signatureDialog.signatureType = 'ANSWER_FILE_SIGNATURE' // 应答文件签章类型
      this.signatureDialog.fileType = this.responseFileData.fileType // 应答文件附件类型
      this.signatureDialog.filePath = signatureData.fileUrl // 文件路径
      this.signatureDialog.fileIndex = signatureData.fileIndex // 文件路径
      this.signatureDialog.signatureClass = '01' //
      this.signatureDialog.dialog = true // 打来签章弹框
    },
    // 应答文件上传之前钩子
    beforeUpload(file) {
      this.successFlag = true
    },
    // 附件上传成功的回调
    success(file) {
      this.loading = false
      if (this.successFlag) {
        this.successFlag = false
        const data = {
          id: file.data.fileId, // 附件id
          packId: this.tenderBase.packId, // 标段id
          tenderId: this.tenderBase.tenderId, // 标段id
          stageId: this.supplierInfo.stageId, // 当前轮次id
          fileId: file.data.fileId, // 附件id
          offerId: this.offerIds // 报价id
        }
        // 专家上传评审报告状态
        uploadBidReply(data).then(res => {
          // 查询应答文件列表
          this.getProtProcurementresponseFileList()
        }).catch(() => {
        })
      }
    },
    // 删除应答文件
    deleteSignatureClick(signatureData) {
      // 调用删除应答文件方法 传主键id
      this.$confirm('确认要删除吗?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        confirmButtonClass: 'confirmBtn',
        cancelButtonClass: 'cancelBtn',
        type: 'warning'
      }).then(() => {
        this.delRespnseFile(signatureData.id)
      })
    },
    // 删除应答文件方法
    delRespnseFile(majorId) {
      delBidReply(majorId).then(res => {
        // 查询应答文件列表
        this.getProtProcurementresponseFileList()
      })
    },
    /*
      判断强制上传应答文件
     */
    responseFileType() {
      // 应答文件不是必填项
      if (this.isUploadReplyFile === '00') {
        return true
      }
      if (this.isUploadReplyFile === '01') {
        const signatureStatus = this.responseFileList.every(responseData => {
          return responseData.signatureStatus === '01'
        })
        if (this.responseFileList.length > 0 && signatureStatus) {
          return true
        }
        this.$message.warning('请上传应答文件并完成签章')
        return false
      }
    },
    // ==============================================应答文件 End======================================
    // 封装保存数据方法
    setSaveOfferData(key) {
      // 封装保存方发传的参数
      const params = {
        id: this.offerIds, // 保存的主键id
        offerConditionList: this.dynamicValidateForm.conditionList, // 响应数据
        offerDetailList: this.dynamicValidateForm.offerSubjectMatterList, // 表格数据
        offerTotal: this.offerTotal, // 含税总报价
        offerTotalChinese: this.offerTotalChinese, // 含税总报价大写转换
        fastestDeliveryDate: this.fastestDeliveryDate, // 最有效交货时间
        packId: this.tenderBase.packId, // 标段id
        quotePriceMethod: '01', // 报价方式
        stageId: this.supplierInfo.stageId, // 轮次id
        tenderId: this.dynamicValidateForm.offerByPackIdVo.tenderId, // 项目id
        useStatus: '00' // 报价状态
      }
      this.confirmLoading = true // btnLoding
      this.savaOfferData(params, key)
    },
    /*
     保存供应商报价信息方法
     params： 保存参数 setSaveOfferData方法显示具体信息
     key: 区分保存  string(save-保存按钮保存 next-生成报价单)
    */
    savaOfferData(params, key) {
      // 使用保存方法
      saveOrUpdateOffer(params)
        .then(res => {
          // 生成报价订单
          if (key === 'next') {
            // 获取报价id
            this.signatureDialog.offerId = res.data // 获取报价id
            // 报价单文件类型
            this.signatureDialog.signatureClass = '00'
            // 判断报价单有无签章状态的方法
            this.GetgenerateQuotationTemplate()
          } else if (key === 'save') {
            // 保存按钮
            this.$message.success({ message: '保存成功！' })
            // 重新调用获取页面的方法 获取offerid值
            this.getqueryNoOfferByPackId()
            this.confirmLoading = false // btnLoding
          }
        })
        .catch(() => {
          // 刷新驱动
          this.confirmLoading = false // btnLoding
        })
    },
    /*
      获取生成报价单接口
      qoutation
    */
    GetgenerateQuotationTemplate() {
      const params = {
        offerId: this.offerIds
      }
      generateQuotationTemplate(params)
        .then(res => {
          this.signatureDialog.fileId = res.data.id // 报价单主键id
          this.signatureDialog.bizId = this.procurementOfferFileData.bizId // 报价业务id
          this.signatureDialog.fileType = res.data.stageFileType // 报价单附件类型
          this.signatureDialog.dialog = true // 打开查看报价单弹框
        })
        .catch(() => {
          this.confirmLoading = false // btnLoding
        })
    },
    /*
     提交报价或者撤销报价方法
     入参 params: {id:报价id,usestatus: 提交报价撤销报价区分字典 01提交 02撤销 String}
    */
    submitOrrevocationOffer(params) {
      submitOrUndoOffer(params)
        .then(res => {
          // 刷新驱动
          this.driveReload()
          this.confirmLoading = false // btnLoding
        })
        .catch((err) => {
          this.$message.warning(err)
          this.confirmLoading = false // btnLoding
        })
    },
    /*
      获取供应商报价数据
      入参:packId 项目packId stageId 轮次id
    */
    getqueryNoOfferByPackId() {
      const data = {
        stageId: this.supplierInfo.stageId,
        packId: this.tenderBase.packId
      }
      // 校验参数是否存在
      if (data.stageId && data.packId) {
        queryNoOfferByPackId(data).then(res => {
          this.loading = false
          this.dynamicValidateForm = res.data // 采购项目概况

          // 获取父元素传递的是否可编辑字段
          this.lineItemOther.isEdit = this.supplierInfo.isEdit
          // 获取全部报价与部分报价字段'00'允许部分报价 '01'全部报价
          this.lineItemOther.isverify = res.data.offerByPackIdVo.quoteType === '01' // 全部报价开启校验
          // 是否上传应答文件 00 否 01 是
          this.isUploadReplyFile = res.data.offerByPackIdVo.isUploadReplyFile
          // 报价id
          if (res.data.offerByPackIdVo.offerId) {
            this.offerIds = res.data.offerByPackIdVo.offerId
          } else {
          // 首次进入报价idnull前端自动生成
            this.offerIds = randomData()
          }
          this.procurementOfferFileData.bizId = this.offerIds // 报价单文件主键id
          this.procurementAttachFile.bizId = this.offerIds // 其他文件主键id
          this.signatureDialog.bizId = this.offerIds // 签章弹框的报价id
          this.responseFileData.bizId = this.offerIds // 应答文件文件
          this.down_key = new Date() * 1 // 动态修改key值 触发报价单回显
          /*
           查询应答文件列表
          */
          this.getProtProcurementresponseFileList()
          /*
           控制报价按钮显示
          */
          this.getOfferFunctionButtonShow(data)
        })
          .catch(() => {})
        return
      }
      this.$message.warning({ message: '缺少参数' })
    },
    /*
      控制报价按钮显示
    */
    getOfferFunctionButtonShow(data) {
      getOfferFunctionButton(data).then(res => {
        this.offerButtonShow = res.data
        this.pageIsEdit.allowEdit = res.data.allowEdit // 页面编辑 00不允许 01 允许
        this.lineItemOther.allowEdit = this.pageIsEdit.allowEdit
      })
    },
    /*
     *获取应答文件列表
     *@params {packId: 项目标段id,tenderId: 项目id,stageId: 当前轮次id}
    */
    getProtProcurementresponseFileList() {
      this.responseFileLoading = true
      const params = { packId: this.tenderBase.packId, tenderId: this.tenderBase.tenderId, stageId: this.supplierInfo.stageId } // 查询条件
      getProtProcurementBidReplyList(params)
        .then(response => {
          this.responseFileList = response.data // 应答文件列表数据
          this.handleRespFileList() // 处理应答文件数据
          this.responseFileLoading = false
        })
        .catch(() => {
          this.responseFileLoading = false
        })
    },
    /*
    *  应答文件列表数据处理
    *  return 列表数据中增加fileList列表
    */
    handleRespFileList() {
      this.responseFileList && this.responseFileList.map(item => {
        /* 下载应答文件列表*/
        item.fileList = [{
          fileType: this.responseFileData.fileType, // 应答文件类型
          fileId: item.fileId// 应答文件附件Id
        }]
      })
    },
    // 初始化判断页面时间有无截止
    getPresentTime() {
      this.getCurrentTime().then(res => {
        // 判断项目是否截止 布尔值 小于截止时间返回true 大于截止时间返回false
        if (this.supplierInfo.quoteEndTime) this.isTimeOver = this.computationTimes(res.nowTime, this.supplierInfo.quoteEndTime)
      })
    }
  },
  // 视频会议
  videoMeet() {
    const params = {
      packId: this.tenderBase.packId || this.$route.query.packId // 项目标段id
    }
    comeintoFSMeetingRoomBySupplier(params).then(res => {
      if (res.header.ret === '0') {
        window.open(res.data.visitUrl)
      }
    })
  }
}
</script>

<style lang="less" scoped>
@import url("~@/assets/style/common/public.less");
.offerInfo{
  .currency-col{
    color:@orange;
  }
  .tip-size;
}
.response-col{
  color:@orange;
}
.fram-content{
  position: relative;
}
.video-meet{
  position: fixed;
  top: 10.5vh;
  right: 9vh;
}
.video-first{
  position: fixed;
  top: 10.5vh;
  right: 9vh;
}
/deep/.show-word-limit-padding {
  .el-input__inner {
    padding-right: 70px;
  }
}
.imgBg{
  margin: 0 2px;
  color: #027BD0;
}
</style>
