model
package model
import "time"
func (MenuModel) TableName() string {
return "menu"
}
type MenuModel struct {
Id int `gorm:"column:id" json:"id"`
Title string `gorm:"column:title" json:"title"`
Route string `gorm:"column:route" json:"route"`
Sid int `gorm:"column:sid" json:"sid"`
Show int `gorm:"column:show" json:"show"`
Sort int `gorm:"column:sort" json:"sort"`
Icon string `gorm:"column:icon" json:"icon"`
Created_at time.Time `gorm:"column:created_at" json:"created_at"`
Updated_at time.Time `gorm:"column:updated_at" json:"updated_at"`
}
type MenuTreeModel struct {
MenuModel
Children []*MenuTreeModel `json:"children"`
}
service
type MapTreeType map[int64]*model.MenuTreeModel
func listToTree(items []model.MenuModel) []*model.MenuTreeModel {
var tree []*model.MenuTreeModel
mapTree := make(MapTreeType)
for _, item := range items {
// 赋值
var treeItem model.MenuTreeModel
treeItem.Id = item.Id
treeItem.Title = item.Title
treeItem.Route = item.Route
treeItem.Sid = item.Sid
treeItem.Show = item.Show
treeItem.Sort = item.Sort
treeItem.Icon = item.Icon
treeItem.Created_at = item.Created_at
treeItem.Updated_at = item.Updated_at
// 根节点收集
if item.Sid == 0 {
tree = append(tree, &treeItem)
} else {
// 子节点收集
mapTree[int64(item.Sid)].Children = append(mapTree[int64(item.Sid)].Children, &treeItem)
}
// 把节点映射到map表
mapTree[int64(item.Id)] = &treeItem
}
return tree
}