# 万语智教 · Web 与 App 使用测试手册

> 版本：2026-10-28 · 固定代码基准 `ea9c2cd` · 内部测试版，不是正式商用说明书。
>
> 本手册回答：从哪里进入、用什么账号、每一步点什么、应看到什么、哪里尚未完成。

## 01 · 先读这六件事

1. **后台现在不需要 TOTP。** 本基准的迁移 024 已移除管理员 MFA；本次只读检查线上数据库已无相关字段，线上登录页也是邮箱＋密码。此前聊天中“必须配置 TOTP”的说明不再适用于此版本。
2. **预约课可以用测试支付，不是真实扣款。** 首尔环境 `PAYMENT_SANDBOX=enabled`。只走明确标注为测试的页面；不要输入真实银行卡或支付账号。
3. **可以进入课堂，但不能真实视频通话。** 当前 `RTC_SANDBOX=enabled`，可测试租约、白板、课件和文字互动；TRTC、录制及回放未接入。
4. **付费数字内容购买尚未实现。** 资源/课程/试卷“发布成功”不等于可以买；免费领取与授权访问可另行测试。
5. **旧安装包不是本基准版本。** 先前生成的 Android APK 和未签名 iOS IPA 基于旧提交 `9d0936b`；必须重新构建才能验收本手册中的新版 App 行为。未签名 IPA 不能直接安装 iPhone。
6. **不要把接口演练当作 UI 验收。** 仓库已有接口演练证据；本次没有替你在三端执行所有按钮、资金、审核或账号操作。以下步骤是供你逐项执行的验收方案。

### 状态图例

| 标记 | 含义 | 你应该如何测试 |
| --- | --- | --- |
| 已实现／有演练证据 | 已有代码，仓库记录真实测试环境 API 演练成功 | 仍需执行 Web/App UI 步骤，核对状态及持久化 |
| 已实现／待手测 | 有实现及部分自动化证据，没有本次完整 UI 验收 | 按步骤测试，出现失败就登记，不算已验收 |
| 部分完成 | 仅支持特定范围，或依赖测试替身 | 只验收已明确支持的部分 |
| 未实现／未开放 | 没有对应业务能力或入口被门禁禁用 | 记录为不支持，不反复点击或寻找隐藏开关 |
| 前置阻塞 | 权限、版本、数据、时间、第二账号等未准备 | 先解除前置条件，不能误报产品失败 |

## 02 · 入口、账号与测试材料

