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

7.4 KiB
Raw Blame History

分类管理模块 - 快速参考

📚 接口列表

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 (必填): 父分类ID
  • recursive (可选): 是否递归获取所有子分类默认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} - 更改分类状态

📝 注意事项

  1. 删除分类: 删除分类前会检查是否有子分类,如果有子分类则不允许删除
  2. 分类状态: 禁用分类后,前端接口不会返回该分类
  3. 统计准确性: 分类统计会排除已删除和已下架的内容
  4. 热门分类: 只返回有内容的分类totalCount > 0
  5. 递归查询: 递归查询只返回启用状态的子分类

🚀 快速开始

前端示例代码

// 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