浏览代码

购买修改

lex-xin 5 年之前
父节点
当前提交
8fcbff0753

文件差异内容过多而无法显示
+ 0 - 0
dist/css/app.5ddcae75.css


文件差异内容过多而无法显示
+ 0 - 0
dist/css/app.d41b8ee2.css


文件差异内容过多而无法显示
+ 0 - 0
dist/css/chunk-vendors.7bc27415.css


文件差异内容过多而无法显示
+ 0 - 0
dist/index.html


文件差异内容过多而无法显示
+ 0 - 0
dist/js/app.02a50787.js


文件差异内容过多而无法显示
+ 0 - 0
dist/js/app.02a50787.js.map


文件差异内容过多而无法显示
+ 0 - 0
dist/js/app.4515035e.js


文件差异内容过多而无法显示
+ 0 - 0
dist/js/app.4515035e.js.map


文件差异内容过多而无法显示
+ 0 - 0
dist/js/chunk-vendors.31023cfc.js


文件差异内容过多而无法显示
+ 0 - 0
dist/js/chunk-vendors.31023cfc.js.map


文件差异内容过多而无法显示
+ 0 - 0
dist/js/chunk-vendors.813d34e4.js.map


+ 34 - 0
dist/orderpay.html

@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
+    </head>
+  <body>
+    <!-- built files will be auto injected -->
+    <form role="form" method="post" action="" id="onSubmits">
+        <input type="hidden" name="apiContent" id="apiContents">
+        <input type="hidden" name="merNo" id="merNos">
+        <input type="hidden" name="notifyUrl" id="notifyUrls">
+        <input type="hidden" name="sign" id="signs">
+        <input type="hidden" name="signType" id="signTypes">
+        <input type="hidden" name="timestamp" id="timestamps">
+        <input type="hidden" name="version" id="versions">
+    </form>
+    <script>
+        var orderList = sessionStorage.getItem('orderForm')
+        var f = JSON.parse(orderList)
+        sessionStorage.removeItem('orderForm')
+        document.querySelector('#onSubmits').action = f.host
+        document.querySelector('#apiContents').value = f.apiContent
+        document.querySelector('#merNos').value = f.merNo
+        document.querySelector('#notifyUrls').value = f.notifyUrl
+        document.querySelector('#signs').value = f.sign
+        document.querySelector('#signTypes').value = f.signType
+        document.querySelector('#timestamps').value = f.timestamp
+        document.querySelector('#versions').value = f.version
+        document.querySelector('#onSubmits').submit()
+    </script>
+  </body>
+</html>

+ 34 - 0
public/orderpay.html

@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
+    </head>
+  <body>
+    <!-- built files will be auto injected -->
+    <form role="form" method="post" action="" id="onSubmits">
+        <input type="hidden" name="apiContent" id="apiContents">
+        <input type="hidden" name="merNo" id="merNos">
+        <input type="hidden" name="notifyUrl" id="notifyUrls">
+        <input type="hidden" name="sign" id="signs">
+        <input type="hidden" name="signType" id="signTypes">
+        <input type="hidden" name="timestamp" id="timestamps">
+        <input type="hidden" name="version" id="versions">
+    </form>
+    <script>
+        var orderList = sessionStorage.getItem('orderForm')
+        var f = JSON.parse(orderList)
+        sessionStorage.removeItem('orderForm')
+        document.querySelector('#onSubmits').action = f.host
+        document.querySelector('#apiContents').value = f.apiContent
+        document.querySelector('#merNos').value = f.merNo
+        document.querySelector('#notifyUrls').value = f.notifyUrl
+        document.querySelector('#signs').value = f.sign
+        document.querySelector('#signTypes').value = f.signType
+        document.querySelector('#timestamps').value = f.timestamp
+        document.querySelector('#versions').value = f.version
+        document.querySelector('#onSubmits').submit()
+    </script>
+  </body>
+</html>

+ 2 - 2
src/main.js

@@ -4,9 +4,9 @@ import App from './App.vue'
 import store from './store'
 import router from './router'
 
-import { Button, Popup, Toast, Dialog, Field, CellGroup, Cell, ActionSheet, DatetimePicker } from 'vant'
+import { Button, Popup, Toast, Dialog, Field, CellGroup, Cell, ActionSheet, DatetimePicker, CountDown, Loading, Overlay} from 'vant'
 
-Vue.use(Button).use(Popup).use(Toast).use(Dialog).use(Field).use(CellGroup).use(Cell).use(ActionSheet).use(DatetimePicker)
+Vue.use(Button).use(Popup).use(Toast).use(Dialog).use(Field).use(CellGroup).use(Cell).use(ActionSheet).use(DatetimePicker).use(CountDown).use(Loading).use(Overlay)
 
 Vue.config.productionTip = false
 

