sys_menu.go 5.5 KB
Newer Older
1 2 3 4 5 6
package service

import (
	"errors"
	"gin-vue-admin/global"
	"gin-vue-admin/model"
7
	"strconv"
8 9
)

10 11 12 13 14 15
// @title   getMenuTreeMap
// @description    获取路由总树map
// @auth       qm      (2020/05/06 10:26)
// @return     err             error
// @return    menusMsp            map{string}[]SysBaseMenu

L
Leonard Wang 已提交
16
func getMenuTreeMap(authorityId string) (err error, treeMap map[string][]model.SysMenu) {
17 18
	var allMenus []model.SysMenu
	treeMap = make(map[string][]model.SysMenu)
Mr.奇淼('s avatar
Mr.奇淼( 已提交
19
	err = global.GVA_DB.Where("authority_id = ?", authorityId).Order("sort", true).Preload("Parameters").Find(&allMenus).Error
L
Leonard Wang 已提交
20
	for _, v := range allMenus {
21 22
		treeMap[v.ParentId] = append(treeMap[v.ParentId], v)
	}
L
Leonard Wang 已提交
23
	return err, treeMap
24 25
}

26 27
// @title    GetMenuTree
// @description   获取动态菜单树
28
// @auth                     (2020/04/05  20:22)
29 30
// @param     authorityId     string
// @return    err             error
31
// @return    menus           []model.SysMenu
Mr.奇淼('s avatar
Mr.奇淼( 已提交
32

33
func GetMenuTree(authorityId string) (err error, menus []model.SysMenu) {
L
Leonard Wang 已提交
34
	err, menuTree := getMenuTreeMap(authorityId)
35
	menus = menuTree["0"]
36
	for i := 0; i < len(menus); i++ {
37
		err = getChildrenList(&menus[i], menuTree)
38 39 40 41 42 43
	}
	return err, menus
}

// @title    getChildrenList
// @description   获取子菜单
44 45 46
// @auth                     (2020/04/05  20:22)
// @param     menu            *model.SysMenu
// @param     sql             string
47
// @return    err             error
Mr.奇淼('s avatar
Mr.奇淼( 已提交
48

L
Leonard Wang 已提交
49
func getChildrenList(menu *model.SysMenu, treeMap map[string][]model.SysMenu) (err error) {
50
	menu.Children = treeMap[menu.MenuId]
51
	for i := 0; i < len(menu.Children); i++ {
52
		err = getChildrenList(&menu.Children[i], treeMap)
53 54 55 56 57 58
	}
	return err
}

// @title    GetInfoList
// @description   获取路由分页
59 60
// @auth                     (2020/04/05  20:22)
// @param     info            request.PageInfo
61
// @return    err             error
62 63
// @return    list            interface{}
// @return    total           int
Mr.奇淼('s avatar
Mr.奇淼( 已提交
64

65
func GetInfoList() (err error, list interface{}, total int) {
66
	var menuList []model.SysBaseMenu
L
Leonard Wang 已提交
67
	err, treeMap := getBaseMenuTreeMap()
68
	menuList = treeMap["0"]
69
	for i := 0; i < len(menuList); i++ {
L
Leonard Wang 已提交
70
		err = getBaseChildrenList(&menuList[i], treeMap)
71
	}
72
	return err, menuList, total
73 74 75 76
}

// @title    getBaseChildrenList
// @description   get children of menu, 获取菜单的子菜单
77 78
// @auth                     (2020/04/05  20:22)
// @param     menu            *model.SysBaseMenu
79
// @return    err             error
Mr.奇淼('s avatar
Mr.奇淼( 已提交
80

L
Leonard Wang 已提交
81
func getBaseChildrenList(menu *model.SysBaseMenu, treeMap map[string][]model.SysBaseMenu) (err error) {
82
	menu.Children = treeMap[strconv.Itoa(int(menu.ID))]
83
	for i := 0; i < len(menu.Children); i++ {
L
Leonard Wang 已提交
84
		err = getBaseChildrenList(&menu.Children[i], treeMap)
85 86 87 88 89 90
	}
	return err
}

// @title    AddBaseMenu
// @description   函数的详细描述
91 92
// @auth                     (2020/04/05  20:22)
// @param     menu            *model.SysBaseMenu
93
// @return    err             error
94
// 增加基础路由
Mr.奇淼('s avatar
Mr.奇淼( 已提交
95

96
func AddBaseMenu(menu model.SysBaseMenu) (err error) {
97 98
	findOne := global.GVA_DB.Where("name = ?", menu.Name).Find(&model.SysBaseMenu{}).Error
	if findOne != nil {
99
		err = global.GVA_DB.Create(&menu).Error
100 101 102 103 104 105
	} else {
		err = errors.New("存在重复name,请修改name")
	}
	return err
}

106 107 108 109 110 111
// @title   getBaseMenuTreeMap
// @description    获取路由总树map
// @auth       qm      (2020/05/06 10:26)
// @return     err             error
// @return    menusMsp            map{string}[]SysBaseMenu

L
Leonard Wang 已提交
112
func getBaseMenuTreeMap() (err error, treeMap map[string][]model.SysBaseMenu) {
113 114
	var allMenus []model.SysBaseMenu
	treeMap = make(map[string][]model.SysBaseMenu)
Mr.奇淼('s avatar
Mr.奇淼( 已提交
115
	err = global.GVA_DB.Order("sort", true).Preload("Parameters").Find(&allMenus).Error
L
Leonard Wang 已提交
116
	for _, v := range allMenus {
117 118
		treeMap[v.ParentId] = append(treeMap[v.ParentId], v)
	}
L
Leonard Wang 已提交
119
	return err, treeMap
120 121
}

122 123
// @title    GetBaseMenuTree
// @description   获取基础路由树
124
// @auth                     (2020/04/05  20:22)
125 126
// @return    err              error
// @return    menus            []SysBaseMenu
Mr.奇淼('s avatar
Mr.奇淼( 已提交
127

128
func GetBaseMenuTree() (err error, menus []model.SysBaseMenu) {
L
Leonard Wang 已提交
129
	err, treeMap := getBaseMenuTreeMap()
130
	menus = treeMap["0"]
131
	for i := 0; i < len(menus); i++ {
L
Leonard Wang 已提交
132
		err = getBaseChildrenList(&menus[i], treeMap)
133 134 135 136 137 138
	}
	return err, menus
}

// @title    AddMenuAuthority
// @description   为角色增加menu树
139 140
// @auth                     (2020/04/05  20:22)
// @param     menus           []model.SysBaseMenu
141 142
// @param     authorityId     string
// @return                    error
Mr.奇淼('s avatar
Mr.奇淼( 已提交
143

144
func AddMenuAuthority(menus []model.SysBaseMenu, authorityId string) (err error) {
145 146 147 148 149 150 151 152 153
	var auth model.SysAuthority
	auth.AuthorityId = authorityId
	auth.SysBaseMenus = menus
	err = SetMenuAuthority(&auth)
	return err
}

// @title    GetMenuAuthority
// @description   查看当前角色树
154
// @auth                     (2020/04/05  20:22)
155 156 157
// @param     authorityId     string
// @return    err             error
// @return    menus           []SysBaseMenu
Mr.奇淼('s avatar
Mr.奇淼( 已提交
158

159
func GetMenuAuthority(authorityId string) (err error, menus []model.SysMenu) {
Mr.奇淼('s avatar
Mr.奇淼( 已提交
160 161 162
	//sql := "SELECT authority_menu.keep_alive,authority_menu.default_menu,authority_menu.created_at,authority_menu.updated_at,authority_menu.deleted_at,authority_menu.menu_level,authority_menu.parent_id,authority_menu.path,authority_menu.`name`,authority_menu.hidden,authority_menu.component,authority_menu.title,authority_menu.icon,authority_menu.sort,authority_menu.menu_id,authority_menu.authority_id FROM authority_menu WHERE authority_menu.authority_id = ? ORDER BY authority_menu.sort ASC"
	err = global.GVA_DB.Order("sort", true).Find(&menus).Error
	//err = global.GVA_DB.Raw(sql, authorityId).Scan(&menus).Error
163
	return err, menus
164
}