kongdeqiang
2025-02-20 105128d7780861f699a3261fdad68804fe5b7c80
src/components/page/MonthFeePay.vue
@@ -1,12 +1,12 @@
<template>
    <div class="weizhang-box yuezucard-wrap">
      <div class="weizhang-main-top">
        <h1 class="title">月租车办理</h1>
      </div>
<!--      <div class="weizhang-main-top">-->
<!--        <h1 class="title">月租车办理</h1>-->
<!--      </div>-->
      <div class="weizhang-main-box">
            <div class="weizhang-main-bootom">
                <div class="weizhang-main-form">
                    <el-form label-width="100px" :model="statisticData" ref="statisticData" :rules="rules" label-position="left">
                    <el-form label-width="110px" :model="statisticData" ref="statisticData" :rules="rules" label-position="left">
                        <el-form-item label="车牌号:" style="margin-left: 25px;" prop="carNo">
                            <el-input readonly @focus="isShow=true" v-model="statisticData.carNo" ></el-input>
                        </el-form-item>
@@ -16,13 +16,13 @@
                        <el-form-item label="车主姓名:" style="margin-left: 25px;" prop="name">
                            <el-input v-model="statisticData.name" ></el-input>
                        </el-form-item>
                        <el-form-item label="选择全部:" style="margin-left: 25px;" prop="allFlag">
                          <el-select v-model="statisticData.allFlag" :onchange="changeAll">
                        <el-form-item label="选择全部:" style="margin-left: 25px;" prop="type">
                          <el-select v-model="statisticData.type" :onchange="changeAll">
                            <el-option label="单个" :value=0></el-option>
                            <el-option label="全部" :value=1></el-option>
                          </el-select>
                        </el-form-item>
                      <el-form-item v-if="statisticData.allFlag == 0" label="停车场:" style="margin-left: 25px;" prop="parkId">
                      <el-form-item v-if="statisticData.type == 0" label="停车场:" style="margin-left: 25px;" prop="parkId">
                        <el-select v-model="statisticData.parkId" @change="changePark">
                          <el-option v-for="item in table1" :key="item.id" :label="item.name" :value="item.id + ''" ></el-option>
                        </el-select>
@@ -34,8 +34,8 @@
                </div>
                <div class="yuezu-box" v-if="searchShow">
                  <div>
                    <div class="current-box" v-if="startTime && endTime">剩余使用时间:<span class="utilTime">{{untilToday}}天({{endTime}}结束)</span></div>
                    <div class="current-box" v-else>剩余使用时间:暂未开通月票</div>
                    <div class="current-box" v-if="startTime && endTime">月票剩余时间:<span class="utilTime">{{untilToday}}天({{endTime}} 结束)</span></div>
                    <div class="current-box" v-else>月票剩余时间:暂未开通月票</div>
                  </div>
<!--                  <div class="current-box" v-if="startTime && endTime">
                    <span class="title">当前使用时间:</span>