| 使用者 | 入口 | 登录方式 | 注意 |
| --- | --- | --- | --- |
| 学生 | Android/iOS App | 邮箱验证码 | 没有独立学生 Web 业务端；不要把教师站当学生站 |
| 教师 | [教师 Web](https://wanyu-teacher.yangsd.de/)；App 切换教师身份 | 邮箱验证码 | 切换身份不等于获得教师审核资格 |
| 运营管理员 | [运营后台](https://wanyu-admin.yangsd.de/) | 管理员邮箱＋密码 | 当前不需要 TOTP |
| 测试邮件查看者 | [Mailpit](https://wanyu-mail.yangsd.de/) | 独立的 HTTP Basic 认证 | 验证码通常在测试邮箱，不一定发到真实 Gmail |
| 技术人员 | [API 就绪检查](https://wanyu-api.yangsd.de/health/ready) | 无业务账号 | 返回 ready 不能证明整条业务链已通过 |

**现有管理员**：`willdonner4@gmail.com`，使用此前设置的密码。手册不收录密码、验证码、TOTP 密钥、SSH 密码或数据库凭据。

**当前权限前置阻塞**：2026-10-28 只读核查，该账号保留 `super_admin`，但新目录发布后缺少 `compensation.read`、`compensation.write`、`evidence.access`、`reconciliation.execute` 四项权限。教师报酬、原件查看和渠道对账相关测试可能失败。本次没有修改授权。项目没有“角色名为 super_admin 就自动绕过所有权限”的机制；需要授权维护者补齐。当前数据库登记 41 项权限；不要用旧的“37 项”作为验收总数。

### 测试前准备清单

- 准备三个彼此不同的业务身份：学生 S、教师 T、管理员 A；测试资金流程还需要第二管理员 B，不能用 A 的另一窗口冒充 B。
- 学生/教师使用你控制的测试邮箱。测试环境可使用专门测试地址，但真实邮箱收不到验证码时先查 Mailpit，不连续轰炸发送。
- Mailpit 账号与密码需要单独取得；它不是运营后台管理员密码。没有 Mailpit 访问条件时，学生/教师登录测试标记为“环境阻塞”。
- 使用无痕窗口或独立浏览器配置隔离教师和管理员会话；学生 App 使用另一台设备或模拟器。先把账号时区统一为 `Asia/Shanghai`。
- 准备不含个人敏感信息的小 PNG、PDF、原创练习题及测试回单。所有对象名称以 `UAT-20261028-` 开头；不要上传真实身份证、银行资料或受限教材。
- 准备两节不同的预约：预约 A 用于课堂及结算；预约 B 用于取消与退款。不要取消即将上课的 A。
- 时间采用界面显示的账号时区；记录时同时写日期、时区和 UTC 偏移。金额核对币种，不只比较数字。
- App 先核对构建提交。旧 APK 位于 `build/mobile-release/`，虽然能安装测试，但不能冒充 `ea9c2cd` 新版；iOS 需另行签名或使用已配置的开发运行方式。

### 推荐测试节奏

| 阶段 | 建议安排 | 退出条件 |
| --- | --- | --- |
| 第一天早上 | 登录、教师入驻、审核、服务、报酬、排期 | 有一节已发布且可约的测试服务 |
| 第一天随后 | 学生学习、免费资源、练习考试、预约 A/B、测试支付、改期、退款 | 预约 A 确认；B 退款有明确结果 |
| 第二天约定时间 | 设备检查、双方入室、白板课件聊天、课后核验、评价 | 预约 A 完成、评价与课后记录可查 |
| 观察期后 | 收款资料、应付、制单、另一管理员复核与登记 | 教师收益显示已付，付款凭据可追溯 |

**不能在正常 UI 中把几天流程压缩成几分钟。** 当前约课有至少提前 24 小时的约束；课堂在开课前 15 分钟开放；应付有观察期。仓库演练脚本通过修改测试库时间戳跳过等待，这是技术测试，不是用户操作，也不是本手册要求你在数据库里改时间。

## 03 · 看图认识三端

### 实际线上登录页

![教师 Web 实际登录页](assets/live-teacher-login.png)

图 1｜2026-10-28 实际线上教师登录页。邮箱验证码登录；未提交登录请求。

![后台实际登录页](assets/live-admin-login.png)

图 2｜2026-10-28 实际线上后台登录页。当前是邮箱和密码，没有 TOTP 步骤。

### Web 界面定位图：视觉夹具，不是业务实测截图

![教师工作台视觉夹具](assets/fixture-UI20.png)

图 3｜既有视觉验收截图 UI20（2026-10-27 UTC 归档）。用于识别侧栏、课表和快捷操作；“林老师、Alex、课时、金额、日期”均为夹具示例，不代表你的账号或实时数据。`?visual=1` 仅是开发视觉夹具，不能用于业务验收。

![后台教师审核视觉夹具](assets/fixture-UI26.png)

图 4｜既有视觉夹具 UI26：左侧进入教师管理，中间列表选择记录，右侧核对材料及结论。以线上实际字段为准。

![后台概览视觉夹具](assets/fixture-UI49.png)

图 5｜既有视觉夹具 UI49：识别后台十个模块。示例统计不应作为实际数据核对依据。

### App 设计参考图：不是 App 真机截图

![App 学习、找老师和资源站设计参考](assets/design-app-home.png)

图 6｜设计板 00。学生底部五项是“学习、找老师、资源站、课表、我的”；教师身份是“工作台、课表、消息、收益、我的”。App 仍未完成逐屏视觉和真机验收，实际布局可能不同。

![App 预约设计参考](assets/design-app-booking.png)

图 7｜设计板 08，用于理解“教师详情 → 服务 → 日期 → 时段 → 确认”的操作顺序；图中日期、价格和按钮状态仅为设计示例。

## 04 · 全业务流程地图

**教师准备链**：验证码登录 → 完善资料 → 上传证明 → 提交入驻 → 后台审核 → 创建服务 → 提交上架 → 后台配置报酬并批准 → 设置可约时间。

**学生履约链**：验证码登录 → 找老师 → 选服务与时段 → 占位/待支付订单 → 测试支付 → 预约已确认 → 课前检查 → 双方进入课堂 → 白板/文字/课件 → 下课待核验 → 后台裁定 → 完课 → 评价。

**退款分支**：另一节已支付预约 → 合规取消/退款申请 → 后台审批 → worker 发起渠道退款 → 订单退款完成。取消成功 ≠ 退款到账。

**教师收款链**：添加收款资料 → 后台受控查看并审核 → 完课产生应付 → 等待观察期 → 制单 A → 复核 B → 执行/线下付款 → B 登记回单 → 教师收益已付。登记“已付”不代表系统已经转账。

**学习链**：免费领取或已授权内容 → 我的学习/资源 → 阅读或受支持的内容 → 练习/考试 → 解析、错题、收藏 → 学习报告。付费数字购买与视频课目前断开。

## 05 · 账号登录与基础检查

### A01 · 管理员登录【已实现／待本次 UI 手测】

1. 打开运营后台，确认不是带 `?visual=1` 的开发夹具。
2. 输入 `willdonner4@gmail.com` 和已设置密码，点击“登录”。
3. 应进入概览并显示当前账号可访问的菜单；此版本不应再要求动态验证码。
4. 刷新页面，确认仍能读取账号及权限；检查“系统设置 → 角色权限”。
5. 若 401，先核对密码；若进入后某模块 403，记录权限码及请求编号，不当作密码错误。不要在手册或截图中记录密码。

**通过标准**：真实登录成功、刷新成功、菜单依据真实权限呈现。**阻塞项**：前述四项新权限尚未补齐。

### A02 · 学生 App 登录【已实现／待手测】

1. 打开最新 App → 底部“我的” → 登录。
2. 输入学生测试邮箱，点击“发送验证码”。
3. 在 Mailpit 搜索收件人邮箱，选择此次发送时间之后的邮件，读取 6 位验证码；不要用历史邮件。
4. 返回 App 输入验证码并登录。首次登录会创建普通用户，不需要管理员预先创建学生。
5. 在“设置”填写时区、语言及学习目标，保存后退出页面再进入，确认持久化。
6. 完全关闭再打开 App，检查登录恢复；更换账号后不能看到前一个学生的订单、草稿或下载内容。

**通过标准**：邮箱与用户身份一致，私有数据隔离。验证码过期/无效应有明确错误；同一验证码不能重复消费。

### A03 · 教师登录与身份切换【已实现／待手测】

1. 在独立浏览器窗口打开教师 Web，输入教师 T 的邮箱。
2. 发送验证码 → Mailpit 取码 → 完成登录。
3. App 使用相同教师邮箱登录，“我的”中选择切换教师身份。
4. 对照教师 Web 与 App 的名称、审核状态、课表及消息，确认是同一账号。
5. 新账号未审核时出现“未申请/待完善”是正常状态；不能仅切换身份就授课。

**通过标准**：Web/App 同账号资料一致，不越权获得教师资格。

## 06 · 教师入驻、上架与排期

### T01 · 完善教师资料【已实现／API 演练证据】

1. 教师 Web →“设置”中的个人资料/教学资质；或 App 教师“我的 → 个人简介/审核与准入”。
2. 未建立资料时点击创建资料，填写姓名/显示名、授课语言、简介、教学特点等当前表单要求。
3. 保存后返回并重新打开，逐项核对。
4. 提交前若显示“资料有未保存修改”，先保存；两个设备同时编辑时，版本冲突应要求重新读取，不覆盖另一端内容。

**通过标准**：资料持久化，状态从未申请转为草稿/待完善；尚不能公开当作审核通过教师。

### T02 · 上传材料并提交申请【已实现／API 演练证据】

1. 在审核与准入中上传测试身份证明、资格证明；仅用不含真实个人信息的测试样本。
2. 等待文件完成上传及完整性/类型检查，核对文件列表；处理中不是已审核。
3. 选取本次材料，提交入驻申请。
4. 应变为“审核中/submitted”；保存申请对应账号、时间和材料名称。
5. 另一教师账号不能查看这些私有证明原件。

**边界**：当前本地磁盘存储，执行 SHA-256 与真实文件类型校验，**没有病毒扫描**；不要用恶意文件测试。“文件 ready”不等于资质已批准。

### T03 · 后台审核教师【已实现／API 演练证据；原件权限可能阻塞】

1. 管理员 →“教师管理”，按教师姓名或审核中状态定位 T。
2. 选择该记录，核对简介、语言、提交材料及每项处理状态。
3. 需要查看原件时填写访问理由；当前账号缺 `evidence.access` 时先记权限阻塞，不能盲审。
4. 输入明确审核理由，选择通过或驳回并确认。
5. 教师端刷新，核对状态变为已通过/未通过；查看审核历史和消息。
6. 可先做一次驳回→教师修改→重提→批准，验证完整反馈环路。

**通过标准**：双方状态一致、理由可追溯；材料尚未可用时不错误批准。

### T04 · 创建课程服务【已实现／API 演练证据】

1. 教师 Web →“设置 → 课程服务”或快捷操作；备用直达 `/services`。App →教师“我的 → 课程服务设置”。
2. 新建 `UAT-20261028-中文会话`，例如 50 分钟、课间 10 分钟、售价 CNY 120；这些是测试输入，不是现有固定价格。
3. 保存草稿，重新打开确认标题、时长、币种和价格。
4. 点击提交审核，填写理由，应变为 submitted。
5. 保存中/结果未知时只“重试原请求”，不要连续新建重复服务；想离开有修改页面时应提示确认。

### T05 · 配置报酬并批准服务【已实现／API 演练证据；当前报酬权限阻塞】

1. 后台教师管理中的课程服务审核入口，或服务审核列表，定位上述服务。
2. 读取服务版本和报酬配置；确认两者版本一致后，设置例如教师报酬 CNY 80/节，并写配置依据。
3. 先保存报酬，再重新读取服务；确认售价、报酬币种均启用。
4. 填写上架审核理由，点击批准。
5. 教师端显示已发布；学生“找老师”能够找到教师及该服务。

**当前账号注意**：缺 `compensation.read/write`，先完成权限维护再测试。不要将“能审核教师”误认为“能配置教师报酬”。

### T06 · 设置可约时间【已实现／API 演练证据】

1. 教师 Web →“设置可约时间”（`/availability`）；App →教师“我的 → 可约时间”。
2. 设置 `Asia/Shanghai`，填写生效日期、每周工作日及时间段，例如每天 09:00–21:00。
3. 保存并重新读取；添加一天例外休息日，确认该日不可预约。
4. 学生选择未来至少 24 小时之后日期查看时段。无时段时先核对审核、服务发布、规则日期、时区、已有占用，不能只反复刷新。

**通过标准**：学生看到的是有效可约时段，已占位/已确认时段不会重复卖出。所有时间以服务器返回和当前规则为准。

## 07 · 学生预约、支付、改期与退款

### S01 · 浏览和搜索【已实现／待手测】

1. App“找老师”，浏览公开审核教师；输入姓名、课程相关关键词，调整支持的筛选项。
2. 打开教师详情，查看介绍、语言、评价、服务时长、价格与可约时间。
3. 进入“学习 → 课程目录”和“资源站”，核对列表、详情、分页、空状态。
4. 搜索不存在的名称应显示空结果，而不是样例数据。设计图上的“林老师、128 条评价”不保证是真实环境记录。

### S02 · 预约 A 并完成测试支付【已实现／API 演练证据】

1. 选定 T 的已发布服务，选取至少未来 24 小时后的时段。
2. 确认日期、时区、教师、时长、币种、金额与取消规则，点击预约确认。
3. 应生成“占位中/held”预约和待支付订单，显示服务器截止时间；截图记录订单号和预约号。
4. 点击“去支付”，选择当前提供的测试渠道，外部浏览器打开测试收银页。
5. **仅确认测试支付**；返回 App，等待刷新或手动读取状态。
6. 预约应变为 confirmed，订单支付 paid、履约 fulfilled；教师课表应出现同一学生和时间。
7. 若网络中断，先从“我的 → 订单售后”和课表读取事实，不要立即重复付另一笔。

**通过标准**：学生订单、学生课表、教师 Web/App 三处一致。只看到支付网页“成功”不够。当前不支持真实商户支付。

### S03 · 占位超时【已实现／待手测】

1. 再选择另一个时段生成待支付预约，不支付。
2. 等界面倒计时与服务器截止时间过去，让 worker 完成处理。
3. 刷新应显示 expired/已过期，相应时段应释放。
4. 不测试过期链接真实扣款。支付晚到、paid_unfulfilled 的边界仍应由专项测试核对，不算正常付款通过。

### S04 · 改期【已实现／待手测】

1. 使用已确认、仍满足至少开课前 24 小时规则的预约，打开“课表 → 预约详情 → 改期”。
2. 选新时间，填写理由并提交。
3. 对方登录查看待处理请求，在同意前原预约时间仍应保留。
4. 教师 Web 工作台待处理请求/课表，或教师 App 课表，选择同意。
5. 双方刷新，确认新时间生效、原时段释放；请求状态为 accepted。
6. 用另一节测试拒绝/申请人撤销，确认不会错误改动原课表。临近开课被要求联系客服是规则结果，不是必然缺陷。

### S05 · 预约 B 取消并退款【已实现／API 演练证据】

1. 单独预约并测试支付 B，确保距离开课至少 24 个实际小时。
2. 学生“课表 → B 详情 → 取消”，核对取消规则并填写理由确认。
3. 预约应 cancelled；订单售后应出现退款申请，但此时不能宣称退款到账。
4. 后台“交易财务 → 退款拒付”或订单退款详情，定位同一订单和退款号。
5. 审核员核对可退金额、币种、原因，填写审批理由并批准。
6. 等 worker 经测试渠道处理，刷新看到退款成功，订单退款状态 full（全退）或对应部分退款结果。
7. 学生返回“订单售后”核对相同事实；重复刷新不得产生第二次退款。

**边界**：仅是测试渠道退款，不是真实银行卡退款；低于 24 小时取消应走客服/争议流程。部分退款、数字权益撤销与退款分摊需要另做专项验收，不能从一次全额退款外推通过。

## 08 · 课堂、完课、评价

### C01 · 课前设备检测【部分完成】

1. 开课当天在教师 Web 课表或 App 预约详情找到 A。
2. 进入课前检查，逐项测试摄像头预览、麦克风输入、扬声器播放及网络提示。
3. 按需授予本次摄像头/麦克风权限；拒绝权限时应出现明确说明，不能崩溃。
4. 设备预览成功仅证明本机硬件可用，不证明双方音视频连通。

**视觉缺口**：现有 Web 设备页仍偏通用检测，尚未完整还原绑定预约信息的设计页。

### C02 · 双方进入课堂【部分完成／API 演练证据】

1. 到开课前 15 分钟内，学生 App 与教师 Web 分别打开 A 的“进入课堂”。
2. 提前过早时应提示课堂未开放；已取消/过期预约不应可进。
3. 双方入室，界面应明确显示测试环境、音视频未接入。
4. 两端各发送一句不同的测试消息，确认对方收到；教师画一条白板笔迹，学生端查看同步。
5. 教师切换已 ready 的课件/页面，学生核对当前页；按当前角色允许的工具操作，不要求未授权学生能控制教师课件。
6. 短暂断网后恢复，观察重连、同步状态和是否出现重复消息；“待同步”不能当作已送达。
7. 保持十余分钟，检查每约 5 分钟续期，不因原 10 分钟租约过期无故掉线。

**不支持**：真实音视频、腾讯 SDK、录制/回放；同角色另一设备强制接管尚未开放。用第二设备占用同一身份，预期拒绝/提示占用，不要求踢出旧设备。

### C03 · 下课与后台裁定【已实现／API 演练证据；手动结束未实现】

1. 到课程计划结束后退出界面；不要把关闭页面当作业务完课。
2. 课程结束约 5 分钟后，等待 worker 将缺少认证 RTC 证据的课程转入 pending_review/待核验。
3. 后台“预约课堂”按预约号查 A，核对时间、事件与双方记录。
4. 在完课评估/裁定中上传测试证据，等 ready，填写结论、学生退款金额、教师应付金额和明确理由。
5. 选择符合事实的正常完课结论并确认；禁止为通过测试伪造真实业务证据。
6. 双方刷新应显示 completed，后续应付以裁定及规则为准。

**已知边界**：`POST /classrooms/{id}/end` 和在线 presence 接口尚未实现；即使出现类似“结束课堂”的视觉控件，也不能认为存在完整手动结束流程。不能修改生产时间来加速。

### C04 · 课后小结与评价【已实现／评价有 API 演练证据】

1. 教师 Web“授课记录”或 App 教师“我的/授课记录”找到 A。
2. 查看详情，填写课后小结，按页面选择是否发布；保存后重开核对。
3. 学生在已完成预约详情查看已发布小结，按入口提交 1–5 星评价与文字。
4. 刷新教师评价及预约详情核对；重复提交应按规则拒绝或保持原记录，不能增加重复评价。
5. 取消或未完成课不得伪装成已完课评价入口。

## 09 · 教师课件、资源与结算

### T07 · 课件上传与使用【已实现／API 演练证据】

1. 教师 Web“课件库 → 上传课件”，或 App 教师工作台/课件入口。
2. 上传受界面允许格式和大小限制的测试 PNG/PDF，等待完整性验证和转换。
3. 状态 ready 后核对文件名称、页数、版本和缩略页。
4. 打开课件关联入口，关联到指定预约；重新进入课堂确认可选择和翻页。
5. 上传失败时显示失败及重试信息，不应显示虚假的页数或直接 ready。

### T08 · 收款资料审核【已实现／API 演练证据】

1. 教师 Web `/payout-accounts` 或 App 教师“我的 → 收款资料”，新增虚构测试收款资料。
2. 选择与应付一致的币种，核对持有人、银行及账号，提交。
3. 后台进入收款账号审核，先用受控查看填写理由，再核验完整资料并批准。
4. 教师端显示 verified/已核验，列表按规则脱敏；完整账号查看应产生审计。

**注意**：不能使用真实账户做模拟出款；收款资料核验通过不代表已打款。

### T09 · 教师应付与付款【部分完成／线下登记；API 演练证据】

1. 后台“交易财务 → 教师应付”定位 A；教师“收益”查看对应金额、币种、冻结状态。
2. 等待观察期后状态变为 eligible/可付；本手册不要求修改数据库。演练脚本曾跳过约 7 天等待，正常用户测试需等待或申请专用演练。
3. 管理员 A 选择符合条件应付，创建付款单，核对教师、币种、已核验收款账号及金额，填写理由。
4. **另一名管理员 B** 登录付款审批工作台，读取最新版本，复核并批准，然后开始执行。
5. 当前没有自动银行出款。仅在确有对应测试/线下结果时登记付款结果，填写执行号、付款参考号、测试回单及理由。
6. 刷新后台及教师收益，核对 paid/已付及凭据；重复登记不得重复累加收益。

**必要限制**：同一人制单和复核被拒绝属于安全控制正常结果，超级管理员不应绕过。不要为赶测试把未付款的真实业务登记成已付。已付款争议复核接口仍未实现。

## 10 · 学习、资源、练习、考试

### L01 · 免费资源领取和阅读【已实现／待手测】

1. App“资源站”打开已发布免费资源，查看版本、授权范围、文件格式、是否允许下载。
2. 免费领取，进入“我的 → 我的资源”，应出现当前账号有效授权。
3. 打开 PDF/图片受支持阅读器，翻页，返回重开核对本机位置。
4. 如果授权允许下载，进入下载页测试暂停、恢复、取消；退出账号后不得继续用旧账号授权下载。
5. 对未授权/已撤销/过期内容应被拦截。测试版本撤销或退款权益变化需要专门样本，不从普通阅读成功推断。

**不支持**：付费数字订单购买、App Store/Google Play 内购核验与恢复购买。视频 VOD 播放令牌未实现；不要把播放器外观当成视频课可用。免费页面无数据是内容前置条件不足，不代表应显示假教材。

### L02 · 课程目录与我的学习【部分完成】

1. “学习 → 课程目录”，查看已发布课程和课时说明。
2. 在“我的学习/我的学习库”检查已有授权课程、学习进度及支持的文字/图片内容。
3. 有真实受支持内容时阅读并返回首页/学习报告，核对记录是否更新。
4. 付费课程购买、视频播放作为“未实现”登记，不用尝试重复支付。

### L03 · 专项练习、错题、收藏【已实现／待手测】

1. “学习 → 专项练习”，选择科目/知识点或全部范围；无已发布题目时先由后台准备。
2. 开始练习，选答案并提交，核对服务端判定、正确选项及解析。
3. 故意答错一题，收藏另一题；到“我的 → 错题收藏”核对记录及分页。
4. 返回学习报告，检查题量/正确率更新，不应一次重试记成两次答题。
5. 网络提交结果未知时使用“重试原答案”；在明确拒绝前不要改答案重新生成另一条提交。

### L04 · 模拟考试与恢复【已实现／待手测】

1. “学习 → 模拟考试”，选择已发布试卷，核对题目数和时长后开始。
2. 回答部分题目，切换前后题，检查保存/同步提示。
3. 暂时断网继续选项，恢复网络后同步；本机草稿仅保存选项，不等于已提交服务器。
4. 使用“检查并交卷”，确认交卷后显示服务端冻结评分和解析。
5. “我的 → 历史成绩”查看本次记录、日期、分数及详情。
6. 另开一场测试超时：到截止时间后不得继续提交新答案，应联网刷新最终结果。
7. 双设备冲突时先阅读提示，再选择明确的接管/放弃本机草稿；不能假定考试接管与课堂接管是同一能力。

### L05 · 学习报告与个人设置【已实现／待手测】

1. 完成练习/阅读后进入“学习报告”，切换日期范围。
2. 核对时长、练习量、正确率，进入知识点统计和历史成绩。
3. 数据应来自该账号实际事件；知识点掌握算法尚未启用，不能把图表当智能测评结论。
4. 修改语言、时区、学习目标，保存重开；切换账号应清空前一个人的私有数据。

## 11 · 运营后台其余模块

| 模块 | 按顺序测试 | 预期结果与完成边界 |
| --- | --- | --- |
| 首页概览 | 选择时间范围 → 刷新 → 对照订单、用户及预约实际记录 | 已实现，待手测；不要与夹具数字比对 |
| 用户管理 | 搜索测试邮箱 → 详情 → 编辑允许字段 → 保存重读 → 冻结普通测试用户 → 解冻 | 已实现，待手测；冻结撤销其会话，解冻不复活旧登录；不能用此入口随意改管理员 |
| 内容管理 | 新建原创课程/资源草稿 → 上传允许的素材 → 填版权来源 → 保存 → 发布版本 | 部分完成；课程内容与商品分别发布，发布不启用真实支付 |
| 商品配置 | 从内容资源商品入口或 `/products` 查看版本、价格、授权、条款和发布状态 | 已有版本管理；数字付费销售未实现，不进行真实购买 |
| 题库模考 | 新建最小单选题 → 填题干、选项、答案、解析、知识点、版权 → 保存发布 → 新建试卷引用固定题目版本 → 发布 → App 验证 | 已实现，待手测；避免直接用大规模导入作为第一条测试 |
| 题库导入 | 下载/查看当前模板说明 → 上传小样本 → 查看校验错误 → 修正 → 重提 → 核对结果 | 已实现，待手测；支持格式以当前界面为准，不猜测任意 Excel 均可导入 |
| 客服运营 | 学生/教师帮助客服提交测试工单 → 后台按编号打开 → 回复/处理 → 原账号查看进度 | 已实现，待手测；内部理由不应暴露给普通用户 |
| 消息与通知 | 产生预约/审核通知 → 查看未读数 → 打开详情 → 标记已读 → 刷新其他端 | 已实现，待手测；在线编辑审批发布通知模板未接入 |
| 数据报表 | 按日期、币种选择 → 查询 → 创建异步导出 → 等待任务完成 → 下载并核对表头及一条实际记录 | 已实现，待手测；异步导出入口是 `/admin/report-exports`，不是遗留旧导出接口 |
| 角色权限 | 查看角色及权限目录 → 用独立测试角色授权/撤销 → 目标重新登录核对 | 已实现，待手测；禁止修改本人角色/越权授予，新增管理员开户恢复并无完整后台向导 |
| 审计日志 | 查审核、授权、收款原件查看、裁定、付款操作 → 核对操作者、原因、对象、时间 | 已实现，待手测；不得在日志中出现密码或无关密钥 |
| 任务与对账监控 | 系统设置入口或 `/monitoring` → 查看状态 → 对测试失败任务读取原因 → 按权限重试 | 部分完成；真实供应商查单未接入，当前缺对账执行权限 |
| 地区与功能开关 | 读取配置，核对开关不可编辑及原因 | 未开放变更；录制回放、小班、HTML5 执行、未成年人业务不能通过强行改前端开启 |

## 12 · 安全与异常专项测试

每个场景先保存原请求编号、对象编号和截图，再判断是否通过；只操作专门的测试数据。

| 编号 | 操作 | 应出现的结果 |
| --- | --- | --- |
| X01 | 登录时输一次错误密码/过期验证码 | 明确拒绝，不泄露账户内部资料；不要高频撞库 |
| X02 | 同一账号刷新及退出后后退 | 退出后私有页面不再可用，缓存不泄露 |
| X03 | 学生尝试进入别人的订单/预约 | 拒绝访问，不返回他人数据 |
| X04 | 两窗口同时修改同一测试资料 | 后提交旧版本者提示冲突；重读后人工核对 |
| X05 | 提交中断网，再“重试原请求” | 不生成重复订单、退款、服务或付款记录 |
| X06 | 读请求失败点击重试，分页后改筛选 | 可恢复，筛选重置游标，不混入旧条件数据 |
| X07 | 摄像头/麦克风拒绝授权 | 可解释错误，不假称设备检查已通过 |
| X08 | 课堂时间窗外入室/同角色另一设备占用 | 按规则拒绝；强制接管不可用 |
| X09 | 考试截止/换号后尝试同步旧草稿 | 不接受越期/旧账号答案，不覆盖另一身份 |
| X10 | 开课前不足 24 小时取消/改期 | 要求客服或按最新规则处理，不擅自全退 |
| X11 | 无权限账号打开财务或原件 | 拒绝并给出原因，不靠隐藏菜单代替后端鉴权 |
| X12 | 制单人自己批准付款 | 拒绝；必须不同管理员复核 |
| X13 | 未授权资源下载、退出后重试下载 | 授权重新核验，不能复用旧账号内容 |
| X14 | 普通用户提交注销申请 | 显示待处理，撤销登录；不是已经物理删除全部资料 |

**破坏性测试分开做**：冻结、注销、取消、退款、角色撤销、付款登记只能用一次性测试账号/对象。注销审批和最终资料清除尚未完整开放；不要在你的主要管理员账号上测试。

## 13 · 已完成与未完成总表

“已实现”表示可进入测试，不是本次已替你验收合格。接口覆盖审计报告的 249/265 是“没有落入未实现兜底”的数量，不等于 94% 产品完成度，也不保证每个参数和业务分支正常。

| 能力 | 状态 | 证据与限制 |
| --- | --- | --- |
| 邮箱登录、会话、身份切换 | 已实现 | 自动化与 API 演练；测试邮件使用 Mailpit |
| 后台邮箱密码登录、权限、审计 | 已实现 | 本版已移除 TOTP；线上只读核查确认 |
| 教师入驻、材料、审核、服务报酬上架、排期 | 已实现 | 新教师全链路 API 演练；当前账号四权限缺口需先补 |
| 学生约课、占位、确认 | 已实现 | API 演练；UI、时区、并发和弱网仍需手测 |
| 预约支付与退款 | 部分完成 | 测试渠道闭环；真实渠道、商户及真实到账未验证 |
| 改期、取消、客服争议 | 已实现 | 集成覆盖；手动验收需独立预约样本 |
| 课堂业务租约、白板连接、文字、课件 | 部分完成 | API 演练凭证/WebSocket；实际跨端画笔聊天待手测 |
| 真实音视频、录制回放 | 未实现／外部依赖 | 腾讯 TRTC/VOD 与客户端 SDK 未接入 |
| 课堂 presence、手动结束、强制设备接管 | 未实现／未开放 | worker 课后转复核可用，不等于手动结束可用 |
| 裁定、评价、课后小结 | 已实现 | 裁定及评价有 API 演练；小结及全部 UI 待手测 |
| 教师应付、收款资料、制单复核 | 已实现 | API 全生命周期演练；需要独立第二管理员 |
| 银行自动出款 | 未实现 | 当前为线下付款结果登记；不能假装已转账 |
| 免费领取、资源授权、PDF/图片阅读下载 | 已实现 | 集成覆盖，真实原生多设备待验收 |
| 付费数字内容购买及支付后授权 | 未实现 | `POST /orders` 缺失，课程/资源/试卷不能付费售卖 |
| 视频课播放 | 未实现 | playback-tokens 缺失；VOD 外部依赖 |
| 商店内购、购买恢复 | 未实现 | verify/restore 缺失；旧设计有入口不等于能用 |
| 练习、错题、收藏、模考评分与恢复 | 已实现 | 集成覆盖；手册提供 UI 测试，不声称本次全量通过 |
| 报告、异步导出、运营查询 | 已实现 | 部分查询/导出实现；智能知识点掌握算法未启用 |
| 工单、消息及通知已读 | 已实现 | 集成覆盖；在线模板编辑审批发布未接入 |
| 用户屏蔽 | 未实现 | PUT/DELETE block 接口缺失 |
| 注销申请 | 部分完成 | 可申请、撤销会话；后台最终审批/资料清除未完成 |
| 后台单条教师/订单/支付详情旧接口 | 接口未实现但有列表替代 | 当前客户端用列表数据；不能误说整个详情体验都完成 |
| 通用后台上传、旧报表导出接口 | 遗留接口未实现，有专用替代 | 使用专用上传和 report-exports；不重复造功能缺口 |
| 渠道差异主动查单、已付款争议复核 | 未实现 | 审计列出的边缘/供应商依赖接口 |
| 地区配置发布、录制、小班、H5、未成年人业务 | 未开放 | 开关只读，不是可操作功能 |
| 文件病毒扫描、第三方对象存储、备份 | 当前未提供（产品决定） | 使用本地磁盘＋完整性/类型检查；无备份是运营风险，不是已解决 |
| Android/iOS 发布与真机完整验收 | 待完成 | 旧代码原生编译成功；本基准新包、iOS 签名、真机全流程未验收 |
| 像素视觉、全状态与性能验收 | 待完成 | Web 仅部分默认状态夹具截图；移动设计板不是完成证据 |

## 14 · 快速验收卡与问题登记

### 最小可运行闭环（按顺序勾选）

- [ ] P01 最新 App 包、Mailpit、独立账号及四项权限前置条件齐备。
- [ ] P02 A 管理员密码登录；T 教师 Web、S 学生 App 验证码登录。
- [ ] P03 T 完善资料、上传测试证明、申请；A 审核通过。
- [ ] P04 T 创建服务；A 配置报酬并上架；T 设置未来可约时间。
- [ ] P05 S 查找 T，预约 A，测试支付；S/T/A 核对确认状态。
- [ ] P06 用独立的预约 B 完成改期/取消退款分支，不影响预约 A。
- [ ] P07 到真实课堂时间，S App＋T Web 进入，测试白板/文字/课件；不验收视频通话。
- [ ] P08 等课后待核验，A 提交证据并裁定；T 发布小结；S 评价。
- [ ] P09 T 提交测试收款资料，后台核验；观察期后制单 A、复核 B、登记测试结果。
- [ ] P10 T Web/App 收益与后台金额一致，审计可追溯。
- [ ] P11 免费资源、练习、模考、历史成绩、报告、工单双向测试。
- [ ] P12 退出/换号、弱网重试、无权限、时区、旧版本冲突检查。

### 每个问题必须记录

| 字段 | 示例／填写要求 |
| --- | --- |
| 用例编号 | S02，第 6 步；不能只写“支付不行” |
| 日期和版本 | 2026-10-28，Web 线上版本／App 构建提交与版本号 |
| 平台 | Chrome/Safari＋版本；Android/iOS＋系统与机型 |
| 身份 | 学生 S/教师 T/管理员 A，邮箱可脱敏，不贴密码 |
| 对象标识 | 预约号、订单号、退款号、付款单号、请求 ID |
| 操作与预期 | 哪一按钮、哪些输入、预期状态 |
| 实际结果 | 真实提示、状态、是否刷新后仍错误 |
| 附件 | 截图/短录屏；遮挡密钥、验证码、真实银行资料 |
| 严重程度 | 阻塞主链路／重要／一般／视觉问题 |
| 分类 | 缺功能／缺权限／缺数据／版本不匹配／规则拒绝／代码缺陷 |

另附 `测试执行清单.csv`，可用 Excel 打开。初始全部“未执行”，由你操作后填写“通过/失败/阻塞/不支持”；不要将文档中的证据直接抄成你的执行结果。

## 15 · 证据、版本与维护说明

- 固定源代码：`ea9c2cd`；本手册不会随线上后续部署自动更新。
- `docs/functional-audit-2026-10-27.md`：265 个契约操作中 249 已实现、16 未实现；包含全生命周期测试环境 API 演练结论。本次未重新运行会创建订单、退款、时间偏移及付款记录的演练。
- `scripts/staging-drill.ts`：入驻、预约、课堂、裁定、评价、付款演练；直接调整测试库时间，不能当作正常用户操作。
- `scripts/staging-smoke.ts`：测试支付退款及课件；`scripts/staging/lib.ts`：演示课与验证码/后台登录方式。
- `infra/migrations/024_remove_admin_mfa.sql`、`025_permission_catalog.sql`：本版管理员登录与权限变化。
- `apps/mobile/lib/main.dart`、`features/identity/profile_home.dart`：App 双身份导航及入口；各功能页面对应本手册步骤。
- `apps/teacher-web/src/rebuilt.tsx`、`apps/admin-web/src/rebuilt.tsx`：Web 路由；当前 UI 细节以实际页面为准。
- `docs/visual-acceptance-2026-10-27.md`：视觉验收边界，夹具截图不等于真实业务验收。
- 本次只读核查线上：支付及 RTC 测试模式开启、邮件 SMTP 指向测试流程、MFA 字段已移除、管理员 4 项权限缺口、存在 2 项已发布服务。没有改变服务器配置、权限、密码或业务记录。
- 图 1–2 是本次线上未登录截图；图 3–5 为服务器已有视觉夹具；图 6–7 为仓库设计参考。图中示例账号/金额不应当作实际测试输入。
- 旧 README 与早期进度文档存在过时的 MFA、原生构建和扫描描述；遇到矛盾优先按本固定基准代码、最新专项审计及线上实际行为核对，不能混用旧版本结论。

**验收结论留白**：本手册交付的是“逐步操作方案＋可用范围和证据说明”，不是签收报告。完成 CSV 并附上每个关键状态截图之后，才能形成你的 Web/App 验收结果。
