已成功实现前端小程序排行榜页面与数据库的完整对接,支持通过后台管理系统自定义排序。
GET /api/ranking/groups - 获取所有启用的排行榜类型GET /api/ranking/list?code={code}&categoryId={categoryId} - 根据排行榜类型和分类获取书籍列表getAllActiveRankingGroups() - 获取所有启用的排行榜类型getRankingBooksByCode(code, categoryId) - 根据排行榜类型code和分类ID获取书籍(支持分类筛选)getAllRankingGroups() - 获取所有排行榜类型getRankingByCode(code, categoryId) - 获取排行榜书籍(支持分类参数)前端小程序 ranking.vue
↓
1. 页面加载时调用 initData()
↓
2. 并行加载:
- getAllRankingGroups() → 获取排行榜类型
- getAllCategories() → 获取分类列表
↓
3. 加载完成后调用 loadBookList()
↓
4. 根据 activeTab 和 activeCategory 调用:
- getRankingByCode(groupCode, categoryId)
↓
5. 后端查询数据库:
- ranking_groups 表 → 获取排行榜类型
- categories 表 → 获取分类列表
- ranking_items 表 → 获取排行榜书籍(按sort排序)
- books 表 → 获取书籍详细信息
↓
6. 返回数据并渲染到页面
ranking_groups 表status = 1(只显示启用的)sort 字段升序name(排行榜名称)categories 表status = 1(只显示启用的)sort_order 字段升序name(分类名称)ranking_items 表 + books 表group_id = 当前排行榜类型IDcategory_id = 当前分类ID(如果选择了分类)status = 1(只显示启用的)sort 字段升序(自定义排序)sort 字段排序(数字越小越靠前)# 执行完整数据库脚本
mysql -u root -p books_db < book/src/main/resources/db/ranking_complete_schema.sql
确保后端服务已启动(端口8081或8001)
http://localhost:8081/pages/rankings.htmlGET /api/ranking/groups
响应:
{
"code": 200,
"data": [
{
"id": 1,
"name": "畅销榜",
"code": "bestseller",
"description": "按销量和阅读量排序的畅销书籍",
"sort": 1
},
{
"id": 2,
"name": "热门榜",
"code": "popular",
"description": "按浏览量和热度排序的热门书籍",
"sort": 2
}
]
}
GET /api/ranking/list?code=bestseller&categoryId=6
参数:
code - 排行榜类型code(必填,如:bestseller、popular)categoryId - 分类ID(可选,不传表示全部分类)响应:
{
"code": 200,
"data": [
{
"id": 10,
"title": "思维的艺术",
"author": "延斯·森特根",
"cover": "https://...",
"image": "https://...",
...
}
]
}
排序逻辑:
sort字段有值),按sort ASC排序sort相同,按weight DESC排序id DESC排序分类筛选:
categoryId为null时,查询所有记录(不按分类筛选)categoryId不为null时,只查询该分类的记录数据一致性:
ranking_items表中的book_id对应的书籍存在ranking_items表中的category_id对应的分类存在(如果category_id不为null)默认数据:
现在可以通过后台管理系统添加书籍并自定义排序,前端小程序会实时显示排序结果!
创建时间: 2024年
最后更新: 2024年