@@ -105,8 +105,11 @@
                isShow: false,
                ticketId:"",
                table1:[],
                type:null,
                code:null,
                id:null,
                statisticData:{
                  allFlag:0,
                  type:0,
                  carNo:'',
                  parkId:'',
                  phone:'',
@@ -152,7 +155,31 @@
          }
        },
        created(){
          document.title = "月租车办理";
          let ua = window.navigator.userAgent.toLowerCase();
          //判断是不是微信
          if (ua.match(/MicroMessenger/i) == "micromessenger") {
            // 微信
            this.type = 0
          }
          //判断是不是支付宝
          if (ua.match(/AlipayClient/i) == "alipayclient") {
            //支付宝
            this.type = 1
          }
          if(this.type == null){
            this.$message.error("请用微信或支付宝扫描二维码")
            return;
          }
          var url = window.location.href;
          url = decodeURIComponent(url)
          var count = url.split('?').length-1;
          if(count >1){  //获取用户信息后跳回来本页面
            let data = this.getCodeFromUrl(url)
            window.location.href = `http://hesuancj.cn/#/MonthFeePay?code=${encodeURIComponent(data.code)}&state=STATE&id=${encodeURIComponent(data.id)}`
            return;
          }
          var cs = url.split('?')[1];
          var cs_arr = cs.split('&');
          var cs={};
@@ -168,27 +195,6 @@
          pay(){
              this.$refs.statisticData.validate((valid) => {
                if(valid) {
                  this.$byutil.postData(this, this.$systemconfig.basePath + '/ffzf/monthFeePay/pay', this.statisticData, res => {
                    console.log(res,'res====')
                    if(res.code == 0){
                      this.searchShow = true
                      this.activeIndex = ''  //重置
                      this.money = null
                      this.compStartTime = ''
                      this.compEndTime = ''
                      //未查询到月票,可正常缴费
                      if(res.data) {
                        this.startTime = res.data.startTime
                        this.endTime = res.data.endTime
                      }else {
                        this.startTime = ''
                        this.endTime = ''
                      }
                    }else {
                    }
                  })
                  this.getYuezuMoney()
                }
              })
@@ -198,12 +204,36 @@
              parkId:this.statisticData.parkId,
              type:this.statisticData.allFlag
            }
            this.$byutil.postData(this, this.$systemconfig.basePath + '/ffzf/whiteListRule/getByPark', params, res => {
              if(res.code == 0){
                 this.yueZuObj = res.data
              }else {
            this.$byutil.postData(this, this.$systemconfig.basePath + '/ffzf/whiteListRule/getByPark', params, res => {
              console.log(res,'res====111')
              if(res.code == 0){
                this.yueZuObj = res.data
                this.$byutil.postData(this, this.$systemconfig.basePath + '/ffzf/monthFeePay/pay', this.statisticData, res => {
                  console.log(res,'res====')
                  if(res.code == 0){
                    this.searchShow = true
                    this.activeIndex = ''  //重置
                    this.money = null
                    this.compStartTime = ''
                    this.compEndTime = ''
                    //未查询到月票,可正常缴费
                    if(res.data) {
                      this.startTime = res.data.startTime
                      this.endTime = res.data.endTime
                    }else {
                      this.startTime = ''
                      this.endTime = ''
                    }
                  }else {
                  }
                })
              }else {
                this.searchShow = false
                this.$message.error(res.msg)
              }
            })
          },
          handleSelect(key) {
@@ -306,6 +336,119 @@
          changePark(val){
            console.log(val,'改变停车场---')
            this.statisticData.parkId = val
            this.pay()
          },
          /**
           * 解析微信redirect_uri地址中的code
           */
          getCodeFromUrl (cur_url) {
            let index = cur_url.split('?')[1]
            let index2 = cur_url.split('?')[2]
            let code = null
            let id = null
            let data = {}
            let paramStr =index.split('&');
            if(paramStr.length>1) {
              code = paramStr[0].split('=')[1]
              id = index2.split('=')[1]
            }else {
              id = paramStr[0].split('=')[1]
              code = index2.split('&')[0].split('=')[1]
            }
            data.code = code
            data.id = id
            return data
          },
          getCode(){   //获取用户微信登录信息
            this.statisticData.startTime = this.startTime
            this.statisticData.endTime = this.endTime
            this.statisticData.money  = this.money
            if(this.type == 0 ){
              //微信,获取code
              if(this.code==null||this.code==""){
                var url = encodeURIComponent("http://hesuancj.cn/#/MonthFeePay?id="+this.statisticData.parkId);
                window.location.href ="https://open.weixin.qq.com/connect/oauth2/authorize?" +
                    "appid=wx46e756aed958f895&redirect_uri="+url+"&response_type=code" +
                    "&scope=snsapi_userinfo&state=STATE#wechat_redirect";
              }else{
                this.$byutil.postData(this, this.$systemconfig.basePath + '/ffzf/monthFeePay/getOpenId', this.statisticData, res => {
                  if(res.code === 0){
                    var param = res.data;
                    // 点击支付时候调用
                    if (typeof WeixinJSBridge === 'undefined') {
                      if (document.addEventListener) {
                        document.addEventListener('WeixinJSBridgeReady', this.onBridgeReady(param), false)
                      } else if (document.attachEvent) {
                        document.attachEvent('WeixinJSBridgeReady', this.onBridgeReady(param))
                        document.attachEvent('onWeixinJSBridgeReady', this.onBridgeReady(param))
                      }
                    } else {
                      this.onBridgeReady(param)
                    }
                    this.showFlag = false
                  }else {
                    alert('微信支付调起失败!')
                  }
                })
              }
            }else if(this.type == 1){
              //支付宝,不获取code
              this.$byutil.postData(this, this.$systemconfig.basePath + '/ffzf/monthFeePay/getAiLi', this.statisticData, res => {
                if(res.code != 0){
                  alert(res.data)
                  this.showFlag = false
                }else {
                  this.$message({
                    message: '2秒后自动跳转到支付页面,防止内外网数据同步延迟,请稍等',
                    type: 'success',
                    duration:2000,
                  });
                  setTimeout(function(){window.location.href = res.msg;},2000);
                  this.showFlag = false;
                }
              })
            }
          },
          onBridgeReady (params) {
            const that = this
            WeixinJSBridge.invoke(
                'getBrandWCPayRequest',
                {
                  appId: params.appId, // 公众号名称,由商户传入
                  timeStamp: params.timeStamp, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
                  nonceStr: params.nonceStr, // 支付签名随机串,不长于 32 位
                  package: params.package, // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=\*\*\*)
                  signType: params.signType, // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
                  paySign: params.paySign // 支付签名
                },
                (res) => {
                  if (res.err_msg === 'get_brand_wcpay_request:ok') {
                    //that.queryOrder() // 这里是查询订单是否支付完成,然后执行成功和失败的业务逻辑
                  } else if (res.err_msg === 'get_brand_wcpay_request:fail') {
                    alert('支付失败!')
                  } else if (res.err_msg === 'get_brand_wcpay_request:cancel') {
                    alert('支付取消!')
                  }
                }
            )
          },
          queryOrder() {
            this.$byutil.postData(this, this.$systemconfig.basePath + '/ffzf/outpark/getById', {id: this.outParkId}, res => {
              if (res.code === 0) {
                let outpark = res.data
                if(outpark.status === 1){
                  window.location.href = "http://hesuancj.cn/#/indexOk?code2="+this.code2
                  return;
                }else {
                  window.location.href = "http://hesuancj.cn/#/indexFail?code2="+this.code2
                  return;
                }
              }
            })
          },
          changeAll(){
@@ -326,6 +469,9 @@
    height: 5.33vw  /* 40/7.5 */;
    line-height: 5.33vw;
  }
  .el-select{
    width: 100%;
  }
}
    .weizhang-main-bootom{
        .el-input__inner{