diff --git a/src/components/baseLayouts/Lobby.vue b/src/components/baseLayouts/Lobby.vue index e1ab5b4..381b918 100644 --- a/src/components/baseLayouts/Lobby.vue +++ b/src/components/baseLayouts/Lobby.vue @@ -89,26 +89,33 @@ watch(activeGameId, () => { /** 首次加载 */ fetchRoomList() +// ===== SSE 实时事件订阅处理函数 ===== +/** 新房间创建 → 添加到列表头部 */ +function onRoomCreated(room: RoomItem) { + rooms.value.unshift(room) +} +/** 房间状态更新 → 局部替换 */ +function onRoomUpdated(room: RoomItem) { + const idx = rooms.value.findIndex((r) => r.id === room.id) + if (idx >= 0) { + rooms.value[idx] = room + } +} +/** 房间移除 → 从列表中删除 */ +function onRoomRemoved({ roomId }: { roomId: string }) { + rooms.value = rooms.value.filter((r) => r.id !== roomId) +} + // ===== SSE 实时事件订阅 ===== onMounted(() => { - const offs = [ - // 新房间创建 → 添加到列表头部 - sseBus.on('room_created', (room: RoomItem) => { - rooms.value.unshift(room) - }), - // 房间状态更新 → 局部替换 - sseBus.on('room_updated', (room: RoomItem) => { - const idx = rooms.value.findIndex((r) => r.id === room.id) - if (idx >= 0) { - rooms.value[idx] = room - } - }), - // 房间移除 → 从列表中删除 - sseBus.on('room_removed', ({ roomId }: { roomId: string }) => { - rooms.value = rooms.value.filter((r) => r.id !== roomId) - }) - ] - onUnmounted(() => offs.forEach((fn) => fn())) + sseBus.on('room_created', onRoomCreated) + sseBus.on('room_updated', onRoomUpdated) + sseBus.on('room_removed', onRoomRemoved) +}) +onUnmounted(() => { + sseBus.off('room_created', onRoomCreated) + sseBus.off('room_updated', onRoomUpdated) + sseBus.off('room_removed', onRoomRemoved) }) /** 筛选后的房间列表 */