IOS-INFO-043: MaterialReaderView 吸收 MaterialDetailView 功能,列表直达阅读器 #151

Open
opened 2026-06-19 11:18:30 +08:00 by wangdl · 1 comment
Owner

背景

当前用户点击资料来源 → MaterialDetailView(资料详情)→ 点「阅读原文件」→ MaterialReaderView。多了一步跳转,MaterialDetailView 作为中间页显得多余。

目标

资料来源列表点击直接进入 MaterialReaderView,MaterialDetailView 精简为只展示文件信息和解析结果的辅助页,MaterialReaderView 工具栏补齐功能入口。

新架构

列表 → MaterialReaderView(直接阅读)
       ├── 导航栏标题: 文件名
       ├── 导航栏副标题: 格式 · 大小
       ├── 工具栏按钮:
       │   ├── 「标记已读」─ 保留
       │   ├── 「AI 对话」─ AIChatPage(已有)
       │   ├── 「详情」─ 精简版 MaterialDetailView
       │   ├── 「整理知识点」─ 手动触发 AI 解析
       │   └── 「开始学习」─ LearningSessionPage
       └── 阅读内容区

改动清单

文件: Features/Library/LibrarySubpages.swift

Route.materialDetail(...)Route.materialReader(...)

2. MaterialDetailView 删减

文件: Features/MaterialReader/MaterialDetailView.swift

删除 保留
蓝色「阅读原文件」按钮(已在阅读器里) 文件元信息卡
「问这份资料」按钮(移到阅读器) 阅读进度卡
「开始学习」按钮(移到阅读器) AI 状态横幅
知识点数 + 测验统计(移到阅读器弹窗) -

页面改名为「资料详情」作为辅助信息页。

3. MaterialReaderView 工具栏新增

文件: Features/MaterialReader/MaterialReaderView.swift

工具栏新增按钮:

按钮 图标 行为
详情 info.circle 跳转简化版 MaterialDetailView
整理知识点 brain.head.profile POST /sources/:id/parse,Toast/Sheet 显示进度
开始学习 arrow.triangle.2.circlepath 跳转 LearningSessionPage

4. AI 整理知识点 — 手动触发 + 状态展示

  • 点击「整理知识点」→ 调 POST /knowledge-bases/:kbId/sources/:sourceId/parse
  • 轮询 GET /imports/:id/status 显示进度
  • 解析完成后在工具栏或 Sheet 中展示知识点数量和测验数量
  • 解析状态:待整理 → 整理中(动画) → 已完成(绿勾) / 失败(红色)

5. 文件信息精简到导航栏

