diff --git a/app/Http/Controllers/ChatController.php b/app/Http/Controllers/ChatController.php index 4097b40..fe03245 100644 --- a/app/Http/Controllers/ChatController.php +++ b/app/Http/Controllers/ChatController.php @@ -71,7 +71,28 @@ class ChatController extends Controller // 2. 广播 UserJoined 事件,通知房间内的其他人 broadcast(new UserJoined($id, $user->username, $userData))->toOthers(); - // 3. 获取历史消息用于初次渲染 + // 3. 管理员(superlevel)进入时:触发全房间烟花特效 + 公屏欢迎公告 + if ($user->user_level >= $superLevel) { + // 广播烟花特效给所有在线用户 + broadcast(new \App\Events\EffectBroadcast($id, 'fireworks', $user->username)); + + // 发送欢迎公告消息(使用系统公告样式) + $welcomeMsg = [ + 'id' => $this->chatState->nextMessageId($id), + 'room_id' => $id, + 'from_user' => '系统公告', + 'to_user' => '大家', + 'content' => "🎉 欢迎管理员 {$user->username} 驾临本聊天室!请各位文明聊天!", + 'is_secret' => false, + 'font_color' => '#b91c1c', + 'action' => '', + 'sent_at' => now()->toDateTimeString(), + ]; + $this->chatState->pushMessage($id, $welcomeMsg); + broadcast(new MessageSent($id, $welcomeMsg)); + } + + // 4. 获取历史消息用于初次渲染 // TODO: 可在前端通过请求另外的接口拉取历史记录,或者直接在这里 attach // 渲染主聊天框架视图 diff --git a/resources/views/chat/partials/scripts.blade.php b/resources/views/chat/partials/scripts.blade.php index a874dbc..24e716d 100644 --- a/resources/views/chat/partials/scripts.blade.php +++ b/resources/views/chat/partials/scripts.blade.php @@ -405,6 +405,13 @@ onlineUsers[u.username] = u; }); renderUserList(); + + // 管理员自己进房时,在本地播放烟花(服务端广播可能在 WS 连上前已发出) + const ctx = window.chatContext; + if (ctx && ctx.userLevel >= ctx.superLevel && typeof EffectManager !== 'undefined') { + // 延迟 800ms 确保页面渲染完成再播特效 + setTimeout(() => EffectManager.play('fireworks'), 800); + } }); window.addEventListener('chat:joining', (e) => {