62 lines
1.5 KiB
Go
62 lines
1.5 KiB
Go
package repo
|
|
|
|
import (
|
|
appModel "busniess-user-center/internal/models/application"
|
|
"sort"
|
|
|
|
"github.com/jinzhu/copier"
|
|
)
|
|
|
|
func convertMenu(menu Menu) appModel.Menu {
|
|
aMenu := appModel.Menu{}
|
|
copier.Copy(aMenu, menu)
|
|
return aMenu
|
|
}
|
|
|
|
func makeTreeStructure(menuArr []Menu) []appModel.Menu {
|
|
// 1、组装树形结构
|
|
// 数组转map
|
|
var levelOneMenuArr []appModel.Menu
|
|
parentCodeMenuMap := make(map[string][]appModel.Menu)
|
|
for _, menu := range menuArr {
|
|
// 一级菜单不处理
|
|
if len(menu.ParentCode) == 0 {
|
|
levelOneMenuArr = append(levelOneMenuArr, convertMenu(menu))
|
|
continue
|
|
}
|
|
|
|
// 二级菜单以下按照parentCode分组
|
|
parentCode := menu.ParentCode
|
|
if _, ok := parentCodeMenuMap[parentCode]; !ok {
|
|
parentCodeMenuMap[parentCode] = []appModel.Menu{convertMenu(menu)}
|
|
} else {
|
|
parentCodeMenuMap[parentCode] = append(parentCodeMenuMap[parentCode], convertMenu(menu))
|
|
}
|
|
|
|
}
|
|
|
|
// 2、处理子级并排序
|
|
for _, subMenuArr := range parentCodeMenuMap {
|
|
for _, menu := range subMenuArr {
|
|
children := parentCodeMenuMap[menu.Code]
|
|
sort.Slice(children, func(i, j int) bool {
|
|
return children[i].Order < children[j].Order
|
|
})
|
|
menu.Children = children
|
|
}
|
|
}
|
|
|
|
for _, menu := range levelOneMenuArr {
|
|
children := parentCodeMenuMap[menu.Code]
|
|
sort.Slice(children, func(i, j int) bool {
|
|
return children[i].Order < children[j].Order
|
|
})
|
|
menu.Children = children
|
|
}
|
|
|
|
sort.Slice(levelOneMenuArr, func(i, j int) bool {
|
|
return levelOneMenuArr[i].Order < levelOneMenuArr[j].Order
|
|
})
|
|
return levelOneMenuArr
|
|
}
|