GET /api/book/{id}brief - 简介desc - 描述introduction - 详细介绍GET /api/audiobook/{id}brief - 简介desc - 描述introduction - 详细介绍brief - 简介(简短描述)desc - 描述(中等长度描述)introduction - 详细介绍(完整描述)brief - 简介(简短描述)desc - 描述(中等长度描述)introduction - 详细介绍(完整描述)brief 或 desc(优先显示brief)introduction 或 desc 或 brief(优先显示introduction)desc 或 brief 或 introduction(优先显示desc)public BookVO getBookById(Integer id) {
Book book = bookMapper.selectById(id);
if (book == null) {
throw new RuntimeException("书籍不存在");
}
return convertToVO(book);
}
public AudiobookDetailVO getAudiobookDetail(Integer id, Integer userId) {
Audiobook audiobook = audiobookMapper.selectById(id);
if (audiobook == null) {
throw new RuntimeException("听书不存在");
}
// 增加浏览次数
audiobookMapper.incrementViewCount(id);
// 获取章节列表
List<AudiobookChapter> chapters = chapterMapper.selectByAudiobookId(id);
// 转换为VO
AudiobookDetailVO detailVO = new AudiobookDetailVO();
detailVO.setAudiobook(convertToVO(audiobook));
// ... 其他处理
return detailVO;
}
async loadBookDetail(bookId) {
try {
this.isLoading = true
const res = await getBookById(bookId)
if (res && res.code === 200 && res.data) {
const book = res.data
this.bookInfo = {
id: book.id,
title: book.title || '',
image: book.image || book.cover || '',
brief: book.brief || '',
desc: book.desc || book.brief || '',
author: book.author || '',
isFree: book.isFree || false,
price: book.price || 0,
introduction: book.introduction || book.desc || book.brief || ''
}
}
} catch (e) {
console.error('加载书籍详情失败:', e)
} finally {
this.isLoading = false
}
}
async loadAudiobookDetail() {
try {
this.isLoading = true
const userId = this.userInfo ? this.userInfo.id : null
const res = await getAudiobookDetail(this.audiobookId, userId)
if (res && res.code === 200 && res.data) {
const data = res.data
if (data.audiobook) {
const audiobook = data.audiobook
this.bookInfo = {
id: audiobook.id,
title: audiobook.title || '',
desc: audiobook.desc || audiobook.brief || '',
brief: audiobook.brief || audiobook.desc || '',
introduction: audiobook.introduction || audiobook.desc || audiobook.brief || '',
author: audiobook.author || '',
image: audiobook.image || audiobook.cover || '',
narrator: audiobook.narrator || ''
}
}
}
} catch (e) {
console.error('加载听书详情失败:', e)
} finally {
this.isLoading = false
}
}
getBookById(bookId)BookController.getBookById() 接收请求BookService.getBookById() 查询数据库BookMapper.selectById() 执行SQL查询BookVO 并返回getAudiobookDetail(audiobookId, userId)AudiobookController.getAudiobookDetail() 接收请求AudiobookService.getAudiobookDetail() 查询数据库AudiobookMapper.selectById() 执行SQL查询AudiobookDetailVO 并返回brief - VARCHAR - 简介(简短描述,用于列表展示)desc - TEXT - 描述(中等长度描述,用于详情页头部)introduction - TEXT - 详细介绍(完整描述,用于详情页简介部分)brief - VARCHAR - 简介(简短描述,用于列表展示)desc - TEXT - 描述(中等长度描述,用于详情页头部)introduction - TEXT - 详细介绍(完整描述,用于详情页简介部分)/pages/book-detail/book-detail?bookId=1/pages/listen-detail/listen-detail?audiobookId=1数据优先级:
字段兼容性:
数据回退:
错误处理:
所有功能已完成,可以开始测试!