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