多级菜单是很多业务场景需要的。下面是一种处理方式文章来源:https://www.toymoban.com/news/detail-660432.html
// 生成树结构
func tree(menus []*video.XkVideoCategory, parentId uint) []*video.XkVideoCategory {
//定义子节点目录
var nodes []*video.XkVideoCategory
if reflect.ValueOf(menus).IsValid() {
//循环所有一级菜单
for _, v := range menus {
//查询所有该菜单下的所有子菜单
if v.ParentId == parentId {
//特别注意压入元素不是单个所有加三个 **...** 告诉切片无论多少元素一并压入
v.Children = append(v.Children, tree(menus, v.ID)...)
nodes = append(nodes, v)
}
}
}
return nodes
}
下面是model文章来源地址https://www.toymoban.com/news/detail-660432.html
type XkVideoCategory struct {
ID uint `gorm:"primarykey;comment:主键ID" json:"id" form:"id"`
CategoryName string `json:"categoryName" gorm:"not null;default:'';comment:分类名称"`
Description string `json:"description" gorm:"not null;default:'';comment:分类描述"`
CreateTime time.Time `gorm:"type:datetime(0);comment:创建时间" json:"createTime"`
UpdatedTime time.Time `gorm:"type:datetime(0);comment:更新时间" json:"updatedTime"`
ParentId uint `json:"parentId" gorm:"not null;default:0;comment:分类的主ID"`
Status int8 `json:"status" gorm:"not null;default:1;comment:0 未发布 1 发布"`
Sorted int8 `json:"sorted" gorm:"not null;default:1;comment:0 排序"`
IsDelete int8 `json:"isDelete" gorm:"not null;default:0;comment:0 未删除 1 删除"`
// 忽略该字段,- 表示无读写,-:migration 表示无迁移权限,-:all 表示无读写迁移权限
Children []*XkVideoCategory `gorm:"-" json:"children"`
}
到了这里,关于基于gin关于多级菜单的处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!