基于 2026-05-07 全面页面审查制定 当前状态:feature_list.json 中 38 个功能已全部完成
| 优先级 | 编号 | 名称 | 涉及页面 | 预估工时 |
|---|---|---|---|---|
| P0 | OPT-01 | 书籍列表操作按钮合并 → 下拉菜单 | book-generator/index.vue | 3h |
| P0 | OPT-02 | 音频/视频生成轮询超时修复(30s→无超时) | book-generator/index.vue, chapter-detail.vue | 2h |
| P0 | OPT-03 | 首页增加"最近收听"模块 | index/index.vue | 3h |
| P1 | OPT-04 | 创建书籍增加"简洁模式" | book-generator/create.vue | 4h |
| P1 | OPT-05 | 播放器增加睡眠定时器 | player/index.vue | 2h |
| P1 | OPT-06 | 全局骨架屏覆盖 | 所有列表页 | 3h |
| P1 | OPT-07 | 生成按钮固定底部(减少滚动) | create/index.vue | 1h |
| P1 | OPT-08 | 书籍一键"完整生成"流程 | book-generator/detail.vue | 4h |
| P2 | OPT-09 | 首页卡片封面升级(文字海报) | index/index.vue | 2h |
| P2 | OPT-10 | 章节详情页手势滑动切换 | chapter-detail.vue | 2h |
| P2 | OPT-11 | "我的"页面增加动态内容卡片 | mine/index.vue | 2h |
| P2 | OPT-12 | "意见反馈"独立页面 | mine/index.vue + 新页面 | 2h |
| P2 | OPT-13 | 会员中心套餐选中态动画 | member/index.vue | 1h |
| P2 | OPT-14 | 加载状态过渡动画(全局) | 全局 CSS 微调 | 1.5h |
| P3 | OPT-15 | 搜索页增加热门搜索词缓存 | search/index.vue | 1h |
| P3 | OPT-16 | Tab 页面返回按钮修复 | book-generator/index.vue | 0.5h |
| P3 | OPT-17 | 播放器歌词时间轴真实化 | player/index.vue + 后端 | 3h |
| P3 | OPT-18 | 操作确认弹窗(防误触) | book-generator/detail.vue + chapter-detail.vue | 1.5h |
问题:每本书下方 5 个操作按钮(生成全部音频/合并音频/合并视频/生成全部视频/公开),信息过载,视觉压力大。
方案:
生成内容(根据状态自动显示:生成音频/继续生成/已完成),公开/取消公开修改文件:my-uniapp-vue3/src/pages/book-generator/index.vue
核心修改:
<!-- 旧:5个独立按钮 -->
<!-- 新:2个主导按钮 + 1个ActionSheet -->
<view class="book-actions">
<button class="primary-btn" @click="handlePrimaryAction(book)">
{{ getPrimaryActionText(book) }}
</button>
<button class="publish-btn" @click="handleTogglePublish(book)">
{{ book.isPublished ? '🔒 已公开' : '🌐 公开' }}
</button>
<button class="more-btn" @click="showMoreActions(book)">···</button>
</view>
<!-- 更多操作 ActionSheet -->
<uni-action-sheet v-if="showSheet" :visible="showSheet" @click="handleSheetAction" />
问题:音频/视频生成轮询有 30 秒超时,长音频生成远超 30 秒。
方案:
setTimeout 超时逻辑后端新增:WebSocket 事件 audio_generation_complete、video_generation_complete
修改文件:
my-uniapp-vue3/src/pages/book-generator/index.vuemy-uniapp-vue3/src/pages/book-generator/chapter-detail.vueserver/src/modules/book-generator/book-generator.store.ts
// 旧代码(有30s超时):
setTimeout(() => { clearAudioPollTimer(book.id); ... }, 30000);
// 新代码(无超时,页面卸载时清理):
onUnmounted(() => { clearAudioPollTimer(book.id); });
问题:首页仅展示公开书籍,新用户看不到自己的内容,没有个性化。
方案:
player/progress API 获取用户最近的播放记录修改文件:my-uniapp-vue3/src/pages/index/index.vue
<!-- 新增最近收听区域 -->
<view v-if="isLoggedIn && recentAudios.length > 0" class="recent-section">
<text class="section-title">最近收听</text>
<scroll-view scroll-x class="recent-scroll">
<view v-for="item in recentAudios" :key="item.id" class="recent-card">
<view class="recent-cover">...</view>
<text class="recent-title">{{ item.title }}</text>
<text class="recent-progress">{{ formatProgress(item.progress) }}</text>
</view>
</scroll-view>
</view>
问题:创建表单有 12+ 参数(书名/副标题/描述/6 个模板/难度/人群/风格/领域/特殊要求/规模),对新手不友好。
方案:
修改文件:my-uniapp-vue3/src/pages/book-generator/create.vue
问题:播放器缺少睡眠定时功能,这是所有音频类 App 的标配。
方案:
修改文件:my-uniapp-vue3/src/pages/player/index.vue(后端无需修改)
const sleepTimer = ref<{ remaining: number; total: number } | null>(null);
let sleepTimerInterval: ReturnType<typeof setInterval> | null = null;
function startSleepTimer(minutes: number) {
sleepTimer.value = { remaining: minutes * 60, total: minutes * 60 };
sleepTimerInterval = setInterval(() => {
if (sleepTimer.value) {
sleepTimer.value.remaining--;
if (sleepTimer.value.remaining <= 0) {
clearInterval(sleepTimerInterval!);
audioStore.pause();
sleepTimer.value = null;
uni.showToast({ title: '睡眠定时已到,自动暂停', icon: 'none' });
}
}
}, 1000);
}
问题:目前仅首页有骨架屏,其他列表页(历史记录、书籍列表、专辑列表等)是空白→内容的突变。
方案:
SkeletonList.vue:支持行数/列数/卡片类型配置修改文件:
my-uniapp-vue3/src/components/Skeleton.vue(增强)my-uniapp-vue3/src/pages/history/index.vuemy-uniapp-vue3/src/pages/album/index.vuemy-uniapp-vue3/src/pages/albums/index.vue问题:create 页面很长,用户输入文本后要滚动到底部再点生成,体验差。
方案:
position: fixed; bottom: 0; 固定定位修改文件:my-uniapp-vue3/src/pages/create/index.vue
问题:当前流程:创建→开始生成→生成全部音频→合并音频→生成全部视频→合并视频→公开,需要用户手动操作 6 步。
方案:
后端新增:POST /api/book-generator/batch-generate(编排整个流程)
修改文件:
my-uniapp-vue3/src/pages/book-generator/detail.vuemy-uniapp-vue3/src/utils/book-generator-api.tsserver/src/modules/book-generator/book-generator.controller.ts问题:当前封面是纯色渐变色 + 📖 emoji,视觉单调。
方案:
修改文件:my-uniapp-vue3/src/pages/index/index.vue
问题:阅读章节内容后,需要点击"下一章"按钮才能继续,不够流畅。
方案:
@touchstart / @touchmove / @touchend 事件修改文件:my-uniapp-vue3/src/pages/book-generator/chapter-detail.vue
问题:当前是纯静态菜单列表,缺乏活力和个性化。
方案:
修改文件:my-uniapp-vue3/src/pages/mine/index.vue
问题:当前用 uni.showModal 显示反馈联系方式,交互简陋。
方案:
pages/feedback/index.vue 页面新增文件:
my-uniapp-vue3/src/pages/feedback/index.vuemy-uniapp-vue3/src/pages.json(添加路由)/api/feedback API问题:套餐选中后仅有边框颜色变化,视觉反馈不够明显。
方案:
修改文件:my-uniapp-vue3/src/pages/member/index.vue
问题:页面切换、列表项加载、状态变化缺少微动效。
方案:
uni.navigateTo 的默认滑动动画transition-group 或 CSS animation 实现列表项逐行入场:active 缩放到 0.96 的反馈修改文件:my-uniapp-vue3/src/App.vue(全局 CSS)+ 各组件
| 编号 | 名称 | 说明 | 工时 |
|---|---|---|---|
| OPT-15 | 搜索热词缓存 | 搜索结果展示同时,本地缓存热门搜索词提升性能 | 1h |
| OPT-16 | Tab 页面返回按钮修复 | book-generator/index.vue 作为 Tab 页不应显示返回按钮 | 0.5h |
| OPT-17 | 歌词时间轴真实化 | 后端在生成音频时返回真实时间戳,替代前端字数估算 | 3h |
| OPT-18 | 操作确认弹窗 | 批量删除、生成全部等操作前弹出确认 | 1.5h |
Day 1: OPT-02(轮询超时修复,2h)
Day 2: OPT-01(操作按钮合并,3h)
Day 3: OPT-03(首页最近收听,3h)
Day 4-5: OPT-04(创建书籍简洁模式,4h)
Day 5: OPT-05(睡眠定时器,2h)
Day 6: OPT-06(全局骨架屏,3h)
Day 6: OPT-07(生成按钮固定,1h)
Day 7-8: OPT-08(一键完整生成,4h)
Day 9: OPT-09(封面升级,2h)+ OPT-14(全局动画,1.5h)
Day 9-10: OPT-10(手势切换,2h)+ OPT-13(套餐动画,1h)
Day 10: OPT-11(我的页面动态卡片,2h)+ OPT-12(反馈页面,2h)
Day 11: OPT-15(热词缓存)+ OPT-16(返回按钮)+ OPT-17(歌词)+ OPT-18(确认弹窗)
| 优化项 | 后端变更 |
|---|---|
| OPT-02 | WebSocket 推送生成完成事件 |
| OPT-03 | 提供用户最近播放记录 API |
| OPT-08 | POST /api/book-generator/batch-generate 编排接口 |
| OPT-12 | POST /api/feedback 反馈提交接口 |
| OPT-17 | TTS 生成时返回 LRC 格式时间戳 |
每个优化完成后,确认: