Skip to content

Latest commit

 

History

History
55 lines (38 loc) · 5.14 KB

File metadata and controls

55 lines (38 loc) · 5.14 KB

v0.7.1 — 会话体验小版本(管理控制台 + 转化流水线)

状态: 开发完成待真机验收(2026-08-19:REQ-135~137 实施完毕) 目标: 会话页从"档案浏览"升级为"视频→笔记"转化管理台——转化状态可见、行内/批量转化、会话↔笔记双向互跳、列表可筛可批、状态实时刷新 关联: 会话页交互与效率增强设计(头脑风暴产出,[ ] 已归档) · ADR-014(notes.session_id 数据模型变更)· 需求池

一、阶段目标

  1. 转化状态可视化(REQ-135):列表直接显示已转/待转/录制中/异常徽标 + 转化状态筛选;会话↔笔记双向互跳(会话「查看笔记 →」/ 笔记「来源会话 →」)
  2. 转化流程效率(REQ-136):列表行内一键转笔记(4 步→1 步)+ 批量转笔记(部分成功语义、跳过规则显式回传)
  3. 列表管理能力(REQ-137):状态/转化筛选 + 排序 + 批量删除(笔记保留)+ 双模式搜索整合 + 事件驱动刷新("采集中"残留根治)+ 新完成提示条 + 空态/加载态

本版本不做:详情页阅读体验(L3:段搜索命中滚动修复、大纲↔时间轴联动高亮)留后续批次。

二、范围(需求追溯)

REQ 内容 验收要点 规划状态
REQ-135 转化状态可视化 + 会话↔笔记双向关联:notes.session_id 列(SET NULL 保笔记)+ SessionListItem 标记 + 笔记页来源跳转 列表徽标正确(四象限单测);删会话笔记保留关联断开;旧数据 NULL 诚实 已排期
REQ-136 批量转笔记:batch_session_to_note(≤50、部分成功、跳过显式)+ 行内一键转化 全成功/部分失败不阻塞/去重/超限拒绝/录制中与已转跳过(6 单测);行内转化 1 步完成 已排期
REQ-137 列表管理增强:筛选/排序/批量删除/双模式搜索/事件驱动刷新/新完成提示/空态 会话完成 ≤2s 自动变"已完成";筛选排序分组叠加正确;批量删除确认框说明笔记保留 已排期

三、关键设计决策(详见 ADR-014)

  1. notes.session_id 列 + ON DELETE SET NULL:删除会话只断关联、不删笔记(笔记是用户资产,与原料级联删除刻意区分);旧 classroom 笔记诚实 NULL。
  2. SessionListItem 包装契约(不动 Session 结构):has_note/note_id/note_title/has_content,子查询实现零额外往返;list_sessions 与 list_session_courses 同口径。
  3. convert_to_note 核心提取:单条与批量共用同一过滤管线(REQ-081/082 单一管线原则延续);批量跳过已转防重复,详情页保留"有意重新生成"。
  4. 前端事件驱动刷新:active prop(切页)+ live:status/session:fused 事件——display:none 挂载不刷新的根治点(TD-004 副作用)。

四、测试与验证

  • Rust 单测 +13(945 全绿):迁移补列与旧数据 NULL / list_sessions 四象限标记 / 删会话 SET NULL / find_note_by_session 取最新 / 批量转 6 用例(全成功/跳过录制中与重复/已转跳过/不存在/超限/部分失败不阻塞)
  • 前端:npm run build 通过(TS 类型检查 + 打包);无 Vitest 基建 → 真机手动验证清单见下

真机手动验证清单

  1. 会话完成采集 → 会话页列表 ≤2s 自动变"已完成"(无需任何操作);顶部出现"📬 N 个会话已完成采集"提示条
  2. 行内「转笔记」→ ≤1s 变「查看笔记 →」;点击跳笔记页并定位该笔记;笔记页「来源会话 →」可跳回会话页
  3. 批量勾选 → 批量转笔记(已转/录制中/无内容被跳过并 toast 说明);批量删除后关联笔记仍在
  4. 状态/转化筛选 + 排序 + 课程分组叠加正确;标题/内容双模式搜索切换正确
  5. 空态引导 / 无结果"清除筛选" / toast 3s 自动消失
  6. 详情页「转为笔记」仍可用(有意重新生成 → 新笔记、关联指向最新)
  7. 老数据:历史 classroom 笔记显示"未转",详情页重新转换后建立关联

五、文件清单

Rust:types.rs(SessionListItem/BatchNoteResult/Note.session_id)· db.rs(迁移 + find_note_by_session)· db_sessions.rs(list_sessions 子查询)· db_sessions_rows.rs(行映射)· commands_session.rs(convert_to_note/batch/课程分组标记)· commands_session_batch_tests.rs(新)· commands.rs/commands_artifacts.rs(构造点适配)· lib.rs(注册)

前端:types.ts · App.tsx(active/focusNoteId/onOpenSessions)· SessionsPage.tsx(列表层重构)· SessionDetailPanel.tsx(新,详情拆出)· NotesPage.tsx(focusNoteId + 来源跳转)· utils/fmt.ts(新)

六、后续批次(本版本不做)

  • 详情层 L3:段搜索命中滚动到命中段(现滚第一段)、大纲↔时间轴联动高亮
  • 会话列表虚拟滚动/分页(>200 条库)
  • 转化历史管理(多次转换的版本对比)