package models import ( "LAPP_GAAS_GFrame_BACKEND/db" "LAPP_GAAS_GFrame_BACKEND/utils" "errors" ) /*** *CreateBy:lou *Date:2020/5/15 *TableName:菜单表 **********/ type Menu struct { MenuId int `xorm:"not null pk comment('菜单ID') int(0)" form:"menu_id" json:"menu_id"` MenuName string `xorm:"comment('菜单标题') VARCHAR(40)" form:"menu_name" json:"menu_name"` Title string `xorm:"comment('菜单标题') VARCHAR(40)" form:"title" json:"title"` Icon string `xorm:"comment('菜单标题') VARCHAR(40)" form:"icon" json:"icon"` Path string `xorm:"comment('菜单标题') VARCHAR(128)" form:"path" json:"path"` Paths string `xorm:"comment('菜单标题') VARCHAR(128)" form:"paths" json:"paths"` MenuType string `xorm:"comment('菜单标题') VARCHAR(1)" form:"menu_type" json:"menu_type"` Action string `xorm:"comment('菜单标题') VARCHAR(16)" form:"action" json:"action"` Permission string `xorm:"comment('菜单标题') VARCHAR(32)" form:"permission" json:"permission"` ParentId int `xorm:"comment('菜单ID') int(0)" form:"parent_id" json:"parent_id"` NoCache string `xorm:"comment('菜单标题') VARCHAR(1)" form:"no_cache" json:"no_cache"` Breadcrumb string `xorm:"comment('菜单标题') VARCHAR(32)" form:"breadcrumb" json:"breadcrumb"` Component string `xorm:"comment('菜单标题') VARCHAR(32)" form:"component" json:"component"` Sort int `xorm:"comment('菜单标题') int(4)" form:"sort" json:"sort"` Visible string `xorm:"comment('菜单标题') VARCHAR(1)" form:"visible" json:"visible"` CreateBy string `xorm:"comment('菜单标题') VARCHAR(128)" form:"create_by" json:"create_by"` UpdateBy string `xorm:"comment('菜单标题') VARCHAR(128)" form:"update_by" json:"update_by"` IsFrame string `xorm:"comment('菜单ID') int(0)" form:"is_frame" json:"is_frame"` DataScope string `json:"dataScope" xorm:"-"` Params string `json:"params" xorm:"-"` RoleId int `xorm:"-" form:"role_id" json:"role_id"` Children []Menu `json:"children" xorm:"-"` IsSelect bool `json:"is_select" xorm:"-"` } type MenuB struct { MenuName string `form:"menu_name" json:"menu_name"` Title string `form:"title" json:"title"` Icon string `form:"icon" json:"icon"` Path string `form:"path" json:"path"` Paths string `form:"paths" json:"paths"` MenuType string `form:"menu_type" json:"menu_type"` Action string `form:"action" json:"action"` Permission string `form:"permission" json:"permission"` ParentId int `form:"parent_id" json:"parent_id"` NoCache string `form:"no_cache" json:"no_cache"` Breadcrumb string `form:"breadcrumb" json:"breadcrumb"` Component string `form:"component" json:"component"` Sort int `form:"sort" json:"sort"` Visible string `form:"visible" json:"visible"` CreateBy string `form:"create_by" json:"create_by"` UpdateBy string `form:"update_by" json:"update_by"` IsFrame string `form:"is_frame" json:"is_frame"` } type MenuLable struct { Id int `json:"id" xorm:"-"` Label string `json:"label" xorm:"-"` Children []MenuLable `json:"children" xorm:"-"` } type Menus struct { MenuId int `json:"menu_id" xorm:"column:menu_id"` MenuName string `json:"menu_name" xorm:"column:menu_name"` Title string `json:"title" xorm:"column:title"` Icon string `json:"icon" xorm:"column:icon"` Path string `json:"path" xorm:"column:path"` MenuType string `json:"menu_type" xorm:"column:menu_type"` Action string `json:"action" xorm:"column:action"` Permission string `json:"permission" xorm:"column:permission"` ParentId int `json:"parent_id" xorm:"column:parent_id"` NoCache bool `json:"no_cache" xorm:"column:no_cache"` Breadcrumb string `json:"breadcrumb" xorm:"column:breadcrumb"` Component string `json:"component" xorm:"column:component"` Sort int `json:"sort" xorm:"column:sort"` Visible string `json:"visible" xorm:"column:visible"` Children []Menu `json:"children" xorm:"-"` CreateBy string `json:"create_by" xorm:"column:create_by"` UpdateBy string `json:"update_by" xorm:"column:update_by"` DataScope string `json:"dataScope" xorm:"-"` Params string `json:"params" xorm:"-"` } func (t *Menu) TableName() string { return "menu" } type MenuRole struct { Menus IsSelect bool `json:"is_select" gorm:"-"` } type MS []Menu // 清除string字段的右侧空格 func (t *Menu) Clipped() { utils.TrimStruct(t, *t) } //根据菜单id,查询菜单 func (t *Menu) GetByMenuId() (Menu Menu, err error) { e := db.Eloquent.Master() _, err = e.Table(t.TableName()).Where("menu_id = ? and visible = 0", t.MenuId).Get(&Menu) if err != nil { return } return } func (t *Menu) SetMenu() (m []Menu, err error) { menulist, err := t.GetPage() m = make([]Menu, 0) for i := 0; i < len(menulist); i++ { menulist[i].Clipped() 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.Children = []Menu{} utils.TrimStruct(&mi, mi) if mi.MenuType != "F" { ms := DiguiMenu(menulist, mi) utils.TrimStruct(&ms, ms) min = append(min, ms) } else { min = append(min, mi) } } menu.Children = min return menu } func (t *Menu) SetMenuRole(rolename string) (m []Menu, err error) { menulist := t.GetByRoleName(rolename) for i := 0; i < len(menulist); i++ { if menulist[i].ParentId != 0 { continue } menusInfo := DiguiMenu(&menulist, menulist[i]) utils.TrimStruct(&menusInfo, menusInfo) m = append(m, menusInfo) } return } func (t *Menu) GetByRoleName(rolename string) []Menu { menus := make([]Menu, 0) e := db.Eloquent.Master() err := e.SQL("select menu.* from menu left join role_menu on role_menu.menu_id=menu.menu_id where role_menu.role_name=? and menu.menu_type in ('M','C') and menu.visible = 0", rolename).Find(&menus) if err != nil { return nil } return menus } func (t *Menu) SetMenuLable() (m []MenuLable, err error) { menulist, err := t.Get() m = make([]MenuLable, 0) for i := 0; i < len(menulist); i++ { menulist[i].Clipped() 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++ { list[j].Clipped() 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 (t *MenuRole) Get() (Menus []MenuRole, err error) { e := db.Eloquent.Master() table := e.Table("menu") if t.MenuName != "" { table = table.Where("menu_name = ?", t.MenuName) } if err = table.OrderBy("sort").Find(&Menus); err != nil { return } return } func (t *Menu) Get() (Menus []Menu, err error) { e := db.Eloquent.Master() table := e.Table(t.TableName()).Where("1=1").And("menu.visible = ?",0) if t.MenuName != "" { table = table.And("menu_name = ?", t.MenuName) } if t.Path != "" { table = table.And("path = ?", t.Path) } if t.Action != "" { table = table.And("action = ?", t.Action) } if t.MenuType != "" { table = table.And("menu_type = ?", t.MenuType) } if err = table.OrderBy("sort").Find(&Menus); err != nil { return } return } func (t *Menu) GetPage() (Menus []Menu, err error) { e := db.Eloquent.Master() table := e.Table(t.TableName()).Where("1=1").And("visible = ?", 0) if t.MenuName != "" { table = table.And("menu_name = ?", t.MenuName) } if t.Title != "" { table = table.And("title = ?", t.Title) } table = table.And("menu_type in ('M','C','F')") if err = table.OrderBy("sort").Find(&Menus); err != nil { return } return } func (t *Menu) Create() (id int, err error) { e := db.Eloquent.Master() data := MenuB{} data.Sort = t.Sort data.Visible = t.Visible data.Breadcrumb = t.Breadcrumb data.Action = t.Action data.NoCache = t.NoCache data.Component = t.Component data.UpdateBy = t.UpdateBy data.CreateBy = t.CreateBy data.Icon = t.Icon data.MenuName = t.MenuName data.MenuType = t.MenuType data.Path = t.Path data.Permission = t.Permission data.ParentId = t.ParentId data.Title = t.Title _, err = e.Table(t.TableName()).Insert(data) if err != nil { return } //err = InitPaths(t) //if err != nil { // return //} id = t.MenuId return } func InitPaths(menu *Menu) (err error) { e := db.Eloquent.Master() parentMenu := new(Menu) if int(menu.ParentId) != 0 { e.Table("menu").Where("menu_id = ?", menu.ParentId).Get(parentMenu) if parentMenu.Paths == "" { err = errors.New("父级paths异常,请尝试对当前节点父级菜单进行更新操作!") return } menu.Paths = parentMenu.Paths + "/" + utils.ValueToString(menu.MenuId, "") } else { menu.Paths = "/0/" + utils.ValueToString(menu.MenuId, "") } e.Table("menu").Where("menu_id = ?", menu.MenuId).Update("paths", menu.Paths) return } func (t *Menu) Update(id int) (err error) { e := db.Eloquent.Master() var upmenu Menu upmenu.Permission = t.Permission upmenu.ParentId = t.ParentId upmenu.Title = t.Title upmenu.Paths = t.Paths upmenu.Path = t.Path upmenu.MenuType = t.MenuType upmenu.MenuName = t.MenuName upmenu.IsFrame = t.IsFrame upmenu.Icon = t.Icon upmenu.CreateBy = t.CreateBy upmenu.UpdateBy = t.UpdateBy upmenu.Component = t.Component upmenu.Action = t.Action upmenu.Breadcrumb = t.Breadcrumb upmenu.Visible = t.Visible upmenu.Sort = t.Sort //参数1:是要修改的数据 columns := []string{"permission", "parent_id", "title", "paths", "path", "menu_type", "menu_name", "is_frame", "icon", "breadcrumb", "visible", "sort", "create_by", "update_by", "component", "action"} //参数2:是修改的数据 if _, err = e.Table(t.TableName()).ID(id).MustCols(columns...).Update(&upmenu); err != nil { return } //err = InitPaths(t) //if err != nil { // return //} return } func (t *Menu) Delete(id int) (success bool, err error) { e := db.Eloquent.Master() if _, err = e.Table(t.TableName()).Where("menu_id = ?", id).Delete(&Menu{}); err != nil { success = false return } success = true return }