# 有声书编辑功能 - 实现计划 ## 需求概述 | 需求 | 说明 | |------|------| | 书籍基础编辑 | 书名/作者/简介/封面修改、章节重排序/删除、单章节重新生成 | | 创建流程回退 | 用户选错选项后可以返回修改,不重新开始 | --- ## 一、数据库变更 ### 1.1 Book 模型 - 暂不修改 现有 `title, subtitle, description, coverUrl, targetAudience, style, bookScale` 字段已满足编辑需求,无需新增。 ### 1.2 BookChapter 模型变更 ```prisma model BookChapter { // 新增字段 sortOrder Int @default(0) // 用于手动排序 contentLock Boolean @default(false) // 内容锁定标记(防止误改) } ``` --- ## 二、后端 API 设计 ### 2.1 新增路由(album-management.controller.ts 扩展) | 方法 | 路径 | 说明 | |------|------|------| | PUT | `/api/book-generator/books/:id` | 更新书籍基础信息 | | PUT | `/api/book-generator/chapters/:id` | 更新单个章节(标题、内容、排序) | | PUT | `/api/book-generator/chapters/:id/regenerate` | 重新生成章节内容 | | POST | `/api/book-generator/chapters/:id/resort` | 批量重排章节顺序 | | DELETE | `/api/book-generator/chapters/:id` | 删除章节 | ### 2.2 编辑边界规则 | genStage | 可编辑内容 | 可重新生成 | |----------|-----------|-----------| | `draft` / `outlining` | ✅ 全部 | ✅ 大纲 | | `content_generating` | ✅ 全部 | ✅ 内容 | | `content_completed` | ✅ 全部 | ✅ 内容 | | `audio_generating` 及之后 | ⚠️ 仅标题/排序 | ❌ 需先回退 | ### 2.3 回退重生成协议 当用户在 `audio_completed` 阶段想修改内容: 1. 调用 `regenerateChapter(chapterId, 'content_completed')` 将阶段回退 2. 内容解锁,允许编辑 3. 重新生成时同步更新后续阶段 --- ## 三、前端改动 ### 3.1 详情页新增编辑入口(detail.vue) ``` 详情页顶部操作区: [编辑书籍] [删除书籍] [重新生成] ``` ### 3.2 书籍编辑弹窗(基础信息) - 书名、副标题、简介、封面(上传/URL) - 面向人群、书籍类型、写作风格、行业领域 ### 3.3 章节编辑 - 点击章节行内"✏️"进入编辑态 - 可修改:标题、内容(限制在content_completed前)、排序 - 章节操作:`上移/下移` `删除` `重新生成` ### 3.4 创建流程回退(create.vue) **关键:create.vue 需要保存用户的选择状态到 storage 或后端** 新建 API: | 方法 | 路径 | 说明 | |------|------|------| | POST | `/api/book-generator/draft` | 保存创建草稿 | | PUT | `/api/book-generator/draft/:id` | 更新草稿 | | GET | `/api/book-generator/draft/:id` | 读取草稿 | 前端行为: 1. 用户填写创建表单 → 点击"创建书籍"前 → 自动保存草稿到后端 2. 用户点击"返回修改" → 读取草稿 → 填充表单 3. 用户重新选择选项 → 更新草稿 → 继续创建 --- ## 四、分阶段实现 ### Phase 1:后端编辑 API(P0) - [ ] 扩展 `album-management.controller.ts` 新增 PUT `/books/:id` - [ ] 新增 PUT `/chapters/:id` - [ ] 新增 DELETE `/chapters/:id` - [ ] 新增 POST `/chapters/:id/regenerate`(带阶段回退逻辑) - [ ] 在 `stage-manager.ts` 补充回退重生成协议 ### Phase 2:前端编辑界面(P0) - [ ] detail.vue 顶部添加"编辑书籍"按钮 - [ ] 书籍编辑弹窗(支持书名/简介/封面修改) - [ ] 章节行内编辑态(上移/下移/删除/重新生成) - [ ] 编辑权限控制(genStage 限制) ### Phase 3:创建草稿与回退(P1) - [ ] 后端新增 `/draft` 系列 API - [ ] create.vue 创建前自动保存草稿 - [ ] 创建失败/用户返回时读取草稿继续编辑 - [ ] "上一步"按钮回到创建表单重新选择 ### Phase 4:章节排序优化(P2) - [ ] 新增 `sortOrder` 字段迁移 - [ ] 前端拖拽排序功能 - [ ] 后端批量更新排序 --- ## 五、验证清单 - [ ] PUT `/api/book-generator/books/:id` 更新书名成功 - [ ] PUT `/api/book-generator/chapters/:id` 更新章节标题成功 - [ ] DELETE `/api/book-generator/chapters/:id` 删除章节成功 - [ ] audio_completed 阶段编辑内容时被阻止 - [ ] detail.vue 编辑弹窗正常打开/关闭 - [ ] 创建流程选择错误选项后可回退修改 - [ ] 章节重新生成后 genStage 正确回退