| | |
| | | package service |
| | | |
| | | import ( |
| | | "basic.com/valib/logger.git" |
| | | "errors" |
| | | "sort" |
| | | "strings" |
| | | "vamicro/extend/util" |
| | | "vamicro/system-service/models" |
| | | "vamicro/system-service/vo" |
| | | ) |
| | | |
| | | type SysMenuService struct { |
| | | |
| | | } |
| | | |
| | | func (sms *SysMenuService) Save(menu models.SysMenu) (bool,models.SysMenu){ |
| | | if menu.ParentId == "" || menu.ParentId == "0" { |
| | | menu.ParentId = "0" |
| | | menu.ParentIds= "0" |
| | | } else { |
| | | var pMenu models.SysMenu |
| | | |
| | | rows,_ := pMenu.SelectById(menu.ParentId) |
| | | if rows > 0 { |
| | | menu.ParentIds = pMenu.ParentIds+","+pMenu.Id |
| | | } else { |
| | | menu.ParentId = "0" |
| | | menu.ParentIds= "0" |
| | | } |
| | | } |
| | | if menu.Id == "" { |
| | | menu.Id = util.PseudoUuid() |
| | | if menu.Insert() { |
| | | return true,menu |
| | | } else { |
| | | return false,menu |
| | | } |
| | | } else { |
| | | if menu.Update() { |
| | | return true,menu |
| | | } else { |
| | | return false,menu |
| | | } |
| | | } |
| | | } |
| | | |
| | | /* |
| | | 默认应用可以具体到内部的按钮权限 |
| | | 可选应用只控制到菜单的显示 |
| | | */ |
| | | func (sms *SysMenuService) GetMenuTree(userId string, myMenuIds map[string]string) ([]vo.SysMenuTree,error) { |
| | | var user models.SysUser |
| | | rows, _ := user.SelectById(userId) |
| | | if rows >0 { |
| | | var menuE models.SysMenu |
| | | allMenus := menuE.FindAll() |
| | | |
| | | var menuM = make(map[string]models.SysMenu, 0) |
| | | if allMenus !=nil { |
| | | for _,mu :=range allMenus { |
| | | menuM[mu.Id] = mu |
| | | } |
| | | } |
| | | |
| | | var role models.SysRole |
| | | roles := role.FindByUserId(user.Id) |
| | | logger.Debug("len(roles):", len(roles)) |
| | | if roles !=nil && len(roles) >0 { |
| | | var userMenus []models.SysMenu |
| | | if roles[0].Name == "超级管理员" { |
| | | userMenus = allMenus |
| | | } else if roles[0].Name == "管理员" || roles[0].Name == "普通用户" { |
| | | //查本人可以看到的菜单 |
| | | userMenus = menuE.FindByUserId(user.Id) |
| | | if len(userMenus) == 0 { |
| | | userMenus = menuE.FindByRoleId(roles[0].Id) |
| | | } |
| | | //userMenus = allMenus |
| | | } |
| | | logger.Debug("len(userMenus):", len(userMenus)) |
| | | var uM = make(map[string]models.SysMenu,0) |
| | | if len(userMenus) >0 { |
| | | for _,srmE := range userMenus{ |
| | | if _,ok :=uM[srmE.Id];!ok{ |
| | | menuModel := menuM[srmE.Id] |
| | | uM[menuModel.Id] = menuModel |
| | | |
| | | pidArr := strings.Split(menuModel.ParentIds, ",") |
| | | for _,pid :=range pidArr { |
| | | if pid !="" && pid !="0" { |
| | | if _,k :=uM[pid];!k{ |
| | | uM[pid] = menuM[pid] |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | var allUserMenus []models.SysMenu |
| | | for _,v :=range uM { |
| | | allUserMenus = append(allUserMenus, v) |
| | | } |
| | | uS := menuFormat(&allUserMenus,"0", myMenuIds) |
| | | var sUs uMenuT |
| | | sUs = uS |
| | | sort.Sort(sUs) |
| | | return sUs,nil |
| | | } else { |
| | | return []vo.SysMenuTree{},nil |
| | | } |
| | | } else { |
| | | return nil,errors.New("user role wrong") |
| | | } |
| | | } else { |
| | | return nil,errors.New("user not found") |
| | | } |
| | | } |
| | | |
| | | func menuFormat(dbArr *[]models.SysMenu, parentId string, myMenuIds map [string]string) []vo.SysMenuTree { |
| | | var arr []vo.SysMenuTree |
| | | for _, m := range *dbArr { |
| | | if parentId == m.ParentId { |
| | | tmp := vo.SysMenuTree{} |
| | | tmp.Id = m.Id |
| | | tmp.Name = m.Name |
| | | tmp.Sort = m.Sort |
| | | _,ok := myMenuIds[m.Id] |
| | | tmp.Selected = ok |
| | | |
| | | children := menuFormat(dbArr, m.Id, myMenuIds) |
| | | tmp.Children = children |
| | | arr = append(arr, tmp) |
| | | } |
| | | } |
| | | var sUs uMenuT |
| | | sUs = arr |
| | | sort.Sort(sUs) |
| | | return sUs |
| | | } |
| | | |
| | | type uMenuT []vo.SysMenuTree |
| | | |
| | | func (ul uMenuT) Len()int { |
| | | return len(ul) |
| | | } |
| | | func (ul uMenuT) Swap(i,j int) { |
| | | ul[i],ul[j] = ul[j],ul[i] |
| | | } |
| | | func (ul uMenuT) Less(i,j int) bool { |
| | | return ul[i].Sort < ul[j].Sort |
| | | } |
| | | package service
|
| | |
|
| | | import (
|
| | | "basic.com/valib/logger.git"
|
| | | "errors"
|
| | | "sort"
|
| | | "strings"
|
| | | "vamicro/extend/util"
|
| | | "vamicro/system-service/models"
|
| | | "vamicro/system-service/vo"
|
| | | )
|
| | |
|
| | | type SysMenuService struct {
|
| | |
|
| | | }
|
| | |
|
| | | func (sms *SysMenuService) Save(menu models.SysMenu) (bool,models.SysMenu){
|
| | | if menu.ParentId == "" || menu.ParentId == "0" {
|
| | | menu.ParentId = "0"
|
| | | menu.ParentIds= "0"
|
| | | } else {
|
| | | var pMenu models.SysMenu
|
| | |
|
| | | rows,_ := pMenu.SelectById(menu.ParentId)
|
| | | if rows > 0 {
|
| | | menu.ParentIds = pMenu.ParentIds+","+pMenu.Id
|
| | | } else {
|
| | | menu.ParentId = "0"
|
| | | menu.ParentIds= "0"
|
| | | }
|
| | | }
|
| | | if menu.Id == "" {
|
| | | menu.Id = util.PseudoUuid()
|
| | | if menu.Insert() {
|
| | | return true,menu
|
| | | } else {
|
| | | return false,menu
|
| | | }
|
| | | } else {
|
| | | if menu.Update() {
|
| | | return true,menu
|
| | | } else {
|
| | | return false,menu
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | /*
|
| | | 默认应用可以具体到内部的按钮权限
|
| | | 可选应用只控制到菜单的显示
|
| | | */
|
| | | func (sms *SysMenuService) GetMenuTree(userId string, myMenuIds map[string]string) ([]vo.SysMenuTree,error) {
|
| | | var user models.SysUser
|
| | | rows, _ := user.SelectById(userId)
|
| | | if rows >0 {
|
| | | var menuE models.SysMenu
|
| | | allMenus := menuE.FindAll()
|
| | |
|
| | | var menuM = make(map[string]models.SysMenu, 0)
|
| | | if allMenus !=nil {
|
| | | for _,mu :=range allMenus {
|
| | | menuM[mu.Id] = mu
|
| | | }
|
| | | }
|
| | |
|
| | | var role models.SysRole
|
| | | roles := role.FindByUserId(user.Id)
|
| | | logger.Debug("len(roles):", len(roles))
|
| | | if roles !=nil && len(roles) >0 {
|
| | | var userMenus []models.SysMenu
|
| | | if roles[0].Name == "超级管理员" {
|
| | | userMenus = allMenus
|
| | | } else if roles[0].Name == "管理员" || roles[0].Name == "普通用户" {
|
| | | //查本人可以看到的菜单
|
| | | userMenus = menuE.FindByUserId(user.Id)
|
| | | if len(userMenus) == 0 {
|
| | | userMenus = menuE.FindByRoleId(roles[0].Id)
|
| | | }
|
| | | //userMenus = allMenus
|
| | | }
|
| | | logger.Debug("len(userMenus):", len(userMenus))
|
| | | var uM = make(map[string]models.SysMenu,0)
|
| | | if len(userMenus) >0 {
|
| | | for _,srmE := range userMenus{
|
| | | if _,ok :=uM[srmE.Id];!ok{
|
| | | menuModel := menuM[srmE.Id]
|
| | | uM[menuModel.Id] = menuModel
|
| | |
|
| | | pidArr := strings.Split(menuModel.ParentIds, ",")
|
| | | for _,pid :=range pidArr {
|
| | | if pid !="" && pid !="0" {
|
| | | if _,k :=uM[pid];!k{
|
| | | uM[pid] = menuM[pid]
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | var allUserMenus []models.SysMenu
|
| | | for _,v :=range uM {
|
| | | allUserMenus = append(allUserMenus, v)
|
| | | }
|
| | | uS := menuFormat(&allUserMenus,"0", myMenuIds)
|
| | | var sUs uMenuT
|
| | | sUs = uS
|
| | | sort.Sort(sUs)
|
| | | return sUs,nil
|
| | | } else {
|
| | | return []vo.SysMenuTree{},nil
|
| | | }
|
| | | } else {
|
| | | return nil,errors.New("user role wrong")
|
| | | }
|
| | | } else {
|
| | | return nil,errors.New("user not found")
|
| | | }
|
| | | }
|
| | |
|
| | | func menuFormat(dbArr *[]models.SysMenu, parentId string, myMenuIds map [string]string) []vo.SysMenuTree {
|
| | | var arr []vo.SysMenuTree
|
| | | for _, m := range *dbArr {
|
| | | if parentId == m.ParentId {
|
| | | tmp := vo.SysMenuTree{}
|
| | | tmp.Id = m.Id
|
| | | tmp.Name = m.Name
|
| | | tmp.Sort = m.Sort
|
| | | _,ok := myMenuIds[m.Id]
|
| | | tmp.Selected = ok
|
| | |
|
| | | children := menuFormat(dbArr, m.Id, myMenuIds)
|
| | | tmp.Children = children
|
| | | arr = append(arr, tmp)
|
| | | }
|
| | | }
|
| | | var sUs uMenuT
|
| | | sUs = arr
|
| | | sort.Sort(sUs)
|
| | | return sUs
|
| | | }
|
| | |
|
| | | type uMenuT []vo.SysMenuTree
|
| | |
|
| | | func (ul uMenuT) Len()int {
|
| | | return len(ul)
|
| | | }
|
| | | func (ul uMenuT) Swap(i,j int) {
|
| | | ul[i],ul[j] = ul[j],ul[i]
|
| | | }
|
| | | func (ul uMenuT) Less(i,j int) bool {
|
| | | return ul[i].Sort < ul[j].Sort
|
| | | }
|