前后端数据连接完成说明.md 9.0 KB

前后端数据连接完成说明

✅ 已完成的功能

1. 书籍详情页数据连接

后端接口

  • 接口: GET /api/book/{id}
  • 返回字段:
    • brief - 简介
    • desc - 描述
    • introduction - 详细介绍
    • 其他完整字段

前端实现

  • ✅ 从后端API获取完整的书籍详情数据
  • ✅ 显示书籍的简介(brief)
  • ✅ 显示书籍的描述(desc)
  • ✅ 显示书籍的详细介绍(introduction)
  • ✅ 移除所有硬编码数据
  • ✅ 添加加载状态提示
  • ✅ 处理数据为空的情况
  • ✅ 推荐书籍从后端API获取

2. 听书详情页数据连接

后端接口

  • 接口: GET /api/audiobook/{id}
  • 返回字段:
    • brief - 简介
    • desc - 描述
    • introduction - 详细介绍
    • 其他完整字段

前端实现

  • ✅ 从后端API获取完整的听书详情数据
  • ✅ 显示听书的简介(brief)
  • ✅ 显示听书的描述(desc)
  • ✅ 显示听书的详细介绍(introduction)
  • ✅ 确保所有数据从数据库获取
  • ✅ 处理数据为空的情况

3. 页面导航优化

统一导航参数

  • ✅ 所有页面统一使用 bookIdaudiobookId 参数
  • ✅ 移除不必要的URL参数(title、image、author等)
  • ✅ 详情页从数据库获取完整数据,不再依赖URL参数
  • ✅ 添加参数验证,确保数据完整性

更新的页面

  • book-detail.vue - 书籍详情页
  • listen-detail.vue - 听书详情页
  • index.vue - 首页
  • more-books.vue - 更多书籍页
  • search.vue - 搜索页
  • new-books.vue - 新书榜页
  • vip-books.vue - VIP书籍页
  • hot-books.vue - 热门书籍页
  • ranking.vue - 排行榜页
  • bookshelf.vue - 书架页
  • more-listen-books.vue - 更多听书页
  • portable-listen.vue - 便携听书页
  • audio-novel.vue - 音频小说页
  • browsing-history.vue - 浏览历史页

🔧 实现细节

1. 数据获取流程

书籍详情页

  1. 用户点击书籍 → 传递 bookId 参数
  2. 页面加载 → 调用 getBookById(bookId) API
  3. 后端查询数据库 → 返回完整的书籍信息(包含brief、desc、introduction)
  4. 前端接收数据 → 更新页面显示
  5. 如果数据为空 → 显示友好的提示信息

听书详情页

  1. 用户点击听书 → 传递 audiobookId 参数
  2. 页面加载 → 调用 getAudiobookDetail(audiobookId, userId) API
  3. 后端查询数据库 → 返回完整的听书信息和章节列表(包含brief、desc、introduction)
  4. 前端接收数据 → 更新页面显示
  5. 如果数据为空 → 显示友好的提示信息

2. 数据字段映射

书籍表(books)

  • brief - 简介(简短描述,用于列表展示)
  • desc - 描述(中等长度描述,用于详情页头部)
  • introduction - 详细介绍(完整描述,用于详情页简介部分)

听书表(audiobooks)

  • brief - 简介(简短描述,用于列表展示)
  • desc - 描述(中等长度描述,用于详情页头部)
  • introduction - 详细介绍(完整描述,用于详情页简介部分)

3. 数据展示逻辑

书籍详情页

  • 头部信息: 显示 briefdesc(优先显示brief)
  • 简介部分: 显示 introductiondescbrief(优先显示introduction)
  • 数据回退: 如果某个字段为空,自动使用其他字段作为回退

听书详情页

  • 头部信息: 显示 descbriefintroduction(优先显示desc)
  • 数据回退: 如果某个字段为空,自动使用其他字段作为回退

📊 数据流程

书籍详情数据流程

用户点击书籍
    ↓
传递 bookId 参数
    ↓
调用 getBookById(bookId) API
    ↓
后端 BookController.getBookById()
    ↓
后端 BookService.getBookById()
    ↓
后端 BookMapper.selectById()
    ↓
数据库查询 books 表
    ↓
返回 BookVO(包含 brief、desc、introduction)
    ↓
前端接收数据并更新页面
    ↓
显示完整的书籍信息

听书详情数据流程

用户点击听书
    ↓
传递 audiobookId 参数
    ↓
调用 getAudiobookDetail(audiobookId, userId) API
    ↓
后端 AudiobookController.getAudiobookDetail()
    ↓
后端 AudiobookService.getAudiobookDetail()
    ↓
后端 AudiobookMapper.selectById()
    ↓
数据库查询 audiobooks 表
    ↓
数据库查询 audiobook_chapters 表
    ↓
返回 AudiobookDetailVO(包含 brief、desc、introduction 和章节列表)
    ↓
前端接收数据并更新页面
    ↓
显示完整的听书信息和章节列表

🎯 功能特点