导航栏标题: 文件名(截断省略)
导航栏副标题: 格式 · 大小(如 Markdown · 1.4 KB

涉及文件

  • Features/Library/LibrarySubpages.swift — 改 NavigationLink
  • Features/MaterialReader/MaterialDetailView.swift — 删减功能
  • Features/MaterialReader/MaterialReaderView.swift — 新增工具栏
  • 可能需要新增:解析状态弹窗/Sheet

验收

  • 点资料来源直接进入阅读器
  • 阅读器工具栏有:标记已读、AI 对话、详情、整理知识点、开始学习
  • 整理知识点手动触发,不自动解析
  • 解析中显示进度
  • 点详情进入精简版 MaterialDetailView
  • MaterialDetailView 不再有阅读原文件/问资料/开始学习按钮
## 背景 当前用户点击资料来源 → MaterialDetailView(资料详情)→ 点「阅读原文件」→ MaterialReaderView。多了一步跳转,MaterialDetailView 作为中间页显得多余。 ## 目标 资料来源列表点击直接进入 MaterialReaderView,MaterialDetailView 精简为只展示文件信息和解析结果的辅助页,MaterialReaderView 工具栏补齐功能入口。 ## 新架构 ``` 列表 → MaterialReaderView(直接阅读) ├── 导航栏标题: 文件名 ├── 导航栏副标题: 格式 · 大小 ├── 工具栏按钮: │ ├── 「标记已读」─ 保留 │ ├── 「AI 对话」─ AIChatPage(已有) │ ├── 「详情」─ 精简版 MaterialDetailView │ ├── 「整理知识点」─ 手动触发 AI 解析 │ └── 「开始学习」─ LearningSessionPage └── 阅读内容区 ``` ## 改动清单 ### 1. 资料来源列表 NavigationLink 改为直达 MaterialReaderView **文件**: `Features/Library/LibrarySubpages.swift` `Route.materialDetail(...)` → `Route.materialReader(...)` ### 2. MaterialDetailView 删减 **文件**: `Features/MaterialReader/MaterialDetailView.swift` | 删除 | 保留 | |------|------| | 蓝色「阅读原文件」按钮(已在阅读器里) | 文件元信息卡 | | 「问这份资料」按钮(移到阅读器) | 阅读进度卡 | | 「开始学习」按钮(移到阅读器) | AI 状态横幅 | | 知识点数 + 测验统计(移到阅读器弹窗) | - | 页面改名为「资料详情」作为辅助信息页。 ### 3. MaterialReaderView 工具栏新增 **文件**: `Features/MaterialReader/MaterialReaderView.swift` 工具栏新增按钮: | 按钮 | 图标 | 行为 | |------|------|------| | 详情 | `info.circle` | 跳转简化版 MaterialDetailView | | 整理知识点 | `brain.head.profile` | 调 `POST /sources/:id/parse`,Toast/Sheet 显示进度 | | 开始学习 | `arrow.triangle.2.circlepath` | 跳转 LearningSessionPage | ### 4. AI 整理知识点 — 手动触发 + 状态展示 - 点击「整理知识点」→ 调 `POST /knowledge-bases/:kbId/sources/:sourceId/parse` - 轮询 `GET /imports/:id/status` 显示进度 - 解析完成后在工具栏或 Sheet 中展示知识点数量和测验数量 - 解析状态:待整理 → 整理中(动画) → 已完成(绿勾) / 失败(红色) ### 5. 文件信息精简到导航栏 导航栏标题: 文件名(截断省略) 导航栏副标题: `格式 · 大小`(如 `Markdown · 1.4 KB`) ## 涉及文件 - `Features/Library/LibrarySubpages.swift` — 改 NavigationLink - `Features/MaterialReader/MaterialDetailView.swift` — 删减功能 - `Features/MaterialReader/MaterialReaderView.swift` — 新增工具栏 - 可能需要新增:解析状态弹窗/Sheet ## 验收 - [ ] 点资料来源直接进入阅读器 - [ ] 阅读器工具栏有:标记已读、AI 对话、详情、整理知识点、开始学习 - [ ] 整理知识点手动触发,不自动解析 - [ ] 解析中显示进度 - [ ] 点详情进入精简版 MaterialDetailView - [ ] MaterialDetailView 不再有阅读原文件/问资料/开始学习按钮
Author
Owner

开发完成评论

完成内容

  • MaterialDetailView: 删除「阅读原文件」「问这份资料」「开始学习」按钮
  • MaterialReaderView 工具栏新增按钮: 详情(→MaterialDetailView)、整理知识点(→调API)、开始学习(→LearningSession)
  • triggerParse(): 调 POST /knowledge-bases/:kbId/sources/:sourceId/parse + 2s 轮询状态
  • KnowledgeSourceService.parse() 新增
  • ImportStatusResponse 加 jobId/progress 字段

修改文件

  • Features/MaterialReader/MaterialDetailView.swift
  • Features/MaterialReader/MaterialReaderView.swift
  • Core/Services/APIService.swift
  • Core/Models/APIModels.swift

未完成

  • 资料来源列表 NavigationLink 改为直达 MaterialReaderView(blocked by 文件下载问题:reader 需要本地 filePath,source 只有 COS key)

是否建议进入 Review

## 开发完成评论 ### 完成内容 - MaterialDetailView: 删除「阅读原文件」「问这份资料」「开始学习」按钮 - MaterialReaderView 工具栏新增按钮: 详情(→MaterialDetailView)、整理知识点(→调API)、开始学习(→LearningSession) - triggerParse(): 调 POST /knowledge-bases/:kbId/sources/:sourceId/parse + 2s 轮询状态 - KnowledgeSourceService.parse() 新增 - ImportStatusResponse 加 jobId/progress 字段 ### 修改文件 - `Features/MaterialReader/MaterialDetailView.swift` - `Features/MaterialReader/MaterialReaderView.swift` - `Core/Services/APIService.swift` - `Core/Models/APIModels.swift` ### 未完成 - 资料来源列表 NavigationLink 改为直达 MaterialReaderView(blocked by 文件下载问题:reader 需要本地 filePath,source 只有 COS key) ### 是否建议进入 Review - 是
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: wangdl/ios-projects#151
No description provided.