This commit is contained in:
孟帅
2022-11-24 23:37:34 +08:00
parent 4ffe54b6ac
commit 29bda0dcdd
1487 changed files with 97869 additions and 96539 deletions

View File

@@ -0,0 +1,59 @@
// Package tree
// @Link https://github.com/bufanyun/hotgo
// @Copyright Copyright (c) 2022 HotGo CLI
// @Author Ms <133814250@qq.com>
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
//
package tree
import (
"github.com/gogf/gf/v2/util/gconv"
)
var pidName = "pid"
// GenTree 生成关系树 参考https://blog.csdn.net/weixin_51546892/article/details/122876793
func GenTree(menus []map[string]interface{}) (realMenu []map[string]interface{}) {
if len(menus) < 1 {
return nil
}
minPid := GetMinPid(menus)
formatMenu := make(map[int]map[string]interface{})
for _, m := range menus {
formatMenu[gconv.Int(m["id"])] = m
if gconv.Int(m[pidName]) == minPid {
realMenu = append(realMenu, m) // 需要返回的顶级菜单
}
}
// 得益于都是地址操作,可以直接往父级塞
for _, m := range formatMenu {
if formatMenu[gconv.Int(m[pidName])] == nil {
continue
}
if formatMenu[gconv.Int(m[pidName])]["children"] == nil {
formatMenu[gconv.Int(m[pidName])]["children"] = []map[string]interface{}{}
}
formatMenu[gconv.Int(m[pidName])]["children"] = append(formatMenu[gconv.Int(m[pidName])]["children"].([]map[string]interface{}), m)
}
return
}
func GetMinPid(menus []map[string]interface{}) int {
index := -1
for _, m := range menus {
if index == -1 {
index = gconv.Int(m[pidName])
continue
}
if gconv.Int(m[pidName]) < index {
index = gconv.Int(m[pidName])
}
}
if index == -1 {
return 0
}
return index
}