6.10 分类管理
概述
分类模块(goframe_category,租户级表)管理文章/商品等树形分类:ModuleSpec 树形声明(IsTree + ParentOf)、租户内名称唯一、删除守卫。是三个树形模块(menu/dept/category)之一。
接口清单
text
七件套:sys:category:{page|list|detail|add|update|delete|batchDelete}
List 返回树形(IsTree + ParentOf)树形声明(spec 模式)
go
// categorySpec 树形声明(模式示意)
var categorySpec = ModuleSpec[...]{ ...,
IsTree: true,
ParentOf: func(item *v1.CategoryItem) int { return item.ParentId },
// ChildSetter 或 DTO 的 Children 字段(叶子预置 [] 而非 null)
}基座 List 末尾自动建树;DTO 必须含 Id 字段;缺 ParentOf 时 fail-fast(启动即报)。
模块特征
| 特征 | 实现 |
|---|---|
| 树形 | IsTree + ParentOf,List 建树(叶子 Children 预置空数组) |
| 唯一性 | 租户内分类名唯一(uk_tenant_name);未声明预检,1062 兜底 |
| 排序 | sort 列(有 sort 列时生成器默认 "sort asc") |
| 引用方 | article.category_id(文章归属分类) |
树构建的两条路线
text
路线一(后端建树,本模块采用):
spec.IsTree=true → List 返回树形 JSON → 前端直接渲染树
路线二(前端建树):
后端返回平铺列表 → 前端 buildTree 组装
(example 模块即此模式:"data 直接为数组,树形结构由前端 buildTree 构建")
选择:菜单/部门/分类走后端建树(权限/守卫与树结构耦合);
简单展示树可走前端建树(后端更轻)。删除守卫与引用
- 删除分类前检查子分类(树形守卫,1011 语义)
- 删除被文章引用的分类前,先调整文章归属(避免悬挂引用)
- 批量删除逐条守卫
管理建议
- 分类层级控制在 3 层内(文章分类场景足够;更深考虑是否该拆多套分类)
- sort 控制同级排序(间隔 5/10 留出插入空间,生成器同款策略)
- 租户内独立分类体系;跨租户共享分类不在设计内(平台共享行 tenant_id=0 为扩展方向)