{ "project_name": "AI有声书生成工具", "base_config": { "backend_port": 3000, "frontend_port": 5173, "db_host": "localhost", "db_port": 3306, "auth_enabled": false }, "features": [ { "id": 1, "description": "播放记录 - 数据库表设计", "status": "done", "passes": true, "backend_test_steps": [ "1. curl -X POST http://localhost:3000/api/player/progress -H 'Content-Type: application/json' -d '{\"userId\":\"test-user\",\"audioId\":\"audio-001\",\"progress\":30.5,\"duration\":180}' - 验证创建播放记录", "2. curl http://localhost:3000/api/player/progress?userId=test-user - 验证查询播放记录列表", "3. curl -X PUT http://localhost:3000/api/player/progress/audio-001 -H 'Content-Type: application/json' -d '{\"progress\":60.0}' - 验证更新播放进度", "4. curl -X DELETE http://localhost:3000/api/player/progress/audio-001 - 验证删除播放记录" ], "frontend_test_steps": [ "1. 打开播放器页面", "2. 点击播放音频", "3. 等待5秒后查看播放进度是否自动保存", "4. 刷新页面验证续播位置是否正确" ] }, { "id": 2, "description": "播放记录 - 前端播放器集成", "backend_test_steps": [ "1. curl http://localhost:3000/api/player/progress?userId=test-user - 验证获取播放进度接口正常" ], "frontend_test_steps": [ "1. 打开player页面", "2. 选择一个有播放进度的音频", "3. 验证是否从上次进度位置开始播放", "4. 验证播放进度每5秒自动保存" ], "status": "done", "passes": true }, { "id": 3, "description": "收藏功能 - 数据库表设计", "backend_test_steps": [ "1. curl -X POST http://localhost:3000/api/favorites -H 'Content-Type: application/json' -d '{\"userId\":\"test-user\",\"audioId\":\"audio-002\"}' - 验证添加收藏", "2. curl http://localhost:3000/api/favorites?userId=test-user - 验证查询收藏列表", "3. curl -X DELETE http://localhost:3000/api/favorites/audio-002 - 验证取消收藏", "4. curl -X POST http://localhost:3000/api/favorites -H 'Content-Type: application/json' -d '{\"userId\":\"test-user\",\"audioId\":\"audio-003\"}' - 重新添加收藏用于后续测试" ], "frontend_test_steps": [ "1. 打开player页面", "2. 点击收藏按钮", "3. 验证收藏状态变为已收藏", "4. 进入favorites页面", "5. 验证收藏的音频显示在列表中", "6. 点击取消收藏按钮", "7. 验证列表中该音频已移除" ], "status": "done", "passes": true }, { "id": 4, "description": "收藏功能 - favorites页面开发", "backend_test_steps": [ "1. curl http://localhost:3000/api/favorites?userId=test-user - 验证收藏列表查询" ], "frontend_test_steps": [ "1. 进入favorites收藏页面", "2. 验证页面正常加载,显示收藏列表", "3. 点击某个音频进入播放器", "4. 返回favorites页面验证列表刷新正常" ], "status": "done", "passes": true }, { "id": 5, "description": "定时关闭 - 前端定时器实现", "backend_test_steps": [], "frontend_test_steps": [ "1. 打开player页面并开始播放", "2. 点击定时关闭按钮", "3. 选择15分钟定时", "4. 验证倒计时显示正确", "5. 等待或快进到定时时间", "6. 验证播放自动暂停" ], "status": "done", "passes": true }, { "id": 6, "description": "播放速度记忆 - 用户偏好API", "backend_test_steps": [ "1. curl -X POST http://localhost:3000/api/user/preferences -H 'Content-Type: application/json' -d '{\"userId\":\"test-user\",\"playSpeed\":1.5}' - 验证创建用户偏好", "2. curl http://localhost:3000/api/user/preferences?userId=test-user - 验证查询用户偏好", "3. curl -X PUT http://localhost:3000/api/user/preferences -H 'Content-Type: application/json' -d '{\"userId\":\"test-user\",\"playSpeed\":2.0}' - 验证更新播放速度", "4. curl -X PUT http://localhost:3000/api/user/preferences -H 'Content-Type: application/json' -d '{\"userId\":\"test-user\",\"playSpeed\":1.0}' - 恢复默认速度" ], "frontend_test_steps": [ "1. 打开player页面", "2. 调整播放速度为1.5x", "3. 刷新页面", "4. 验证播放速度仍为1.5x" ], "status": "done", "passes": true }, { "id": 7, "description": "分享功能 - 微信JSSDK集成", "backend_test_steps": [ "1. curl http://localhost:3000/api/share?audioId=audio-001 - 验证生成分享链接接口" ], "frontend_test_steps": [ "1. 打开player页面", "2. 点击分享按钮", "3. 验证分享面板正常弹出", "4. 验证分享卡片显示标题、封面、简介" ], "status": "done", "passes": true }, { "id": 8, "description": "分享功能 - 分享卡片生成", "backend_test_steps": [ "1. curl http://localhost:3000/api/share?audioId=audio-001 - 验证分享信息接口返回正确数据" ], "frontend_test_steps": [ "1. 打开player页面", "2. 点击分享到微信好友", "3. 验证分享内容包含音频标题", "4. 点击分享到朋友圈", "5. 验证朋友圈分享内容正确" ], "status": "done", "passes": true }, { "id": 9, "description": "加载优化 - 骨架屏组件", "backend_test_steps": [], "frontend_test_steps": [ "1. 刷新首页", "2. 验证骨架屏正常显示", "3. 验证数据加载完成后骨架屏消失", "4. 验证内容正常渲染" ], "status": "done", "passes": true }, { "id": 10, "description": "加载优化 - 图片懒加载", "backend_test_steps": [], "frontend_test_steps": [ "1. 进入包含多张图片的列表页面", "2. 验证首屏图片正常加载", "3. 滚动页面", "4. 验证下方图片进入可视区时加载", "5. 滚动回顶部", "6. 验证图片已缓存不会重复加载" ], "status": "done", "passes": true }, { "id": 11, "description": "全局搜索 - 搜索API", "backend_test_steps": [ "1. curl http://localhost:3000/api/search?q=test - 验证搜索接口", "2. curl http://localhost:3000/api/search?q=故事 - 验证中文搜索", "3. curl http://localhost:3000/api/search?q= - 验证空关键词处理" ], "frontend_test_steps": [ "1. 进入search搜索页面", "2. 输入搜索关键词", "3. 验证搜索结果列表正常显示", "4. 验证搜索结果相关性" ], "status": "done", "passes": true }, { "id": 12, "description": "全局搜索 - search页面开发", "backend_test_steps": [ "1. curl http://localhost:3000/api/search?q=小说 - 验证搜索结果正确返回" ], "frontend_test_steps": [ "1. 进入search搜索页面", "2. 验证搜索历史记录显示", "3. 验证热门推荐显示", "4. 输入关键词进行搜索", "5. 点击搜索结果进入player页面" ], "status": "done", "passes": true }, { "id": 13, "description": "内容分类 - 分类管理API", "backend_test_steps": [ "1. curl http://localhost:3000/api/categories - 验证获取分类列表", "2. curl http://localhost:3000/api/categories/1 - 验证获取分类下音频", "3. curl http://localhost:3000/api/categories/999 - 验证无效分类ID处理" ], "frontend_test_steps": [ "1. 进入index首页", "2. 验证分类标签显示正确", "3. 点击某个分类", "4. 验证只显示该分类下的音频" ], "status": "done", "passes": true }, { "id": 14, "description": "内容分类 - 分类筛选", "backend_test_steps": [ "1. curl http://localhost:3000/api/categories/2 - 验证分类2音频列表" ], "frontend_test_steps": [ "1. 在index页面切换不同分类标签", "2. 验证列表内容随分类变化", "3. 验证分类筛选准确性" ], "status": "done", "passes": true }, { "id": 15, "description": "音质选择 - 音质切换逻辑", "backend_test_steps": [ "1. curl -X PUT http://localhost:3000/api/user/preferences -H 'Content-Type: application/json' -d '{\"userId\":\"test-user\",\"quality\":\"high\"}' - 验证设置高品质", "2. curl http://localhost:3000/api/user/preferences?userId=test-user - 验证获取偏好确认" ], "frontend_test_steps": [ "1. 打开player页面", "2. 点击音质选择按钮", "3. 切换到高音质", "4. 验证音质切换生效", "5. 刷新页面验证音质设置已保存" ], "status": "done", "passes": true }, { "id": 16, "description": "离线缓存 - 下载管理", "backend_test_steps": [ "1. curl http://localhost:3000/api/downloads - 验证获取下载列表", "2. curl http://localhost:3000/api/downloads/check - 验证检查下载状态" ], "frontend_test_steps": [ "1. 进入favorites页面", "2. 选择一个音频点击下载", "3. 验证下载进度显示", "4. 验证下载完成后状态更新" ], "status": "done", "passes": true }, { "id": 17, "description": "离线缓存 - 离线播放", "backend_test_steps": [ "1. curl http://localhost:3000/api/downloads - 验证下载列表接口" ], "frontend_test_steps": [ "1. 进入favorites页面", "2. 验证已下载音频显示下载状态", "3. 关闭网络连接", "4. 点击已下载音频进行播放", "5. 验证离线播放正常" ], "status": "done", "passes": true }, { "id": 18, "description": "评论打分 - 评论API", "backend_test_steps": [ "1. curl -X POST http://localhost:3000/api/comments -H 'Content-Type: application/json' -d '{\"userId\":\"test-user\",\"audioId\":\"audio-004\",\"content\":\"很好听\",\"rating\":5}' - 验证发表评论", "2. curl http://localhost:3000/api/comments/audio-004 - 验证获取评论列表", "3. curl -X POST http://localhost:3000/api/comments -H 'Content-Type: application/json' -d '{\"userId\":\"test-user2\",\"audioId\":\"audio-004\",\"content\":\"不错\",\"rating\":4}' - 添加更多评论" ], "frontend_test_steps": [ "1. 打开player页面", "2. 滑动到评论区", "3. 验证评论列表显示", "4. 输入评论内容并打分", "5. 点击提交", "6. 验证新评论显示在列表中" ], "status": "done", "passes": true }, { "id": 19, "description": "消息通知 - 通知API", "backend_test_steps": [ "1. curl http://localhost:3000/api/notifications - 验证获取通知列表", "2. curl -X POST http://localhost:3000/api/notifications/read -H 'Content-Type: application/json' -d '{\"id\":\"notif-001\"}' - 验证标记已读" ], "frontend_test_steps": [ "1. 进入任意页面", "2. 验证通知图标显示", "3. 点击通知图标", "4. 验证通知列表正常显示", "5. 点击某条通知", "6. 验证已读状态更新" ], "status": "done", "passes": true }, { "id": 20, "description": "专辑功能 - 数据库表设计", "backend_test_steps": [ "1. curl -X POST http://localhost:3000/api/albums -H 'Content-Type: application/json' -d '{\"name\":\"测试专辑\",\"description\":\"测试描述\",\"coverUrl\":\"https://xxx.jpg\"}' - 验证创建专辑", "2. curl http://localhost:3000/api/albums - 验证获取专辑列表", "3. curl http://localhost:3000/api/albums/1 - 验证获取专辑详情", "4. curl -X PUT http://localhost:3000/api/albums/1 -H 'Content-Type: application/json' -d '{\"name\":\"更新后的专辑名\"}' - 验证更新专辑", "5. curl -X DELETE http://localhost:3000/api/albums/1 - 验证删除专辑" ], "frontend_test_steps": [ "1. 进入专辑页面", "2. 验证专辑列表正常显示", "3. 点击某个专辑进入详情", "4. 验证专辑封面、名称、描述显示正确" ], "status": "done", "passes": true }, { "id": 21, "description": "专辑功能 - 专辑内音频管理API", "backend_test_steps": [ "1. curl -X POST http://localhost:3000/api/albums/1/audio -H 'Content-Type: application/json' -d '{\"audioId\":\"audio-001\",\"order\":1}' - 验证添加音频到专辑", "2. curl http://localhost:3000/api/albums/1/audios - 验证获取专辑内音频列表", "3. curl -X PUT http://localhost:3000/api/albums/1/audio/audio-001 -H 'Content-Type: application/json' -d '{\"order\":2}' - 验证调整音频顺序", "4. curl -X DELETE http://localhost:3000/api/albums/1/audio/audio-001 - 验证从专辑移除音频" ], "frontend_test_steps": [ "1. 进入专辑详情页", "2. 验证专辑内音频列表按顺序显示", "3. 验证音频数量正确" ], "status": "done", "passes": true }, { "id": 22, "description": "专辑功能 - 专辑详情页开发", "backend_test_steps": [ "1. curl http://localhost:3000/api/albums/1 - 验证专辑详情接口返回正确数据" ], "frontend_test_steps": [ "1. 进入专辑详情页", "2. 验证专辑封面、名称、描述显示正确", "3. 验证音频列表按顺序显示", "4. 点击播放全部按钮", "5. 验证进入播放器并开始连续播放" ], "status": "done", "passes": true }, { "id": 23, "description": "专辑功能 - 专辑列表页开发", "backend_test_steps": [ "1. curl http://localhost:3000/api/albums - 验证专辑列表接口", "2. curl http://localhost:3000/api/albums?category=1 - 验证分类筛选专辑" ], "frontend_test_steps": [ "1. 进入专辑页面", "2. 验证专辑列表网格/列表显示正确", "3. 验证封面图、名称、音频数量显示", "4. 下拉刷新列表", "5. 验证列表正常加载" ], "status": "done", "passes": true }, { "id": 24, "description": "专辑功能 - 订阅/关注专辑", "backend_test_steps": [ "1. curl -X POST http://localhost:3000/api/albums/1/subscribe -H 'Content-Type: application/json' -d '{\"userId\":\"test-user\"}' - 验证订阅专辑", "2. curl http://localhost:3000/api/albums/subscribed?userId=test-user - 验证获取已订阅专辑列表", "3. curl -X DELETE http://localhost:3000/api/albums/1/subscribe - 验证取消订阅" ], "frontend_test_steps": [ "1. 进入专辑详情页", "2. 点击订阅/关注按钮", "3. 验证按钮状态变为已订阅", "4. 进入我的订阅页面", "5. 验证已订阅专辑显示在列表中", "6. 点击取消订阅", "7. 验证专辑从列表移除" ], "status": "done", "passes": true }, { "id": 25, "description": "专辑功能 - 专辑连续播放", "backend_test_steps": [ "1. curl http://localhost:3000/api/albums/1/audios - 验证获取专辑音频列表接口" ], "frontend_test_steps": [ "1. 进入专辑详情页", "2. 点击播放全部", "3. 验证播放器显示专辑信息", "4. 当前音频播放完毕后自动播放下一首", "5. 验证播放列表显示专辑内所有音频", "6. 可手动切换上一首/下一首" ], "status": "done", "passes": true }, { "id": 26, "description": "播放页优化 - 旋转唱片效果", "backend_test_steps": [], "frontend_test_steps": [ "1. 进入播放页", "2. 验证封面显示在中央", "3. 开始播放,验证封面旋转动画", "4. 暂停播放,验证旋转停止", "5. 继续播放,验证旋转恢复" ], "status": "done", "passes": true }, { "id": 27, "description": "播放页优化 - 播放列表展示", "backend_test_steps": [], "frontend_test_steps": [ "1. 进入播放页", "2. 验证播放列表显示在底部", "3. 点击播放列表展开按钮", "4. 验证当前播放音频高亮显示", "5. 点击列表中的音频切换播放" ], "status": "done", "passes": true }, { "id": 28, "description": "播放页优化 - 循环模式(列表循环/单曲循环)", "backend_test_steps": [], "frontend_test_steps": [ "1. 进入播放页", "2. 验证循环模式按钮显示", "3. 点击切换循环模式", "4. 验证模式依次变化:列表循环 → 单曲循环 → 关闭", "5. 播放完毕验证按当前模式处理" ], "status": "done", "passes": true }, { "id": 29, "description": "播放页优化 - 随机播放模式", "backend_test_steps": [], "frontend_test_steps": [ "1. 进入播放页", "2. 验证随机播放按钮显示", "3. 点击开启随机播放", "4. 验证点击下一首时随机播放列表中任意一首", "5. 关闭随机播放,验证按顺序播放" ], "status": "done", "passes": true }, { "id": 30, "description": "播放页优化 - 毛玻璃背景效果", "backend_test_steps": [], "frontend_test_steps": [ "1. 进入播放页", "2. 验证页面背景使用封面模糊图", "3. 验证背景有渐变叠加效果", "4. 验证文字清晰可读" ], "status": "done", "passes": true }, { "id": 31, "description": "视频生成 - 图片+音频生成配图视频", "backend_test_steps": [ "1. curl -X POST http://localhost:3000/api/video/projects -H 'Content-Type: application/json' -d '{\"title\":\"测试视频\"}' - 验证创建视频项目", "2. curl http://localhost:3000/api/video/projects - 验证查询视频项目列表", "3. curl http://localhost:3000/api/video/projects/1 - 验证获取视频项目详情", "4. curl -X PUT http://localhost:3000/api/video/projects/1 -H 'Content-Type: application/json' -d '{\"title\":\"更新标题\"}' - 验证更新视频项目", "5. curl -X DELETE http://localhost:3000/api/video/projects/1 - 验证删除视频项目" ], "frontend_test_steps": [ "1. 进入视频生成页面", "2. 点击创建新视频", "3. 填写视频标题", "4. 上传/选择图片", "5. 上传/选择音频", "6. 配置Ken Burns效果", "7. 配置字幕", "8. 点击生成视频", "9. 验证进度显示", "10. 生成完成后预览视频", "11. 验证下载和分享功能" ], "status": "init", "passes": false }, { "id": 32, "description": "用户偏好设置增强 - 默认音色/音量/自动播放", "backend_test_steps": [ "1. curl -X PUT http://localhost:3000/api/user/preferences -H 'Content-Type: application/json' -d '{\"defaultVoiceId\":\"ethan\",\"defaultVolume\":80,\"autoPlayNext\":true,\"wifiOnlyDownload\":false}' - 验证更新偏好设置", "2. curl http://localhost:3000/api/user/preferences - 验证获取偏好设置确认保存成功" ], "frontend_test_steps": [ "1. 打开设置页面", "2. 修改默认音色为\"苏瑶\"", "3. 修改默认音量为 80%", "4. 关闭自动播放下一首", "5. 重新打开应用", "6. 验证设置已恢复", "7. 进入生成页面,验证默认音色已选中", "8. 进入播放器,验证默认音量设置" ], "status": "done", "passes": true }, { "id": 33, "description": "批量删除功能 - 历史记录和书籍", "backend_test_steps": [ "1. curl -X DELETE http://localhost:3000/api/history/batch -H 'Content-Type: application/json' -d '{\"ids\":[\"audio-1\",\"audio-2\"]}' - 验证批量删除历史记录", "2. curl http://localhost:3000/api/history - 验证记录已删除" ], "frontend_test_steps": [ "1. 打开历史记录页面", "2. 点击\"编辑\"按钮进入编辑模式", "3. 勾选 2-3 条记录", "4. 验证选中数量提示正确", "5. 点击\"全选\"验证全部选中", "6. 点击\"删除\",确认弹窗", "7. 验证记录已删除", "8. 在书籍生成页重复上述测试" ], "status": "done", "passes": true }, { "id": 34, "description": "内容管理 - 重命名和移动到专辑", "backend_test_steps": [ "1. curl -X PUT http://localhost:3000/api/album/1/rename -H 'Content-Type: application/json' -d '{\"title\":\"新标题\"}' - 验证重命名专辑", "2. curl -X POST http://localhost:3000/api/audio/audio-1/move-to-album -H 'Content-Type: application/json' -d '{\"albumId\":2}' - 验证移动音频到专辑" ], "frontend_test_steps": [ "1. 打开专辑详情页", "2. 长按某个章节", "3. 选择\"重命名\"", "4. 输入新名称,确认", "5. 验证名称已更新", "6. 选择\"移动到专辑\"", "7. 选择目标专辑", "8. 验证章节已移动" ], "status": "done", "passes": true }, { "id": 35, "description": "播放列表功能 - 创建和管理播放列表", "backend_test_steps": [ "1. curl -X POST http://localhost:3000/api/playlists -H 'Content-Type: application/json' -d '{\"name\":\"我的最爱\",\"description\":\"最喜欢的音频\"}' - 验证创建播放列表", "2. curl -X POST http://localhost:3000/api/playlists/1/items -H 'Content-Type: application/json' -d '{\"chapterId\":1}' - 验证添加到播放列表", "3. curl http://localhost:3000/api/playlists - 验证获取播放列表" ], "frontend_test_steps": [ "1. 进入播放器页面", "2. 点击\"添加到播放列表\"", "3. 选择\"新建播放列表\"", "4. 输入名称\"睡前听书\"", "5. 确认添加", "6. 进入\"我的\"页面,查看播放列表入口", "7. 进入播放列表详情", "8. 验证音频在列表中", "9. 点击播放全部", "10. 验证按顺序播放" ], "status": "init", "passes": false }, { "id": 36, "description": "草稿与自动保存 - 防止内容丢失", "backend_test_steps": [ "1. curl -X POST http://localhost:3000/api/drafts -H 'Content-Type: application/json' -d '{\"type\":\"audio\",\"title\":\"草稿测试\",\"content\":\"这是测试内容\"}' - 验证保存草稿", "2. curl http://localhost:3000/api/drafts - 验证获取草稿列表" ], "frontend_test_steps": [ "1. 进入生成页面", "2. 输入一些文本", "3. 等待 3 秒,验证右上角显示\"已保存\"", "4. 离开页面(不生成)", "5. 重新进入生成页面", "6. 验证提示\"发现未保存的草稿,是否恢复?\"", "7. 点击\"恢复\"", "8. 验证内容已恢复", "9. 进入草稿列表页", "10. 验证草稿显示在列表中" ], "status": "init", "passes": false }, { "id": 37, "description": "通知功能 - 生成完成和会员提醒", "backend_test_steps": [ "1. curl http://localhost:3000/api/notifications - 验证获取通知列表", "2. curl -X PUT http://localhost:3000/api/notifications/read-all - 验证全部标为已读" ], "frontend_test_steps": [ "1. 生成一个音频(触发通知)", "2. 观察\"我的\"页面是否出现未读角标", "3. 进入通知页面", "4. 验证音频生成完成通知显示", "5. 点击通知,验证标记已读", "6. 验证角标数字减少", "7. 点击\"全部已读\"", "8. 验证所有通知变为已读状态" ], "status": "init", "passes": false } ] }