package controller import ( "github.com/gin-gonic/gin" "hospital-admin-api/api/requests" "hospital-admin-api/api/responses" "hospital-admin-api/api/responses/menuResponse" "hospital-admin-api/api/service" "hospital-admin-api/global" "hospital-admin-api/utils" "strconv" ) type Menu struct{} // GetMenuList 获取全部菜单列表 func (r *Menu) GetMenuList(c *gin.Context) { MenuService := service.MenuService{} MenuList, err := MenuService.GetMenuList() if err != nil { responses.FailWithMessage(err.Error(), c) return } if MenuList == nil { responses.FailWithMessage("请联系管理人员设置菜单", c) return } responses.OkWithData(MenuList, c) return } // AddMenu 新增菜单 func (r *Menu) AddMenu(c *gin.Context) { MenuRequest := requests.MenuRequest{} if err := c.ShouldBindJSON(&MenuRequest.AddMenu); err != nil { responses.FailWithMessage(err.Error(), c) return } // 参数验证 if err := global.Validate.Struct(MenuRequest.AddMenu); err != nil { responses.FailWithMessage(utils.Translate(err), c) return } // 处理参数 if MenuRequest.AddMenu.MenuType == 1 || MenuRequest.AddMenu.MenuType == 2 { // 模块-菜单 if MenuRequest.AddMenu.Path == "" { responses.FailWithMessage("请填写页面地址", c) return } if MenuRequest.AddMenu.Component == "" { responses.FailWithMessage("请填写组件名称", c) return } } // 非模块无父级 if MenuRequest.AddMenu.ParentId == "0" && MenuRequest.AddMenu.MenuType != 1 { responses.FailWithMessage("请选择父节点", c) return } // 模块存在父级 if MenuRequest.AddMenu.ParentId != "0" && MenuRequest.AddMenu.MenuType == 1 { responses.FailWithMessage("顶级菜单,无法添加上级菜单", c) return } // 获取角色身份 roleService := service.RoleService{} isAdmin, err := roleService.GetRoleIden(c) if err != nil { responses.FailWithMessage(err.Error(), c) return } if !isAdmin { responses.FailWithMessage("非管理员,无法操作", c) return } // 业务处理 MenuService := service.MenuService{} _, err = MenuService.AddMenu(MenuRequest.AddMenu) if err != nil { responses.FailWithMessage(err.Error(), c) return } responses.Ok(c) return } // PutMenu 修改菜单 func (r *Menu) PutMenu(c *gin.Context) { MenuRequest := requests.MenuRequest{} if err := c.ShouldBindJSON(&MenuRequest.PutMenu); err != nil { responses.FailWithMessage(err.Error(), c) return } // 参数验证 if err := global.Validate.Struct(MenuRequest.PutMenu); err != nil { responses.FailWithMessage(utils.Translate(err), c) return } id := c.Param("menu_id") if id == "" { responses.FailWithMessage("缺少参数", c) return } // 将 id 转换为 int64 类型 menuId, err := strconv.ParseInt(id, 10, 64) if err != nil { responses.Fail(c) return } // 处理参数 if MenuRequest.PutMenu.MenuType == 1 || MenuRequest.PutMenu.MenuType == 2 { // 模块-菜单 if MenuRequest.PutMenu.Path == "" { responses.FailWithMessage("请填写页面地址", c) return } if MenuRequest.PutMenu.Component == "" { responses.FailWithMessage("请填写组件名称", c) return } } // 非模块无父级 if MenuRequest.PutMenu.ParentId == "0" && MenuRequest.PutMenu.MenuType != 1 { responses.FailWithMessage("请选择父节点", c) return } // 模块存在父级 if MenuRequest.PutMenu.ParentId != "0" && MenuRequest.PutMenu.MenuType == 1 { responses.FailWithMessage("顶级菜单,无法添加上级菜单", c) return } // 获取角色身份 roleService := service.RoleService{} isAdmin, err := roleService.GetRoleIden(c) if err != nil { responses.FailWithMessage(err.Error(), c) return } if !isAdmin { responses.FailWithMessage("非管理员,无法操作", c) return } // 业务处理 menuService := service.MenuService{} _, err = menuService.PutMenu(menuId, MenuRequest.PutMenu) if err != nil { responses.FailWithMessage(err.Error(), c) return } responses.Ok(c) return } // DeleteMenu 删除菜单-批量 func (r *Menu) DeleteMenu(c *gin.Context) { MenuRequest := requests.MenuRequest{} if err := c.ShouldBindJSON(&MenuRequest.DeleteMenu); err != nil { responses.FailWithMessage(err.Error(), c) return } // 参数验证 if err := global.Validate.Struct(MenuRequest.DeleteMenu); err != nil { responses.FailWithMessage(utils.Translate(err), c) return } // 获取角色身份 roleService := service.RoleService{} isAdmin, err := roleService.GetRoleIden(c) if err != nil { responses.FailWithMessage(err.Error(), c) return } if !isAdmin { responses.FailWithMessage("非管理员,无法操作", c) return } // 业务处理 MenuService := service.MenuService{} _, err = MenuService.DeleteMenu(c, MenuRequest.DeleteMenu) if err != nil { responses.FailWithMessage(err.Error(), c) return } responses.Ok(c) } // GetMenu 菜单详情 func (r *Menu) GetMenu(c *gin.Context) { id := c.Param("menu_id") if id == "" { responses.FailWithMessage("缺少参数", c) return } // 将 id 转换为 int64 类型 menuId, err := strconv.ParseInt(id, 10, 64) if err != nil { responses.Fail(c) return } menuService := service.MenuService{} // 获取菜单详情 adminMenu, err := menuService.GetMenu(menuId) if err != nil { responses.FailWithMessage(err.Error(), c) return } // 获取菜单api getAdminMenuApis, err := menuService.GetAdminMenuApi(menuId) if err != nil { responses.FailWithMessage(err.Error(), c) return } // 处理返回值 getMenuResponse, err := menuResponse.GetMenuResponse(adminMenu, getAdminMenuApis) if err != nil { responses.FailWithMessage(err.Error(), c) return } responses.OkWithData(getMenuResponse, c) }