243 lines
5.6 KiB
Go

package controller
import (
"github.com/gin-gonic/gin"
"hospital-admin-api/api/dao"
"hospital-admin-api/api/requests"
"hospital-admin-api/api/responses"
"hospital-admin-api/api/service"
"hospital-admin-api/global"
"hospital-admin-api/utils"
"strconv"
)
type Role struct{}
// GetRoleMenuList 获取登陆角色菜单列表
func (r *Role) GetRoleMenuList(c *gin.Context) {
roleId := c.GetInt64("RoleId")
if roleId == 0 {
responses.Fail(c)
return
}
// 获取角色菜单
RoleService := service.RoleService{}
roleMenuList, err := RoleService.GetRoleMenuList(roleId)
if err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
if len(roleMenuList) == 0 {
responses.FailWithMessage("请联系管理人员设置菜单", c)
return
}
responses.OkWithData(roleMenuList, c)
}
// GetRolePage 获取角色列表-分页
func (r *Role) GetRolePage(c *gin.Context) {
RoleRequest := requests.RoleRequest{}
if err := c.ShouldBind(&RoleRequest.GetRolePage); err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
// 参数验证
if err := global.Validate.Struct(RoleRequest.GetRolePage); err != nil {
responses.FailWithMessage(utils.Translate(err), c)
return
}
if RoleRequest.GetRolePage.Page == 0 {
RoleRequest.GetRolePage.Page = 1
}
if RoleRequest.GetRolePage.PageSize == 0 {
RoleRequest.GetRolePage.PageSize = 20
}
AdminRoleDao := dao.AdminRoleDao{}
adminRole, total, err := AdminRoleDao.GetAdminRolePageSearch(RoleRequest.GetRolePage.RoleName, RoleRequest.GetRolePage.Page, RoleRequest.GetRolePage.PageSize)
if err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
result := make(map[string]interface{})
result["page"] = RoleRequest.GetRolePage.Page
result["page_size"] = RoleRequest.GetRolePage.PageSize
result["total"] = total
result["data"] = adminRole
responses.OkWithData(result, c)
}
// PutRoleStatus 角色禁用/启用
// 此处应该允许修改下级角色
func (r *Role) PutRoleStatus(c *gin.Context) {
RoleRequest := requests.RoleRequest{}
if err := c.ShouldBind(&RoleRequest.PutRoleStatus); err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
// 参数验证
if err := global.Validate.Struct(RoleRequest.PutRoleStatus); err != nil {
responses.FailWithMessage(utils.Translate(err), c)
return
}
id := c.Param("id")
if id == "" {
responses.FailWithMessage("缺少参数", c)
return
}
// 将 id 转换为 int64 类型
roleId, err := strconv.ParseInt(id, 10, 64)
if err != nil {
responses.Fail(c)
return
}
// 不可修改自己
if roleId == c.GetInt64("RoleId") {
responses.FailWithMessage("无法操作当前账号所属角色", c)
return
}
RoleService := service.RoleService{}
_, err = RoleService.PutRoleStatus(roleId, RoleRequest.PutRoleStatus.RoleStatus)
if err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
responses.Ok(c)
}
// AddRole 新增角色
func (r *Role) AddRole(c *gin.Context) {
RoleRequest := requests.RoleRequest{}
if err := c.ShouldBindJSON(&RoleRequest.AddRole); err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
// 参数验证
if err := global.Validate.Struct(RoleRequest.AddRole); err != nil {
responses.FailWithMessage(utils.Translate(err), c)
return
}
// 判断菜单数据是否为空
if len(RoleRequest.AddRole.MenuIds) == 0 {
responses.FailWithMessage("请为角色添加菜单", c)
return
}
// 业务处理
RoleService := service.RoleService{}
_, err := RoleService.AddRole(c, RoleRequest.AddRole)
if err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
responses.Ok(c)
}
// GetRole 角色详情
func (r *Role) GetRole(c *gin.Context) {
id := c.Param("role_id")
if id == "" {
responses.FailWithMessage("缺少参数", c)
return
}
// 将 id 转换为 int64 类型
roleId, err := strconv.ParseInt(id, 10, 64)
if err != nil {
responses.Fail(c)
return
}
RoleService := service.RoleService{}
GetRoleResponse, err := RoleService.GetRole(roleId)
if err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
responses.OkWithData(GetRoleResponse, c)
}
// PutRole 修改角色
func (r *Role) PutRole(c *gin.Context) {
RoleRequest := requests.RoleRequest{}
if err := c.ShouldBindJSON(&RoleRequest.PutRole); err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
// 参数验证
if err := global.Validate.Struct(RoleRequest.PutRole); err != nil {
responses.FailWithMessage(utils.Translate(err), c)
return
}
id := c.Param("role_id")
if id == "" {
responses.FailWithMessage("缺少参数", c)
return
}
// 将 id 转换为 int64 类型
roleId, err := strconv.ParseInt(id, 10, 64)
if err != nil {
responses.Fail(c)
return
}
// 判断菜单数据是否为空
if len(RoleRequest.PutRole.MenuIds) == 0 {
responses.FailWithMessage("请为角色添加菜单", c)
return
}
// 业务处理
RoleService := service.RoleService{}
_, err = RoleService.PutRole(c, roleId, RoleRequest.PutRole)
if err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
responses.Ok(c)
}
// DeleteRole 删除角色-批量
func (r *Role) DeleteRole(c *gin.Context) {
RoleRequest := requests.RoleRequest{}
if err := c.ShouldBindJSON(&RoleRequest.DeleteRole); err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
// 参数验证
if err := global.Validate.Struct(RoleRequest.DeleteRole); err != nil {
responses.FailWithMessage(utils.Translate(err), c)
return
}
// 业务处理
RoleService := service.RoleService{}
_, err := RoleService.DeleteRole(c, RoleRequest.DeleteRole)
if err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
responses.Ok(c)
}