功能:右侧「房间」面板显示所有房间在线人数,点击可切换房间

- ChatController 新增 roomsOnlineStatus() 接口
- GET /rooms/online-status 返回所有房间名称+Redis 实时在线人数
- 右侧面板房间列表动态渲染:当前房间高亮蓝色,有人数绿色徽标,空房间灰色
- 点击其他房间直接跳转,当前房间禁止点击并标注「当前」
- 切换到「房间」Tab 时自动触发拉取
This commit is contained in:
2026-03-03 14:46:22 +08:00
parent ad91c4420a
commit 4324633f82
4 changed files with 96 additions and 3 deletions

View File

@@ -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)
*