Files
huajishe-tts/docs/dev-log/11-user-test-feedback-round-1.md
e2hang d8b0f9bace docs(dev-log): 11-user-test-feedback-round-1 — 5 个未修的 UX 问题
User's LAN test feedback after 10:
1. Tab B 一直 connecting(socket.io CORS / sync 问题)
2. Player 0/1 下拉框和 p0/p1 后缀到底是什么?UI 重复入口
3. 自创房间还能再点"加入 P0"——应隐藏或显示"已在房间"
4. 翻牌后收牌/再翻牌无反应——socket.io 没真连?lastWinner tie?
5. 没删除房间按钮

待修:删老 input、强化 LobbyRoomList、加 DELETE 端点、显示连接状态。
2026-08-23 21:14:22 +08:00

4.1 KiB
Raw Permalink Blame History

11 · 用户测试反馈LAN 部署第一轮)→ 多个 UX bug

用户测试反馈(按问题编号)

这是 10 那轮 commit 1956c23 之后用户实测发现的问题汇总。

问题 1第二个人加入后依然显示 connecting

症状Tab A 创建房间 + 加入 P0Tab 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 头处理方式差异。

问题 2UI 困惑 —— 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 P0UI 上 "加入 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 没真正 connectedconnecting 状态)→ 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 的验证步骤 + 本文档的问题修复清单