7.9 KiB
7.9 KiB
04 功能差异清单
将独立功能基线(review/02-独立功能基线.md)与已有文档(02-iOS页面功能总表.md)逐项比对。
一、功能遗漏清单
遗漏 1:学习主页 selfTestSmallCard → QuizListView (kbId="")
- 文档覆盖: 文档记录"进行自我测试"功能(点击主操作卡片或测试卡片)
- 遗漏: 文档未说明 smallCard 跳转 QuizListView 时 knowledgeBaseId 为空字符串,可能导致不正确的行为
- 应补到: 02-iOS页面功能总表.md → 学习 Tab → "进行自我测试"
- 建议补充说明: "注:辅助卡片自测入口使用空 knowledgeBaseId,可能在 quizList 中显示空列表"
遗漏 2:GoalSettingDetailView 每日学习时长不持久化
- 文档覆盖: 文档 5.4 节记录 GoalSettingDetailView 的"修改每日时长"功能为"已完成"
- 实际: dailyMins 只保存在本地 @State 变量,未通过 API 持久化
- 应补到: 02-iOS页面功能总表.md → 我的 Tab → "修改每日时长"
- 建议状态修正: 已完成为 → 部分完成(UI 完成,数据不持久化)
遗漏 3:RecallTestPage 功能未记录
- 文档覆盖: 未记录
- 实际: RecallTestPage 代码存在(Features/AI/RecallTestPage.swift),含:
- 查看回忆测试题(硬编码)
- 输入回答
- 提交获取 AI 反馈(→ AIFeedbackPageView)
- 建议补到: 02-iOS页面功能总表.md → AI 辅助功能 → 新增"回忆测试页"行
- 建议状态: 占位实现(无导航入口,题目硬编码)
遗漏 4:AIChatPage 置顶/取消置顶会话
- 文档覆盖: 文档记录"删除会话"和"归档会话"
- 遗漏: 未记录置顶/取消置顶功能(swipeActions(edge: .leading))
- 应补到: 02-iOS页面功能总表.md → AI 辅助功能 → AI 对话页
- 建议新增行: "置顶/取消置顶会话 | 左滑→置顶/取消置顶 | 切换会话置顶状态"
遗漏 5:MaterialReaderView 解析触发 + 轮询
- 文档覆盖: 文档在"阅读 Markdown 内容"等行标注已完成
- 遗漏: 文档未将"触发 AI 知识提取(解析)"作为独立功能记录,工具栏 brain 按钮触发 60×2s 轮询是一个重要功能
- 建议补到: 02-iOS页面功能总表.md → 资料阅读 → 新增行
- 建议新增行: "触发知识提取 | 点击工具栏大脑按钮 | 提交解析任务,轮询进度(60×2s) | 部分完成 | 轮询使用硬编码次数和间隔"
遗漏 6:AIHomeView 的全部功能(虽已废弃)
- 文档覆盖: 文档记录了 AIHomeView 为占位实现/已废弃,但功能总表中将其合并入一行"AI 首页(已废弃)"
- 遗漏: 该页面内有具体的子功能(服务器状态检查、快速操作入口、每日思考卡片、推荐问题列表),但功能总表未展开
- 评估: 这对于已废弃页面是合理的简化处理,不做强制修正要求
二、功能状态误判
| 文档功能 | 文档状态 | 实际状态 | 判定依据 |
|---|---|---|---|
| 学习会话-专注计时学习 | 已完成 | 暂未确认 | 本地计时完成,但未发现调用 LearningSessionService API 保存学习记录 |
| 学习主页-开始今日复习 | 部分完成 | 部分完成 | 入口正常,ReviewCardView 为占位实现。文档正确标记。 |
| 学习主页-查看完整分析 | 已完成 | 已完成 | 入口存在,跳转到 ActiveRecallView(本身为占位实现)。文档正确标记了跳转目标的状态,但入口本身已完成。 |
| 学习主页-探索公开知识库 | 已完成 | 已完成 | 切换到 library Tab |
| 分析页-查看掌握度趋势图 | 部分完成 | 占位实现 | 应为占位实现,ZXChartView 使用完全硬编码的 7 天数据 [("一", 0.62)...],ViewModel 的 trend 数据被忽略 |
| 分析页-查看每周学习活跃 | 部分完成 | 占位实现 | 应为占位实现,ZXWeekBarChart 使用完全硬编码数据,ViewModel 的 heatmap 数据被忽略 |
| 分析页-查看 AI 综合分析 | 已完成 | 已完成 | 动态拼接 API 数据,非 AI 生成 |
| 分析页-查看全部薄弱知识点 | 已完成 | 已完成 | 跳转到 WeakPointsPage(本身为占位实现) |
| 设置页-切换导入完成通知 | 暂未确认 | 部分完成 | 三个通知开关全部绑定到同一个 $reviewReminder 变量,是明确的 bug 而非待确认 |
| 设置页-切换系统通知 | 暂未确认 | 部分完成 | 同上 |
| 设置页-切换 iCloud 同步 | 暂未确认 | 暂未确认 | 仅改变本地 @State,无 API 调用 |
| GoalSettingDetailView-修改每日时长 | 已完成 | 部分完成 | dailyMins 不持久化 |
| 每日思考页-提交回答 | 占位实现 | 占位实现 | 状态一致,但 submitted 变量 bug 未记录 |
三、自动触发功能遗漏
文档功能总表主要记录了用户主动触发的功能,以下自动触发功能在文档中有部分遗漏:
| 自动功能 | 文档覆盖 | 建议 |
|---|---|---|
| MaterialReaderView 进入时自动恢复阅读位置 | 已覆盖("恢复阅读位置"行) | — |
| MaterialReaderView 前后台切换暂停/恢复会话 | 已覆盖 | — |
| MaterialReaderView 自动从 COS 下载文件 | 未明确记录 | 建议在"阅读 Markdown 内容"备注中补充 |
| MaterialReaderView COS 过期 URL 重取 | 未明确记录 | 建议补充 |
| 学习主页优先级自动计算 | 已覆盖 | — |
| StudyHomeViewModel 错误状态永不可达 | 未记录 | 建议在备注中说明 ViewModel 的 try? 吞错行为 |
四、搜索、筛选、排序、分页等辅助功能检查
| 功能 | 页面 | 文档覆盖 | 备注 |
|---|---|---|---|
| 知识库搜索 | LibraryHomeView | 已覆盖(但标为部分完成) | 搜索页搜索逻辑未实现 |
| 知识库分类筛选 | LibraryHomeView | 已覆盖 | 4 个分类 chips |
| 知识库分页加载 | LibraryHomeView | 已覆盖 | 无限滚动 |
| 知识点排序 | LibraryDetailPage | 已覆盖 | 4 种排序 |
| 知识点批量选择 | LibraryDetailPage | 已覆盖 | |
| 会话搜索 | AIChatPage Sheet | 已覆盖 | |
| 通知列表无筛选 | NotificationListView | 未记录筛选 | 无筛选功能,合理 |
| 测验列表无筛选 | QuizListView | 未记录筛选 | 无筛选功能,合理 |
五、API 调用存在但无页面入口
WaitlistService
- API 端点: /waitlist (POST), /waitlist/stats (GET)
- 代码存在: APIService.swift 中 WaitlistService 类完整定义
- 页面入口: 无任何 View 或 ViewModel 调用 WaitlistService
- 文档记录: 文档未提及 waitlist 功能
- 建议: 在系统地图中标注"Waitlist API 已就绪但 C 端无入口"(或在总览中标注为后端预留能力)
UserService.requestAccountDeletion / cancelDeletion
- API 端点: /users/me/deletion-request (POST/DELETE)
- 页面入口: 无任何页面调用这两个方法
- 文档记录: 未提及注销账号功能
- 建议: 补充到设置页的未完成功能列表
UserService.listDevices / removeDevice
- API 端点: /users/me/devices (GET/DELETE)
- 页面入口: 设置页有"登录设备管理"行但无导航目标(→ Route.settings 自引用)
- 建议: 标注为"API 已就绪,设备管理页面未实现"
六、总体评估
| 评估维度 | 结果 |
|---|---|
| 功能总表覆盖率 | 约 95%,遗漏约 6 个功能点 |
| 功能状态准确率 | 约 90%,7 个功能的状态需要修正 |
| 自动触发功能覆盖 | 基本完整,2 处建议补充 |
| 辅助功能覆盖 | 完整 |
| API-页面映射完整性 | 3 个 API 有端点无页面入口需标注 |
结论:功能总表文档覆盖较全面,主要问题是若干功能的状态标记偏乐观(部分图表数据被标记为"部分完成"但实际为"占位实现"),以及少数自动触发功能和 API-页面不一致未记录。