+ 5 - 0
src/router.js

@@ -51,6 +51,11 @@ export default new Router({
             path: '/order',
             name: 'order',
             component: () => import('./views/order.vue')
+        },
+        {
+            path: '/orderpay',
+            name: 'orderpay',
+            component: () => import('./views/orderPay.vue')
         }
     ],
     scrollBehavior() {

+ 119 - 10
src/views/Home.vue

@@ -154,6 +154,20 @@
         <van-popup id="protocolPopup" v-model="popupStatus" position="bottom">
             <protocol :proto="protocolData" @popupClose="onPopupClose"></protocol>
         </van-popup>
+
+        <van-popup v-model="orderPayStatus" position='bottom'>
+            <!-- <van-count-down :time='time' /> -->
+            <p class="countDownContent">恭喜您抢占席位成功,请您在(<van-count-down format="ss" @finish="finished" :time='time' />秒)内完成支付!</p>
+            <iframe class="iframe" src="./orderpay.html" width="100%" height="100%" frameborder="0" scrolling='auto' seamless></iframe>
+        </van-popup>
+
+        <!-- <van-overlay :show="true" @click="show = false" >
+            <van-loading size="24px" vertical>加载中...</van-loading>
+        </van-overlay> -->
+
+        <van-popup v-model="loadingOrderStatus" :close-on-click-overlay='false' class="loadingOrder">
+            <van-loading size="36px" vertical  color="#14928A">{{ loadingOrderText }}</van-loading>
+        </van-popup>
     </div>
 </template>
 
@@ -162,12 +176,21 @@
 import {instruments, baseInfo } from '../assets/front_instruments_config'
 import qs from 'qs'
 import Protocol from './protocol'
-import { Dialog } from 'vant'
+import OrderPay from './orderPay'
+import { Dialog, CountDown } from 'vant'
 export default {
     name: 'home',
-    components: { Protocol, Dialog },
+    components: { Protocol, Dialog, CountDown, OrderPay },
     data() {
         return {
+            time: 120 * 1000, // 倒计时时间
+            loadingOrderStatus: false, // 排队中状态
+            loadingOrderText: '加载中...', // 排队文案
+            resultParams: '', // 提交订单参数
+            clickBtnCount: true, // 点击按钮次数判定
+            paymentTimers: null, // 定时器
+            paymentPostCount: 0, // 请求计数
+            orderPayStatus: false, // 支付弹窗
             popupStatus: false, // 协议弹窗样式
             protocolData: {}, // 协议参数
             result: {}, // 返回结果
@@ -308,6 +331,12 @@ export default {
             
         },
         buy() {
+            // 判断是否点击过
+            if(!this.clickBtnCount) {
+                return false
+            }
+            this.clickBtnCount = false
+
             // 确认购买
             let params = this.$route.query
             let resultParams = {
@@ -352,20 +381,72 @@ export default {
                 })
                 return false
             }
+            this.resultParams = resultParams
             axios.post('/yqpay/toPay', qs.stringify(resultParams)).then((res) => { 
                 let result = res.data
-                if(result.data) {
-                    this.form = result.data
-                    this.onSubmit()
+                this.clickBtnCount = true
+                if(result.code == 403) {
+                    this.loadingOrderStatus = true
+                    this.loadingOrderText = result.msg
+                    this.paymentMethods()
                 } else {
-                    Dialog.alert({
-                        title: '提示',
-                        message: result.msg,
-                        confirmButtonColor: '#269a93'
-                    })
+                    if(result.data) {
+                        this.form = result.data
+                        this.orderPayStatus = true
+                        sessionStorage.setItem('orderForm', JSON.stringify(result.data))
+                    } else {
+                        Dialog.alert({
+                            title: '提示',
+                            message: result.msg,
+                            confirmButtonColor: '#269a93'
+                        })
+                    }
                 }
             })
         },
+        paymentMethods() {
+            let resultParams = this.resultParams
+            if(!resultParams) {
+                return false
+            }
+            let that = this
+            // let paymentTimers, paymentPostCount = 0
+            that.paymentTimers = setInterval(() => {
+                that.paymentPostCount++
+                if(that.paymentPostCount >= 30) {
+                    clearInterval(that.paymentTimers)
+                } else {
+                    axios.post('/yqpay/toPay', qs.stringify(resultParams)).then((res) => { 
+                        let result = res.data
+                        if(result.code == 403) {
+                            that.loadingOrderStatus = true
+                            that.loadingOrderText = result.msg
+                        } else {
+                            clearInterval(that.paymentTimers)
+                            that.loadingOrderStatus = false
+                            that.loadingOrderText = '加载中...'
+                            if(result.data) {
+                                that.form = result.data
+                                console.log(result.data)
+                                that.orderPayStatus = true
+                                sessionStorage.setItem('orderForm', JSON.stringify(result.data))
+                            } else {
+                                Dialog.alert({
+                                    title: '提示',
+                                    message: result.msg,
+                                    confirmButtonColor: '#269a93'
+                                })
+                            }
+                        }
+                    })
+                }
+            }, 1000 * 10)
+            
+        },
+        finished() {
+            // 倒计时结束调用
+            this.orderPayStatus = false
+        },
         onSubmit() {
             // submit 提交
             let f = this.form
@@ -732,5 +813,33 @@ export default {
             padding: .08rem .28rem;
         }
     }
+    .iframe {
+        width: 100%;
+        height: 100%;
+        -webkit-overflow-scrolling: touch;
+        overflow-y: scroll;
+        border-top: none !important;
+        min-height: calc(100vh - .41rem);
+    }
+
+    .countDownContent {
+        line-height: .4rem;
+        text-align: center;
+        font-size: .14rem;
+        border-bottom: .01rem solid #ccc;
+        .van-count-down {
+            display: inline;
+        }
+    }
+    .loadingOrder {
+        width: 90%;
+        height: 1.8rem;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        .van-loading__text {
+            color: #444;
+        }
+    }
 </style>
 

+ 50 - 0
src/views/orderPay.vue

@@ -0,0 +1,50 @@
+<template>
+    <div class="orderpay">
+        <!-- <iframe class="iframe" src="" width="100%" height="100%" frameborder="0" scrolling='auto' seamless> -->
+            <form role="form" method="post" :action="proto.host" id="onSubmit">
+                <input type="hidden" v-model="proto.apiContent" name="apiContent" id="apiContent">
+                <input type="hidden" v-model="proto.merNo" name="merNo" id="merNo">
+                <input type="hidden" v-model="proto.notifyUrl" name="notifyUrl" id="notifyUrl">
+                <input type="hidden" v-model="proto.sign" name="sign" id="sign">
+                <input type="hidden" v-model="proto.signType" name="signType" id="signType">
+                <input type="hidden" v-model="proto.timestamp" name="timestamp" id="timestamp">
+                <input type="hidden" v-model="proto.version" name="version" id="version">
+            </form>
+        <!-- </iframe> -->
+    </div>
+</template>
+
+<script>
+export default {
+    name: 'orderpay',
+    // props: ['proto'],
+    data() {
+        return {
+            proto: {}
+        }
+    },
+    mounted() {
+        // console.log(sessionStorage.getItem('orderForm'))
+        // let tempOrderInfo = sessionStorage.getItem('orderForm')
+        console.log(this.$route.query)
+        
+        this.proto = JSON.parse(tempOrderInfo)
+        console.log(this.proto)
+        // sessionStorage.removeItem('orderForm')
+        document.querySelector('#onSubmit').submit()
+    }
+}
+</script>
+
+<style lang="less" scoped>
+.orderpay {
+    min-height: 100vh;
+}
+.iframe {
+    width: 100%;
+    height: 100%;
+    -webkit-overflow-scrolling: touch;
+    overflow-y: scroll;
+    border-top: none !important
+}
+</style>

+ 6 - 6
vue.config.js

@@ -7,8 +7,8 @@ module.exports = {
         // 查阅 https://github.com/vuejs/vue-doc-zh-cn/vue-cli/cli-service.md#配置代理
         proxy: {
             '/user': {
-                // target: 'http://testpay.dayaedu.com',
-                target: 'http://192.168.3.38:9000',
+                target: 'http://testpay.dayaedu.com',
+                // target: 'http://192.168.3.38:9000',
                 // target: 'http://192.168.3.28:8005',
                 changeOrigin: true,
                 ws: true,
@@ -17,8 +17,8 @@ module.exports = {
             },
             '/yqpay': {
                 // target: 'http://testpay.dayaedu.com',
-                target: 'http://192.168.3.38:9000',
-                // target: 'http://192.168.3.28:8005',
+                // target: 'http://192.168.3.38:9000',
+                target: 'http://192.168.3.27:9000',
                 changeOrigin: true,
                 ws: true,
                 '^/yqpay': '/yqpay',
@@ -26,8 +26,8 @@ module.exports = {
             },
             '/order': {
                 // target: 'http://testpay.dayaedu.com',
-                target: 'http://192.168.3.38:9000',
-                // target: 'http://192.168.3.28:8005',
+                // target: 'http://192.168.3.38:9000',
+                target: 'http://192.168.3.27:9000',
                 changeOrigin: true,
                 ws: true,
                 '^/order': '/order',

部分文件因为文件数量过多而无法显示