From 1e78f76be153e70e9a0a77438cb247b2005b68da Mon Sep 17 00:00:00 2001 From: lifizer <913626195@qq.com> Date: Wed, 20 May 2026 14:12:49 +0800 Subject: [PATCH] =?UTF-8?q?Fix(=E8=AE=A2=E5=8D=95):[#5293]=E5=BE=85?= =?UTF-8?q?=E4=BB=98=E6=AC=BE=E7=9A=84=E6=B4=BB=E5=8A=A8=E5=95=86=E5=93=81?= =?UTF-8?q?=EF=BC=8C=E7=82=B9=E5=87=BB=E7=AB=8B=E5=8D=B3=E4=BB=98=E6=AC=BE?= =?UTF-8?q?=E5=B9=B6=E4=BB=98=E6=AC=BE=E5=90=8E=EF=BC=8C=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E6=9C=AA=E5=87=BA=E7=8E=B0=E5=B7=B2=E8=8E=B7=E5=BE=97=E6=8A=BD?= =?UTF-8?q?=E5=A5=96=E7=A0=81=E7=9A=84=E5=BC=B9=E7=AA=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/css/style.less | 188 +++ mixins/orderPaySuccessToCheckDrawStatus.js | 72 + pages/order/MyOrder/index.vue | 56 +- pages/order/OrderSubmission/index.vue | 26 +- pagesOrder/order/OrderDetails/index.vue | 1424 +++++++++----------- 5 files changed, 921 insertions(+), 845 deletions(-) create mode 100644 mixins/orderPaySuccessToCheckDrawStatus.js diff --git a/assets/css/style.less b/assets/css/style.less index 1cf7285..a8fc99a 100644 --- a/assets/css/style.less +++ b/assets/css/style.less @@ -8231,3 +8231,191 @@ rich-text { font-size: 28rpx; } } + +.draw-ticket-mask { + position: fixed; + inset: 0; + z-index: 1000; + background: rgba(0, 0, 0, 0.45); + display: flex; + align-items: center; + justify-content: center; + padding: 24rpx; + box-sizing: border-box; +} +.draw-ticket-popup { + width: 100%; + max-width: 640rpx; + background: #fff; + border-radius: 40rpx; + padding: 50rpx 40rpx 60rpx; + position: relative; + box-sizing: border-box; + + .draw-ticket-close { + position: absolute; + top: 30rpx; + right: 30rpx; + width: 40rpx; + height: 40rpx; + border: 4rpx solid #333; + border-radius: 50%; + color: #333; + text-align: center; + font-weight: bold; + z-index: 10; + display: flex; + align-items: center; + justify-content: center; + } + + .draw-ticket-icon { + display: flex; + justify-content: center; + margin-top: 20rpx; + } + + .ticket-icon-box { + width: 100rpx; + height: 70rpx; + border-radius: 10rpx; + position: relative; + box-sizing: border-box; + } + + .ticket-icon-check { + width: 100%; + height: 100%; + } + + .draw-ticket-title { + font-size: 56rpx; + color: #222; + font-weight: 800; + text-align: center; + margin-top: 24rpx; + letter-spacing: 2rpx; + } + + .ticket-card-container { + margin-top: 50rpx; + position: relative; + display: flex; + flex-direction: column; + align-items: center; + } + + .ticket-badge { + background-color: #fff9eb; + border: 6rpx solid #111; + border-radius: 40rpx; + padding: 12rpx 40rpx; + font-size: 46rpx; + font-weight: 800; + color: #222; + position: relative; + z-index: 2; + margin-bottom: -36rpx; + letter-spacing: 2rpx; + } + + .ticket-badge-arrow { + position: absolute; + bottom: -22rpx; + left: 50%; + transform: translateX(-50%); + width: 0; + height: 0; + border-left: 22rpx solid transparent; + border-right: 22rpx solid transparent; + border-top: 22rpx solid #111; + + &::after { + content: ''; + position: absolute; + top: -26rpx; + left: -16rpx; + border-left: 16rpx solid transparent; + border-right: 16rpx solid transparent; + border-top: 16rpx solid #fff9eb; + } + } + + .ticket-card { + width: 100%; + background: #c23326; + border-radius: 36rpx; + padding: 70rpx 36rpx 40rpx; + box-sizing: border-box; + text-align: center; + position: relative; + } + + .ticket-card-subtitle { + display: flex; + justify-content: center; + } + + .ticket-card-subtitle-text { + color: #fff; + font-size: 34rpx; + font-weight: 700; + border: 2rpx solid #fff; + border-radius: 40rpx; + padding: 8rpx 50rpx; + letter-spacing: 4rpx; + } + + .ticket-card-code-box { + background: #fff; + border-radius: 20rpx; + margin-top: 36rpx; + padding: 36rpx 0; + } + + .ticket-card-code { + color: #c23326; + font-size: 72rpx; + font-weight: 800; + letter-spacing: 8rpx; + } + + .ticket-card-time { + color: #fff; + font-size: 30rpx; + margin-top: 36rpx; + text-align: left; + } + + .draw-ticket-actions { + margin-top: 60rpx; + display: flex; + justify-content: space-between; + align-items: center; + gap: 20rpx; + + .action-btn { + flex: 1; + height: 86rpx; + border-radius: 44rpx; + font-size: 32rpx; + font-weight: 600; + display: flex; + align-items: center; + justify-content: center; + box-sizing: border-box; + white-space: nowrap; + + &.home-btn { + color: #c23326; + border: 2rpx solid #c23326; + background: #fff; + } + + &.primary { + color: #fff; + background: #c23326; + } + } + } +} diff --git a/mixins/orderPaySuccessToCheckDrawStatus.js b/mixins/orderPaySuccessToCheckDrawStatus.js new file mode 100644 index 0000000..7df37a9 --- /dev/null +++ b/mixins/orderPaySuccessToCheckDrawStatus.js @@ -0,0 +1,72 @@ +import { getDrawTicketByOrder } from '@/api/lottery' +export const orderPaySuccessToCheckDrawStatus = { + data(){ + return { + drawTicketPopup: { + show: false, + ticketCode: '', + drawTime: '' + } + } + }, + methods: { + setDrawTicketPopupFromQuery(ticketData = '') { + const drawTicketData = ticketData || this.$yroute.query.drawTicketData + if (!drawTicketData) { + return + } + let result = {} + try { + result = typeof drawTicketData === 'string' ? JSON.parse(decodeURIComponent(drawTicketData)) : drawTicketData + console.log(result) + } catch (e) { + result = {} + } + const hasTicket = Number(result.hasTicket || 0) === 1 + const howPopup = Number(result.showPopup || 0) === 1 + if (!hasTicket || !howPopup) { + return + } + this.drawTicketPopup = { + show: true, + ticketCode: result.ticketCode || result.code || '', + drawTime: result.drawTime || '' + } + }, + closeDrawTicketPopup() { + this.drawTicketPopup.show = false + }, + goHomeFromPopup() { + this.drawTicketPopup.show = false + uni.switchTab({ + url: '/pages/home/index' + }) + }, + goTicketsFromPopup() { + this.drawTicketPopup.show = false + uni.navigateTo({ + url: '/pkg-video/views/county-my-tickets' + }) + }, + buildOrderDetailQuery(orderId, drawTicketResult = {}) { + return { + id: orderId, + drawTicketData: encodeURIComponent(JSON.stringify(drawTicketResult || {})) + } + }, + async afterPaySuccess(orderId, fallback) { + if (!orderId) { + fallback && fallback() + return + } + try { + const res = await getDrawTicketByOrder(orderId) + const result = (res && res.data) || {} + fallback && fallback(result) + return + } catch (e) { + } + fallback && fallback({}) + } + } +} \ No newline at end of file diff --git a/pages/order/MyOrder/index.vue b/pages/order/MyOrder/index.vue index 195a41a..8345232 100644 --- a/pages/order/MyOrder/index.vue +++ b/pages/order/MyOrder/index.vue @@ -602,6 +602,40 @@ @update:show="showDatePicker = false" @input="handleDateSelected" > + + + × + + + + + + 支付成功 + + + 恭喜获得抽奖码! + + + + + 您的专属抽奖码 + + + {{ drawTicketPopup.ticketCode }} + + 开奖时间:{{ (drawTicketPopup.drawTime) }} + + + + 返回首页 + 查看我的抽奖码 + + + diff --git a/pagesOrder/order/OrderDetails/index.vue b/pagesOrder/order/OrderDetails/index.vue index 9901dfc..a2fb978 100644 --- a/pagesOrder/order/OrderDetails/index.vue +++ b/pagesOrder/order/OrderDetails/index.vue @@ -1,599 +1,624 @@ @@ -639,6 +663,7 @@ import {cancelOrderHandle, delOrderHandle, payOrderHandle, takeOrderHandle, yueP import { pageListenMixins } from '@/mixins/pageListenMixins' // import {postCartAdd} from "@/api/store"; import settings from '@/config/baseSetting.js' +import { orderPaySuccessToCheckDrawStatus } from '@/mixins/orderPaySuccessToCheckDrawStatus.js' const STATUS = [ "待付款", @@ -662,7 +687,7 @@ export default { DataFormat, passkeyborad }, - mixins: [pageListenMixins], + mixins: [pageListenMixins, orderPaySuccessToCheckDrawStatus], data: function () { return { showMoreDeliver: false, @@ -693,14 +718,7 @@ export default { isGroup: false, key: "", loading: true, - addressEditOrderId: "", - drawTicketPopupHandled: false, - drawTicketPopup: { - show: false, - orderId: '', - ticketCode: '', - drawTime: '' - } + addressEditOrderId: "" }; }, computed: { @@ -770,36 +788,6 @@ export default { }, methods: { copyClipboard, - setDrawTicketPopupFromQuery() { - if (this.drawTicketPopupHandled) { - return - } - this.drawTicketPopupHandled = true - const drawTicketData = this.$yroute.query.drawTicketData - if (!drawTicketData) { - return - } - let result = {} - try { - result = JSON.parse(decodeURIComponent(drawTicketData)) - } catch (e) { - result = {} - } - const hasTicket = Number(result.hasTicket || 0) === 1 - const howPopup = Number(result.showPopup || 0) === 1 - if (!hasTicket || !howPopup) { - return - } - this.drawTicketPopup = { - show: true, - orderId: this.id || this.$yroute.query.id || '', - ticketCode: result.ticketCode || result.code || '', - drawTime: result.drawTime || '' - } - }, - closeDrawTicketPopup() { - this.drawTicketPopup.show = false - }, formatDrawTime(time) { if (!time) return '--' const date = new Date(String(time).replace(/-/g, '/')) @@ -811,18 +799,6 @@ export default { const mm = String(date.getMinutes()).padStart(2, '0') return `${y}年${m}月${d}日 ${hh}:${mm}` }, - goHomeFromPopup() { - this.drawTicketPopup.show = false - uni.switchTab({ - url: '/pages/home/index' - }) - }, - goTicketsFromPopup() { - this.drawTicketPopup.show = false - uni.navigateTo({ - url: '/pkg-video/views/county-my-tickets' - }) - }, getTime(type) { const timeMap = { 1:"48小时内", @@ -1121,11 +1097,15 @@ export default { }); }, async toYuePay(payPwd) { - var that = this; - //网络请求 - await yuePayOrderHandle(this.orderInfo.orderId, "yue", that.from, payPwd); - that.getDetail(); - this.payPassword = ""; + const orderId = this.orderInfo.orderId + // 网络请求 + await yuePayOrderHandle(orderId, "yue", this.from, payPwd).then(() => { + this.afterPaySuccess(orderId, (drawTicketResult) => { + this.setDrawTicketPopupFromQuery(drawTicketResult) + }) + }) + this.getDetail() + this.payPassword = "" }, pwdPopClose() { this.isShowPayPwdPop = false; @@ -1290,19 +1270,20 @@ export default { }) }, async toPay(type) { - var that = this; - console.log(type, "支付方式"); - - //余额支付需要输入支付密码 + // 余额支付需要输入支付密码 if (type == "yue") { - this.isShowPayPwdPop = true; - return; + this.isShowPayPwdPop = true + return } else { - await payOrderHandle(this.orderInfo.orderId, type, that.from); - that.getDetail(); + const orderId = this.orderInfo.orderId + // 网络请求 + await payOrderHandle(orderId, type, this.from).then(() => { + this.afterPaySuccess(orderId, (drawTicketResult) => { + this.setDrawTicketPopupFromQuery(drawTicketResult) + }) + }) + this.getDetail() } - - } } }; @@ -1560,193 +1541,4 @@ export default { align-items: center; justify-content: space-between; } - -.draw-ticket-mask { - position: fixed; - inset: 0; - z-index: 1000; - background: rgba(0, 0, 0, 0.45); - display: flex; - align-items: center; - justify-content: center; - padding: 24rpx; - box-sizing: border-box; -} - -.draw-ticket-popup { - width: 100%; - max-width: 640rpx; - background: #fff; - border-radius: 40rpx; - padding: 50rpx 40rpx 60rpx; - position: relative; - box-sizing: border-box; -} - -.draw-ticket-close { - position: absolute; - top: 30rpx; - right: 30rpx; - width: 40rpx; - height: 40rpx; - border: 4rpx solid #333; - border-radius: 50%; - color: #333; - text-align: center; - font-weight: bold; - z-index: 10; - display: flex; - align-items: center; - justify-content: center; -} - -.draw-ticket-icon { - display: flex; - justify-content: center; - margin-top: 20rpx; -} - -.ticket-icon-box { - width: 100rpx; - height: 70rpx; - border-radius: 10rpx; - position: relative; - box-sizing: border-box; -} - -.ticket-icon-check { - width: 100%; - height: 100%; -} - -.draw-ticket-title { - font-size: 56rpx; - color: #222; - font-weight: 800; - text-align: center; - margin-top: 24rpx; - letter-spacing: 2rpx; -} - -.ticket-card-container { - margin-top: 50rpx; - position: relative; - display: flex; - flex-direction: column; - align-items: center; -} - -.ticket-badge { - background-color: #fff9eb; - border: 6rpx solid #111; - border-radius: 40rpx; - padding: 12rpx 40rpx; - font-size: 46rpx; - font-weight: 800; - color: #222; - position: relative; - z-index: 2; - margin-bottom: -36rpx; - letter-spacing: 2rpx; -} - -.ticket-badge-arrow { - position: absolute; - bottom: -22rpx; - left: 50%; - transform: translateX(-50%); - width: 0; - height: 0; - border-left: 22rpx solid transparent; - border-right: 22rpx solid transparent; - border-top: 22rpx solid #111; -} - -.ticket-badge-arrow::after { - content: ''; - position: absolute; - top: -26rpx; - left: -16rpx; - border-left: 16rpx solid transparent; - border-right: 16rpx solid transparent; - border-top: 16rpx solid #fff9eb; -} - -.ticket-card { - width: 100%; - background: #c23326; - border-radius: 36rpx; - padding: 70rpx 36rpx 40rpx; - box-sizing: border-box; - text-align: center; - position: relative; -} - -.ticket-card-subtitle { - display: flex; - justify-content: center; -} - -.ticket-card-subtitle-text { - color: #fff; - font-size: 34rpx; - font-weight: 700; - border: 2rpx solid #fff; - border-radius: 40rpx; - padding: 8rpx 50rpx; - letter-spacing: 4rpx; -} - -.ticket-card-code-box { - background: #fff; - border-radius: 20rpx; - margin-top: 36rpx; - padding: 36rpx 0; -} - -.ticket-card-code { - color: #c23326; - font-size: 72rpx; - font-weight: 800; - letter-spacing: 8rpx; -} - -.ticket-card-time { - color: #fff; - font-size: 30rpx; - margin-top: 36rpx; - text-align: left; -} - -.draw-ticket-actions { - margin-top: 60rpx; - display: flex; - justify-content: space-between; - align-items: center; - gap: 20rpx; -} - -.action-btn { - flex: 1; - height: 86rpx; - border-radius: 44rpx; - font-size: 32rpx; - font-weight: 600; - display: flex; - align-items: center; - justify-content: center; - box-sizing: border-box; - white-space: nowrap; -} - -.action-btn.home-btn { - color: #c23326; - border: 2rpx solid #c23326; - background: #fff; -} - -.action-btn.primary { - color: #fff; - background: #c23326; -}