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

85 lines
4.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 的验证步骤 + 本文档的问题修复清单