/*
  @description: 立项-招标项目信息新增-公共方法
  @Modifier: haoFx/肖文龙
  @routerPath:
  @date: 2019/12/22-14:41
*/
/* 接口*/
import { saveBaseTenderProjectInfo, getTenderNoByRule, queryBaseTenderProjectInfo } from '@/api/bidding/biddingProject'// 暂存 项目编号 获取信息 字典信息
/* 公用方法*/
import { characters1_auto, validateInput, validateRoleCode } from '@/assets/js/validate'// 校验输入内容
import { randomData, numberChinese } from '@assets/js/utils'// 常用方法
import money from '@comp/common/money/money'// 金额组件
import cascader from '@comp/common/cascader'// 地区三级联动
export const bidProjectBase = {
  components: {
    cascader, // 地区三级联动
    money// 金额组件
  },
  data() {
    return {
      numberChinese: numberChinese, // 金额转大写
      // 弹窗-展示/隐藏状态 true 展示/false 隐藏
      dialogData: {
        consignContractVisible: false, // 委托合同项目
        buildingProjectVisible: false// 建设项目
      },
      // 校验输入内容
      rules: {
        tenderOrgMethod: [{ required: true, message: '请选择', trigger: 'change' }], //  组织形式
        tenderNo: [{ required: true, validator: validateRoleCode, trigger: 'blur' }], // 招标项目编号
        tenderName: [{ required: true, validator: characters1_auto, trigger: 'blur' }, { validator: validateInput }], // 招标项目名称
        buyersTenderNo: [{ trigger: 'blur' }, { validator: validateRoleCode }], // 招标人项目编号
        tenderMethod: [{ required: true, message: '请选择', trigger: 'change' }], // 招标方式
        palceAddress: [{ required: true, validator: characters1_auto, trigger: 'blur' }], // 实施地点
        projectAreaName: [{ required: true, validator: characters1_auto, trigger: 'blur' }], // 项目所在区域
        contractName: [{ required: true, message: '请选择', trigger: 'change' }], // 委托合同
        projectAreaCode: [{ required: true, message: '请选择', trigger: 'change' }], // 项目所在区域
        qualificationMethod: [{ required: true, message: '请选择', trigger: 'change' }], // 资格审查方式
        industryName: [{ required: true, message: '请选择', trigger: 'change' }], // 项目行业分类名称
        projectIndustryCode: [{ required: true, message: '请选择', trigger: 'change' }], // 项目行业分类子级
        projectNature: [{ required: true, message: '请选择', trigger: 'change' }], // 项目性质
        constructionProjectName: [{ required: true, message: '请选择', trigger: 'change' }], // 建设项目名称
        systemSource: [{ required: true, message: '请选择', trigger: 'change' }], // 系统内/外 00:集团内 01:集团外
        purchaseType: [{ required: true, message: '请选择', trigger: 'change' }], // 系采购类型  00:基建类 01:生产类
        purchaseClassification: [{ required: true, message: '请选择', trigger: 'change' }], // 采购分类 00:物资类 01:非物资类
        purchaseContentClassification: [{ required: true, message: '请选择', trigger: 'change' }], // 采购内容分类
        purchaseLevel: [{ required: true, message: '请选择', trigger: 'change' }], // 采购级别
        projectIndustry: [{ required: true, message: '请选择', trigger: 'change' }], // 项目行业
        tenderingArea: [{ required: true, validator: characters1_auto, trigger: 'blur' }], // 招标内容范围
        budgetTotalMoney: [{ required: true, validator: characters1_auto, trigger: 'blur' }], // 项目总概算
        beyondLegalLimit: [{ required: true, message: '请选择', trigger: 'change' }], // 是否限额以下
        isLegalTender: [{ required: true, validator: characters1_auto, trigger: 'blur' }], //  是否依法必招
        isAnnualAgreement: [{ required: true, validator: characters1_auto, trigger: 'blur' }], //  年度协议
        /* ======华能字段=====*/
        projectIndustryName: [{ required: true, message: '请选择', trigger: 'change' }], // 项目行业分类名称
        agentServiceFeeMethod: [{ required: true, message: '请选择', trigger: 'change' }], // 招标代理服务费收取方式
        agentServiceFeePeople: [{ required: true, message: '请选择', trigger: 'change' }], // 招标代理服务费收取对象
        libraryProfessional: [{ required: true, message: '请选择', trigger: 'change' }] // 入库专业
        // declarePerson: [{ required: true, validator: characters1_auto, trigger: 'blur' }], //  申报责任人
        // unitCapacity: [{ required: true, validator: characters1_auto, trigger: 'blur' }], //  机组容量
      }
    }
  },
  created() {
    const tenderId = this.projectData.id ? this.projectData.id : this.$route.query.id
    if (tenderId) {
      // 编辑时
      // 查询项目信息接口
      this.initData(tenderId)
    } else {
      // 创建时
      // 获取项目编号
      this.getTenderNo()
      // 前端生成项目Id
      this.formData.id = randomData()
      //  取第一步带回来的参数-cookie
      this.projectTypeData()
      // 处理组织形式初始化默认选中项
      this.handleTenderOrgMethodSelected()
      // 取需要关联的招标计划信息
      this.getTaskPlanList()
    }
  },
  methods: {
    // 编辑获取项目信息
    initData(tenderId) {
      queryBaseTenderProjectInfo(tenderId).then((response) => {
        this.formData = response.data
        // 编辑进入存储sessionStorage 信息
        this.setProjectIndustry() // 存储招标项目类型-带回上一步进行回显
        this.setProjectType(this.formData)// 下一步》sessionStorage 存储》华能需要的
        //  取第一步带回来的参数-cookie
        this.projectTypeData()
      })
    },
    // 获取项目编号（创建时）
    getTenderNo() {
      getTenderNoByRule().then(res => {
        this.formData.tenderNo = res.data.tenderNo
      })
    },
    // 处理组织形式初始化默认选中项 组织形式 00:自主招标 01:委托招标
    handleTenderOrgMethodSelected() {
      const roleCode = this.$store.state.user.info.currentRol.roleCode // 当前角色 10 采购人 11代理机构
      // 采购人默认就是自行招标 否则 项目经理默认就是委托招标
      if (roleCode === '10') {
        this.formData.tenderOrgMethod = '00'
      } else {
        this.formData.tenderOrgMethod = '01'
      }
    },
    // 取第一步带回来的参数-cookie
    projectTypeData() {
      if (!sessionStorage.getItem('projectTypeData')) return
      const projectTypeData = JSON.parse(sessionStorage.getItem('projectTypeData'))
      this.formData = Object.assign(this.formData, projectTypeData)
      this.formData.purchaseContentClassification = this.formData.projectIndustryCode
    },
    // 存储招标项目类型
    setProjectIndustry() {
      const data = {
        industryName: this.formData.industryName, // 行业类型
        projectIndustryCode: this.formData.projectIndustryCode, // 招标项目行业分类编码
        projectIndustryName: this.formData.projectIndustryName// 招标项目行业分类
      }
      sessionStorage.setItem('projectTypeData', JSON.stringify(data))
    },
    // 项目分类选择
    projectIndustryChange(val, child) {
      if (!child) {
        // 当改变父级状态时将子级数据清空
        this.formData.projectIndustryCode = ''
        this.formData.projectIndustryName = ''
      } else { // 当子集项目分类变化的时候
        child.forEach((item) => {
          // 循环遍历 编号 取得相对应的 å名称
          if (this.formData.projectIndustryCode === item.typecode) {
            this.formData.projectIndustryName = item.typename
            this.formData.purchaseContentClassification = this.formData.projectIndustryCode
          }
        })
      }
      // 存储招标项目类型-cookie
      this.setProjectIndustry()
      // 数据强制刷新
      this.$forceUpdate()
    },

    // 所在区域三级联动组件使用
    regionData(regionName, location) {
      this.formData.projectAreaName = regionName
      this.formData.projectAreaCode = location.join(',')
    },

    // 委托合同选择/清空
    consignContractInfo(data) {
      if (data === 'clear') { // 清空
        this.formData.contractId = ''// Id
        this.formData.contractName = ''// 名称
        this.formData.contractCode = '' // 代码
        this.formData.contractChargeValue = '' //  委托合同费用比例
      } else { // 选择
        this.formData.contractId = data.id// Id
        this.formData.contractName = data.name// 名称
        this.formData.contractCode = data.code // 代码
        this.formData.contractChargeValue = data.chargeValue
        this.formData.agentServiceFeeMethod = data.chargeType // 招标代理服务费收取方式
      }
    },

    // 建设项目选择/清空
    buildingProjectInfo(data) {
      if (data === 'clear') { // 清空
        this.formData.constructionProjectId = ''// Id
        this.formData.constructionProjectName = ''// 名称
        this.formData.constructionProjectCode = ''// 代码
      } else { // 选择
        this.formData.constructionProjectId = data.id// Id
        this.formData.constructionProjectName = data.name// 名称
        this.formData.constructionProjectCode = data.code// 代码
      }
    },
    /*
      * 保存数据接口 暂存，下一步
      * type参数 draft 点击步骤条切换-进行保存草稿
      * */
    saveData(type) {
      this.confirmLoading = true// btnLoding
      const data = { ...this.formData }
      delete data.location // 项目区域三级联动编码 =》前端展示，不需要传给后端
      // 招标项目名称必填校验
      if (!data.tenderName) {
        this.$message({
          message: '请先填写招标项目名称',
          type: 'warning'
        })
        this.confirmLoading = false
        return
      }
      saveBaseTenderProjectInfo(data).then(res => {
        this.formData.id = res.data.tenderId// 项目Id
        this.projectData.id = this.formData.id // 保存到父组件项目id
        this.projectData.tenderOrgMethod = this.formData.tenderOrgMethod // 保存到父组件组织形式
        this.setProjectIndustry() // 存储招标项目类型-带回上一步进行回显
        this.setProjectType(this.formData)// 下一步》sessionStorage 存储》华能需要的
        this.confirmLoading = false// btnLoding
        if (type === 'draft') return false// 判断是否-点击步骤条切换-如果是则不执行next下一步
        this.$parent.$emit('stepPage', 'next')// 步骤条切换方法 next 下一步
      }).catch(() => {
        this.confirmLoading = false// btnLoding
      })
    },

    // 上一步
    prevStep() {
      // 存储招标项目类型-带回上一步进行回显
      this.setProjectIndustry()
      // route携带参数
      const pathData = {
        id: this.$route.params.id// 项目Id
      }
      this.$parent.$emit('stepPage', 'prev', pathData)// 步骤条切换方法 prev 上一步
    },

    // 暂存，进行下一步
    nextStep() {
      // 校验输入内容
      this.$refs.form.validate((valid) => {
        if (valid) { // 校验通过
          this.saveData()
        } else { // 校验不通过
          this.$confirm('招标项目信息未完善, 是否进入下一步?', '提示', {
            confirmButtonText: '确定',
            cancelButtonText: '取消',
            confirmButtonClass: 'confirmBtn',
            cancelButtonClass: 'cancelBtn',
            type: 'warning'
          }).then(() => {
            this.saveData()
          }).catch(() => {
          })
        }
      })
    },
    // 下一步》sessionStorage 存储》华能需要的
    setProjectType(formData) {
      const projectInfo = {
        qualificationMethod: formData.qualificationMethod, // 00资格预审 01资格后审
        tenderOrgMethod: formData.tenderOrgMethod // 组织形式 00 自主招标 01 委托招标
      }
      sessionStorage.setItem('projectInfo', JSON.stringify(projectInfo))
      // 只有hn项目保存招标代理服务费收取方式
      if (this.bidProjectSystemSourceType) {
        // 招标代理服务费收取方式 差额定率累进制00 固定金额01 固定比例02
        sessionStorage.setItem('agentServiceFeeMethod', formData.agentServiceFeeMethod)
      }
    },
    // 取出关联招标计划信息
    getTaskPlanList() {
      if (!sessionStorage.getItem('taskPlanList')) return
      const taskPlanList = JSON.parse(sessionStorage.getItem('taskPlanList'))// 取出全部
      const taskData = { ...taskPlanList[0] }// 取出某一个
      this.formData.tenderMethod = taskData.biddingMethod// 招标方式
      this.formData.purchaseLevel = taskData.purchasLevel// 采购级别
      this.formData.projectNature = taskData.schemeNature// 项目性质
      this.formData.biddingPlanType = taskData.biddingPlanType // 招标计划类型 00:带招标方案 01:自建项目
      this.formData.budgetTotalMoney = taskData.schemeBudget // 概算金额
      this.formData.tenderOrgMethod = taskData.biddingOrganizationForm // 组织形式 00 自主招标 01 委托招标
      this.formData.tenderName = taskData.schemeName // 招标方案或招标计划名称
      // qualificationCheckWay === '02' 计划资格后审
      if (taskData.qualificationCheckWay === '02') {
        this.formData.qualificationMethod = '01' // 资格审查方式 00:资审 01:后审
      } else {
        this.formData.qualificationMethod = '00'
      }
      this.formData.taskPlanList = taskPlanList// 招标计划信息
    }
  }

}
