package menu import ( "SciencesServer/app/api/manage/model" model2 "SciencesServer/app/common/model" ) type ( Tree struct { *model2.SysMenu Children []*Tree `json:"children"` } TreeChecked struct { *model2.SysMenuBasic Checked bool `json:"checked"` Children []*TreeChecked `json:"children"` } ) // tree 树状筛选 func tree(src []*model2.SysMenu, parentID uint64) []*Tree { out := make([]*Tree, 0) for _, v := range src { if v.ParentID == parentID { out = append(out, &Tree{ SysMenu: v, Children: tree(src, v.ID), }) } } return out } // TreeCheckedFunc 树状筛选 func TreeCheckedFunc(src []*model.SysMenuScene, parentID uint64) []*TreeChecked { out := make([]*TreeChecked, 0) for _, v := range src { if v.ParentID == parentID { out = append(out, &TreeChecked{ SysMenuBasic: v.SysMenuBasic, Checked: v.SceneID > 0, Children: TreeCheckedFunc(src, v.ID), }) } } return out } // menuForSystem 系统管理员菜单 func menuForSystem(iModel model2.IModel, where ...*model2.ModelWhere) ([]*Tree, error) { out, err := iModel.(*model.SysMenu).SystemMenu(where...) if err != nil { return nil, err } return tree(out, 0), nil } // MenuForSystem 系统管理员菜单 func MenuForSystem(iModel model2.IModel, where ...*model2.ModelWhere) ([]*Tree, error) { out, err := iModel.(*model.SysMenu).SystemMenu(where...) if err != nil { return nil, err } return tree(out, 0), nil } // MenuForTenant 租户人员菜单 func MenuForTenant(iModel model2.IModel, tenantID uint64) ([]*TreeChecked, error) { out, err := iModel.(*model.SysMenu).TenantMenu(tenantID) if err != nil { return nil, err } return TreeCheckedFunc(out, 0), nil } func MenuForRole(iModel model2.IModel, tenantID uint64, roleID uint64) ([]*TreeChecked, error) { out, err := iModel.(*model.SysMenu).RoleMenu(tenantID, roleID) if err != nil { return nil, err } return TreeCheckedFunc(out, 0), nil } // MenuForUser 当前用户菜单 func MenuForUser(iModel model2.IModel, tenantID uint64, uid uint64) ([]*TreeChecked, error) { out, err := iModel.(*model.SysMenu).UserMenu(tenantID, uid) if err != nil { return nil, err } return TreeCheckedFunc(out, 0), nil }