|
@@ -1,6 +1,56 @@
|
|
|
package system
|
|
|
|
|
|
-import "github.com/beego/beego/v2/client/orm"
|
|
|
+import (
|
|
|
+ "fmt"
|
|
|
+ "github.com/beego/beego/v2/client/orm"
|
|
|
+ "strings"
|
|
|
+ "time"
|
|
|
+)
|
|
|
+
|
|
|
+
|
|
|
+const (
|
|
|
+ MenuSpecialHandleClassifyChildMenu = "classifyList:cnClassify:childMenu"
|
|
|
+ MenuSpecialHandleClassifyShowType = "classifyList:cnClassify:showType"
|
|
|
+ MenuSpecialHandleClassifyReportImgs = "classifyList:cnClassify:reportImgs"
|
|
|
+ MenuSpecialHandleSandboxVariety = "sandbox:variety"
|
|
|
+)
|
|
|
+
|
|
|
+type SysMenu struct {
|
|
|
+ MenuId int `orm:"column(menu_id);pk"`
|
|
|
+ ParentId int `description:"父级菜单ID"`
|
|
|
+ Name string `description:"菜单名称或者按钮名称"`
|
|
|
+ RootId int `description:"顶层菜单ID"`
|
|
|
+ Sort string `description:"排序"`
|
|
|
+ Path string `description:"路由地址"`
|
|
|
+ PathName string `description:"路由名称"`
|
|
|
+ IconPath string `description:"菜单图标地址"`
|
|
|
+ Component int `description:"组件路径"`
|
|
|
+ Hidden int `description:"是否隐藏:1-隐藏 0-显示"`
|
|
|
+ HiddenLayout int `description:"是否隐藏layout:1-隐藏 0-显示"`
|
|
|
+ Level int `description:"菜单等级:1-2-3"`
|
|
|
+ IsLevel int `description:"是否为多级菜单:1,只有一级;2,有多级"`
|
|
|
+ LevelPath string `description:"兼容以前menu表的字段"`
|
|
|
+ MenuType int `description:"菜单类型: 0-菜单; 1-按钮; 2-字段(需要特殊处理)"`
|
|
|
+ ButtonCode string `description:"按钮/菜单唯一标识"`
|
|
|
+ CreateTime time.Time `description:"创建时间"`
|
|
|
+ ModifyTime time.Time `description:"更新时间"`
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+func GetSysMenuItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*SysMenu, err error) {
|
|
|
+ o := orm.NewOrm()
|
|
|
+ fields := strings.Join(fieldArr, ",")
|
|
|
+ if len(fieldArr) == 0 {
|
|
|
+ fields = `*`
|
|
|
+ }
|
|
|
+ order := `ORDER BY create_time DESC`
|
|
|
+ if orderRule != "" {
|
|
|
+ order = ` ORDER BY ` + orderRule
|
|
|
+ }
|
|
|
+ sql := fmt.Sprintf(`SELECT %s FROM sys_menu WHERE 1=1 %s %s`, fields, condition, order)
|
|
|
+ _, err = o.Raw(sql, pars).QueryRows(&items)
|
|
|
+ return
|
|
|
+}
|
|
|
|
|
|
type MenuList struct {
|
|
|
MenuId int `description:"导航唯一标识"`
|
|
@@ -52,22 +102,74 @@ func GetMenuByParentId(roleId, parentId int) (items []*ChildMenu, err error) {
|
|
|
|
|
|
func GetMenuListByRoleIds(roleIds string) (items []*MenuList, err error) {
|
|
|
sql := ` SELECT DISTINCT a.* FROM sys_menu AS a
|
|
|
- INNER JOIN sys_role_menu AS b ON a.menu_id=b.menu_id
|
|
|
+ INNER JOIN sys_role_menu AS b ON a.menu_id=b.menu_id AND b.type = 0
|
|
|
INNER JOIN sys_role AS c ON b.role_id=c.role_id
|
|
|
- WHERE c.role_id in (`+roleIds+`)
|
|
|
+ WHERE c.role_id in (` + roleIds + `)
|
|
|
AND a.parent_id=0
|
|
|
ORDER BY sort ASC `
|
|
|
_, err = orm.NewOrm().Raw(sql).QueryRows(&items)
|
|
|
return
|
|
|
}
|
|
|
+
|
|
|
|
|
|
func GetMenuByParentIdRoleIds(roleIds string, parentId int) (items []*ChildMenu, err error) {
|
|
|
sql := ` SELECT DISTINCT a.* FROM sys_menu AS a
|
|
|
- INNER JOIN sys_role_menu AS b ON a.menu_id=b.menu_id
|
|
|
+ INNER JOIN sys_role_menu AS b ON a.menu_id=b.menu_id AND b.type = 0
|
|
|
INNER JOIN sys_role AS c ON b.role_id=c.role_id
|
|
|
- WHERE c.role_id in (`+roleIds+`)
|
|
|
+ WHERE c.role_id in (` + roleIds + `)
|
|
|
AND a.parent_id=?
|
|
|
ORDER BY a.sort ASC`
|
|
|
_, err = orm.NewOrm().Raw(sql, parentId).QueryRows(&items)
|
|
|
return
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+func GetMenuButtonsByRoleId(roleId int) (items []*SysMenu, err error) {
|
|
|
+ sql := `SELECT
|
|
|
+ r.*
|
|
|
+ FROM
|
|
|
+ sys_menu AS r
|
|
|
+ JOIN sys_role_menu AS rm ON r.menu_id = rm.menu_id AND rm.type = 0
|
|
|
+ WHERE
|
|
|
+ rm.role_id = ? AND r.menu_type = 1
|
|
|
+ ORDER BY
|
|
|
+ r.sort ASC,
|
|
|
+ r.create_time DESC`
|
|
|
+ _, err = orm.NewOrm().Raw(sql, roleId).QueryRows(&items)
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+type SysMenuButtonResp struct {
|
|
|
+ MenuId int `description:"菜单ID"`
|
|
|
+ ParentId int `description:"父级菜单ID"`
|
|
|
+ Name string `description:"菜单名称或者按钮名称"`
|
|
|
+ MenuType int `description:"菜单类型: 0-菜单; 1-按钮"`
|
|
|
+ ButtonCode string `description:"按钮唯一标识"`
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+type SysMenuListResp struct {
|
|
|
+ ChoiceList []int `description:"已选菜单"`
|
|
|
+ HalfChoiceList []int `description:"半选菜单-方便前端回显用的"`
|
|
|
+ List []*SysMenuItem `description:"菜单列表"`
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+type SysMenuItem struct {
|
|
|
+ MenuId int
|
|
|
+ ParentId int `description:"父级菜单ID"`
|
|
|
+ Name string `description:"菜单名称或者按钮名称"`
|
|
|
+ RootId int `description:"顶层菜单ID"`
|
|
|
+ Sort string `description:"排序"`
|
|
|
+ Path string `description:"路由地址"`
|
|
|
+ PathName string `description:"路由名称"`
|
|
|
+ IconPath string `description:"菜单图标地址"`
|
|
|
+ Component int `description:"组件路径"`
|
|
|
+ Hidden int `description:"是否隐藏:1-隐藏 0-显示"`
|
|
|
+ HiddenLayout int `description:"是否隐藏layout:1-隐藏 0-显示"`
|
|
|
+ Level int `description:"菜单等级:1-2-3"`
|
|
|
+ MenuType int `description:"菜单类型: 0-菜单; 1-按钮; 2-字段(需要特殊处理)"`
|
|
|
+ ButtonCode string `description:"按钮/菜单唯一标识"`
|
|
|
+ Children []*SysMenuItem `description:"子菜单"`
|
|
|
+}
|