zhibo/Zhibo/zhibo-h/分类管理模块快速参考.md
2025-12-29 11:57:36 +08:00

288 lines
7.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 分类管理模块 - 快速参考
## 📚 接口列表
### 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