From 92146b2ca987538074c380f07f567ca85347dd13 Mon Sep 17 00:00:00 2001
From: kongdeqiang <123456>
Date: 星期一, 06 一月 2025 14:17:39 +0800
Subject: [PATCH] feat: 新增月租车页面

---
 src/components/page/IndexTest.vue |  411 +++++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 345 insertions(+), 66 deletions(-)

diff --git a/src/components/page/IndexTest.vue b/src/components/page/IndexTest.vue
index e481b17..b522a4e 100644
--- a/src/components/page/IndexTest.vue
+++ b/src/components/page/IndexTest.vue
@@ -8,12 +8,12 @@
         <div class="weizhang-main-box">
             <div class="weizhang-main-top">
                 <img class="logoPhone" src="../../assets/images/logoImg.png" alt="">
-                <span class="money">锟{this.statisticData.price}}</span>
                 <span class="weizhang">娴嬭瘯鏀惰垂</span>
+                <span class="money">锟{this.statisticData.price}}</span>
             </div>
             <div class="weizhang-main-bootom">
                 <div class="weizhang-main-form">
-                    <el-form label-width="100px" :model="statisticData" label-position="left">
+                    <el-form label-width="80px" :model="statisticData" label-position="left">
                         <el-form-item label="杞︾墝鍙�" style="margin-left: 25px;">
                             {{this.statisticData.carNo}}
                         </el-form-item>
@@ -33,7 +33,7 @@
                             {{this.statisticData.code}}
                             <!--<el-input v-model="statisticData.code" readonly></el-input>-->
                         </el-form-item>
-                        <el-form-item style="display: flex;justify-content: center;margin-top: 4.498vh" label-width="0" v-show="showFlag">
+                        <el-form-item class="weizhang-footer-box" style="display: flex;justify-content: center;margin-top: 4.498vh" label-width="0" v-show="showFlag">
                             <el-button class="jiaofei-btn" type="primary" @click="pay()" :loading="payFlag">鍘荤即璐�</el-button>
                         </el-form-item>
                     </el-form>
@@ -50,17 +50,54 @@
 
             </div>
         </div>
+      <div class="dialog-box">
+        <el-dialog
+            title="鏀粯"
+            :close-on-click-modal="false"
+            :visible.sync="dialogVisible"
+            width="100%">
+          <div class="dialog-main-box">
+            <div class="dialog-main-line">
+              <h1>鍚堣璐圭敤</h1>
+              <h1>{{this.statisticData.price}}鍏�</h1>
+            </div>
+            <div class="dialog-main-line">
+              <h1>鍋滆溅鏃堕暱</h1>
+              <h1>{{this.statisticData.timeStr}}</h1>
+            </div>
+            <div class="dialog-main-line-middle">
+              <h1>{{this.statisticData.price}}<font>鍏�</font></h1>
+            </div>
+            <div class="wx-img-box">
+              <div class="wx-img-l">
+                <img src="../../assets/images/wxIcon.png" alt="">
+                <h1>寰俊鏀粯</h1>
+              </div>
+              <div class="wx-img-r">
+                <img src="../../assets/images/duigouIcon.png" alt="">
+              </div>
+            </div>
+          </div>
+          <span slot="footer" class="dialog-footer">
+            <el-button type="primary" @click="pay()" :loading="payNowFlag">绔� 鍗� 鏀� 浠�</el-button>
+          </span>
+        </el-dialog>
+      </div>
 
     </div>
 </template>
 
 <script>
