mh_goadmin_server/app/admin/models/menu.go
2023-09-16 10:56:39 +08:00

335 lines
8.4 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package models
import (
"errors"
"fmt"
orm "go-admin/common/global"
"go-admin/tools"
)
type Menu struct {
MenuId int `json:"menuId" gorm:"primary_key;AUTO_INCREMENT"`
MenuName string `json:"menuName" gorm:"size:128;"`
Title string `json:"title" gorm:"size:128;"`
Icon string `json:"icon" gorm:"size:128;"`
Path string `json:"path" gorm:"size:128;"`
Paths string `json:"paths" gorm:"size:128;"`
MenuType string `json:"menuType" gorm:"size:1;"`
Action string `json:"action" gorm:"size:16;"`
Permission string `json:"permission" gorm:"size:255;"`
ParentId int `json:"parentId" gorm:"size:11;"`
NoCache bool `json:"noCache" gorm:"size:8;"`
Breadcrumb string `json:"breadcrumb" gorm:"size:255;"`
Component string `json:"component" gorm:"size:255;"`
Sort int `json:"sort" gorm:"size:4;"`
Visible string `json:"visible" gorm:"size:1;"`
CreateBy string `json:"createBy" gorm:"size:128;"`
UpdateBy string `json:"updateBy" gorm:"size:128;"`
IsFrame string `json:"isFrame" gorm:"size:1;DEFAULT:0;"`
DataScope string `json:"dataScope" gorm:"-"`
Params string `json:"params" gorm:"-"`
RoleId int `gorm:"-"`
Children []Menu `json:"children" gorm:"-"`
IsSelect bool `json:"is_select" gorm:"-"`
BaseModel
}
func (Menu) TableName() string {
return "sys_menu"
}
type MenuLable struct {
Id int `json:"id" gorm:"-"`
Label string `json:"label" gorm:"-"`
Children []MenuLable `json:"children" gorm:"-"`
}
type Menus struct {
MenuId int `json:"menuId" gorm:"column:menu_id;primary_key;"`
MenuName string `json:"menuName" gorm:"column:menu_name"`
Title string `json:"title" gorm:"column:title"`
Icon string `json:"icon" gorm:"column:icon"`
Path string `json:"path" gorm:"column:path"`
MenuType string `json:"menuType" gorm:"column:menu_type"`
Action string `json:"action" gorm:"column:action"`
Permission string `json:"permission" gorm:"column:permission"`
ParentId int `json:"parentId" gorm:"column:parent_id"`
NoCache bool `json:"noCache" gorm:"column:no_cache"`
Breadcrumb string `json:"breadcrumb" gorm:"column:breadcrumb"`
Component string `json:"component" gorm:"column:component"`
Sort int `json:"sort" gorm:"column:sort"`
Visible string `json:"visible" gorm:"column:visible"`
Children []Menu `json:"children" gorm:"-"`
CreateBy string `json:"createBy" gorm:"column:create_by"`
UpdateBy string `json:"updateBy" gorm:"column:update_by"`
DataScope string `json:"dataScope" gorm:"-"`
Params string `json:"params" gorm:"-"`
BaseModel
}
func (Menus) TableName() string {
return "sys_menu"
}
type MenuRole struct {
Menus
IsSelect bool `json:"is_select" gorm:"-"`
}
type MS []Menu
func (e *Menu) GetByMenuId() (Menu Menu, err error) {
table := orm.Eloquent.Table(e.TableName())
table = table.Where("menu_id = ?", e.MenuId)
if err = table.Find(&Menu).Error; err != nil {
return
}
return
}
func (e *Menu) SetMenu() (m []Menu, err error) {
menulist, err := e.GetPage()
m = make([]Menu, 0)
for i := 0; i < len(menulist); i++ {
if menulist[i].ParentId != 0 {
continue
}
menusInfo := DiguiMenu(&menulist, menulist[i])
m = append(m, menusInfo)
}
return
}
func DiguiMenu(menulist *[]Menu, menu Menu) Menu {
list := *menulist
min := make([]Menu, 0)
for j := 0; j < len(list); j++ {
if menu.MenuId != list[j].ParentId {
continue
}
mi := Menu{}
mi.MenuId = list[j].MenuId
mi.MenuName = list[j].MenuName
mi.Title = list[j].Title
mi.Icon = list[j].Icon
mi.Path = list[j].Path
mi.MenuType = list[j].MenuType
mi.Action = list[j].Action
mi.Permission = list[j].Permission
mi.ParentId = list[j].ParentId
mi.NoCache = list[j].NoCache
mi.Breadcrumb = list[j].Breadcrumb
mi.Component = list[j].Component
mi.Sort = list[j].Sort
mi.Visible = list[j].Visible
mi.CreatedAt = list[j].CreatedAt
mi.Children = []Menu{}
if mi.MenuId == 56 {
continue
}
if mi.MenuType != "F" {
ms := DiguiMenu(menulist, mi)
min = append(min, ms)
} else {
min = append(min, mi)
}
}
menu.Children = min
return menu
}
func (e *Menu) SetMenuLable() (m []MenuLable, err error) {
menulist, err := e.Get()
m = make([]MenuLable, 0)
for i := 0; i < len(menulist); i++ {
if menulist[i].ParentId != 0 {
continue
}
e := MenuLable{}
e.Id = menulist[i].MenuId
e.Label = menulist[i].Title
menusInfo := DiguiMenuLable(&menulist, e)
m = append(m, menusInfo)
}
return
}
func DiguiMenuLable(menulist *[]Menu, menu MenuLable) MenuLable {
list := *menulist
min := make([]MenuLable, 0)
for j := 0; j < len(list); j++ {
if menu.Id != list[j].ParentId {
continue
}
mi := MenuLable{}
mi.Id = list[j].MenuId
mi.Label = list[j].Title
mi.Children = []MenuLable{}
if list[j].MenuType != "F" {
ms := DiguiMenuLable(menulist, mi)
min = append(min, ms)
} else {
min = append(min, mi)
}
}
menu.Children = min
return menu
}
func (e *Menu) SetMenuRole(rolename string) (m []Menu, err error) {
fmt.Println("rolename:", rolename)
menulist, err := e.GetByRoleName(rolename)
m = make([]Menu, 0)
for i := 0; i < len(menulist); i++ {
if menulist[i].ParentId != 0 {
continue
}
menusInfo := DiguiMenu(&menulist, menulist[i])
m = append(m, menusInfo)
}
return
}
func (e *MenuRole) Get() (Menus []MenuRole, err error) {
table := orm.Eloquent.Table(e.TableName())
if e.MenuName != "" {
table = table.Where("menu_name = ?", e.MenuName)
}
if err = table.Order("sort").Find(&Menus).Error; err != nil {
return
}
return
}
func (e *Menu) GetByRoleName(rolename string) (Menus []Menu, err error) {
table := orm.Eloquent.Table(e.TableName()).Select("sys_menu.*").Joins("left join sys_role_menu on sys_role_menu.menu_id=sys_menu.menu_id")
table = table.Where("sys_role_menu.role_name=? and menu_type in ('M','C')", rolename)
if err = table.Order("sort").Find(&Menus).Error; err != nil {
return
}
return
}
func (e *Menu) Get() (Menus []Menu, err error) {
table := orm.Eloquent.Table(e.TableName())
if e.MenuName != "" {
table = table.Where("menu_name = ?", e.MenuName)
}
if e.Path != "" {
table = table.Where("path = ?", e.Path)
}
if e.Action != "" {
table = table.Where("action = ?", e.Action)
}
if e.MenuType != "" {
table = table.Where("menu_type = ?", e.MenuType)
}
if err = table.Order("sort").Find(&Menus).Error; err != nil {
return
}
return
}
func (e *Menu) GetPage() (Menus []Menu, err error) {
table := orm.Eloquent.Table(e.TableName())
if e.MenuName != "" {
table = table.Where("menu_name = ?", e.MenuName)
}
if e.Title != "" {
table = table.Where("title = ?", e.Title)
}
if e.Visible != "" {
table = table.Where("visible = ?", e.Visible)
}
if e.MenuType != "" {
table = table.Where("menu_type = ?", e.MenuType)
}
// 数据权限控制
dataPermission := new(DataPermission)
dataPermission.UserId, _ = tools.StringToInt(e.DataScope)
table, err = dataPermission.GetDataScope("sys_menu", table)
if err != nil {
return nil, err
}
if err = table.Order("sort").Find(&Menus).Error; err != nil {
return
}
return
}
func (e *Menu) Create() (id int, err error) {
result := orm.Eloquent.Table(e.TableName()).Create(&e)
if result.Error != nil {
err = result.Error
return
}
err = InitPaths(e)
if err != nil {
return
}
id = e.MenuId
return
}
func InitPaths(menu *Menu) (err error) {
parentMenu := new(Menu)
if int(menu.ParentId) != 0 {
orm.Eloquent.Table("sys_menu").Where("menu_id = ?", menu.ParentId).First(parentMenu)
if parentMenu.Paths == "" {
err = errors.New("父级paths异常请尝试对当前节点父级菜单进行更新操作")
return
}
menu.Paths = parentMenu.Paths + "/" + tools.IntToString(menu.MenuId)
} else {
menu.Paths = "/0/" + tools.IntToString(menu.MenuId)
}
orm.Eloquent.Table("sys_menu").Where("menu_id = ?", menu.MenuId).Update("paths", menu.Paths)
return
}
func (e *Menu) Update(id int) (update Menu, err error) {
if err = orm.Eloquent.Table(e.TableName()).First(&update, id).Error; err != nil {
return
}
//参数1:是要修改的数据
//参数2:是修改的数据
if err = orm.Eloquent.Table(e.TableName()).Model(&update).Updates(&e).Error; err != nil {
return
}
err = InitPaths(e)
if err != nil {
return
}
return
}
func (e *Menu) Delete(id int) (success bool, err error) {
if err = orm.Eloquent.Table(e.TableName()).Where("menu_id = ?", id).Delete(&Menu{}).Error; err != nil {
success = false
return
}
success = true
return
}