diff --git a/app/Http/Controllers/ChatController.php b/app/Http/Controllers/ChatController.php index 62e3cb3..092329e 100644 --- a/app/Http/Controllers/ChatController.php +++ b/app/Http/Controllers/ChatController.php @@ -552,6 +552,31 @@ class ChatController extends Controller ]); } + /** + * 返回所有房间的在线人数,供右侧房间面板轮询使用。 + * + * 合并 rooms 数据库记录与 Redis 在线名单, + * 返回 [{ id, name, online, permit_level, door_open }] 数组。 + */ + public function roomsOnlineStatus(): JsonResponse + { + $rooms = Room::orderBy('id')->get(['id', 'room_name', 'permit_level', 'door_open']); + + $data = $rooms->map(function (Room $room) { + $onlineCount = Redis::hlen("room:{$room->id}:users"); + + return [ + 'id' => $room->id, + 'name' => $room->room_name, + 'online' => (int) $onlineCount, + 'permit_level' => $room->permit_level ?? 0, + 'door_open' => (bool) $room->door_open, + ]; + }); + + return response()->json(['rooms' => $data]); + } + /** * 离开房间 (等同于原版 LEAVE.ASP) * diff --git a/resources/views/chat/partials/right-panel.blade.php b/resources/views/chat/partials/right-panel.blade.php index 1333d50..d99809a 100644 --- a/resources/views/chat/partials/right-panel.blade.php +++ b/resources/views/chat/partials/right-panel.blade.php @@ -55,8 +55,15 @@ {{-- 房间列表面板 --}}