123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287 |
- <!-- 支付结果页 -->
- <template>
- <view class="success-page">
- <!-- 商品结果页 -->
- <template v-if="orderType==='goods'">
- <view class="success-box u-flex-col u-row-center u-col-center">
- <image class="pay-img" :src="payImg[payState]" mode=""></image>
- <text class="notice">{{ payText[payState] }}</text>
- <text class="pay-money"
- v-if="payState === 'success' && orderDetail.total_fee">¥{{ orderDetail.total_fee }}</text>
- <view class="btn-box u-flex u-row-between">
- <block
- v-if="payState === 'success' && orderDetail.activity_type === 'groupon' && orderDetail.ext_arr.buy_type === 'groupon'">
- <button class="u-reset-button base-btn" v-if="orderDetail.ext_arr.groupon_id > 0"
- @tap="$Router.replace({ path: '/pages/activity/groupon/detail', query: { id: orderDetail.ext_arr.groupon_id } })">
- 拼团详情
- </button>
- <button class="u-reset-button base-btn" v-else
- @tap="$Router.push('/pages/activity/groupon/my-groupon')">我的拼团</button>
- </block>
- <button class="u-reset-button base-btn" v-else
- @tap="$Router.pushTab('/pages/index/index')">返回首页</button>
- <button class="u-reset-button base-btn u-m-l-10 u-m-r-10"
- @tap="$Router.replace({ path: '/pages/order/detail', query: { id: orderDetail.id } })">查看订单</button>
- <button class="u-reset-button again-pay " v-show="payState === 'fail'" @tap="onPay">重新支付</button>
- </view>
- </view>
- <!-- modal -->
- <!-- #ifdef MP-WEIXIN -->
- <u-modal v-if="payState === 'success'" ref="uModal" v-model="showModal" :show-cancel-button="true"
- confirm-color="#e9b461" cancel-color="#666666" @confirm="onConfirm" confirm-text="订阅消息" cancel-text="取消"
- content="是否订阅消息,追踪订单信息?" title="提示"></u-modal>
- <!-- #endif -->
- </template>
- <template v-if="orderType==='recharge'">
- <view class="success-box u-flex-col u-row-center u-col-center">
- <image class="pay-img" :src="payImg[payState]" mode=""></image>
- <text class="notice">{{ payText[payState] }}</text>
- <text class="pay-money"
- v-if="payState === 'success' && orderDetail.total_fee">¥{{ orderDetail.total_fee }}</text>
- <view class="btn-box u-flex u-row-between">
- <button class="u-reset-button base-btn" @tap="$Router.pushTab('/pages/index/index')">返回首页</button>
- <button v-if="payState === 'fail'" class="u-reset-button again-pay" @tap="onPay">重新支付</button>
- <button v-else class="u-reset-button base-btn"
- @tap="$Router.pushTab('/pages/index/user')">个人中心</button>
- </view>
- </view>
- </template>
- </view>
- </template>
- <script>
- import Pay from '@/shopro/pay';
- import { mapMutations, mapActions, mapState, mapGetters } from 'vuex';
- let payTimer = null;
- const payCount = 5;
- export default {
- components: {},
- data() {
- return {
- showModal: false,
- messageType: '',
- templateIds: [],
- wxOpenTags: '',
- orderDetail: {}, //订单详情
- orderType: '', //订单类型
- payText: {
- fail: '支付失败',
- success: '支付成功',
- paying: '查询中...'
- },
- payImg: {
- fail: this.$IMG_URL + '/imgs/order/order_pay_fail.gif',
- success: this.$IMG_URL + '/imgs/order/order_pay_success.gif',
- paying: this.$IMG_URL + '/imgs/order/order_paying.gif'
- },
- payState: '' //支付状态
- };
- },
- computed: {
- ...mapGetters(['subscribeMessageIdsMap'])
- },
- onLoad() {
- this.payState = this.$Route.query.payState ? this.$Route.query.payState : 'paying';
- this.orderType = this.$Route.query.orderType
- this.$Route.query.orderId && this.getOrderDetail();
- switch (this.payState) {
- case 'success':
- this.getCartList();
- break;
- case 'fail':
- break;
- case 'paying':
- this.checkTimer();
- break;
- default:
- break;
- }
- },
- onHide() {
- clearInterval(payTimer);
- payTimer = null;
- },
- methods: {
- ...mapActions(['getCartList']),
- // 订阅消息
- onConfirm() {
- // #ifdef MP-WEIXIN
- this.templateIds.length && this.$store.commit('subscribeMessage', this.messageType);
- // #endif
- },
- // 获取订单详情
- getOrderDetail() {
- switch (this.$Route.query.orderType) {
- case 'goods':
- this.getGoodsOrderDetail()
- break;
- case 'recharge':
- this.getRechargeOrderDetail()
- break;
- default:
- break;
- }
- },
- // 支付订单信息
- getGoodsOrderDetail() {
- let that = this;
- that.$http('order.detail', {
- id: that.$Route.query.orderId
- }).then(async res => {
- if (res.code === 1) {
- that.orderDetail = res.data;
- if (res.data.status > 0) {
- this.messageType = this.orderDetail.activity_type == 'groupon' ? 'grouponResult' :
- 'result';
- // #ifdef MP-WEIXIN
- this.templateIds = this.subscribeMessageIdsMap[this.messageType];
- this.showModal = this.templateIds.length;
- // #endif
- }
- }
- });
- },
- // 充值订单信息
- getRechargeOrderDetail() {
- let that = this;
- that.$http('money.rechargeDetail', {
- id: that.$Route.query.orderId
- }).then(res => {
- if (res.code === 1) {
- that.orderDetail = res.data;
- if (res.data.status > 0) {
- this.messageType = 'result';
- }
- }
- });
- },
- // 支付倒计时
- checkTimer() {
- let that = this;
- let count = 0;
- that.payState = 'paying';
- payTimer = setInterval(() => {
- count++;
- if (count < payCount) {
- that.checkPay();
- } else {
- clearInterval(payTimer);
- that.payState = 'fail';
- }
- }, 800);
- },
- // 检测支付
- async checkPay() {
- let that = this;
- let paiMap = {
- 'goods': 'order.detail',
- 'recharge': 'money.rechargeDetail'
- }
- let res = await that.$http(
- paiMap[that.orderType], {
- id: that.$Route.query.orderId
- },
- false
- );
- if (res.code === 1 && res.data.status > 0) {
- that.payState = 'success';
- clearInterval(payTimer);
- }
- },
- // 重新支付
- onPay() {
- let that = this;
- let pay = new Pay(that.$Route.query.type, that.orderDetail, that.orderType);
- }
- }
- };
- </script>
- <style lang="scss" scopeds>
- .success-box {
- background: #fff;
- width: 750rpx;
- padding: 40rpx 0;
- .pay-img {
- width: 130rpx;
- height: 130rpx;
- }
- .notice {
- font-size: 30rpx;
- font-weight: bold;
- color: rgba(51, 51, 51, 1);
- line-height: 30rpx;
- margin-top: 30rpx;
- }
- .pay-money {
- font-size: 36rpx;
- color: #ff3000;
- font-weight: 600;
- margin-top: 20rpx;
- }
- .btn-box {
- margin-top: 30rpx;
- width: 660rpx;
- .base-btn {
- width: 320rpx;
- line-height: 70rpx;
- background: rgba(255, 255, 255, 1);
- border: 1rpx solid rgba(223, 223, 223, 0.5);
- border-radius: 35rpx;
- font-size: 28rpx;
- font-weight: 400;
- color: rgba(153, 153, 153, 1);
- padding: 0;
- }
- .again-pay {
- width: 320rpx;
- line-height: 70rpx;
- background: linear-gradient(90deg, rgba(233, 180, 97, 1), rgba(238, 204, 137, 1));
- box-shadow: 0px 7rpx 6rpx 0px rgba(229, 138, 0, 0.22);
- border-radius: 35rpx;
- font-size: 28rpx;
- font-weight: 400;
- color: rgba(255, 255, 255, 0.8);
- padding: 0;
- }
- }
- }
- .hot-box {
- background: #fff;
- padding: 20rpx;
- margin-top: 20rpx;
- .hot-title {
- font-size: 30rpx;
- font-weight: 500;
- color: rgba(51, 51, 51, 1);
- height: 80rpx;
- }
- }
- </style>
|