2023-07-03 08:45:44 +08:00

254 lines
5.6 KiB
Go

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)
}