已实现完整的听书模块前后端功能,包括:
GET /api/audiobook/recent?limit=8 - 获取最近上新GET /api/audiobook/popular?limit=10 - 获取热门听书GET /api/audiobook/recommend?limit=10 - 获取推荐听书GET /api/audiobook/ranking?limit=10 - 获取畅听榜GET /api/audiobook/{id}?userId=xxx - 获取听书详情(包含章节列表)GET /api/audiobook/chapter/{chapterId} - 获取章节详情POST /api/audiobook/play - 播放章节(增加播放次数)POST /api/audiobook/history - 记录听书历史POST /api/audiobook/progress - 保存听书进度GET /api/audiobook/progress?userId=xxx&chapterId=xxx - 获取听书进度执行 book/src/main/resources/db/audiobook_schema.sql 创建听书相关表并插入示例数据。
启动Spring Boot应用,确保数据库连接正常。
book/src/main/resources/db/audiobook_schema.sql - 数据库表结构book/src/main/java/com/yu/book/domain/Audiobook.java - 听书实体类book/src/main/java/com/yu/book/domain/AudiobookChapter.java - 章节实体类book/src/main/java/com/yu/book/domain/UserListeningHistory.java - 历史记录实体类book/src/main/java/com/yu/book/domain/UserListeningProgress.java - 进度实体类book/src/main/java/com/yu/book/vo/AudiobookVO.java - 听书VObook/src/main/java/com/yu/book/vo/ChapterVO.java - 章节VObook/src/main/java/com/yu/book/vo/AudiobookDetailVO.java - 详情VObook/src/main/java/com/yu/book/mapper/AudiobookMapper.java - 听书Mapperbook/src/main/java/com/yu/book/mapper/ChapterMapper.java - 章节Mapperbook/src/main/java/com/yu/book/mapper/ListeningHistoryMapper.java - 历史Mapperbook/src/main/java/com/yu/book/mapper/ListeningProgressMapper.java - 进度Mapperbook/src/main/resources/mapper/AudiobookMapper.xml - 听书Mapper XMLbook/src/main/resources/mapper/ChapterMapper.xml - 章节Mapper XMLbook/src/main/resources/mapper/ListeningHistoryMapper.xml - 历史Mapper XMLbook/src/main/resources/mapper/ListeningProgressMapper.xml - 进度Mapper XMLbook/src/main/java/com/yu/book/service/AudiobookService.java - 听书服务类book/src/main/java/com/yu/book/controller/AudiobookController.java - 听书控制器books/utils/api.js - 添加了听书相关API方法books/pages/listen/listen.vue - 听书首页(已连接后端)books/pages/listen-detail/listen-detail.vue - 听书详情页(已连接后端)books/pages/player/player.vue - 播放器页面(已实现播放功能)import { getRecentAudiobooks } from '../../utils/api.js'
const res = await getRecentAudiobooks(8)
if (res && res.code === 200) {
const audiobooks = res.data
// 处理听书列表
}
import { getAudiobookDetail } from '../../utils/api.js'
const res = await getAudiobookDetail(audiobookId, userId)
if (res && res.code === 200) {
const detail = res.data
// 处理听书详情和章节列表
}
import { saveListeningProgress } from '../../utils/api.js'
await saveListeningProgress(userId, audiobookId, chapterId, currentPosition, duration)