-    export default {
+import wx from 'weixin-js-sdk'
+export default {
         name: 'dashboard',
         data() {
             return {
+                dialogVisible:false,
                 payFlag:false,
+                payNowFlag:false,
                 outParkId:"",
+                type:null,
                 statisticData:{
 
                 },
@@ -68,11 +105,34 @@
                 showFlag2:true,
                 status3:0,
                 carNo:"",
-                code2:""
+                code2:"",
+                code:""
             }
         },
         created(){
+          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;
+            var count = url.split('?').length-1;
+            if(count >1){
+              this.code = this.getCodeFromUrl(url)
+              this.code2 = this.getCode2FromUrl(url)
+              window.location.href = "http://hesuancj.cn/#/indexTest?code="+this.code+"&state=STATE&code2="+this.code2
+            }
             var cs = url.split('?')[1];
             var cs_arr = cs.split('&');
             var cs={};
@@ -80,24 +140,35 @@
                 cs[cs_arr[i].split('=')[0]] = cs_arr[i].split('=')[1]
             }
             //this.outParkId = cs.code;
-            this.code2 = cs.code;
-            this.$byutil.postData(this, this.$systemconfig.basePath + '/outPark/findByBarrierCode', {code:cs.code}, res => {
-                this.statisticData = res.data;
-                this.outParkId = this.statisticData.id;
-                this.status3 = this.statisticData.status3;
-                this.payFlag = false
-                if(this.status3==1){
-                    this.$message({
-                        message: '鎮ㄦ湁杩濈珷鏈鐞嗭紝璇峰厛澶勭悊鎴栬仈绯诲仠杞﹀満绠$悊浜哄憳',
-                        type: 'error',
-                        duration:5000,
-                    });
-                }
-            })
+          this.code2 = cs.code2;
+          this.code = cs.code;
+          if(this.code2 == null || this.code2 == ''){
+            window.location.href = "http://hesuancj.cn/#/indexTest?code2="+this.code
+          }
+          if(this.code != null && this.code != '') {
+            this.dialogVisible = true
+          }else {
+            this.dialogVisible = false
+          }
+          this.$byutil.postData(this, this.$systemconfig.basePath + '/ffzf/outpark/findByBarrierCode2', {code2:cs.code2}, res => {
+            this.statisticData = res.data;
+            this.outParkId = this.statisticData.id;
+            this.status3 = this.statisticData.status3;
+            this.oldCarNo = this.statisticData.carNo;
+            this.payFlag = false
+            if(this.status3==1){
+              this.$message({
+                message: '鎮ㄦ湁杩濈珷鏈鐞嗭紝璇峰厛澶勭悊鎴栬仈绯诲仠杞﹀満绠$悊浜哄憳',
+                type: 'error',
+                duration:5000,
+              });
+            }
+          })
         },
         methods: {
             pay(){
                 this.payFlag = true;
+                this.payNowFlag = true;
                 if(this.status3==1){
                     this.$message({
                         message: '鎮ㄦ湁杩濈珷鏈鐞嗭紝璇峰厛澶勭悊鎴栬仈绯诲仠杞﹀満绠$悊浜哄憳',
@@ -106,14 +177,11 @@
                     });
                     return;
                 }
-                this.$byutil.postData(this, this.$systemconfig.basePath + '/ffzf/api/park', {id:this.outParkId}, res => {
-                    this.$message({
-                        message: '2绉掑悗鑷姩璺宠浆鍒版敮浠橀〉闈紝闃叉鍐呭缃戞暟鎹悓姝ュ欢杩燂紝璇风◢绛�',
-                        type: 'success',
-                        duration:2000,
-                    });
-                  setTimeout(function(){window.location.href = res.msg;},2000);
-                    this.showFlag = false;
+                this.$byutil.postData(this, this.$systemconfig.basePath + '/ffzf/api/parkXT', {id:this.outParkId}, res => {
+                  if(res.code === 0){
+                    this.getCode()
+                    this.showFlag = false
+                  }
                 })
             },
             noCarOut(){
@@ -139,7 +207,116 @@
                 }
 
             },
-        }
+            GetQueryString(name) {
+              var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
+              var r = window.location.search.substr(1).match(reg);
+              if (r != null) return unescape(r[2]); return null;
+            },
+            /**
+             * 瑙f瀽寰俊redirect_uri鍦板潃涓殑code
+             */
+            getCodeFromUrl (cur_url) {
+              let index = cur_url.split('?')[1]
+              let paramStr =index.split('&')[0];
+              let code =paramStr.split('=')[1];
+              return code
+            },
+            /**
+             * 瑙f瀽寰俊redirect_uri鍦板潃涓殑code2
+             */
+            getCode2FromUrl (cur_url) {
+              let index = cur_url.split('?')[2]
+              let code2 =index.split('=')[1];
+              return code2
+            },
+
+            getCode(){
+              if(this.type == 0 ){
+                //寰俊锛岃幏鍙朿ode
+                if(this.code==null||this.code==""){
+                  var url = encodeURIComponent("http://hesuancj.cn/#/indexTest?code2="+this.code2);
+                  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";
+                      //"&scope=SCOPE&state=STATE#wechat_redirect";
+                }else{
+                  this.$byutil.postData(this, this.$systemconfig.basePath + '/ffzf/api/getOpenId', {id:this.outParkId,code:this.code}, 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){
+                //鏀粯瀹濓紝涓嶈幏鍙朿ode
+                this.$byutil.postData(this, this.$systemconfig.basePath + '/ffzf/api/payByAli', {id:this.outParkId}, 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涓殑鎵�鏈変娇鐢╰imestamp瀛楁鍧囦负灏忓啓銆備絾鏈�鏂扮増鐨勬敮浠樺悗鍙扮敓鎴愮鍚嶄娇鐢ㄧ殑timeStamp瀛楁鍚嶉渶澶у啓鍏朵腑鐨凷瀛楃
+                  nonceStr: params.nonceStr, // 鏀粯绛惧悕闅忔満涓诧紝涓嶉暱浜� 32 浣�
+                  package: params.package, // 缁熶竴鏀粯鎺ュ彛杩斿洖鐨刾repay_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
+                }else {
+                  window.location.href = "http://hesuancj.cn/#/indexFail?code2="+this.code2
+                }
+              }
+            })
+          }
+      }
+
     }
 
 </script>
