{ "project_name": "AI有声书生成工具-第二期", "base_config": { "backend_port": 3000, "frontend_port": 8080, "db_host": "localhost", "db_port": 3306 }, "features": [ { "id": 1, "description": "播放记录功能 - 记录播放进度,支持续播", "priority": "P1", "phase": "第一阶段", "backend_test_steps": [ "1. curl -X GET http://localhost:3000/api/player/progress - 验证获取播放进度接口返回 200", "2. curl -X POST http://localhost:3000/api/player/progress -d '{\"audioId\":\"test\",\"progress\":30}' - 验证保存进度接口返回 200", "3. curl -X GET http://localhost:3000/api/player/progress - 验证保存后能正确获取进度" ], "frontend_test_steps": [ "1. 打开首页,播放一个音频", "2. 暂停播放,查看是否显示当前进度", "3. 退出页面后重新进入", "4. 验证是否显示'继续播放'按钮并正确续播到30秒位置" ], "status": "frontend-testing", "passes": false }, { "id": 2, "description": "收藏功能 - 收藏喜欢的音频", "priority": "P1", "phase": "第一阶段", "backend_test_steps": [ "1. curl -X GET http://localhost:8000/api/favorites - 验证获取收藏列表接口返回 200", "2. curl -X POST http://localhost:8000/api/favorites -d '{\"audioId\":\"test-audio-1\"}' - 验证添加收藏接口返回 200", "3. curl -X GET http://localhost:8000/api/favorites - 验证收藏列表包含新添加的音频", "4. curl -X DELETE http://localhost:8000/api/favorites/test-audio-1 - 验证取消收藏接口返回 200" ], "frontend_test_steps": [ "1. 打开播放器页面播放音频", "2. 点击收藏按钮(心形图标)", "3. 验证按钮变为实心红色", "4. 进入收藏页面,验证已收藏的音频显示在列表中", "5. 点击取消收藏,验证列表中该音频消失" ], "status": "init", "passes": false }, { "id": 3, "description": "定时关闭功能 - 睡眠定时、15/30/60分钟自动停止", "priority": "P1", "phase": "第一阶段", "backend_test_steps": [], "frontend_test_steps": [ "1. 打开播放器页面开始播放", "2. 点击定时按钮打开定时设置", "3. 选择15分钟定时", "4. 验证显示倒计时(如14:59)", "5. 等待约1分钟后刷新页面", "6. 验证倒计时正确递减", "7. 等待定时结束,验证播放自动暂停" ], "status": "init", "passes": false }, { "id": 4, "description": "播放速度记忆 - 0.5x-2x速听,记忆用户偏好", "priority": "P1", "phase": "第一阶段", "backend_test_steps": [ "1. curl -X GET http://localhost:8000/api/user/preferences - 验证获取用户偏好接口返回 200", "2. curl -X PUT http://localhost:8000/api/user/preferences -d '{\"playSpeed\":1.5}' - 验证更新偏好接口返回 200", "3. curl -X GET http://localhost:8000/api/user/preferences - 验证playSpeed为1.5" ], "frontend_test_steps": [ "1. 打开播放器页面", "2. 点击倍速按钮选择1.5x", "3. 验证播放速度变为1.5x", "4. 退出页面", "5. 重新进入播放器页面", "6. 验证倍速按钮显示1.5x且播放速度为1.5x" ], "status": "init", "passes": false }, { "id": 5, "description": "分享功能 - 分享给微信好友/朋友圈", "priority": "P1", "phase": "第一阶段", "backend_test_steps": [ "1. curl -X POST http://localhost:8000/api/share -d '{\"audioId\":\"test-audio-1\"}' - 验证生成分享链接接口返回 200" ], "frontend_test_steps": [ "1. 打开播放器页面", "2. 点击分享按钮", "3. 验证弹出分享菜单(微信好友、朋友圈、复制链接)", "4. 选择'复制链接',验证剪贴板包含分享URL", "5. 点击微信好友,验证调用微信分享API" ], "status": "init", "passes": false }, { "id": 6, "description": "加载优化 - 骨架屏、缓存优化", "priority": "P1", "phase": "贯穿全程", "backend_test_steps": [], "frontend_test_steps": [ "1. 清除浏览器缓存", "2. 打开首页", "3. 验证显示骨架屏加载动画", "4. 验证内容加载后骨架屏消失", "5. 再次打开首页", "6. 验证第二次加载更快(使用缓存)" ], "status": "init", "passes": false }, { "id": 7, "description": "全局搜索 - 搜索有声书标题、历史记录", "priority": "P1", "phase": "第二阶段", "backend_test_steps": [ "1. curl -X GET 'http://localhost:8000/api/search?q=test' - 验证搜索接口返回 200", "2. curl -X GET 'http://localhost:8000/api/search?q=' - 验证空关键词返回历史记录", "3. curl -X GET 'http://localhost:8000/api/search?q=小说' - 验证中文搜索正常" ], "frontend_test_steps": [ "1. 点击顶部搜索图标进入搜索页面", "2. 验证显示搜索历史和热门推荐", "3. 输入关键词'test'", "4. 点击搜索按钮", "5. 验证搜索结果列表显示匹配的内容", "6. 点击搜索结果", "7. 验证跳转到播放器页面" ], "status": "init", "passes": false }, { "id": 8, "description": "内容分类 - 按类型筛选(故事/小说/新闻/学习)", "priority": "P2", "phase": "第二阶段", "backend_test_steps": [ "1. curl -X GET http://localhost:8000/api/categories - 验证获取分类列表接口返回 200", "2. curl -X GET http://localhost:8000/api/categories/1 - 验证获取分类下音频接口返回 200" ], "frontend_test_steps": [ "1. 在首页点击分类标签(如'小说')", "2. 验证内容列表刷新为该分类的内容", "3. 切换到其他分类(如'学习')", "4. 验证内容列表正确切换", "5. 点击'全部'标签", "6. 验证显示全部内容" ], "status": "init", "passes": false }, { "id": 9, "description": "音质选择 - 高/标准音质切换", "priority": "P2", "phase": "第二阶段", "backend_test_steps": [ "1. curl -X PUT http://localhost:8000/api/user/preferences -d '{\"quality\":\"high\"}' - 验证更新音质偏好返回 200", "2. curl -X GET http://localhost:8000/api/user/preferences - 验证quality为high" ], "frontend_test_steps": [ "1. 打开播放器页面", "2. 打开音质设置", "3. 切换到高清音质", "4. 验证显示'高清'标识", "5. 退出页面重新进入", "6. 验证音质偏好保持为高清" ], "status": "init", "passes": false }, { "id": 10, "description": "离线缓存 - 下载到本地离线听", "priority": "P2", "phase": "第二阶段", "backend_test_steps": [ "1. curl -X GET http://localhost:8000/api/downloads - 验证获取下载列表接口返回 200" ], "frontend_test_steps": [ "1. 在播放器页面点击下载按钮", "2. 验证显示下载进度", "3. 等待下载完成", "4. 进入'我的下载'页面", "5. 验证已下载的音频显示在列表中", "6. 开启飞行模式", "7. 点击离线音频播放", "8. 验证离线播放正常" ], "status": "init", "passes": false }, { "id": 11, "description": "断点续传 - 大文件下载断点续传", "priority": "P2", "phase": "贯穿全程", "backend_test_steps": [ "1. curl -X POST http://localhost:8000/api/downloads/check -d '{\"audioId\":\"test\",\"downloaded\":1024000}' - 验证断点查询返回正确信息" ], "frontend_test_steps": [ "1. 开始下载一个大音频文件", "2. 在下载过程中关闭页面中断下载", "3. 重新进入下载页面", "4. 验证显示'继续下载'按钮", "5. 点击继续下载", "6. 验证从断点处继续下载" ], "status": "init", "passes": false }, { "id": 12, "description": "多端数据同步 - 多端数据实时同步", "priority": "P2", "phase": "贯穿全程", "backend_test_steps": [ "1. curl -X POST http://localhost:8000/api/favorites -d '{\"audioId\":\"sync-test\"}' - 添加收藏", "2. curl -X GET http://localhost:8000/api/favorites - 验证收藏添加成功", "3. curl -X PUT http://localhost:8000/api/player/progress -d '{\"audioId\":\"sync-test\",\"progress\":50}' - 更新播放进度" ], "frontend_test_steps": [ "1. 在H5端收藏一个音频", "2. 在小程序端打开收藏页面", "3. 验证收藏列表包含刚添加的音频", "4. 在H5端播放并暂停在1分钟位置", "5. 在小程序端打开同一音频", "6. 验证显示从1分钟位置继续播放" ], "status": "init", "passes": false }, { "id": 13, "description": "评论打分 - 对内容评论评分", "priority": "P2", "phase": "第三阶段", "backend_test_steps": [ "1. curl -X GET http://localhost:8000/api/comments/test-audio-1 - 验证获取评论列表接口返回 200", "2. curl -X POST http://localhost:8000/api/comments -d '{\"audioId\":\"test-audio-1\",\"content\":\"很好听\",\"rating\":5}' - 验证发表评论接口返回 200", "3. curl -X GET http://localhost:8000/api/comments/test-audio-1 - 验证评论已添加" ], "frontend_test_steps": [ "1. 打开播放器页面", "2. 点击评论按钮", "3. 输入评论内容'非常棒的声音'", "4. 选择5星评分", "5. 点击提交", "6. 验证评论显示在评论区", "7. 验证评分为5星" ], "status": "init", "passes": false }, { "id": 14, "description": "消息通知 - 新内容推送、会员优惠", "priority": "P3", "phase": "第三阶段", "backend_test_steps": [ "1. curl -X GET http://localhost:8000/api/notifications - 验证获取消息列表接口返回 200" ], "frontend_test_steps": [ "1. 进入设置页面", "2. 找到消息通知开关", "3. 开启消息通知", "4. 验证弹出通知权限申请", "5. 授权后收到推送消息", "6. 点击消息通知", "7. 验证跳转到对应页面" ], "status": "init", "passes": false }, { "id": 15, "description": "个性化主题 - 深色/浅色主题切换", "priority": "P3", "phase": "第三阶段", "backend_test_steps": [ "1. curl -X PUT http://localhost:8000/api/user/preferences -d '{\"theme\":\"dark\"}' - 验证更新主题偏好返回 200", "2. curl -X GET http://localhost:8000/api/user/preferences - 验证theme为dark" ], "frontend_test_steps": [ "1. 进入设置页面", "2. 点击主题设置", "3. 选择深色主题", "4. 验证页面切换为深色模式", "5. 退出页面重新进入", "6. 验证主题保持为深色" ], "status": "init", "passes": false } ] }