7.4 KiB
7.4 KiB
分类管理模块 - 快速参考
📚 接口列表
1. 获取直播间分类列表
GET /api/front/category/live-room
说明: 获取所有启用状态的直播间分类
登录: 不需要
返回: 分类列表(ID、名称、父级ID、排序、扩展字段)
2. 获取作品分类列表
GET /api/front/category/work
说明: 获取所有启用状态的作品分类
登录: 不需要
返回: 分类列表(ID、名称、父级ID、排序、扩展字段)
3. 获取指定类型的分类列表
GET /api/front/category/list?type={type}
参数:
type(必填): 分类类型- 1 = 商品分类
- 3 = 文章分类
- 8 = 直播间分类
- 9 = 作品分类
说明: 获取指定类型的所有启用状态分类
登录: 不需要
返回: 分类列表
4. 获取分类详情
GET /api/front/category/{id}
参数:
id(必填): 分类ID
说明: 获取单个分类的详细信息
登录: 不需要
返回: 分类详情
5. 获取分类统计信息 ⭐ 新增
GET /api/front/category/statistics?type={type}
参数:
type(必填): 分类类型(8=直播间,9=作品)
说明: 统计每个分类下的直播间数量和作品数量
登录: 不需要
返回:
[
{
"id": 1,
"name": "娱乐",
"pid": 0,
"sort": 100,
"extra": "",
"liveRoomCount": 15,
"worksCount": 32,
"totalCount": 47
}
]
6. 获取热门分类 ⭐ 新增
GET /api/front/category/hot?type={type}&limit={limit}
参数:
type(必填): 分类类型(8=直播间,9=作品)limit(可选): 返回数量限制,默认10
说明: 按使用频率排序返回热门分类(只返回有内容的分类)
登录: 不需要
返回: 热门分类列表(按使用量从高到低排序)
7. 获取子分类列表 ⭐ 新增
GET /api/front/category/{parentId}/children?recursive={recursive}
参数:
parentId(必填): 父分类IDrecursive(可选): 是否递归获取所有子分类,默认false
说明: 获取某个分类的子分类列表
登录: 不需要
返回:
recursive=false: 只返回直接子分类recursive=true: 返回所有子孙分类
🔍 使用场景
场景1: 首页展示热门分类
// 获取热门直播间分类(前5个)
GET /api/front/category/hot?type=8&limit=5
// 获取热门作品分类(前10个)
GET /api/front/category/hot?type=9&limit=10
场景2: 分类筛选页面
// 1. 获取所有直播间分类
GET /api/front/category/live-room
// 2. 获取每个分类的统计信息
GET /api/front/category/statistics?type=8
// 3. 按分类筛选直播间
GET /api/front/live/public/rooms?categoryId=1
场景3: 多级分类展示
// 1. 获取一级分类
GET /api/front/category/list?type=9
// 2. 获取某个一级分类的直接子分类
GET /api/front/category/1/children?recursive=false
// 3. 获取某个一级分类的所有子孙分类
GET /api/front/category/1/children?recursive=true
场景4: 作品搜索页面
// 1. 获取作品分类列表
GET /api/front/category/work
// 2. 按分类搜索作品
GET /api/front/search/works?keyword=测试&categoryId=1
📊 数据库表结构
eb_category 表
CREATE TABLE `eb_category` (
`id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`pid` int DEFAULT NULL COMMENT '父级ID',
`path` varchar(255) DEFAULT NULL COMMENT '路径',
`name` varchar(100) NOT NULL COMMENT '分类名称',
`type` int NOT NULL COMMENT '类型:1-商品 3-文章 8-直播间 9-作品',
`url` varchar(255) DEFAULT NULL COMMENT '地址',
`extra` varchar(500) DEFAULT NULL COMMENT '扩展字段',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态:1-正常 0-失效',
`sort` int DEFAULT '0' COMMENT '排序',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_type` (`type`),
KEY `idx_pid` (`pid`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='分类表';
🎯 分类类型说明
| 类型值 | 说明 | 常量名 |
|---|---|---|
| 1 | 商品分类 | CATEGORY_TYPE_PRODUCT |
| 2 | 附件分类 | CATEGORY_TYPE_ATTACHMENT |
| 3 | 文章分类 | CATEGORY_TYPE_ARTICLE |
| 4 | 设置分类 | CATEGORY_TYPE_SETTING |
| 5 | 菜单分类 | CATEGORY_TYPE_MENU |
| 6 | 配置分类 | CATEGORY_TYPE_CONFIG |
| 7 | 秒杀配置 | CATEGORY_TYPE_SECKILL |
| 8 | 直播间分类 | CATEGORY_TYPE_LIVE_ROOM |
| 9 | 作品分类 | CATEGORY_TYPE_WORK |
💡 最佳实践
1. 分类统计缓存
建议在前端缓存分类统计数据,避免频繁请求:
// 缓存5分钟
const cacheKey = `category_stats_${type}`;
const cachedData = localStorage.getItem(cacheKey);
if (cachedData && Date.now() - cachedData.timestamp < 5 * 60 * 1000) {
return cachedData.data;
}
2. 热门分类更新频率
热门分类数据建议每小时更新一次,避免实时计算影响性能。
3. 递归查询性能
递归查询所有子分类时,建议限制分类层级深度(不超过5级),避免性能问题。
4. 分类筛选优化
在列表页面使用分类筛选时,建议同时显示分类统计信息,让用户知道每个分类下有多少内容。
🔧 后台管理接口
后台管理接口位于 crmeb-admin 模块,需要管理员权限:
GET /api/admin/category/list- 分类列表POST /api/admin/category/save- 新增分类POST /api/admin/category/update- 修改分类GET /api/admin/category/delete- 删除分类GET /api/admin/category/info- 分类详情GET /api/admin/category/list/tree- 树形结构列表GET /api/admin/category/updateStatus/{id}- 更改分类状态
📝 注意事项
- 删除分类: 删除分类前会检查是否有子分类,如果有子分类则不允许删除
- 分类状态: 禁用分类后,前端接口不会返回该分类
- 统计准确性: 分类统计会排除已删除和已下架的内容
- 热门分类: 只返回有内容的分类(totalCount > 0)
- 递归查询: 递归查询只返回启用状态的子分类
🚀 快速开始
前端示例代码
// 1. 获取直播间分类列表
async function getLiveRoomCategories() {
const response = await fetch('/api/front/category/live-room');
const result = await response.json();
return result.data;
}
// 2. 获取分类统计信息
async function getCategoryStatistics(type) {
const response = await fetch(`/api/front/category/statistics?type=${type}`);
const result = await response.json();
return result.data;
}
// 3. 获取热门分类
async function getHotCategories(type, limit = 10) {
const response = await fetch(`/api/front/category/hot?type=${type}&limit=${limit}`);
const result = await response.json();
return result.data;
}
// 4. 获取子分类
async function getChildCategories(parentId, recursive = false) {
const response = await fetch(`/api/front/category/${parentId}/children?recursive=${recursive}`);
const result = await response.json();
return result.data;
}
📞 技术支持
如有问题,请查看:
- 业务功能开发完成度报告.md
- 分类管理模块完成总结.md