@@ -147,12 +324,57 @@
 
 <style lang="scss">
     .weizhang-main-bootom{
-    .el-input__inner{
-        border:none;
+        .el-input__inner{
+            border:none;
+        }
+        .el-form-item__label{
+            color: #000;
+            font-weight: 600;
+        }
     }
-    .el-form-item__label{
-        color: #999999;
+    .weizhang-footer-box{
+        .el-form-item__content{
+            width: 100%;
+            display: flex;
+            justify-content: center;
+        }
+        .el-button--small{
+            padding: 11px 15px;
+            font-size: 0.347rem  /* 26/75 */;
+        }
     }
+    .dialog-box{
+      .el-dialog{
+        bottom: 0;
+        position: fixed;
+        left: 0;
+        margin: 0;
+      }
+      .el-dialog__body{
+        padding: 2.67vw  /* 20/7.5 */ 5.33vw  /* 40/7.5 */;
+      }
+      .el-dialog__header{
+        width: 100%;
+        display: flex;
+        justify-content: center;
+        align-items: center;
+        padding: 1.87vw  /* 14/7.5 */;
+        background: rgba(103,201,122,0.1);
+      }
+      .el-dialog__title{
+        font-size: 4vw  /* 30/7.5 */;
+      }
+      .el-dialog__headerbtn{
+        top: 2.67vw  /* 20/7.5 */;
+      }
+      .dialog-footer{
+        display: flex;
+        width: 100% !important;
+        .el-button{
+          width: 100%;
+          background: rgba(74,76,89,1);
+        }
+      }
     }
 
 </style>
@@ -166,23 +388,23 @@
         height: 12.8vw  /* 96/7.5 */;
         align-items: center;
         border-bottom:1px solid rgba(154,154,154,0.2);
-    .text{
-        flex: 1;
-        text-align: center;
-    h1{
-        font-size: 2.699vh  /* 36/13.34 */;
-    }
-    }
-    .right{
-        width: 6.747vh  /* 90/13.34 */;
-    }
-    .leftjiantou{
-        font-size: 5.33vw;
-        width: 6.747vh  /* 90/13.34 */;
-        display: flex;
-        justify-content: center;
-        align-items: center;
-    }
+        .text{
+            flex: 1;
+            text-align: center;
+            h1{
+                font-size: 2.699vh  /* 36/13.34 */;
+            }
+        }
+        .right{
+            width: 6.747vh  /* 90/13.34 */;
+        }
+        .leftjiantou{
+            font-size: 5.33vw;
+            width: 6.747vh  /* 90/13.34 */;
+            display: flex;
+            justify-content: center;
+            align-items: center;
+        }
     }
     .weizhang-main-box{
         width: 100%;
@@ -196,38 +418,95 @@
         flex-direction: column;
         justify-content: center;
         align-items: center;
-    .money{
-        font-size: 6.93vw  /* 52/7.5 */;
-        font-weight: 550;
-    }
-    .weizhang{
-        font-size: 4.8vw  /* 36/7.5 */;
-        margin-top:1.33vw  /* 10/7.5 */;
-    }
+        border-bottom: 1px solid #f0f0f0;
+        .money{
+            font-size: 6.93vw  /* 52/7.5 */;
+            font-weight: 550;
+            color: #000;
+        }
+        .weizhang{
+            font-size: 0.4rem  /* 30/75 */;
+            line-height: 2;
+            font-weight: normal;
+            margin-top:1.33vw  /* 10/7.5 */;
+            color: #000;
+        }
     }
     .weizhang-main-form{
     }
     .weizhang-tiaokuan{
         margin-top: 2.67vw  /* 20/7.5 */;
-    h1{
-        font-size:3.2vw  /* 24/7.5 */;
-        color: #999999;
-        text-indent: 2.5em;
-        line-height: 2;
-    }
+        h1{
+            font-size:3.2vw  /* 24/7.5 */;
+            color: #999999;
+            text-indent: 2.5em;
+            line-height: 2;
+        }
     }
     .jiaofei-btn{
-        width: 64.53vw  /* 484/7.5 */;
+        width: 80%;
         border-radius: 5.33vw  /* 40/7.5 */;
         background-image: linear-gradient(to right,#33b1fe,#0679dc);
     }
 
     .logoPhone{
         margin-top: 0.67vw;
-        width: 20vw  /* 180/7.5 */;
-        height: 20vw  /* 180/7.5 */;
+        width: 1.333rem  /* 100/75 */;
+        height: 1.333rem  /* 100/75 */;
     }
     .el-form-item--mini.el-form-item, .el-form-item--small.el-form-item {
         margin-bottom: 10px;
     }
+    .weizhang-main-bootom{
+        margin-top: 0.333rem  /* 25/75 */;
+    }
+    .dialog-main-box{
+      .dialog-main-line{
+        display: flex;
+        justify-content: space-between;
+        h1{
+          font-size: 3.2vw  /* 24/7.5 */;
+          color: rgba(0,0,0,0.9);
+          line-height: 2;
+        }
+      }
+      .dialog-main-line-middle{
+        width: 100%;
+        display: flex;
+        justify-content: center;
+        padding: 2.67vw  /* 20/7.5 */ 0;
+        h1{
+          font-size: 8vw  /* 60/7.5 */;
+          line-height: 2;
+          color: rgba(0,0,0,1);
+          font{
+            font-size: 3.73vw  /* 28/7.5 */;
+            margin-left: 0.67vw  /* 5/7.5 */;
+          }
+        }
+      }
+      .wx-img-box{
+        width: 100%;
+        display: flex;
+        justify-content: space-between;
+        .wx-img-l{
+          display: flex;
+          img{
+            width: 5.33vw  /* 40/7.5 */;
+            object-fit: contain;
+          }
+          h1{
+            font-size: 3.47vw  /* 26/7.5 */;
+            margin-left: 1.33vw  /* 10/7.5 */;
+          }
+        }
+        .wx-img-r{
+          width: 4vw  /* 30/7.5 */;
+          height: 4vw  /* 30/7.5 */;
+          img{
+            width: 100%;
+          }
+        }
+      }
+    }
 </style>

--
Gitblit v1.9.1