diff --git a/api/controller/role.go b/api/controller/role.go index 44cf361..62c22bc 100644 --- a/api/controller/role.go +++ b/api/controller/role.go @@ -5,6 +5,7 @@ import ( "hospital-admin-api/api/dao" "hospital-admin-api/api/requests" "hospital-admin-api/api/responses" + "hospital-admin-api/api/responses/roleResponse" "hospital-admin-api/api/service" "hospital-admin-api/global" "hospital-admin-api/utils" @@ -29,7 +30,7 @@ func (r *Role) GetRoleMenuList(c *gin.Context) { return } - if len(roleMenuList) == 0 { + if len(roleMenuList) == 0 || roleMenuList == nil { responses.FailWithMessage("请联系管理人员设置菜单", c) return } @@ -67,11 +68,31 @@ func (r *Role) GetRolePage(c *gin.Context) { return } + // 处理返回值 + getRolePageResponses := make([]roleResponse.GetRolePage, len(adminRole)) + + if len(adminRole) > 0 { + for i, v := range adminRole { + // 将原始结构体转换为新结构体 + getRolePageResponse := roleResponse.GetRolePage{ + RoleId: strconv.Itoa(int(v.RoleId)), + RoleName: v.RoleName, + RoleStatus: v.RoleStatus, + IsAdmin: v.IsAdmin, + CreatedAt: v.CreatedAt, + UpdatedAt: v.UpdatedAt, + } + + // 将转换后的结构体添加到新切片中 + getRolePageResponses[i] = getRolePageResponse + } + } + result := make(map[string]interface{}) result["page"] = RoleRequest.GetRolePage.Page result["page_size"] = RoleRequest.GetRolePage.PageSize result["total"] = total - result["data"] = adminRole + result["data"] = getRolePageResponses responses.OkWithData(result, c) } diff --git a/api/controller/user.go b/api/controller/user.go index d0cdd79..328d664 100644 --- a/api/controller/user.go +++ b/api/controller/user.go @@ -33,6 +33,8 @@ func (r *User) GetUserPage(c *gin.Context) { UserRequest.GetUserPage.PageSize = 20 } + // 获取当前登陆用户数据 + AdminUserDao := dao.AdminUserDao{} adminUser, total, err := AdminUserDao.GetAdminUserPageSearch(UserRequest.GetUserPage, UserRequest.GetUserPage.Page, UserRequest.GetUserPage.PageSize) @@ -48,3 +50,18 @@ func (r *User) GetUserPage(c *gin.Context) { result["data"] = adminUser responses.OkWithData(result, c) } + +// AddUser 新增用户 +func (r *User) AddUser(c *gin.Context) { + UserRequest := requests.UserRequest{} + if err := c.ShouldBind(&UserRequest.GetUserPage); err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 参数验证 + if err := global.Validate.Struct(UserRequest.GetUserPage); err != nil { + responses.FailWithMessage(utils.Translate(err), c) + return + } +} diff --git a/api/model/adminRole.go b/api/model/adminRole.go index 06f7b64..9b70c23 100644 --- a/api/model/adminRole.go +++ b/api/model/adminRole.go @@ -2,11 +2,11 @@ package model // AdminRole 后台-角色表 type AdminRole struct { - Model RoleId int64 `gorm:"column:role_id;type:bigint(19);primary_key;comment:主键id" json:"role_id"` RoleName string `gorm:"column:role_name;type:varchar(100);comment:角色名称" json:"role_name"` RoleStatus int `gorm:"column:role_status;type:tinyint(1);default:1;comment:角色状态(1:正常 2:禁用)" json:"role_status"` IsAdmin int `gorm:"column:is_admin;type:tinyint(1);default:0;comment:是否管理员(0:否 1:是)" json:"is_admin"` + Model } func (m *AdminRole) TableName() string { diff --git a/api/requests/user.go b/api/requests/user.go index ce0b4c1..276c108 100644 --- a/api/requests/user.go +++ b/api/requests/user.go @@ -16,3 +16,22 @@ type GetUserPage struct { Page int `json:"page" form:"page" label:"页码"` PageSize int `json:"page_size" form:"page_size" label:"每页个数"` } + +// AddUser 新增用户 +type AddUser struct { + Access string `json:"access" form:"access" label:"账号"` + Password string `json:"password" form:"password" label:"密码"` + Status string `json:"status" form:"status" label:"状态"` // (1:正常 2:审核中 3:审核失败) + // + // Status int `gorm:"column:status;type:tinyint(1);default:2;comment:'状态(1:正常 2:审核中 3:审核失败)'" json:"status"` + // IsDeleted int `gorm:"column:is_deleted;type:tinyint(1);default:0;comment:'是否被删除(0:否 1:是)'" json:"is_deleted"` + // IsDisabled int `gorm:"column:is_disabled;type:tinyint(1);default:0;comment:'是否被禁用(0:否 1:是)'" json:"is_disabled"` + // NickName string `gorm:"column:nick_name;type:varchar(255);comment:'昵称'" json:"nick_name"` + // Phone string `gorm:"column:phone;type:varchar(11);comment:'手机号'" json:"phone"` + // Avatar string `gorm:"column:avatar;type:varchar(255);comment:'头像'" json:"avatar"` + // Sex int `gorm:"column:sex;type:tinyint(1);comment:'性别(1:男 2:女)'" json:"sex"` + // Email string `gorm:"column:email;type:varchar(100);comment:'邮箱'" json:"email"` + // RoleID int64 `gorm:"column:role_id;type:bigint(19);comment:'角色id'" json:"role_id"` + // DeptID int64 `gorm:"column:dept_id;type:bigint(19);comment:'部门id'" json:"dept_id"` + // PostID int64 `gorm:"column:post_id;type:bigint(19);comment:'岗位id'" json:"post_id"` +} diff --git a/api/responses/roleResponse/role.go b/api/responses/roleResponse/role.go index 7614734..b2dc337 100644 --- a/api/responses/roleResponse/role.go +++ b/api/responses/roleResponse/role.go @@ -1,11 +1,13 @@ package roleResponse +import "hospital-admin-api/api/model" + // GetRoleMenuList 角色菜单列表 type GetRoleMenuList struct { - MenuId int64 `json:"menu_id"` // 主键id + MenuId string `json:"menu_id"` // 主键id MenuName string `json:"menu_name"` // 菜单名称 MenuTitle string `json:"menu_title"` // 菜单名称 - ParentId int64 `json:"parent_id"` // 父菜单ID(0表示一级) + ParentId string `json:"parent_id"` // 父菜单ID(0表示一级) MenuStatus int `json:"menu_status"` // 菜单状态(0:隐藏 1:正常)此优先级最高 MenuType int `json:"menu_type"` // 菜单类型(1:模块 2:菜单 3:按钮) Permission string `json:"permission"` // 标识 @@ -24,3 +26,13 @@ type GetRole struct { RoleStatus int `json:"role_status"` // 角色状态(1:正常 2:禁用) IsAdmin int `json:"is_admin"` // 是否管理员(0:否 1:是) } + +// GetRolePage 获取角色列表-分页 +type GetRolePage struct { + RoleId string `json:"role_id"` // 角色id + RoleName string `json:"role_name"` // 角色名称 + RoleStatus int `json:"role_status"` // 角色状态(1:正常 2:禁用) + IsAdmin int `json:"is_admin"` // 是否管理员(0:否 1:是) + CreatedAt model.LocalTime `json:"created_at"` // 创建时间 + UpdatedAt model.LocalTime `json:"updated_at"` // 修改时间 +} diff --git a/api/router/router.go b/api/router/router.go index 1daf7d2..a3abd0b 100644 --- a/api/router/router.go +++ b/api/router/router.go @@ -120,7 +120,7 @@ func privateRouter(r *gin.Engine, api controller.Api) { userGroup.GET("", api.User.GetUserPage) // 新增用户 - userGroup.POST("", api.User.GetUserPage) + userGroup.POST("", api.User.AddUser) // 修改用户 userGroup.PUT("/:menu_id", api.User.GetUserPage) diff --git a/api/service/role.go b/api/service/role.go index dace0d9..ad8d671 100644 --- a/api/service/role.go +++ b/api/service/role.go @@ -8,6 +8,7 @@ import ( "hospital-admin-api/api/requests" "hospital-admin-api/api/responses/roleResponse" "hospital-admin-api/global" + "strconv" ) type RoleService struct{} @@ -36,8 +37,13 @@ func (r *RoleService) GetRoleMenuList(roleId int64) ([]*roleResponse.GetRoleMenu menuIDs = append(menuIDs, roleMenu.MenuID) } - // 构建菜单树 - menuTree = buildMenuTree(menuIDs, adminMenu) + if len(menuIDs) > 0 { + // 构建菜单树 + menuTree = buildMenuTree(menuIDs, adminMenu) + if menuTree == nil { + return nil, nil + } + } } return menuTree, nil @@ -53,10 +59,10 @@ func buildMenuTree(menuIds []int64, menuData []*model.AdminMenu) []*roleResponse for _, v := range menuIds { if v == menu.MenuId { node := &roleResponse.GetRoleMenuList{ - MenuId: menu.MenuId, + MenuId: strconv.FormatInt(menu.MenuId, 10), MenuName: menu.MenuName, MenuTitle: menu.MenuTitle, - ParentId: menu.ParentId, + ParentId: strconv.FormatInt(menu.ParentId, 10), MenuStatus: menu.MenuStatus, MenuType: menu.MenuType, Permission: menu.Permission, @@ -75,8 +81,11 @@ func buildMenuTree(menuIds []int64, menuData []*model.AdminMenu) []*roleResponse // 构建菜单树 for _, menu := range menuData { if menu.ParentId == 0 { + if menuMap[menu.MenuId] == nil { + continue + } rootNodes = append(rootNodes, menuMap[menu.MenuId]) - } else if parent, ok := menuMap[menu.ParentId]; ok { + } else if parent, ok := menuMap[menu.ParentId]; ok && parent != nil { parent.Children = append(parent.Children, menuMap[menu.MenuId]) } } diff --git a/go.mod b/go.mod index f44c62c..eabb97f 100644 --- a/go.mod +++ b/go.mod @@ -37,6 +37,7 @@ require ( github.com/go-sql-driver/mysql v1.7.1 // indirect github.com/goccy/go-json v0.10.2 // indirect github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect + github.com/google/uuid v1.3.0 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // indirect diff --git a/go.sum b/go.sum index 5fb72f8..6c6a683 100644 --- a/go.sum +++ b/go.sum @@ -170,6 +170,8 @@ github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g=