feature_list.json 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682
  1. {
  2. "project_name": "AI有声书生成工具",
  3. "base_config": {
  4. "backend_port": 3000,
  5. "frontend_port": 5173,
  6. "db_host": "localhost",
  7. "db_port": 3306,
  8. "auth_enabled": false
  9. },
  10. "features": [
  11. {
  12. "id": 1,
  13. "description": "播放记录 - 数据库表设计",
  14. "status": "done",
  15. "passes": true,
  16. "backend_test_steps": [
  17. "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}' - 验证创建播放记录",
  18. "2. curl http://localhost:3000/api/player/progress?userId=test-user - 验证查询播放记录列表",
  19. "3. curl -X PUT http://localhost:3000/api/player/progress/audio-001 -H 'Content-Type: application/json' -d '{\"progress\":60.0}' - 验证更新播放进度",
  20. "4. curl -X DELETE http://localhost:3000/api/player/progress/audio-001 - 验证删除播放记录"
  21. ],
  22. "frontend_test_steps": [
  23. "1. 打开播放器页面",
  24. "2. 点击播放音频",
  25. "3. 等待5秒后查看播放进度是否自动保存",
  26. "4. 刷新页面验证续播位置是否正确"
  27. ]
  28. },
  29. {
  30. "id": 2,
  31. "description": "播放记录 - 前端播放器集成",
  32. "backend_test_steps": [
  33. "1. curl http://localhost:3000/api/player/progress?userId=test-user - 验证获取播放进度接口正常"
  34. ],
  35. "frontend_test_steps": [
  36. "1. 打开player页面",
  37. "2. 选择一个有播放进度的音频",
  38. "3. 验证是否从上次进度位置开始播放",
  39. "4. 验证播放进度每5秒自动保存"
  40. ],
  41. "status": "done",
  42. "passes": true
  43. },
  44. {
  45. "id": 3,
  46. "description": "收藏功能 - 数据库表设计",
  47. "backend_test_steps": [
  48. "1. curl -X POST http://localhost:3000/api/favorites -H 'Content-Type: application/json' -d '{\"userId\":\"test-user\",\"audioId\":\"audio-002\"}' - 验证添加收藏",
  49. "2. curl http://localhost:3000/api/favorites?userId=test-user - 验证查询收藏列表",
  50. "3. curl -X DELETE http://localhost:3000/api/favorites/audio-002 - 验证取消收藏",
  51. "4. curl -X POST http://localhost:3000/api/favorites -H 'Content-Type: application/json' -d '{\"userId\":\"test-user\",\"audioId\":\"audio-003\"}' - 重新添加收藏用于后续测试"
  52. ],
  53. "frontend_test_steps": [
  54. "1. 打开player页面",
  55. "2. 点击收藏按钮",
  56. "3. 验证收藏状态变为已收藏",
  57. "4. 进入favorites页面",
  58. "5. 验证收藏的音频显示在列表中",
  59. "6. 点击取消收藏按钮",
  60. "7. 验证列表中该音频已移除"
  61. ],
  62. "status": "done",
  63. "passes": true
  64. },
  65. {
  66. "id": 4,
  67. "description": "收藏功能 - favorites页面开发",
  68. "backend_test_steps": [
  69. "1. curl http://localhost:3000/api/favorites?userId=test-user - 验证收藏列表查询"
  70. ],
  71. "frontend_test_steps": [
  72. "1. 进入favorites收藏页面",
  73. "2. 验证页面正常加载,显示收藏列表",
  74. "3. 点击某个音频进入播放器",
  75. "4. 返回favorites页面验证列表刷新正常"
  76. ],
  77. "status": "done",
  78. "passes": true
  79. },
  80. {
  81. "id": 5,
  82. "description": "定时关闭 - 前端定时器实现",
  83. "backend_test_steps": [],
  84. "frontend_test_steps": [
  85. "1. 打开player页面并开始播放",
  86. "2. 点击定时关闭按钮",
  87. "3. 选择15分钟定时",
  88. "4. 验证倒计时显示正确",
  89. "5. 等待或快进到定时时间",
  90. "6. 验证播放自动暂停"
  91. ],
  92. "status": "done",
  93. "passes": true
  94. },
  95. {
  96. "id": 6,
  97. "description": "播放速度记忆 - 用户偏好API",
  98. "backend_test_steps": [
  99. "1. curl -X POST http://localhost:3000/api/user/preferences -H 'Content-Type: application/json' -d '{\"userId\":\"test-user\",\"playSpeed\":1.5}' - 验证创建用户偏好",
  100. "2. curl http://localhost:3000/api/user/preferences?userId=test-user - 验证查询用户偏好",
  101. "3. curl -X PUT http://localhost:3000/api/user/preferences -H 'Content-Type: application/json' -d '{\"userId\":\"test-user\",\"playSpeed\":2.0}' - 验证更新播放速度",
  102. "4. curl -X PUT http://localhost:3000/api/user/preferences -H 'Content-Type: application/json' -d '{\"userId\":\"test-user\",\"playSpeed\":1.0}' - 恢复默认速度"
  103. ],
  104. "frontend_test_steps": [
  105. "1. 打开player页面",
  106. "2. 调整播放速度为1.5x",
  107. "3. 刷新页面",
  108. "4. 验证播放速度仍为1.5x"
  109. ],
  110. "status": "done",
  111. "passes": true
  112. },
  113. {
  114. "id": 7,
  115. "description": "分享功能 - 微信JSSDK集成",
  116. "backend_test_steps": [
  117. "1. curl http://localhost:3000/api/share?audioId=audio-001 - 验证生成分享链接接口"
  118. ],
  119. "frontend_test_steps": [
  120. "1. 打开player页面",
  121. "2. 点击分享按钮",
  122. "3. 验证分享面板正常弹出",
  123. "4. 验证分享卡片显示标题、封面、简介"
  124. ],
  125. "status": "done",
  126. "passes": true
  127. },
  128. {
  129. "id": 8,
  130. "description": "分享功能 - 分享卡片生成",
  131. "backend_test_steps": [
  132. "1. curl http://localhost:3000/api/share?audioId=audio-001 - 验证分享信息接口返回正确数据"
  133. ],
  134. "frontend_test_steps": [
  135. "1. 打开player页面",
  136. "2. 点击分享到微信好友",
  137. "3. 验证分享内容包含音频标题",
  138. "4. 点击分享到朋友圈",
  139. "5. 验证朋友圈分享内容正确"
  140. ],
  141. "status": "done",
  142. "passes": true
  143. },
  144. {
  145. "id": 9,
  146. "description": "加载优化 - 骨架屏组件",
  147. "backend_test_steps": [],
  148. "frontend_test_steps": [
  149. "1. 刷新首页",
  150. "2. 验证骨架屏正常显示",
  151. "3. 验证数据加载完成后骨架屏消失",
  152. "4. 验证内容正常渲染"
  153. ],
  154. "status": "done",
  155. "passes": true
  156. },
  157. {
  158. "id": 10,
  159. "description": "加载优化 - 图片懒加载",
  160. "backend_test_steps": [],
  161. "frontend_test_steps": [
  162. "1. 进入包含多张图片的列表页面",
  163. "2. 验证首屏图片正常加载",
  164. "3. 滚动页面",
  165. "4. 验证下方图片进入可视区时加载",
  166. "5. 滚动回顶部",
  167. "6. 验证图片已缓存不会重复加载"
  168. ],
  169. "status": "done",
  170. "passes": true
  171. },
  172. {
  173. "id": 11,
  174. "description": "全局搜索 - 搜索API",
  175. "backend_test_steps": [
  176. "1. curl http://localhost:3000/api/search?q=test - 验证搜索接口",
  177. "2. curl http://localhost:3000/api/search?q=故事 - 验证中文搜索",
  178. "3. curl http://localhost:3000/api/search?q= - 验证空关键词处理"
  179. ],
  180. "frontend_test_steps": [
  181. "1. 进入search搜索页面",
  182. "2. 输入搜索关键词",
  183. "3. 验证搜索结果列表正常显示",
  184. "4. 验证搜索结果相关性"
  185. ],
  186. "status": "done",
  187. "passes": true
  188. },
  189. {
  190. "id": 12,
  191. "description": "全局搜索 - search页面开发",
  192. "backend_test_steps": [
  193. "1. curl http://localhost:3000/api/search?q=小说 - 验证搜索结果正确返回"
  194. ],
  195. "frontend_test_steps": [
  196. "1. 进入search搜索页面",
  197. "2. 验证搜索历史记录显示",
  198. "3. 验证热门推荐显示",
  199. "4. 输入关键词进行搜索",
  200. "5. 点击搜索结果进入player页面"
  201. ],
  202. "status": "done",
  203. "passes": true
  204. },
  205. {
  206. "id": 13,
  207. "description": "内容分类 - 分类管理API",
  208. "backend_test_steps": [
  209. "1. curl http://localhost:3000/api/categories - 验证获取分类列表",
  210. "2. curl http://localhost:3000/api/categories/1 - 验证获取分类下音频",
  211. "3. curl http://localhost:3000/api/categories/999 - 验证无效分类ID处理"
  212. ],
  213. "frontend_test_steps": [
  214. "1. 进入index首页",
  215. "2. 验证分类标签显示正确",
  216. "3. 点击某个分类",
  217. "4. 验证只显示该分类下的音频"
  218. ],
  219. "status": "done",
  220. "passes": true
  221. },
  222. {
  223. "id": 14,
  224. "description": "内容分类 - 分类筛选",
  225. "backend_test_steps": [
  226. "1. curl http://localhost:3000/api/categories/2 - 验证分类2音频列表"
  227. ],
  228. "frontend_test_steps": [
  229. "1. 在index页面切换不同分类标签",
  230. "2. 验证列表内容随分类变化",
  231. "3. 验证分类筛选准确性"
  232. ],
  233. "status": "done",
  234. "passes": true
  235. },
  236. {
  237. "id": 15,
  238. "description": "音质选择 - 音质切换逻辑",
  239. "backend_test_steps": [
  240. "1. curl -X PUT http://localhost:3000/api/user/preferences -H 'Content-Type: application/json' -d '{\"userId\":\"test-user\",\"quality\":\"high\"}' - 验证设置高品质",
  241. "2. curl http://localhost:3000/api/user/preferences?userId=test-user - 验证获取偏好确认"
  242. ],
  243. "frontend_test_steps": [
  244. "1. 打开player页面",
  245. "2. 点击音质选择按钮",
  246. "3. 切换到高音质",
  247. "4. 验证音质切换生效",
  248. "5. 刷新页面验证音质设置已保存"
  249. ],
  250. "status": "done",
  251. "passes": true
  252. },
  253. {
  254. "id": 16,
  255. "description": "离线缓存 - 下载管理",
  256. "backend_test_steps": [
  257. "1. curl http://localhost:3000/api/downloads - 验证获取下载列表",
  258. "2. curl http://localhost:3000/api/downloads/check - 验证检查下载状态"
  259. ],
  260. "frontend_test_steps": [
  261. "1. 进入favorites页面",
  262. "2. 选择一个音频点击下载",
  263. "3. 验证下载进度显示",
  264. "4. 验证下载完成后状态更新"
  265. ],
  266. "status": "done",
  267. "passes": true
  268. },
  269. {
  270. "id": 17,
  271. "description": "离线缓存 - 离线播放",
  272. "backend_test_steps": [
  273. "1. curl http://localhost:3000/api/downloads - 验证下载列表接口"
  274. ],
  275. "frontend_test_steps": [
  276. "1. 进入favorites页面",
  277. "2. 验证已下载音频显示下载状态",
  278. "3. 关闭网络连接",
  279. "4. 点击已下载音频进行播放",
  280. "5. 验证离线播放正常"
  281. ],
  282. "status": "done",
  283. "passes": true
  284. },
  285. {
  286. "id": 18,
  287. "description": "评论打分 - 评论API",
  288. "backend_test_steps": [
  289. "1. curl -X POST http://localhost:3000/api/comments -H 'Content-Type: application/json' -d '{\"userId\":\"test-user\",\"audioId\":\"audio-004\",\"content\":\"很好听\",\"rating\":5}' - 验证发表评论",
  290. "2. curl http://localhost:3000/api/comments/audio-004 - 验证获取评论列表",
  291. "3. curl -X POST http://localhost:3000/api/comments -H 'Content-Type: application/json' -d '{\"userId\":\"test-user2\",\"audioId\":\"audio-004\",\"content\":\"不错\",\"rating\":4}' - 添加更多评论"
  292. ],
  293. "frontend_test_steps": [
  294. "1. 打开player页面",
  295. "2. 滑动到评论区",
  296. "3. 验证评论列表显示",
  297. "4. 输入评论内容并打分",
  298. "5. 点击提交",
  299. "6. 验证新评论显示在列表中"
  300. ],
  301. "status": "done",
  302. "passes": true
  303. },
  304. {
  305. "id": 19,
  306. "description": "消息通知 - 通知API",
  307. "backend_test_steps": [
  308. "1. curl http://localhost:3000/api/notifications - 验证获取通知列表",
  309. "2. curl -X POST http://localhost:3000/api/notifications/read -H 'Content-Type: application/json' -d '{\"id\":\"notif-001\"}' - 验证标记已读"
  310. ],
  311. "frontend_test_steps": [
  312. "1. 进入任意页面",
  313. "2. 验证通知图标显示",
  314. "3. 点击通知图标",
  315. "4. 验证通知列表正常显示",
  316. "5. 点击某条通知",
  317. "6. 验证已读状态更新"
  318. ],
  319. "status": "done",
  320. "passes": true
  321. },
  322. {
  323. "id": 20,
  324. "description": "专辑功能 - 数据库表设计",
  325. "backend_test_steps": [
  326. "1. curl -X POST http://localhost:3000/api/albums -H 'Content-Type: application/json' -d '{\"name\":\"测试专辑\",\"description\":\"测试描述\",\"coverUrl\":\"https://xxx.jpg\"}' - 验证创建专辑",
  327. "2. curl http://localhost:3000/api/albums - 验证获取专辑列表",
  328. "3. curl http://localhost:3000/api/albums/1 - 验证获取专辑详情",
  329. "4. curl -X PUT http://localhost:3000/api/albums/1 -H 'Content-Type: application/json' -d '{\"name\":\"更新后的专辑名\"}' - 验证更新专辑",
  330. "5. curl -X DELETE http://localhost:3000/api/albums/1 - 验证删除专辑"
  331. ],
  332. "frontend_test_steps": [
  333. "1. 进入专辑页面",
  334. "2. 验证专辑列表正常显示",
  335. "3. 点击某个专辑进入详情",
  336. "4. 验证专辑封面、名称、描述显示正确"
  337. ],
  338. "status": "done",
  339. "passes": true
  340. },
  341. {
  342. "id": 21,
  343. "description": "专辑功能 - 专辑内音频管理API",
  344. "backend_test_steps": [
  345. "1. curl -X POST http://localhost:3000/api/albums/1/audio -H 'Content-Type: application/json' -d '{\"audioId\":\"audio-001\",\"order\":1}' - 验证添加音频到专辑",
  346. "2. curl http://localhost:3000/api/albums/1/audios - 验证获取专辑内音频列表",
  347. "3. curl -X PUT http://localhost:3000/api/albums/1/audio/audio-001 -H 'Content-Type: application/json' -d '{\"order\":2}' - 验证调整音频顺序",
  348. "4. curl -X DELETE http://localhost:3000/api/albums/1/audio/audio-001 - 验证从专辑移除音频"
  349. ],
  350. "frontend_test_steps": [
  351. "1. 进入专辑详情页",
  352. "2. 验证专辑内音频列表按顺序显示",
  353. "3. 验证音频数量正确"
  354. ],
  355. "status": "done",
  356. "passes": true
  357. },
  358. {
  359. "id": 22,
  360. "description": "专辑功能 - 专辑详情页开发",
  361. "backend_test_steps": [
  362. "1. curl http://localhost:3000/api/albums/1 - 验证专辑详情接口返回正确数据"
  363. ],
  364. "frontend_test_steps": [
  365. "1. 进入专辑详情页",
  366. "2. 验证专辑封面、名称、描述显示正确",
  367. "3. 验证音频列表按顺序显示",
  368. "4. 点击播放全部按钮",
  369. "5. 验证进入播放器并开始连续播放"
  370. ],
  371. "status": "done",
  372. "passes": true
  373. },
  374. {
  375. "id": 23,
  376. "description": "专辑功能 - 专辑列表页开发",
  377. "backend_test_steps": [
  378. "1. curl http://localhost:3000/api/albums - 验证专辑列表接口",
  379. "2. curl http://localhost:3000/api/albums?category=1 - 验证分类筛选专辑"
  380. ],
  381. "frontend_test_steps": [
  382. "1. 进入专辑页面",
  383. "2. 验证专辑列表网格/列表显示正确",
  384. "3. 验证封面图、名称、音频数量显示",
  385. "4. 下拉刷新列表",
  386. "5. 验证列表正常加载"
  387. ],
  388. "status": "done",
  389. "passes": true
  390. },
  391. {
  392. "id": 24,
  393. "description": "专辑功能 - 订阅/关注专辑",
  394. "backend_test_steps": [
  395. "1. curl -X POST http://localhost:3000/api/albums/1/subscribe -H 'Content-Type: application/json' -d '{\"userId\":\"test-user\"}' - 验证订阅专辑",
  396. "2. curl http://localhost:3000/api/albums/subscribed?userId=test-user - 验证获取已订阅专辑列表",
  397. "3. curl -X DELETE http://localhost:3000/api/albums/1/subscribe - 验证取消订阅"
  398. ],
  399. "frontend_test_steps": [
  400. "1. 进入专辑详情页",
  401. "2. 点击订阅/关注按钮",
  402. "3. 验证按钮状态变为已订阅",
  403. "4. 进入我的订阅页面",
  404. "5. 验证已订阅专辑显示在列表中",
  405. "6. 点击取消订阅",
  406. "7. 验证专辑从列表移除"
  407. ],
  408. "status": "done",
  409. "passes": true
  410. },
  411. {
  412. "id": 25,
  413. "description": "专辑功能 - 专辑连续播放",
  414. "backend_test_steps": [
  415. "1. curl http://localhost:3000/api/albums/1/audios - 验证获取专辑音频列表接口"
  416. ],
  417. "frontend_test_steps": [
  418. "1. 进入专辑详情页",
  419. "2. 点击播放全部",
  420. "3. 验证播放器显示专辑信息",
  421. "4. 当前音频播放完毕后自动播放下一首",
  422. "5. 验证播放列表显示专辑内所有音频",
  423. "6. 可手动切换上一首/下一首"
  424. ],
  425. "status": "done",
  426. "passes": true
  427. },
  428. {
  429. "id": 26,
  430. "description": "播放页优化 - 旋转唱片效果",
  431. "backend_test_steps": [],
  432. "frontend_test_steps": [
  433. "1. 进入播放页",
  434. "2. 验证封面显示在中央",
  435. "3. 开始播放,验证封面旋转动画",
  436. "4. 暂停播放,验证旋转停止",
  437. "5. 继续播放,验证旋转恢复"
  438. ],
  439. "status": "done",
  440. "passes": true
  441. },
  442. {
  443. "id": 27,
  444. "description": "播放页优化 - 播放列表展示",
  445. "backend_test_steps": [],
  446. "frontend_test_steps": [
  447. "1. 进入播放页",
  448. "2. 验证播放列表显示在底部",
  449. "3. 点击播放列表展开按钮",
  450. "4. 验证当前播放音频高亮显示",
  451. "5. 点击列表中的音频切换播放"
  452. ],
  453. "status": "done",
  454. "passes": true
  455. },
  456. {
  457. "id": 28,
  458. "description": "播放页优化 - 循环模式(列表循环/单曲循环)",
  459. "backend_test_steps": [],
  460. "frontend_test_steps": [
  461. "1. 进入播放页",
  462. "2. 验证循环模式按钮显示",
  463. "3. 点击切换循环模式",
  464. "4. 验证模式依次变化:列表循环 → 单曲循环 → 关闭",
  465. "5. 播放完毕验证按当前模式处理"
  466. ],
  467. "status": "done",
  468. "passes": true
  469. },
  470. {
  471. "id": 29,
  472. "description": "播放页优化 - 随机播放模式",
  473. "backend_test_steps": [],
  474. "frontend_test_steps": [
  475. "1. 进入播放页",
  476. "2. 验证随机播放按钮显示",
  477. "3. 点击开启随机播放",
  478. "4. 验证点击下一首时随机播放列表中任意一首",
  479. "5. 关闭随机播放,验证按顺序播放"
  480. ],
  481. "status": "done",
  482. "passes": true
  483. },
  484. {
  485. "id": 30,
  486. "description": "播放页优化 - 毛玻璃背景效果",
  487. "backend_test_steps": [],
  488. "frontend_test_steps": [
  489. "1. 进入播放页",
  490. "2. 验证页面背景使用封面模糊图",
  491. "3. 验证背景有渐变叠加效果",
  492. "4. 验证文字清晰可读"
  493. ],
  494. "status": "done",
  495. "passes": true
  496. },
  497. {
  498. "id": 31,
  499. "description": "视频生成 - 图片+音频生成配图视频",
  500. "backend_test_steps": [
  501. "1. curl -X POST http://localhost:3000/api/video/projects -H 'Content-Type: application/json' -d '{\"title\":\"测试视频\"}' - 验证创建视频项目",
  502. "2. curl http://localhost:3000/api/video/projects - 验证查询视频项目列表",
  503. "3. curl http://localhost:3000/api/video/projects/1 - 验证获取视频项目详情",
  504. "4. curl -X PUT http://localhost:3000/api/video/projects/1 -H 'Content-Type: application/json' -d '{\"title\":\"更新标题\"}' - 验证更新视频项目",
  505. "5. curl -X DELETE http://localhost:3000/api/video/projects/1 - 验证删除视频项目"
  506. ],
  507. "frontend_test_steps": [
  508. "1. 进入视频生成页面",
  509. "2. 点击创建新视频",
  510. "3. 填写视频标题",
  511. "4. 上传/选择图片",
  512. "5. 上传/选择音频",
  513. "6. 配置Ken Burns效果",
  514. "7. 配置字幕",
  515. "8. 点击生成视频",
  516. "9. 验证进度显示",
  517. "10. 生成完成后预览视频",
  518. "11. 验证下载和分享功能"
  519. ],
  520. "status": "done",
  521. "passes": true
  522. },
  523. {
  524. "id": 32,
  525. "description": "用户偏好设置增强 - 默认音色/音量/自动播放",
  526. "backend_test_steps": [
  527. "1. curl -X PUT http://localhost:3000/api/user/preferences -H 'Content-Type: application/json' -d '{\"defaultVoiceId\":\"ethan\",\"defaultVolume\":80,\"autoPlayNext\":true,\"wifiOnlyDownload\":false}' - 验证更新偏好设置",
  528. "2. curl http://localhost:3000/api/user/preferences - 验证获取偏好设置确认保存成功"
  529. ],
  530. "frontend_test_steps": [
  531. "1. 打开设置页面",
  532. "2. 修改默认音色为\"苏瑶\"",
  533. "3. 修改默认音量为 80%",
  534. "4. 关闭自动播放下一首",
  535. "5. 重新打开应用",
  536. "6. 验证设置已恢复",
  537. "7. 进入生成页面,验证默认音色已选中",
  538. "8. 进入播放器,验证默认音量设置"
  539. ],
  540. "status": "done",
  541. "passes": true
  542. },
  543. {
  544. "id": 33,
  545. "description": "批量删除功能 - 历史记录和书籍",
  546. "backend_test_steps": [
  547. "1. curl -X DELETE http://localhost:3000/api/history/batch -H 'Content-Type: application/json' -d '{\"ids\":[\"audio-1\",\"audio-2\"]}' - 验证批量删除历史记录",
  548. "2. curl http://localhost:3000/api/history - 验证记录已删除"
  549. ],
  550. "frontend_test_steps": [
  551. "1. 打开历史记录页面",
  552. "2. 点击\"编辑\"按钮进入编辑模式",
  553. "3. 勾选 2-3 条记录",
  554. "4. 验证选中数量提示正确",
  555. "5. 点击\"全选\"验证全部选中",
  556. "6. 点击\"删除\",确认弹窗",
  557. "7. 验证记录已删除",
  558. "8. 在书籍生成页重复上述测试"
  559. ],
  560. "status": "done",
  561. "passes": true
  562. },
  563. {
  564. "id": 34,
  565. "description": "内容管理 - 重命名和移动到专辑",
  566. "backend_test_steps": [
  567. "1. curl -X PUT http://localhost:3000/api/album/1/rename -H 'Content-Type: application/json' -d '{\"title\":\"新标题\"}' - 验证重命名专辑",
  568. "2. curl -X POST http://localhost:3000/api/audio/audio-1/move-to-album -H 'Content-Type: application/json' -d '{\"albumId\":2}' - 验证移动音频到专辑"
  569. ],
  570. "frontend_test_steps": [
  571. "1. 打开专辑详情页",
  572. "2. 长按某个章节",
  573. "3. 选择\"重命名\"",
  574. "4. 输入新名称,确认",
  575. "5. 验证名称已更新",
  576. "6. 选择\"移动到专辑\"",
  577. "7. 选择目标专辑",
  578. "8. 验证章节已移动"
  579. ],
  580. "status": "done",
  581. "passes": true
  582. },
  583. {
  584. "id": 35,
  585. "description": "播放列表功能 - 创建和管理播放列表",
  586. "backend_test_steps": [
  587. "1. curl -X POST http://localhost:3000/api/playlists -H 'Content-Type: application/json' -d '{\"name\":\"我的最爱\",\"description\":\"最喜欢的音频\"}' - 验证创建播放列表",
  588. "2. curl -X POST http://localhost:3000/api/playlists/1/items -H 'Content-Type: application/json' -d '{\"chapterId\":1}' - 验证添加到播放列表",
  589. "3. curl http://localhost:3000/api/playlists - 验证获取播放列表"
  590. ],
  591. "frontend_test_steps": [
  592. "1. 进入播放器页面",
  593. "2. 点击\"添加到播放列表\"",
  594. "3. 选择\"新建播放列表\"",
  595. "4. 输入名称\"睡前听书\"",
  596. "5. 确认添加",
  597. "6. 进入\"我的\"页面,查看播放列表入口",
  598. "7. 进入播放列表详情",
  599. "8. 验证音频在列表中",
  600. "9. 点击播放全部",
  601. "10. 验证按顺序播放"
  602. ],
  603. "status": "done",
  604. "passes": true
  605. },
  606. {
  607. "id": 36,
  608. "description": "草稿与自动保存 - 防止内容丢失",
  609. "backend_test_steps": [
  610. "1. curl -X POST http://localhost:3000/api/drafts -H 'Content-Type: application/json' -d '{\"type\":\"audio\",\"title\":\"草稿测试\",\"content\":\"这是测试内容\"}' - 验证保存草稿",
  611. "2. curl http://localhost:3000/api/drafts - 验证获取草稿列表"
  612. ],
  613. "frontend_test_steps": [
  614. "1. 进入生成页面",
  615. "2. 输入一些文本",
  616. "3. 等待 3 秒,验证右上角显示\"已保存\"",
  617. "4. 离开页面(不生成)",
  618. "5. 重新进入生成页面",
  619. "6. 验证提示\"发现未保存的草稿,是否恢复?\"",
  620. "7. 点击\"恢复\"",
  621. "8. 验证内容已恢复",
  622. "9. 进入草稿列表页",
  623. "10. 验证草稿显示在列表中"
  624. ],
  625. "status": "done",
  626. "passes": true
  627. },
  628. {
  629. "id": 37,
  630. "description": "通知功能 - 生成完成和会员提醒",
  631. "backend_test_steps": [
  632. "1. curl http://localhost:3000/api/notifications - 验证获取通知列表",
  633. "2. curl -X PUT http://localhost:3000/api/notifications/read-all - 验证全部标为已读"
  634. ],
  635. "frontend_test_steps": [
  636. "1. 生成一个音频(触发通知)",
  637. "2. 观察\"我的\"页面是否出现未读角标",
  638. "3. 进入通知页面",
  639. "4. 验证音频生成完成通知显示",
  640. "5. 点击通知,验证标记已读",
  641. "6. 验证角标数字减少",
  642. "7. 点击\"全部已读\"",
  643. "8. 验证所有通知变为已读状态"
  644. ],
  645. "status": "done",
  646. "passes": true
  647. },
  648. {
  649. "id": 38,
  650. "description": "章节音频合并 - 章播放时合并所有小节音频",
  651. "backend_test_steps": [
  652. "1. curl http://localhost:3000/api/player/audio/list - 验证章(level=1)的音频是合并后的",
  653. "2. curl http://localhost:3000/api/player/audio/:id - 验证单个章返回合并音频URL"
  654. ],
  655. "frontend_test_steps": [
  656. "1. 进入首页音频列表",
  657. "2. 验证只显示章(level=1)条目",
  658. "3. 点击播放某个章",
  659. "4. 验证播放的是合并后的完整音频(包含所有小节内容)"
  660. ],
  661. "status": "done",
  662. "passes": true
  663. },
  664. {
  665. "id": 39,
  666. "description": "生成状态显示优化 - 统一状态组件 + 补充CSS + 音频状态直读",
  667. "backend_test_steps": [
  668. "1. curl http://localhost:3000/api/book-generator/books - 验证书籍列表返回各状态字段",
  669. "2. curl http://localhost:3000/api/player/audio/list - 验证音频列表返回 audioStatus 字段"
  670. ],
  671. "frontend_test_steps": [
  672. "1. 打开书籍生成列表页,验证状态标签颜色正确",
  673. "2. 打开视频生成列表页,验证状态标签颜色正确",
  674. "3. 打开订单页面,验证状态标签颜色正确",
  675. "4. 在书籍详情页,验证章节树状态图标显示正确",
  676. "5. 验证 generating 状态有黄色动画效果"
  677. ],
  678. "status": "done",
  679. "passes": true
  680. }
  681. ]
  682. }