package menu import ( "SciencesServer/app/api/admin/model" model2 "SciencesServer/app/common/model" ) type ( Tree struct { ID string `json:"id"` ParentID string `json:"parent_id"` *model2.SysMenu Path string `json:"path"` Hidden int `json:"hidden"` Children []*Tree `json:"children"` } TreeChecked struct { ID string `json:"id"` ParentID string `json:"parent_id"` *model2.SysMenuBasic Path string `json:"path"` Hidden int `json:"hidden"` 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{ ID: v.GetEncodeID(), ParentID: (&model2.Model{ID: v.ParentID}).GetEncodeID(), SysMenu: v, Path: v.Link, Hidden: int(v.IsHidden), 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{ ID: v.GetEncodeID(), ParentID: (&model2.Model{ID: v.ParentID}).GetEncodeID(), SysMenuBasic: v.SysMenuBasic, Path: v.Link, Hidden: int(v.IsHidden), 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 } // menuForTenant 租户人员菜单 func menuForTenant(iModel model2.IModel, tenantID uint64, where ...*model2.ModelWhere) ([]*Tree, error) { out, err := iModel.(*model.SysMenu).TenantMenu(tenantID, where...) if err != nil { return nil, err } return tree(out, 0), nil } // MenuForSystem 系统管理员菜单 func MenuForSystem(iModel model2.IModel, where ...*model2.ModelWhere) ([]*Tree, error) { return menuForSystem(iModel, where...) } // MenuForTenant 租户人员菜单 func MenuForTenant(iModel model2.IModel, tenantID uint64, where ...*model2.ModelWhere) ([]*Tree, error) { return menuForTenant(iModel, tenantID, where...) } // MenuForUser 当前用户菜单 func MenuForUser(iModel model2.IModel, tenantID uint64, uid uint64, where ...*model2.ModelWhere) ([]*Tree, error) { out, err := iModel.(*model.SysMenu).UserMenu(tenantID, uid, where...) if err != nil { return nil, err } return tree(out, 0), nil } // MenuForTenantChecked 租户选中菜单 func MenuForTenantChecked(iModel model2.IModel, tenantID uint64) ([]*TreeChecked, error) { out, err := iModel.(*model.SysMenu).TenantMenuChecked(tenantID) if err != nil { return nil, err } return TreeCheckedFunc(out, 0), nil } // MenuForRoleChecked 角色选中菜单 func MenuForRoleChecked(iModel model2.IModel, tenantID uint64, roleID uint64) ([]*TreeChecked, error) { out, err := iModel.(*model.SysMenu).RoleMenuChecked(tenantID, roleID) if err != nil { return nil, err } return TreeCheckedFunc(out, 0), nil }