feat:支持再来一次的按钮

This commit is contained in:
tsui110 2026-01-02 20:07:24 +08:00
parent b959e634d2
commit ac497ce163
2 changed files with 95 additions and 6 deletions

View File

@ -54,7 +54,21 @@
<!-- 底部按钮 --> <!-- 底部按钮 -->
<view class="action-area"> <view class="action-area">
<view class="claim-btn" @tap="handleClose"> <!-- 如果使用次数卡显示"再来一次"按钮 -->
<view v-if="showRetryButton" class="retry-buttons">
<view class="retry-btn" @tap="handleRetry">
<view class="btn-glow"></view>
<view class="btn-inner">
<text class="btn-icon">🔄</text>
<text class="btn-text">再来一次</text>
</view>
</view>
<view class="secondary-btn" @tap="handleClose">
<text class="btn-text">知道了</text>
</view>
</view>
<!-- 普通情况显示单个按钮 -->
<view v-else class="claim-btn" @tap="handleClose">
<view class="btn-glow"></view> <view class="btn-glow"></view>
<view class="btn-inner"> <view class="btn-inner">
<text class="btn-icon"></text> <text class="btn-icon"></text>
@ -71,10 +85,11 @@ import { computed } from 'vue'
const props = defineProps({ const props = defineProps({
visible: { type: Boolean, default: false }, visible: { type: Boolean, default: false },
results: { type: Array, default: () => [] } results: { type: Array, default: () => [] },
showRetryButton: { type: Boolean, default: false } // ""
}) })
const emit = defineEmits(['update:visible', 'close']) const emit = defineEmits(['update:visible', 'close', 'retry'])
function cleanUrl(u) { function cleanUrl(u) {
if (!u) return '/static/logo.png' if (!u) return '/static/logo.png'
@ -147,6 +162,11 @@ function handleClose() {
emit('close') emit('close')
} }
function handleRetry() {
emit('update:visible', false)
emit('retry')
}
function previewImage(url) { function previewImage(url) {
if (url) uni.previewImage({ urls: [url], current: url }) if (url) uni.previewImage({ urls: [url], current: url })
} }
@ -373,12 +393,54 @@ function previewImage(url) {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
&:active .btn-inner { &:active .btn-inner {
transform: scale(0.96); transform: scale(0.96);
} }
} }
.retry-buttons {
display: flex;
gap: 16rpx;
width: 100%;
}
.retry-btn {
position: relative;
flex: 2;
height: 110rpx;
display: flex;
align-items: center;
justify-content: center;
&:active .btn-inner {
transform: scale(0.96);
}
}
.secondary-btn {
flex: 1;
height: 110rpx;
background: rgba(255, 255, 255, 0.2);
border: 2rpx solid rgba(255, 255, 255, 0.3);
border-radius: 55rpx;
display: flex;
align-items: center;
justify-content: center;
&:active {
background: rgba(255, 255, 255, 0.3);
transform: scale(0.96);
}
.btn-text {
font-size: 30rpx;
font-weight: 700;
color: #fff;
text-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.2);
}
}
.btn-glow { .btn-glow {
position: absolute; position: absolute;
inset: 0; inset: 0;

View File

@ -60,7 +60,9 @@
<LotteryResultPopup <LotteryResultPopup
v-model:visible="showResultPopup" v-model:visible="showResultPopup"
:results="drawResults" :results="drawResults"
:show-retry-button="lastDrawUsedGamePass"
@close="onResultClose" @close="onResultClose"
@retry="onRetryDraw"
/> />
<PaymentPopup <PaymentPopup
@ -175,6 +177,8 @@ const drawLoading = ref(false)
const showDrawLoading = ref(false) const showDrawLoading = ref(false)
const drawProgress = ref(0) const drawProgress = ref(0)
const drawTotal = ref(1) const drawTotal = ref(1)
const lastDrawUsedGamePass = ref(false) // 使
const lastDrawCount = ref(1) //
// //
const paymentVisible = ref(false) const paymentVisible = ref(false)
@ -223,6 +227,24 @@ function onResultClose() {
drawResults.value = [] drawResults.value = []
} }
function onRetryDraw() {
//
showResultPopup.value = false
drawResults.value = []
//
if (gamePassRemaining.value > 0) {
// 使
useGamePassFlag.value = true
selectedCoupon.value = null
selectedCard.value = null
onMachineDraw(lastDrawCount.value)
} else {
//
openPayment(lastDrawCount.value)
}
}
function openPayment(count) { function openPayment(count) {
const times = Math.max(1, Number(count || 1)) const times = Math.max(1, Number(count || 1))
pendingCount.value = times pendingCount.value = times
@ -419,10 +441,15 @@ async function onMachineDraw(count) {
// //
showDrawLoading.value = false showDrawLoading.value = false
const items = mapResultsToFlipItems(resultRes, currentIssueRewards.value) const items = mapResultsToFlipItems(resultRes, currentIssueRewards.value)
drawResults.value = items drawResults.value = items
// 使""
lastDrawUsedGamePass.value = useGamePassFlag.value
lastDrawCount.value = times
showResultPopup.value = true showResultPopup.value = true
} catch (e) { } catch (e) {
showDrawLoading.value = false showDrawLoading.value = false