# 11 · 用户测试反馈(LAN 部署第一轮)→ 多个 UX bug ## 用户测试反馈(按问题编号) > 这是 10 那轮 commit `1956c23` 之后用户实测发现的问题汇总。 ### 问题 1:第二个人加入后依然显示 connecting **症状**:Tab A 创建房间 + 加入 P0,Tab B 刷新列表 → 点 "加入 P1" → 房间写入 + UI 切换。但 boardgame.io 的 Client 一直停在 "connecting"(socket.io 握手没完成)。 **可能根因**: - socket.io 的 CORS 配置可能和 fetch 的 CORS 不一致 - server 上 `origins` 的 RegExp 列表,socket.io 的 cors 中间件读取方式可能不同 - 或者 Tab B 的 `credentials` / `matchID` 没正确传递,导致 server `master.onSync` 失败 → 一直 reconnecting **待查**:socket.io 的 `handshake.headers.origin` 和 fetch 的 Origin 头处理方式差异。 ### 问题 2:UI 困惑 —— `Player0/1` 选择和 `p0/p1` 后缀到底是什么? **现状**: - `OnlineConfigBar` 顶部有一个 `Player:` 下拉框(值 `0` / `1`)—— 这是**老版**手动配置入口 - `LobbyRoomList` 房间列表里显示 `(你: 0)`、`加入 P0`、`加入 P1` 按钮 —— 这是**新版**按钮 - `LobbyClient.joinMatch` body 里传 `playerName: "${playerName}-${playerID}-xxxx"` —— 这里 playerName 里有 `p0/p1` 后缀 **用户困惑点**:老下拉框和新按钮同时存在,自己都不知道该用哪个。 **应该做的**: - 删掉 `OnlineConfigBar` 的 Player / Secret 输入框(旧的 workaround) - 全部走 "加入 P0 / 加入 P1" 按钮 - 显示当前在哪个房间、哪个 playerID ### 问题 3:自己创建的房间还能再次加入? **症状**:用户创建房间(自动 join P0),UI 上 "加入 P0" 按钮**仍然可见**。点击 → server 返回 409。 **根因**:用户已经在那个房间了,应该不能再点 "加入 P0"。要么隐藏按钮,要么显示"你已在房间(点此返回)"。 **现在行为**: - `canJoin0 = !m.players.find((p) => p.id === '0')?.name` —— 自己的房间 P0 已经被自己占了,应该 false - 但用户报告按钮还显示 —— 可能 `refresh()` 时机不对,或者 React state 没更新 **应该做的**: - refresh 时机:onSelect 之后立即 refresh - 显示"已在房间"的视觉指示,而不是消失按钮(消失让人困惑) ### 问题 4:点击翻牌后系统无法进行下一步 **症状**:点击"翻牌"后,pile 显示 1 张。但接下来点"收牌"或者再点"翻牌"**没反应**。 **可能根因**: - boardgame.io Client 没真正 connected(connecting 状态)→ move 走 socket.io → 失败 - 或者 move 走了但 server 端 lastWinner 是 tie → collect 不收牌(这个已经在 dev-log 09 修了) - 或者 activePlayers 配置不对,导致 player 不能调 move **应该做的**: - 显式显示 socket.io 连接状态(connected/connecting/disconnected) - disconnected 时按钮 disabled + 提示 - 翻牌后 lastWinner 是 tie 时,UI 上显示"平局!再翻一张",让用户知道为什么 collect 没反应 ### 问题 5:没有删除房间按钮 **症状**:测试中创建了奇怪的房间(多人创建的、不同账号的)堆积在列表里,没法清理。 **应该做的**: - 给"自己的房间"加"删除房间"按钮(调 `POST /games/:name/:id/leave` 或者直接 wipe) - 或者提供一个"清理所有非活跃房间"按钮(dev 用) - 注意:boardgame.io 0.50.2 没有 delete endpoint,要自己加 ## 后续修复(dev-log 11+) 按以下顺序: 1. **写文档(本文)** 2. 删 `OnlineConfigBar` 的 Player/Secret 输入框 3. `LobbyRoomList` 强化: - "你已在房间 X (P0)" 视觉指示 - 自己的房间显示"返回房间"而不是消失按钮 - 显示 socket.io 连接状态(绿色=connected、黄色=connecting、红色=disconnected) 4. 加 `POST /games/:name/:id` DELETE 端点(只允许创建者删) 5. `MillBoard` 也要支持联机模式(目前 MillOnlineView 是简化的,缺连接状态) 6. 修 activePlayers 配置问题(如有) ## 待用户验收 - 部署环境:本机 + 局域网其它机器 - 验收路径:见 10 的验证步骤 + 本文档的问题修复清单