设计规格:2026-08-30-v0.15-notes-polish-design.md([ ] 已归档) 交付日期:2026-08-30(设计定稿 → 当日实施交付)
v0.14(编辑器 CM6 / 视觉系统 / 知识体系 / 采集质量)交付后,用户实测反馈 6 项(4 缺陷 + 2 体验增强),全部纳入 v0.15:
| # | 反馈 | 根因 | 交付方案 |
|---|---|---|---|
| 1 | 加 H1 后再点按钮无取消 | headingCommand.ts/headingLines 对已是标题的行跳过(no-op),按钮高亮却暗示可切换 |
set-or-toggle 切换语义:同级别 → 剥除还原;其他 → 置为该级(CM + textarea 双路径) |
| 2 | 组件大小不自适应 | 全站固定宽列硬编码(720px 固定 = 默认 960 窗宽下正文区 ~220px) | 全站列自适应:useColumnLayout(拖拽 + 记忆 + min/max)+ ColumnResizer + ColumnBar(窄窗阈值自动折叠,<1100 大纲 / <860 侧栏 / <700 列表);迁移笔记/会话/知识/课堂 4 页 7 列;NoteImage 自适应 |
| 3 | 笔记组、笔记不可收起 | 组侧栏已按 kind 分区折叠,但中部列表平铺、列不可折叠 | 分组树 + 整列折叠:组头 chevron 收起(记忆 localStorage);组名点击=过滤(决策 1 保持);搜索/标签/排序激活树退化平铺;空组不渲染;三列均可折叠为 26px 窄条(大纲悬浮按钮并入统一体系) |
| 4 | 用户插入图片需留副本 | 仅 🖼 文件选择复制;🌐 链接图只存 URL;剪贴板未落盘 | 图片落盘三入口:import_note_image_b64(剪贴板,字节嗅探定格式)+ import_note_image_url(ureq 下载限流 10MB/超时 10s/Content-Type+嗅探双保险,失败降级插原 URL)+ 现有文件入口不变;删除笔记顺带清理 notes-images/{nid}/ |
| 5 | 编辑模式不支持剪贴板导入图片 | CM/textarea 均无 paste 处理 | useClipboardImagePaste:event.clipboardData 同步提取(无权限弹窗)→ base64 → 落盘 → 插入引用(CM transaction / textarea 受控 + rAF 选区恢复);图片即时内联显示 |
| 6 | 编辑态换行、阅读态连上 | CommonMark 软换行=空格(语义不一致,非 bug) | remark-breaks:单换行渲染 <br>;零数据变更(存量自动修复);\/两空格强断行保留;不设开关(YAGNI) |
- 不做巡检(用户裁决):入口全落盘后,粘贴/手写绝对路径仅剩一条漏网路径——登记为已知边界(§6),将来观察到高频再在 paste 钩子转换;保存管线不被改写(零惊喜)
- 知识页详情面板保留既有内部折叠(34px 窄栏),仅加宽度 prop——统一列折叠体系仅接管笔记页三列与其他页面左列
- 删除清理尽力而为:remove_dir_all 失败仅 eprintln(残留无害,不阻断删除;历史孤儿留垃圾回收后续任务)
cargo test --test app_lib_tests:1840 passed / 3 failed——3 failed 为预存基线(ai_client默认 Provider 断言旧 SiliconFlow、note_filter两条黄金用例,CHANGELOG v0.13.8 已登记,与本版无关);本版新增 note_image 用例 5 个(嗅探定格式/垃圾拒绝/唯一命名/非 http 拒绝等)cargo clippy:零新增警告- vitest:53 文件 431 用例全绿(新增:heading 切换 4 + markdownEdit 3 / NoteMarkdown 换行 4 / clipboardImage 5 / useColumnLayout 6 / 分组树 4 / tree 回归 5)
tsc --noEmit零错误;vite build通过(chunk 体积告警为存量)
| 项 | 状态 |
|---|---|
| ① 标题切换 | ✅ 交付(CM/textarea 双路径 + 4 单测改造) |
| ② 全站自适应 | ✅ 交付(4 页 7 列迁移;窄窗阈值折叠;宽度/折叠记忆) |
| ③ 分组树 + 整列折叠 | ✅ 交付(组折叠记忆;树退化规则;空组不渲染) |
| ④ 图片落盘三入口 | ✅ 交付(b64/url 命令 + 删除清理;12 用例全绿) |
| ⑤ 剪贴板导入 | ✅ 交付(双编辑器入口 + 尺寸预检 + status 降级提示) |
| ⑥ 换行一致 | ✅ 交付(remark-breaks;4 渲染断言用例) |
- 正文手写/粘贴绝对路径图片引用:不改写(观察再议)
- 历史孤儿图片目录:垃圾回收后续任务
- ClassroomPage 607 行:超 600 硬限为预存债务(登记值 547 为过期快照已纠偏),拆分计划见豁免登记
- 真机走查:待用户验收批执行(布局拖拽/折叠恢复/剪贴板粘贴/外链下载四项核心动线)