From ffd8789e678b9db9514223adf8d2034fa3969fc7 Mon Sep 17 00:00:00 2001 From: pllx Date: Thu, 30 Apr 2026 16:27:37 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=A4=BC=E5=8C=85=E7=BA=A2?= =?UTF-8?q?=E5=8C=85=E5=BC=B9=E7=AA=97=E7=8A=B6=E6=80=81=E6=8F=90=E7=A4=BA?= =?UTF-8?q?=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/js/chat-room/red-packet-panel.js | 37 ++++++++++++++-------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/resources/js/chat-room/red-packet-panel.js b/resources/js/chat-room/red-packet-panel.js index a20930d..d595e8c 100644 --- a/resources/js/chat-room/red-packet-panel.js +++ b/resources/js/chat-room/red-packet-panel.js @@ -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 || ""); }