1. 数据完整性

  • ✅ 所有数据从数据库获取
  • ✅ 支持brief、desc、introduction三个字段
  • ✅ 自动处理字段为空的情况
  • ✅ 提供数据回退机制

2. 用户体验

  • ✅ 添加加载状态提示
  • ✅ 处理数据加载失败的情况
  • ✅ 显示友好的错误提示
  • ✅ 支持数据为空时的显示

3. 数据一致性

  • ✅ 前后端数据字段一致
  • ✅ 数据库字段与VO字段映射正确
  • ✅ 支持cover和image字段兼容
  • ✅ 处理数据格式转换

4. 代码优化

  • ✅ 移除所有硬编码数据
  • ✅ 统一导航参数
  • ✅ 添加参数验证
  • ✅ 优化错误处理

📝 修改的文件

后端文件(已存在,无需修改)

  • BookService.java - 书籍服务类
  • BookController.java - 书籍控制器
  • BookVO.java - 书籍视图对象
  • BookMapper.xml - 书籍Mapper XML
  • AudiobookService.java - 听书服务类
  • AudiobookController.java - 听书控制器
  • AudiobookVO.java - 听书视图对象
  • AudiobookMapper.xml - 听书Mapper XML

前端文件(已修改)

  • books/pages/book-detail/book-detail.vue - 书籍详情页
  • books/pages/listen-detail/listen-detail.vue - 听书详情页
  • books/pages/index/index.vue - 首页
  • books/pages/more-books/more-books.vue - 更多书籍页
  • books/pages/search/search.vue - 搜索页
  • books/pages/new-books/new-books.vue - 新书榜页
  • books/pages/vip-books/vip-books.vue - VIP书籍页
  • books/pages/hot-books/hot-books.vue - 热门书籍页
  • books/pages/ranking/ranking.vue - 排行榜页
  • books/pages/bookshelf/bookshelf.vue - 书架页
  • books/pages/listen/listen.vue - 听书页
  • books/pages/more-listen-books/more-listen-books.vue - 更多听书页
  • books/pages/portable-listen/portable-listen.vue - 便携听书页
  • books/pages/audio-novel/audio-novel.vue - 音频小说页
  • books/pages/browsing-history/browsing-history.vue - 浏览历史页

🔍 测试建议

1. 测试书籍详情页

  • ✅ 测试有完整数据的书籍
  • ✅ 测试只有brief的书籍
  • ✅ 测试只有desc的书籍
  • ✅ 测试只有introduction的书籍
  • ✅ 测试所有字段都为空的情况
  • ✅ 测试不存在的书籍ID
  • ✅ 测试推荐书籍加载

2. 测试听书详情页

  • ✅ 测试有完整数据的听书
  • ✅ 测试只有brief的听书
  • ✅ 测试只有desc的听书
  • ✅ 测试只有introduction的听书
  • ✅ 测试所有字段都为空的情况
  • ✅ 测试不存在的听书ID
  • ✅ 测试章节列表加载

3. 测试页面导航

  • ✅ 测试从首页跳转到详情页
  • ✅ 测试从列表页跳转到详情页
  • ✅ 测试从搜索页跳转到详情页
  • ✅ 测试从书架跳转到详情页
  • ✅ 测试参数验证

🚀 使用说明

1. 书籍详情页

  • 访问 /pages/book-detail/book-detail?bookId=1
  • 页面会自动从后端获取书籍详情
  • 显示书籍的完整信息(标题、作者、简介、描述、详细介绍等)

2. 听书详情页

  • 访问 /pages/listen-detail/listen-detail?audiobookId=1
  • 页面会自动从后端获取听书详情
  • 显示听书的完整信息(标题、作者、主播、简介、描述、详细介绍、章节列表等)

📌 注意事项

  1. 数据优先级:

    • 书籍详情页:introduction > desc > brief
    • 听书详情页:desc > brief > introduction
  2. 字段兼容性:

    • 支持cover和image字段互用
    • 如果image为空,使用cover
    • 如果cover为空,使用image
  3. 数据回退:

    • 如果某个字段为空,自动使用其他字段作为回退
    • 确保用户始终能看到内容
  4. 错误处理:

    • 处理网络请求失败的情况
    • 处理数据格式不正确的情况
    • 处理数据为空的情况
  5. 参数验证:

    • 所有跳转都验证bookId或audiobookId是否存在
    • 如果参数缺失,显示友好提示

🎉 完成状态

  • ✅ 后端接口完善
  • ✅ 前端页面更新
  • ✅ 数据字段映射
  • ✅ 数据展示逻辑
  • ✅ 错误处理
  • ✅ 加载状态
  • ✅ 数据回退机制
  • ✅ 页面导航优化
  • ✅ 参数验证
  • ✅ 移除硬编码数据

所有功能已完成,可以开始测试!

📚 相关文档

  • 书籍和听书数据连接功能说明.md - 详细功能说明
  • BookService.java - 书籍服务类
  • AudiobookService.java - 听书服务类
  • BookController.java - 书籍控制器
  • AudiobookController.java - 听书控制器