package service import ( "strings" "ulink-admin/frame" dao2 "ulink-admin/modules/system/dao" "ulink-admin/modules/system/models/model" "ulink-admin/modules/system/models/req" "ulink-admin/pkg/base" "xorm.io/xorm" ) type MenuService struct { MenuDao *dao2.MenuDao `inject:""` RoleDao *dao2.RoleDao `inject:""` } // GetMenuTreeByUserId 根据用户ID查询菜单 func (s MenuService) GetMenuTreeByUserId(user *model.SysUser) *[]model.SysMenu { var menuList *[]model.SysMenu //判断是否是管理员 flag := model.SysUser{}.IsAdmin(user.Id) if flag { menuList = s.MenuDao.GetMenuAll() } else { menuList = s.MenuDao.GetMenuByUserId(user.Id) } return menuList } // GetMenusTreeByUserId 根据用户ID查询菜单 func (s MenuService) GetMenusTreeByUserId(user *model.SysUser) *[]model.SysMenu { var menuList *[]model.SysMenu //判断是否是管理员 flag := model.SysUser{}.IsAdmin(user.Id) if flag { menuList = s.MenuDao.GetMenusAll() } else { menuList = s.MenuDao.GetMenusByUserId(user.Id) } return menuList } // SelectMenuListByRoleId 根据角色ID查询菜单树信息 func (s MenuService) SelectMenuListByRoleId(id int64) *[]int64 { role := s.RoleDao.SelectRoleByRoleId(id) return s.MenuDao.GetMenuByRoleId(id, role.MenuCheckStrictly) } // GetMenuList 获取菜单列表 func (s MenuService) GetMenuList(query *req.MenuQuery, info *model.SysUser) []model.SysMenu { if info.IsAdmin(info.Id) { return s.MenuDao.GetMenuList(query) } else { query.Id = info.Id return s.MenuDao.GetMenuListByUserId(query) } } // GetMenuByMenuId 根据菜单ID查询信息 func (s MenuService) GetMenuByMenuId(id int64) *model.SysMenu { return s.MenuDao.GetMenuByMenuId(id) } // InsertMenu 添加菜单数据 func (s MenuService) InsertMenu(menu *model.SysMenu) { base.Transaction(func(session *xorm.Session) { s.MenuDao.Insert(menu) //自动插入菜单的通用按钮权限 if menu.MenuType == "C" { ary := strings.Split(menu.Perms, ":") prex := strings.Join(ary[:len(ary)-1], ":") list := &model.SysMenu{MenuName: "查询", Status: "0", ParentId: menu.Id, OrderNum: 1, Path: menu.Path + "/list:get", MenuType: "F", Perms: prex + ":" + "list"} add := &model.SysMenu{MenuName: "新增", Status: "0", ParentId: menu.Id, OrderNum: 2, Path: menu.Path + "/list/add:post", MenuType: "F", Perms: prex + ":" + "edit"} edit := &model.SysMenu{MenuName: "修改", Status: "0", ParentId: menu.Id, OrderNum: 3, Path: menu.Path + "/:put", MenuType: "F", Perms: prex + ":" + "edit"} remove := &model.SysMenu{MenuName: "删除", Status: "0", ParentId: menu.Id, OrderNum: 4, Path: menu.Path + "/:delete", MenuType: "F", Perms: prex + ":" + "remove"} detail := &model.SysMenu{MenuName: "详情", Status: "0", ParentId: menu.Id, OrderNum: 5, Path: menu.Path + "/list:detail", MenuType: "F", Perms: prex + ":" + "detail"} // export := &model.SysMenu{MenuName: "导出", ParentId: menu.Id, OrderNum: 6, Path: menu.Path + "/list:export", MenuType: "F", Perms: prex + ":" + "export"} s.MenuDao.Insert(list) s.MenuDao.Insert(add) s.MenuDao.Insert(edit) s.MenuDao.Insert(remove) s.MenuDao.Insert(detail) } }) } // Update 修改菜单数据 func (s MenuService) Update(menu *model.SysMenu) { //查询原来菜单类型 base.Transaction(func(session *xorm.Session) { oldMenu := s.MenuDao.GetMenuByMenuId(menu.GetId()) s.MenuDao.Update(menu) if oldMenu.MenuType != menu.MenuType { if menu.MenuType == "C" { ary := strings.Split(menu.Perms, ":") prex := strings.Join(ary[:len(ary)-1], ":") list := &model.SysMenu{MenuName: "查询", ParentId: menu.Id, OrderNum: 1, Path: menu.Path + "/list:get", MenuType: "F", Perms: prex + ":" + "list"} add := &model.SysMenu{MenuName: "新增", ParentId: menu.Id, OrderNum: 2, Path: menu.Path + "/list/add:post", MenuType: "F", Perms: prex + ":" + "edit"} edit := &model.SysMenu{MenuName: "修改", ParentId: menu.Id, OrderNum: 3, Path: menu.Path + "/:put", MenuType: "F", Perms: prex + ":" + "edit"} remove := &model.SysMenu{MenuName: "删除", ParentId: menu.Id, OrderNum: 4, Path: menu.Path + "/:delete", MenuType: "F", Perms: prex + ":" + "remove"} detail := &model.SysMenu{MenuName: "详情", ParentId: menu.Id, OrderNum: 5, Path: menu.Path + "/list:detail", MenuType: "F", Perms: prex + ":" + "detail"} s.MenuDao.Insert(list) s.MenuDao.Insert(add) s.MenuDao.Insert(edit) s.MenuDao.Insert(remove) s.MenuDao.Insert(detail) } else { //删除parentId为menuId的菜单 query := &req.MenuQuery{} query.ParentId = int64(menu.Id) list := s.MenuDao.GetMenuList(query) for _, item := range list { s.MenuDao.Delete(item.Id, &model.SysMenu{}) } } } }) } // 删除菜单操作 func (s MenuService) Delete(id int64) { //判断是否存在子节点 if s.MenuDao.SelectSubMenuCount(id) > 0 { frame.Throw(frame.BUSINESS_CODE, "请先删除子接节点") } s.MenuDao.Delete(&model.SysMenu{}, id) } func (s MenuService) SelectSubMenuCount(id int64) int64 { return s.MenuDao.SelectSubMenuCount(id) } func (s MenuService) GetMenus(query *req.MenuQuery) []model.SysMenu { return s.MenuDao.GetMenuList(query) } func (s MenuService) GetMenuByCon(query *req.MenuQuery) *model.SysMenu { list := s.GetMenus(query) if len(list) > 0 { return &list[0] } return nil }