feat: 实现订单支付功能并优化支付成功后的页面跳转逻辑
This commit is contained in:
parent
b9b60b15a1
commit
a3ec9c102d
@ -312,7 +312,8 @@ function handlePay() {
|
||||
.then(async () => {
|
||||
uni.hideLoading()
|
||||
uni.showToast({ title: '支付成功', icon: 'success' })
|
||||
await loadOrder()
|
||||
// 支付成功后跳转到对应游戏页面
|
||||
navigateToGame(ord)
|
||||
})
|
||||
.catch((e) => {
|
||||
uni.hideLoading()
|
||||
@ -324,6 +325,32 @@ function handlePay() {
|
||||
})
|
||||
}
|
||||
|
||||
function navigateToGame(ord) {
|
||||
const playType = ord.play_type
|
||||
const activityId = ord.activity_id
|
||||
|
||||
if (!activityId) {
|
||||
// 没有活动ID,返回订单列表
|
||||
uni.navigateBack()
|
||||
return
|
||||
}
|
||||
|
||||
let url = ''
|
||||
if (playType === 'match') {
|
||||
url = `/pages/activity/duiduipeng/index?activity_id=${activityId}`
|
||||
} else if (playType === 'ichiban') {
|
||||
url = `/pages/activity/yifanshang/index?activity_id=${activityId}`
|
||||
} else if (playType === 'infinity') {
|
||||
url = `/pages/activity/wuxianshang/index?activity_id=${activityId}`
|
||||
}
|
||||
|
||||
if (url) {
|
||||
uni.redirectTo({ url })
|
||||
} else {
|
||||
uni.navigateBack()
|
||||
}
|
||||
}
|
||||
|
||||
function copyText(text) {
|
||||
if (!text) return
|
||||
uni.setClipboardData({
|
||||
|
||||
@ -105,7 +105,7 @@
|
||||
|
||||
<!-- 快捷操作 -->
|
||||
<view class="order-actions" v-if="currentTab === 'pending'">
|
||||
<button class="action-btn secondary" @tap.stop="cancelOrder(item)">取消订单</button>
|
||||
<button class="action-btn secondary" @tap.stop="doCancelOrder(item)">取消订单</button>
|
||||
<button class="action-btn primary" @tap.stop="payOrder(item)">立即支付</button>
|
||||
</view>
|
||||
</view>
|
||||
@ -128,7 +128,7 @@
|
||||
<script setup>
|
||||
import { ref } from 'vue'
|
||||
import { onLoad, onReachBottom } from '@dcloudio/uni-app'
|
||||
import { getOrders, cancelOrder as cancelOrderApi } from '../../api/appUser'
|
||||
import { getOrders, cancelOrder as cancelOrderApi, createWechatOrder } from '../../api/appUser'
|
||||
|
||||
const currentTab = ref('pending')
|
||||
const orders = ref([])
|
||||
@ -429,9 +429,65 @@ async function doCancelOrder(item) {
|
||||
})
|
||||
}
|
||||
|
||||
function payOrder(item) {
|
||||
// TODO: 跳转支付
|
||||
uni.showToast({ title: '支付功能开发中', icon: 'none' })
|
||||
async function payOrder(item) {
|
||||
const openid = uni.getStorageSync('openid')
|
||||
if (!openid) {
|
||||
uni.showToast({ title: '缺少OpenID,请重新登录', icon: 'none' })
|
||||
return
|
||||
}
|
||||
if (!item || !item.order_no) return
|
||||
|
||||
uni.showLoading({ title: '拉起支付...' })
|
||||
try {
|
||||
const payRes = await createWechatOrder({ openid, order_no: item.order_no })
|
||||
await new Promise((resolve, reject) => {
|
||||
uni.requestPayment({
|
||||
provider: 'wxpay',
|
||||
timeStamp: payRes.timeStamp || payRes.timestamp,
|
||||
nonceStr: payRes.nonceStr || payRes.noncestr,
|
||||
package: payRes.package,
|
||||
signType: payRes.signType || 'MD5',
|
||||
paySign: payRes.paySign,
|
||||
success: resolve,
|
||||
fail: reject
|
||||
})
|
||||
})
|
||||
uni.hideLoading()
|
||||
uni.showToast({ title: '支付成功', icon: 'success' })
|
||||
navigateToGame(item)
|
||||
} catch (e) {
|
||||
uni.hideLoading()
|
||||
if (e?.errMsg && String(e.errMsg).includes('cancel')) {
|
||||
uni.showToast({ title: '支付已取消', icon: 'none' })
|
||||
return
|
||||
}
|
||||
uni.showToast({ title: e?.message || '支付失败', icon: 'none' })
|
||||
}
|
||||
}
|
||||
|
||||
function navigateToGame(item) {
|
||||
const playType = item.play_type
|
||||
const activityId = item.activity_id
|
||||
|
||||
if (!activityId) {
|
||||
fetchOrders(false) // 刷新订单列表
|
||||
return
|
||||
}
|
||||
|
||||
let url = ''
|
||||
if (playType === 'match') {
|
||||
url = `/pages/activity/duiduipeng/index?activity_id=${activityId}`
|
||||
} else if (playType === 'ichiban') {
|
||||
url = `/pages/activity/yifanshang/index?activity_id=${activityId}`
|
||||
} else if (playType === 'infinity') {
|
||||
url = `/pages/activity/wuxianshang/index?activity_id=${activityId}`
|
||||
}
|
||||
|
||||
if (url) {
|
||||
uni.navigateTo({ url })
|
||||
} else {
|
||||
fetchOrders(false)
|
||||
}
|
||||
}
|
||||
|
||||
onLoad((opts) => {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user