xc-app/pages/index/confirmOrder.vue

482 lines
11 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="confirm-order-page">
<view class="nav" :style="{'padding-top': statusBarHeight}">
<image src="@/static/mine/fh.png" mode="" class="nav-back" @click="goBack"></image>
<view class="nav-title">确认订单</view>
<view class="nav-back"></view>
</view>
<scroll-view class="scroll-list-view" scroll-y="true" scroll-with-animation>
<view class="shop">
<view class="shop-detail">
<view class="shop-img" :style="{'backgroundImage':`url(${detailData.coverResource.url})`}"></view>
<view class="detail">
<view class="detail-title">{{detailData.name}}</view>
<view class="detail-num">{{statusObj[detailData.type]}}</view>
<view class="detail-price">
<text class="detail-sym">¥</text>
{{detailData.amount.sale}}
</view>
</view>
</view>
<view class="pay">
<!-- <view class="pay-item">
<view class="item-name">
<view class="pay-img-main" >
<image src="@/static/index/hb.png" style="width: 26rpx;height: 27rpx" class="pay-img" mode=""></image>
</view>
优惠券
</view>
<view class="coupon">
<view class="coupon-price">- ¥8</view>
<view class="coupon-num">3张可用</view>
<image src="@/static/index/hb-g.png" mode="" class="coupon-arr"></image>
</view>
</view> -->
<view class="pay-item" v-for="(item,index) in payList" :key="index" @click="payChange(index,item)">
<view class="item-name">
<view class="pay-img-main">
<image :src="item.img" :style="{width:item.width,height:item.height}" class="pay-img"
mode="" v-if="item.img"></image>
<view :style="{width:item.width,height:item.height}" v-else></view>
</view>
{{item.label}}
</view>
<image src="@/static/index/g.png" mode="" class="item-img" v-if="item.visible"></image>
<view class="item-img-view" v-else></view>
</view>
<view class="coupon-total">
<!-- 优惠<text class="price">¥8</text> -->
实付<text class="total">¥{{detailData.amount.sale}}</text>
</view>
</view>
</view>
<view class="main">
<view class="title">买家需知</view>
<view class="main-txt">1.商品抽奖存在概率性,付费请谨慎。</view>
<view class="main-txt">2.本公司惊喜礼盒开箱概率已经过公证处鉴定(公证后台
设置与app展示一致)。</view>
<view class="main-txt">3.惊喜礼盒一经购买不支持退款(除商品质量问题),但可
8折回收后自动兑换成繁豆用于兑换商品繁豆为平台积
分,暂不支持提现。</view>
<view class="main-txt">4.本平台禁止未成年人消费。</view>
<view class="main-txt">5.受疫情影响,部分地区物流公司暂时无法接单及派送,
为此给您带来的不便我们深表歉意。请您耐心等待我们
会在疫情解除的第一时间为您派件。</view>
</view>
<view class="footer">
<view class="footer-detail">
<text class="footer-total">合计:</text>
<text class="footer-sym">¥</text>
<text class="footer-price">{{detailData.amount.sale}}</text>
</view>
<view class="footer-btn" @click="pay">确认支付</view>
</view>
</scroll-view>
<!-- 所有页面的弹框 -->
<page-popup page="/pages/index/confirmOrder"></page-popup>
</view>
</template>
<script>
import { myMixins } from "@/mixins/mixins.js";
import {
boxOrderReviewApi,
boxOrderApi,
boxOrderPaidApi
} from '@/API/index.js'
var statusBarHeight = uni.getSystemInfoSync().statusBarHeight ? `${uni.getSystemInfoSync().statusBarHeight}px` : '20px'
export default {
mixins: [myMixins],
data() {
return {
statusBarHeight,
boxId: "",
type: "",
buyMethod: "",
detailData: {
coverResource: {},
amount: {}
},
statusObj: {
SINGLE: "一发入魂",
TRIPLE: "三连抽",
PENTA: "五连抽",
},
payList: [],
payType: '',
timer: null
}
},
onLoad(opation) {
this.boxId = opation.boxId
this.type = opation.type
this.getDetail()
},
methods: {
goBack() {
uni.navigateBack()
},
// 订单预览
getDetail() {
boxOrderReviewApi({
boxId: this.boxId,
type: this.type
}).then(res => {
if (res.code === 200) {
this.detailData = res.data
this.detailData.methods.forEach(item => {
if (item === 'ALIPAY') {
this.payList.push({
label: "支付宝支付",
type: 'ALIPAY',
visible: false,
img: '../../static/index/zfb.png',
width: '30rpx',
height: '30rpx'
})
} else if (item === 'WECHAT') {
this.payList.push({
label: "微信支付",
type: 'WECHAT',
visible: false,
img: '../../static/index/wx.png',
width: '34rpx',
height: '29rpx'
})
} else if (item === 'POINTS') {
this.payList.push({
label: "积分支付",
type: 'POINTS',
visible: false,
img: '../../static/mine/jf.png',
width: '30rpx',
height: '31rpx'
})
} else if (item === 'NONE') {
this.payList.push({
label: "无需支付",
type: 'NONE',
visible: false,
img: '',
width: '30rpx',
height: '31rpx'
})
}
})
this.payList[0].visible = true
this.payType = this.payList[0].type
}
})
},
// 切换支付方式
payChange(index, item) {
this.payList.forEach((v, i) => {
v.visible = false;
})
this.payType = item.type
this.payList[index].visible = !this.payList[index].visible
},
pay() {
let data = {
boxId: this.boxId,
type: this.type,
method: this.payType
}
uni.showLoading()
boxOrderApi(data).then(res => {
uni.hideLoading()
if (res.code === 200) {
//
this.getBoxOrderPaid(res.data.no)
this.timer = setInterval(() => {
this.getBoxOrderPaid(res.data.no)
}, 3000);
// uni.navigateTo({
// url: `/pages/index/paySuccess?no=${res.data.no}`
// })
} else {
this.$api.msg(res.message)
}
}).catch(err => {
uni.hideLoading()
})
},
getBoxOrderPaid(no) {
boxOrderPaidApi({
no
}).then(payResult => {
if (payResult.data) {
clearInterval(this.timer); // 清除定时器
this.timer = null;
this.$api.msg('支付成功')
uni.redirectTo({
url: `/pages/index/order?no=${no}&boxId=${this.boxId}&name=${this.detailData.name}&type=${this.detailData.type}&sale=${this.detailData.amount.sale}`
})
uni.hideLoading()
}
}).catch(err => {
clearInterval(this.timer); // 清除定时器
this.timer = null;
uni.hideLoading()
})
},
},
onUnload() {
// 在页面离开时清除定时器
clearInterval(this.timer);
}
}
</script>
<style lang="scss">
page {
background-image: url('@/static/index/bg.png');
background-size: 100%;
}
.confirm-order-page {
.nav {
z-index: 100;
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 23rpx;
box-sizing: border-box;
position: fixed;
top: 0;
left: 0;
.nav-back {
width: 19rpx;
height: 34rpx;
z-index: 11;
}
.nav-title {
font-weight: 500;
font-size: 34rpx;
color: #000000;
}
}
.scroll-list-view {
height: 100vh;
padding-top: 130rpx;
box-sizing: border-box;
}
.shop {
width: 706rpx;
background: #FFFFFF;
border-radius: 10rpx;
padding: 19rpx 16rpx 32rpx 20rpx;
margin-left: 22rpx;
.shop-detail {
display: flex;
align-items: center;
.shop-img {
width: 146rpx;
height: 146rpx;
background-size: 100%;
background-position: 50%;
background-repeat: no-repeat;
border-radius: 10rpx;
}
.detail {
margin-left: 21rpx;
.detail-title {
width: 400rpx;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
font-size: 28rpx;
font-weight: 500;
color: #333;
}
.detail-num {
margin-top: 10rpx;
font-size: 22rpx;
color: #888888;
}
.detail-price {
margin-top: 17rpx;
font-weight: bold;
font-size: 28rpx;
color: #F04236;
.detail-sym {
// font-size: 24rpx;
}
}
}
}
.pay {
margin-top: 26rpx;
border-top: 1px solid #EEEEEE;
.pay-item {
display: flex;
align-items: center;
justify-content: space-between;
margin-top: 29rpx;
.item-name {
font-weight: 500;
font-size: 28rpx;
color: #333333;
display: flex;
align-items: center;
.pay-img-main {
width: 35rpx;
display: flex;
align-items: center;
margin-right: 10rpx;
}
.pay-img {}
}
.coupon {
display: flex;
align-items: center;
.coupon-price{
font-size: 28rpx;
color: #EF4235;
}
.coupon-num{
font-size: 24rpx;
color: #FFFFFF;
background: #F04437;
border-radius: 8rpx;
padding: 6rpx 12rpx;
}
.coupon-arr {
margin-left: 13rpx;
width: 12rpx;
height: 22rpx;
}
}
.item-img {
width: 41rpx;
height: 41rpx;
}
.item-img-view {
width: 41rpx;
height: 41rpx;
border-radius: 50%;
border: 2rpx solid #888888;
}
}
.coupon-total {
border-top: 1px solid #EEEEEE;
padding-top: 35rpx;
display: flex;
align-items: center;
justify-content: flex-end;
font-weight: 500;
font-size: 28rpx;
color: #333333;
margin-top: 27rpx;
.price {
font-weight: 500;
font-size: 28rpx;
color: #EF4235;
margin: 0 38rpx 0 10rpx;
}
.total {
margin-left: 19rpx;
font-weight: bold;
font-size: 40rpx;
color: #EF4235;
}
}
}
}
.main {
padding: 45rpx 71rpx 0 26rpx;
.title {
font-weight: 500;
font-size: 28rpx;
color: #333333;
margin-bottom: 6rpx;
}
.main-txt {
font-size: 24rpx;
color: #888888;
margin-bottom: 15rpx;
}
}
.footer {
position: fixed;
bottom: 54rpx;
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 22rpx 0 76rpx;
.footer-detail {
.footer-total {
display: inline-block;
font-size: 20rpx;
color: #888888;
}
.footer-sym {
display: inline-block;
margin-left: 8rpx;
font-size: 30rpx;
color: #FF6256;
}
.footer-price {
display: inline-block;
// font-family: YouSheBiaoTiHei;
font-size: 52rpx;
color: #FF6256;
font-weight: 800;
margin-left: 5rpx;
}
}
.footer-btn {
width: 323rpx;
height: 88rpx;
background: linear-gradient(90deg, #EF4033 0%, #FF9F98 100%);
border-radius: 44rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 32rpx;
color: #FFFFFF;
}
}
}
</style>