diff --git a/app/Http/Controllers/IdiomQuizController.php b/app/Http/Controllers/IdiomQuizController.php index 5f3c2b6..b80f4be 100644 --- a/app/Http/Controllers/IdiomQuizController.php +++ b/app/Http/Controllers/IdiomQuizController.php @@ -197,7 +197,7 @@ class IdiomQuizController extends Controller $user->save(); } - // 广播结果 + // 广播结果(前端通过 IdiomGameAnswered 事件做分屏显示) broadcast(new IdiomGameAnswered( roomId: $roomId, roundId: $round->id, @@ -207,7 +207,7 @@ class IdiomQuizController extends Controller rewardExp: $round->reward_exp, )); - // 推 MessageSent 系统通知 + // 存聊天记录(不广播,避免重复显示) $resultMsg = [ 'id' => $this->chatState->nextMessageId($roomId), 'room_id' => $roomId, @@ -220,7 +220,6 @@ class IdiomQuizController extends Controller 'sent_at' => now()->toDateTimeString(), ]; $this->chatState->pushMessage($roomId, $resultMsg); - broadcast(new \App\Events\MessageSent($roomId, $resultMsg)); \Illuminate\Support\Facades\Redis::del($lockKey); diff --git a/resources/js/chat-room/idiom-quiz.js b/resources/js/chat-room/idiom-quiz.js index b8dd3f2..97d7949 100644 --- a/resources/js/chat-room/idiom-quiz.js +++ b/resources/js/chat-room/idiom-quiz.js @@ -38,7 +38,9 @@ function handleIdiomGameAnswered(e) { answerModal.style.display = "none"; } - // ── 全局文字提示:在聊天窗口中追加结果消息 ── + // ── 分屏文字提示 ── + // 回答者 → 包厢(chat-messages-container2) + // 其他人 → 公屏(chat-messages-container) const now = new Date(); const timeStr = now.getHours().toString().padStart(2, "0") + ":" + now.getMinutes().toString().padStart(2, "0") + ":" + @@ -48,13 +50,24 @@ function handleIdiomGameAnswered(e) { div.className = "msg-line"; div.innerHTML = `🎉 恭喜 ${winner_username} 率先答对成语「${answer}」,获得 ${reward_gold} 金币、${reward_exp} 经验!(${timeStr})`; - const say1 = document.getElementById("chat-messages-container"); - if (say1) { - say1.appendChild(div); - say1.scrollTop = say1.scrollHeight; + const isWinner = winner_username === (window.chatContext?.username || ""); + if (isWinner) { + // 回答者 → 包厢 + const say2 = document.getElementById("chat-messages-container2"); + if (say2) { + say2.appendChild(div.cloneNode(true)); + say2.scrollTop = say2.scrollHeight; + } + } else { + // 其他人 → 公屏 + const say1 = document.getElementById("chat-messages-container"); + if (say1) { + say1.appendChild(div); + say1.scrollTop = say1.scrollHeight; + } } - // ── Toast 通知(所有在线用户都能看到) ── + // ── Toast 通知(所有用户都能看到) ── window.chatToast?.show({ title: "🧩 猜成语", message: `${winner_username} 答对了「${answer}」,获得 ${reward_gold}💰 + ${reward_exp}⭐!`,