busniess-user-center/internal/repo/convert.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
}