288 lines
7.4 KiB
Markdown
288 lines
7.4 KiB
Markdown
# 分类管理模块 - 快速参考
|
||
|
||
## 📚 接口列表
|
||
|
||
### 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=作品)
|
||
|
||
**说明**: 统计每个分类下的直播间数量和作品数量
|
||
**登录**: 不需要
|
||
**返回**:
|
||
```json
|
||
[
|
||
{
|
||
"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` (必填): 父分类ID
|
||
- `recursive` (可选): 是否递归获取所有子分类,默认false
|
||
|
||
**说明**: 获取某个分类的子分类列表
|
||
**登录**: 不需要
|
||
**返回**:
|
||
- `recursive=false`: 只返回直接子分类
|
||
- `recursive=true`: 返回所有子孙分类
|
||
|
||
---
|
||
|
||
## 🔍 使用场景
|
||
|
||
### 场景1: 首页展示热门分类
|
||
```javascript
|
||
// 获取热门直播间分类(前5个)
|
||
GET /api/front/category/hot?type=8&limit=5
|
||
|
||
// 获取热门作品分类(前10个)
|
||
GET /api/front/category/hot?type=9&limit=10
|
||
```
|
||
|
||
### 场景2: 分类筛选页面
|
||
```javascript
|
||
// 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: 多级分类展示
|
||
```javascript
|
||
// 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: 作品搜索页面
|
||
```javascript
|
||
// 1. 获取作品分类列表
|
||
GET /api/front/category/work
|
||
|
||
// 2. 按分类搜索作品
|
||
GET /api/front/search/works?keyword=测试&categoryId=1
|
||
```
|
||
|
||
---
|
||
|
||
## 📊 数据库表结构
|
||
|
||
### eb_category 表
|
||
```sql
|
||
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. 分类统计缓存
|
||
建议在前端缓存分类统计数据,避免频繁请求:
|
||
```javascript
|
||
// 缓存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}` - 更改分类状态
|
||
|
||
---
|
||
|
||
## 📝 注意事项
|
||
|
||
1. **删除分类**: 删除分类前会检查是否有子分类,如果有子分类则不允许删除
|
||
2. **分类状态**: 禁用分类后,前端接口不会返回该分类
|
||
3. **统计准确性**: 分类统计会排除已删除和已下架的内容
|
||
4. **热门分类**: 只返回有内容的分类(totalCount > 0)
|
||
5. **递归查询**: 递归查询只返回启用状态的子分类
|
||
|
||
---
|
||
|
||
## 🚀 快速开始
|
||
|
||
### 前端示例代码
|
||
|
||
```javascript
|
||
// 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
|