签入版本

This commit is contained in:
小蚂蚁云
2026-10-20 21:53:26 +08:00
parent 5cc3da657c
commit b33799aa63
427 changed files with 32547 additions and 1 deletions
@@ -0,0 +1,60 @@
# 6.10 分类管理
:::tip 概述
分类模块(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 为扩展方向)