AI 有声书应用页面测试报告
测试时间: 2026-03-27
测试范围: 所有前端页面(首页、登录页、历史页、会员页、我的页、播放器页)
问题总数: 31 个
🔴 严重 Bug(优先级:高)
1. 首页 (index.vue)
- ❌ 音频列表未登录时显示问题:第 18-22 行,未登录时显示空状态,但实际应该引导用户登录
- ❌ 生成按钮逻辑错误:第 180-182 行,
handleGenerate 函数跳转到历史记录页面,但首页的"新建生成"按钮应该直接创建新音频而非跳转
- ⚠️ 音色封面映射不完整:第 76-87 行,只定义了 10 种音色的颜色,如果服务端返回其他音色会显示默认紫色
2. 登录页 (login.vue)
- ⚠️ 验证码输入非必需:第 105 行,开发环境使用
'123456' 作为默认验证码,但生产环境可能导致安全问题
- ⚠️ 缺少表单验证反馈:手机号格式错误时没有明确的错误提示
- ⚠️ 倒计时 timer 未清理:第 69 行定义的
timer 在组件卸载时可能未清除(缺少 onUnmounted)
3. 历史页/生成页 (history.vue)
- 🔴 滑块参数绑定错误:
- 第 57 行:
speed 范围是 0.5-2.0,但 slider 使用 25-100 的范围计算错误
- 第 69 行:
pitch 范围是 -500 到 500,但 slider 值域计算可能导致精度丢失
- ⚠️ 文本清空和粘贴按钮无样式:第 26-28 行的按钮缺少视觉反馈
- ⚠️ 生成后未刷新音频列表:第 164-169 行,生成成功后只跳转播放,未通知首页更新列表
4. 会员页 (member.vue)
- 🔴 支付逻辑问题:第 117 行使用
process.env.NODE_ENV,但在 uni-app 中应使用 uni.getSystemInfoSync().platform 判断环境
- ⚠️ 会员等级数据过滤:第 90 行
filter((l: any) => l.level > 0) 可能过滤掉免费用户等级
- ⚠️ 缺少加载状态:获取权益信息时没有 loading 提示
5. 我的页 (mine.vue)
- ⚠️ 统计数据显示问题:第 26 行,当
wordLimit 为 0 时显示 ∞,但 0 可能表示无限而非限制为 0
- ⚠️ 退出登录后未清理页面栈:第 125 行,退出登录后可能仍可返回到其他页面
6. 播放器页 (player.vue)
- 🔴 音频上下文初始化时机错误:第 123-130 行,页面加载时才初始化 audioContext,应该在 store 的 play 方法中已初始化
- 🔴 播放列表管理缺失:没有从服务端获取完整播放列表的逻辑,导致上一首/下一首功能可能不可用
- ⚠️ 进度条更新延迟:依赖
onTimeUpdate 事件可能有延迟,用户体验不佳
- ⚠️ 分享功能不完善:第 238-247 行,H5 使用 Web Share API,但其他平台仅提示截图,体验不一致
- ⚠️ 下载功能缺少权限处理:第 217-234 行,保存文件到相册可能需要用户授权
🟡 功能和体验问题(优先级:中)
7. 全局状态管理 (store)
- ⚠️ user.ts 第 18-27 行:
initUser 函数未在页面中调用,用户刷新后可能丢失状态
- ⚠️ audio.ts 第 89-95 行:
play 方法每次都会重新创建 audioContext,可能导致内存泄漏
- ⚠️ 缺少错误边界处理:API 请求失败时没有重试机制
8. 请求封装 (request.ts)
- ⚠️ 统一错误处理不足:第 42-47 行,401 错误只跳转登录,未考虑其他认证失败场景
- ⚠️ 缺少请求取消机制:长耗时请求无法取消
- ⚠️ BASE_URL 硬编码:第 2 行,应该从环境变量读取
9. 类型定义 (types/index.ts)
- ⚠️ AudioItem 字段不完整:缺少
userId、tags 等字段定义
- ⚠️ MemberStatus 配额计算:
dailyRemaining 应该由后端计算而非前端
10. UI/UX 问题
- 🎨 响应式设计不足:所有页面使用固定 rpx 单位,在不同屏幕尺寸下可能显示不佳
- 🎨 缺少骨架屏:所有加载状态仅显示"加载中..."
- 🎨 无障碍访问支持弱:缺少 aria-label 等辅助功能属性
- 🎨 动画过渡生硬:页面切换、列表项出现等缺少平滑过渡效果
🟢 建议优化项(优先级:低)
11. 性能优化
- 💡 图片懒加载:音频封面图应使用 lazy-load
- 💡 虚拟列表:音频列表较长时应使用虚拟滚动
- 💡 防抖节流:搜索、滑块拖动等操作应添加防抖
12. 代码规范
- 📝 任意类型使用:多处使用
any,如 member.vue 第 65 行、89 行
- 📝 魔法数字:音量、语速等参数应提取为常量
- 📝 重复代码:多个页面的导航栏、底部按钮可抽取为组件
13. 测试覆盖
- ✅ 缺少单元测试
- ✅ 缺少 E2E 测试
- ✅ 缺少边界条件测试(网络异常、空数据等)
📊 问题优先级汇总
| 优先级 |
数量 |
主要影响 |
| 🔴 高 |
6 |
功能不可用、逻辑错误 |
| 🟡 中 |
15 |
体验问题、潜在风险 |
| 🟢 低 |
10 |
优化建议、代码质量 |
总计发现问题:31 个
修复计划
第一阶段:修复严重 Bug(1-2 天)
- 修复首页生成按钮逻辑
- 修复历史页滑块参数绑定
- 修复会员页支付环境判断
- 修复播放器音频上下文初始化
- 完善登录页定时器清理
- 优化未登录状态显示
第二阶段:修复功能问题(2-3 天)
- 完善全局状态管理
- 优化请求封装
- 补充类型定义
- 改进 UI/UX 体验
第三阶段:代码优化(1-2 天)
- 性能优化
- 代码规范化
- 添加测试用例