sys_menu.go 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. package system
  2. import (
  3. "eta/eta_api/global"
  4. "eta/eta_api/utils"
  5. "fmt"
  6. "strings"
  7. "time"
  8. )
  9. // 需要特殊处理的菜单字段项
  10. const (
  11. MenuSpecialHandleClassifyChildMenu = "classifyList:cnClassify:childMenu"
  12. MenuSpecialHandleClassifyShowType = "classifyList:cnClassify:showType"
  13. MenuSpecialHandleClassifyReportImgs = "classifyList:cnClassify:reportImgs"
  14. MenuSpecialHandleSandboxVariety = "sandbox:variety"
  15. )
  16. type SysMenu struct {
  17. MenuId int `orm:"column(menu_id);pk" gorm:"primaryKey"`
  18. ParentId int `description:"父级菜单ID"`
  19. Name string `description:"菜单名称或者按钮名称"`
  20. Sort string `description:"排序"`
  21. Path string `description:"路由地址"`
  22. IconPath string `description:"菜单图标地址"`
  23. Component string `description:"组件路径"`
  24. Hidden int `description:"是否隐藏:1-隐藏 0-显示"`
  25. IsLevel int `description:"是否为多级菜单:1,只有一级;2,有多级"`
  26. LevelPath string `description:"兼容以前menu表的字段"`
  27. MenuType int `description:"菜单类型: 0-菜单; 1-按钮; 2-字段(需要特殊处理)"`
  28. ButtonCode string `description:"按钮/菜单唯一标识"`
  29. CreateTime time.Time `description:"创建时间"`
  30. ModifyTime time.Time `description:"更新时间"`
  31. Api string `description:"按钮相关api"`
  32. NameEn string `description:"菜单名称或者按钮名称(英文)"`
  33. }
  34. // GetSysMenuItemsByCondition 获取菜单列表
  35. func GetSysMenuItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*SysMenu, err error) {
  36. o := global.DbMap[utils.DbNameMaster]
  37. fields := strings.Join(fieldArr, ",")
  38. if len(fieldArr) == 0 {
  39. fields = `*`
  40. }
  41. order := `ORDER BY create_time DESC`
  42. if orderRule != "" {
  43. order = ` ORDER BY ` + orderRule
  44. }
  45. sql := fmt.Sprintf(`SELECT %s FROM sys_menu WHERE 1=1 %s %s`, fields, condition, order)
  46. err = o.Raw(sql, pars...).Find(&items).Error
  47. return
  48. }
  49. type MenuList struct {
  50. MenuId int `description:"导航唯一标识"`
  51. IsLevel int `description:"1,只有一级;2,有多级"`
  52. Name string `json:"name" description:"导航名称"`
  53. NameEn string `json:"name_en" description:"导航名称(英文)"`
  54. Path string `json:"path"`
  55. IconPath string `json:"icon_path"`
  56. LevelPath string `json:"level_path"`
  57. Component string `json:"component"`
  58. Hidden bool `json:"hidden"`
  59. Children []*ChildMenu `json:"children" gorm:"-"`
  60. }
  61. type ChildMenu struct {
  62. MenuId int `description:"导航唯一标识"`
  63. Name string `json:"name" description:"导航名称"`
  64. NameEn string `json:"name_en" description:"导航名称(英文)"`
  65. Path string `json:"path"`
  66. Component string `json:"component"`
  67. IconPath string `json:"icon_path"`
  68. Hidden bool `json:"hidden"`
  69. }
  70. type MenuListResp struct {
  71. List []*MenuList
  72. }
  73. func GetMenuList(roleId int) (items []*MenuList, err error) {
  74. sql := ` SELECT a.* FROM sys_menu AS a
  75. INNER JOIN sys_role_menu AS b ON a.menu_id=b.menu_id
  76. INNER JOIN sys_role AS c ON b.role_id=c.role_id
  77. WHERE c.role_id=?
  78. AND a.parent_id=0
  79. ORDER BY sort ASC `
  80. err = global.DbMap[utils.DbNameMaster].Raw(sql, roleId).Find(&items).Error
  81. return
  82. }
  83. func GetMenuByParentId(roleId, parentId int) (items []*ChildMenu, err error) {
  84. sql := ` SELECT a.* FROM sys_menu AS a
  85. INNER JOIN sys_role_menu AS b ON a.menu_id=b.menu_id
  86. INNER JOIN sys_role AS c ON b.role_id=c.role_id
  87. WHERE c.role_id=?
  88. AND a.parent_id=?
  89. ORDER BY sort ASC `
  90. err = global.DbMap[utils.DbNameMaster].Raw(sql, roleId, parentId).Find(&items).Error
  91. return
  92. }
  93. // GetMenuListByRoleIds 根据管理员多个角色查询菜单ID
  94. func GetMenuListByRoleIds(roleIds string) (items []*MenuList, err error) {
  95. sql := ` SELECT DISTINCT a.* FROM sys_menu AS a
  96. INNER JOIN sys_role_menu AS b ON a.menu_id=b.menu_id AND b.type = 0
  97. INNER JOIN sys_role AS c ON b.role_id=c.role_id
  98. WHERE c.role_id in (` + roleIds + `)
  99. AND a.parent_id=0
  100. ORDER BY sort ASC `
  101. err = global.DbMap[utils.DbNameMaster].Raw(sql).Find(&items).Error
  102. return
  103. }
  104. // GetMenuByParentIdRoleIds 根据管理员多个角色查询子菜单ID
  105. func GetMenuByParentIdRoleIds(roleIds string, parentId int) (items []*ChildMenu, err error) {
  106. sql := ` SELECT DISTINCT a.* FROM sys_menu AS a
  107. INNER JOIN sys_role_menu AS b ON a.menu_id=b.menu_id AND b.type = 0
  108. INNER JOIN sys_role AS c ON b.role_id=c.role_id
  109. WHERE c.role_id in (` + roleIds + `)
  110. AND a.parent_id=?
  111. ORDER BY a.sort ASC, create_time DESC, menu_id DESC`
  112. err = global.DbMap[utils.DbNameMaster].Raw(sql, parentId).Find(&items).Error
  113. return
  114. }
  115. // GetMenuButtonsByRoleId 获取角色按钮菜单
  116. func GetMenuButtonsByRoleId(roleId int) (items []*SysMenu, err error) {
  117. sql := `SELECT
  118. r.*
  119. FROM
  120. sys_menu AS r
  121. JOIN sys_role_menu AS rm ON r.menu_id = rm.menu_id AND rm.type = 0
  122. WHERE
  123. rm.role_id = ? AND r.menu_type <> 0 AND r.hidden = 0
  124. ORDER BY
  125. r.sort ASC,
  126. r.create_time DESC`
  127. err = global.DbMap[utils.DbNameMaster].Raw(sql, roleId).Find(&items).Error
  128. return
  129. }
  130. // SysMenuButtonResp 按钮菜单响应体
  131. type SysMenuButtonResp struct {
  132. MenuId int `description:"菜单ID"`
  133. ParentId int `description:"父级菜单ID"`
  134. Name string `description:"菜单名称或者按钮名称"`
  135. MenuType int `description:"菜单类型: 0-菜单; 1-按钮"`
  136. ButtonCode string `description:"按钮唯一标识"`
  137. }
  138. // SysMenuListResp ETA商家菜单列表响应体
  139. type SysMenuListResp struct {
  140. ChoiceList []int `description:"已选菜单"`
  141. HalfChoiceList []int `description:"半选菜单-方便前端回显用的"`
  142. List []*SysMenuItem `description:"菜单列表"`
  143. }
  144. // SysMenuItem ETA商家菜单
  145. type SysMenuItem struct {
  146. MenuId int
  147. ParentId int `description:"父级菜单ID"`
  148. Name string `description:"菜单名称或者按钮名称"`
  149. Sort string `description:"排序"`
  150. Path string `description:"路由地址"`
  151. IconPath string `description:"菜单图标地址"`
  152. Component string `description:"组件路径"`
  153. Hidden int `description:"是否隐藏:1-隐藏 0-显示"`
  154. MenuType int `description:"菜单类型: 0-菜单; 1-按钮; 2-字段(需要特殊处理)"`
  155. ButtonCode string `description:"按钮/菜单唯一标识"`
  156. Children []*SysMenuItem `description:"子菜单"`
  157. }
  158. // BusinessConf 商户配置表
  159. type BusinessConf struct {
  160. ConfKey string `description:"配置Key"`
  161. ConfVal string `description:"配置值"`
  162. }
  163. // GetMenuButtonApisByRoleId 获取角色按钮api菜单
  164. func GetMenuButtonApisByRoleId(roleId int) (items []*SysMenu, err error) {
  165. sql := `SELECT
  166. r.*
  167. FROM
  168. sys_menu AS r
  169. JOIN sys_role_menu AS rm ON r.menu_id = rm.menu_id
  170. WHERE
  171. rm.role_id = ?
  172. ORDER BY
  173. r.sort ASC,
  174. r.create_time DESC`
  175. err = global.DbMap[utils.DbNameMaster].Raw(sql, roleId).Find(&items).Error
  176. return
  177. }
  178. // SysMenuSimple ETA商家菜单
  179. type SysMenuSimple struct {
  180. MenuId int `orm:"column(menu_id);pk" gorm:"primaryKey"`
  181. ParentId int `description:"父级菜单ID"`
  182. Name string `description:"菜单名称或者按钮名称"`
  183. Sort string `description:"排序"`
  184. Path string `description:"路由地址"`
  185. NameEn string `description:"菜单名称或者按钮名称(英文)"`
  186. }
  187. // GetMenuByRoleIds 根据管理员多个角色查询菜单ID
  188. func GetMenuByRoleIds(roleIds string) (items []*SysMenu, err error) {
  189. sql := ` SELECT DISTINCT a.* FROM sys_menu AS a
  190. INNER JOIN sys_role_menu AS b ON a.menu_id=b.menu_id AND b.type = 0
  191. INNER JOIN sys_role AS c ON b.role_id=c.role_id
  192. WHERE c.role_id in (` + roleIds + `)
  193. ORDER BY a.sort ASC, create_time DESC, menu_id DESC`
  194. err = global.DbMap[utils.DbNameMaster].Raw(sql).Find(&items).Error
  195. return
  196. }