205 lines
4.0 KiB
Go
205 lines
4.0 KiB
Go
package system
|
|
|
|
import (
|
|
"errors"
|
|
"net/http"
|
|
|
|
"management/internal/erpserver/model/system"
|
|
"management/internal/erpserver/model/system/request"
|
|
"management/internal/erpserver/service/v1"
|
|
"management/internal/pkg/convertor"
|
|
"management/internal/pkg/gin/gu"
|
|
"management/internal/pkg/sqldb"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
type RoleApp struct {
|
|
roleService v1.RoleService
|
|
menuService v1.MenuService
|
|
}
|
|
|
|
func NewRoleApp(roleService v1.RoleService, menuService v1.MenuService) *RoleApp {
|
|
return &RoleApp{
|
|
roleService: roleService,
|
|
menuService: menuService,
|
|
}
|
|
}
|
|
|
|
func (a *RoleApp) Create(c *gin.Context) {
|
|
var req request.CreateAndUpdateRole
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
gu.ValidatorErrors(c, err)
|
|
return
|
|
}
|
|
|
|
if err := a.roleService.Create(c, &req); err != nil {
|
|
if errors.Is(err, sqldb.ErrDBDuplicatedEntry) {
|
|
gu.FailedWithCode(c, http.StatusConflict, "角色已存在")
|
|
return
|
|
}
|
|
|
|
gu.Failed(c, err.Error())
|
|
return
|
|
}
|
|
|
|
gu.Ok(c, "添加成功")
|
|
}
|
|
|
|
func (a *RoleApp) Update(c *gin.Context) {
|
|
var id request.GetRoleID
|
|
if err := c.ShouldBindUri(&id); err != nil {
|
|
gu.ValidatorErrors(c, err)
|
|
return
|
|
}
|
|
|
|
var req request.CreateAndUpdateRole
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
gu.ValidatorErrors(c, err)
|
|
return
|
|
}
|
|
|
|
req.ID = id.ID
|
|
if err := a.roleService.Update(c, &req); err != nil {
|
|
gu.Failed(c, err.Error())
|
|
return
|
|
}
|
|
|
|
gu.Ok(c, "更新成功")
|
|
}
|
|
|
|
func (a *RoleApp) Get(c *gin.Context) {
|
|
var id request.GetRoleID
|
|
if err := c.ShouldBindUri(&id); err != nil {
|
|
gu.ValidatorErrors(c, err)
|
|
return
|
|
}
|
|
|
|
config, err := a.roleService.Get(c, id.ID)
|
|
if err != nil {
|
|
if errors.Is(err, sqldb.ErrDBNotFound) {
|
|
gu.FailedWithCode(c, http.StatusNotFound, "配置不存在")
|
|
return
|
|
}
|
|
|
|
gu.Failed(c, err.Error())
|
|
return
|
|
}
|
|
|
|
gu.Ok(c, config)
|
|
}
|
|
|
|
func (a *RoleApp) List(c *gin.Context) {
|
|
var req request.ListRole
|
|
if err := c.ShouldBindQuery(&req); err != nil {
|
|
gu.ValidatorErrors(c, err)
|
|
return
|
|
}
|
|
|
|
res, count, err := a.roleService.List(c, req)
|
|
if err != nil {
|
|
gu.Failed(c, err.Error())
|
|
return
|
|
}
|
|
|
|
gu.Ok(c, gu.NewPageData(count, req.PageID, req.PageSize, res))
|
|
}
|
|
|
|
func (a *RoleApp) Refresh(c *gin.Context) {
|
|
err := a.roleService.RefreshCache(c)
|
|
if err != nil {
|
|
gu.Failed(c, err.Error())
|
|
return
|
|
}
|
|
|
|
gu.Ok(c, "缓存刷新成功")
|
|
}
|
|
|
|
func (a *RoleApp) RebuildParentPath(c *gin.Context) {
|
|
err := a.roleService.RebuildParentPath(c)
|
|
if err != nil {
|
|
gu.Failed(c, err.Error())
|
|
return
|
|
}
|
|
|
|
gu.Ok(c, "重建成功")
|
|
}
|
|
|
|
func (a *RoleApp) RefreshRoleMenus(c *gin.Context) {
|
|
// 获取需要刷新的角色ID
|
|
roleID := convertor.Int[int32](c.PostForm("roleID"), 0)
|
|
roleModel, err := a.roleService.Get(c, roleID)
|
|
if err != nil {
|
|
gu.Failed(c, err.Error())
|
|
return
|
|
}
|
|
if roleModel == nil {
|
|
gu.Failed(c, "角色不存在")
|
|
return
|
|
}
|
|
|
|
// 刷新角色菜单 (角色所拥有的菜单集合)
|
|
_, err = a.menuService.SetListByRoleID(c, roleModel.ID)
|
|
if err != nil {
|
|
gu.Failed(c, err.Error())
|
|
return
|
|
}
|
|
|
|
// 刷新角色菜单 (角色所拥有的菜单集合)
|
|
_, err = a.menuService.SetListByRoleIDToMap(c, roleModel.ID)
|
|
if err != nil {
|
|
gu.Failed(c, err.Error())
|
|
return
|
|
}
|
|
|
|
// 刷新角色菜单树 (pear admin layui 使用的格式)
|
|
_, err = a.menuService.SetOwerMenus(c, roleModel.ID)
|
|
if err != nil {
|
|
gu.Failed(c, err.Error())
|
|
return
|
|
}
|
|
|
|
gu.Ok(c, "刷新成功")
|
|
}
|
|
|
|
func (a *RoleApp) setMenu(c *gin.Context) {
|
|
var req request.SetMenu
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
gu.ValidatorErrors(c, err)
|
|
return
|
|
}
|
|
|
|
role, err := a.roleService.Get(c, req.RoleID)
|
|
if err != nil {
|
|
gu.Failed(c, err.Error())
|
|
return
|
|
}
|
|
|
|
var rms []*system.RoleMenu
|
|
for _, v := range req.MenuIDs {
|
|
menu, err := a.menuService.Get(c, v)
|
|
if err != nil {
|
|
gu.Failed(c, err.Error())
|
|
return
|
|
}
|
|
|
|
rms = append(rms, &system.RoleMenu{
|
|
RoleID: role.ID,
|
|
MenuID: menu.ID,
|
|
})
|
|
}
|
|
|
|
if len(rms) == 0 {
|
|
gu.Failed(c, "请选择正确的菜单")
|
|
return
|
|
}
|
|
|
|
err = a.menuService.SetRoleMenu(c, role.ID, rms)
|
|
if err != nil {
|
|
gu.Failed(c, err.Error())
|
|
return
|
|
}
|
|
|
|
gu.Ok(c, "设置成功")
|
|
}
|