修复礼包红包弹窗状态提示异常

This commit is contained in:
pllx
2026-04-30 16:27:37 +08:00
parent ee525f049e
commit ffd8789e67
+24 -13
View File
@@ -27,6 +27,24 @@ function byId(id) {
return document.getElementById(id);
}
/**
* 更新红包弹窗状态提示,兼容状态提示区域被移除的简化弹窗。
*
* @param {string} message 状态文案
* @param {string} color 状态颜色
* @returns {void}
*/
function setRedPacketStatus(message, color) {
const status = byId("rp-status-msg");
if (!status) {
return;
}
status.textContent = message;
status.style.color = color;
}
/**
* 重置礼包按钮状态。
*
@@ -317,7 +335,7 @@ function renderRedPacketModal(payload) {
byId("rp-remaining").textContent = payload.remainingCount;
byId("rp-countdown").textContent = payload.expireSeconds;
byId("rp-timer-bar").style.width = "100%";
byId("rp-status-msg").textContent = "";
setRedPacketStatus("", "#16a34a");
const emoji = modal.querySelector(".rp-emoji");
if (emoji) {
@@ -359,9 +377,7 @@ function startRedPacketTimer() {
claimButton.disabled = true;
claimButton.textContent = "礼包已过期";
const status = byId("rp-status-msg");
status.style.color = "#9ca3af";
status.textContent = "红包已过期,即将关闭…";
setRedPacketStatus("红包已过期,即将关闭…", "#9ca3af");
setTimeout(() => closeRedPacketModal(), 3000);
}
@@ -477,9 +493,7 @@ export async function claimRedPacket() {
const data = await response.json();
handleClaimResponse(response, data, button);
} catch (error) {
const status = byId("rp-status-msg");
status.textContent = "网络异常,请重试";
status.style.color = "#dc2626";
setRedPacketStatus("网络异常,请重试", "#dc2626");
button.disabled = false;
button.textContent = "🧧 立即抢红包";
}
@@ -494,14 +508,12 @@ export async function claimRedPacket() {
* @returns {void}
*/
function handleClaimResponse(response, data, button) {
const status = byId("rp-status-msg");
const typeLabel = redPacketType === "exp" ? "经验" : "金币";
if (response.ok && data.status === "success") {
redPacketClaimed = true;
button.textContent = "🎉 已抢到!";
status.style.color = "#16a34a";
status.textContent = `恭喜!您抢到了 ${data.amount} ${typeLabel}`;
setRedPacketStatus(`恭喜!您抢到了 ${data.amount} ${typeLabel}`, "#16a34a");
const remaining = byId("rp-remaining");
if (remaining && typeof data.remaining_count === "number") {
@@ -516,12 +528,11 @@ function handleClaimResponse(response, data, button) {
duration: 8000,
});
setTimeout(() => closeRedPacketModal(), 3000);
closeRedPacketModal();
return;
}
status.style.color = "#dc2626";
status.textContent = data.message || "抢包失败";
setRedPacketStatus(data.message || "抢包失败", "#dc2626");
updateClaimButtonAfterFailure(button, data.message || "");
}