Skip to content

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 为扩展方向)

小蚂蚁云团队 · 提供技术支持