From 35826d6f34341b86af67f73b94dba290785c50b9 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 1 Sep 2023 13:10:52 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AD=98=E5=9C=A8=E8=8F=9C=E5=8D=95=E5=AD=90?= =?UTF-8?q?=E8=8A=82=E7=82=B9=E6=95=B0=E9=87=8F=E4=B8=8E=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- features/sys_menu/api_sys_menu.go | 17 ++++++++++++++++- features/sys_menu/service/repo_sys_menu.go | 14 +++++++++++--- features/sys_menu/service/service_sys_menu.go | 6 +++--- 3 files changed, 30 insertions(+), 7 deletions(-) diff --git a/features/sys_menu/api_sys_menu.go b/features/sys_menu/api_sys_menu.go index 650ffb9e..043f659a 100644 --- a/features/sys_menu/api_sys_menu.go +++ b/features/sys_menu/api_sys_menu.go @@ -223,6 +223,11 @@ func (s *SysMenuApi) Edit(w http.ResponseWriter, r *http.Request) { ctx.JSON(w, 200, result.ErrMsg("没有权限访问菜单数据")) return } + // 禁用菜单时检查父菜单是否使用 + if body.Status == "1" && menuParent.Status == "0" { + ctx.JSON(w, 200, result.ErrMsg("父菜单未启用!")) + return + } } // 目录和菜单检查地址唯一 @@ -250,6 +255,16 @@ func (s *SysMenuApi) Edit(w http.ResponseWriter, r *http.Request) { return } + // 禁用菜单时检查子菜单是否使用 + if body.Status == "0" { + hasStatus := s.sysMenuService.HasChildByMenuIdAndStatus(body.MenuID, "1") + if hasStatus > 0 { + msg := fmt.Sprintf("不允许禁用,存在使用子菜单数:%d", hasStatus) + ctx.JSON(w, 200, result.ErrMsg(msg)) + return + } + } + body.UpdateBy = ctx.LoginUserToUserName(r) rows := s.sysMenuService.UpdateMenu(body) if rows > 0 { @@ -277,7 +292,7 @@ func (s *SysMenuApi) Remove(w http.ResponseWriter, r *http.Request) { } // 检查是否存在子菜单 - hasChild := s.sysMenuService.HasChildByMenuId(menuId) + hasChild := s.sysMenuService.HasChildByMenuIdAndStatus(menuId, "") if hasChild > 0 { msg := fmt.Sprintf("不允许删除,存在子菜单数:%d", hasChild) ctx.JSON(w, 200, result.ErrMsg(msg)) diff --git a/features/sys_menu/service/repo_sys_menu.go b/features/sys_menu/service/repo_sys_menu.go index 72a36c33..301d10ca 100644 --- a/features/sys_menu/service/repo_sys_menu.go +++ b/features/sys_menu/service/repo_sys_menu.go @@ -222,10 +222,18 @@ func (r *RepoSysMenu) SelectMenuByIds(menuIds []string) []model.SysMenu { return r.convertResultRows(results) } -// HasChildByMenuId 存在菜单子节点数量 -func (r *RepoSysMenu) HasChildByMenuId(menuId string) int64 { +// HasChildByMenuIdAndStatus 存在菜单子节点数量与状态 +func (r *RepoSysMenu) HasChildByMenuIdAndStatus(menuId, status string) int64 { querySql := "select count(1) as 'total' from sys_menu where parent_id = ?" - results, err := datasource.RawDB("", querySql, []any{menuId}) + params := []any{menuId} + + // 菜单状态 + if status != "" { + querySql += " and status = ?" + params = append(params, status) + } + + results, err := datasource.RawDB("", querySql, params) if err != nil { log.Errorf("query err => %v", err) return 0 diff --git a/features/sys_menu/service/service_sys_menu.go b/features/sys_menu/service/service_sys_menu.go index 41b99fe4..03311dbd 100644 --- a/features/sys_menu/service/service_sys_menu.go +++ b/features/sys_menu/service/service_sys_menu.go @@ -102,9 +102,9 @@ func (r *ServiceSysMenu) SelectMenuById(menuId string) model.SysMenu { return model.SysMenu{} } -// HasChildByMenuId 存在菜单子节点数量 -func (r *ServiceSysMenu) HasChildByMenuId(menuId string) int64 { - return r.sysMenuRepository.HasChildByMenuId(menuId) +// HasChildByMenuIdAndStatus 存在菜单子节点数量与状态 +func (r *ServiceSysMenu) HasChildByMenuIdAndStatus(menuId, status string) int64 { + return r.sysMenuRepository.HasChildByMenuIdAndStatus(menuId, status) } // CheckMenuExistRole 查询菜单是否存在角色