// ========================================================================== // GFast自动生成controller操作代码。 // 生成日期:2024-05-28 15:11:36 // 生成路径: internal/app/system/controller/app_roles.go // 生成人:gfast // desc:app角色 // company:云南奇讯科技有限公司 // ========================================================================== package controller import ( "context" "database/sql" "errors" "github.com/gogf/gf/v2/frame/g" "github.com/tiger1103/gfast/v3/api/v1/system" "github.com/tiger1103/gfast/v3/internal/app/system/dao" "github.com/tiger1103/gfast/v3/internal/app/system/model/do" "github.com/tiger1103/gfast/v3/internal/app/system/model/entity" "github.com/tiger1103/gfast/v3/internal/app/system/service" "github.com/tiger1103/gfast/v3/library/liberr" ) type appRolesController struct { BaseController } var AppRoles = new(appRolesController) // List 列表 func (c *appRolesController) List(ctx context.Context, req *system.AppRolesSearchReq) (res *system.AppRolesSearchRes, err error) { res, err = service.AppRoles().List(ctx, req) return } // Get 获取app角色 func (c *appRolesController) Get(ctx context.Context, req *system.AppRolesGetReq) (res *system.AppRolesGetRes, err error) { res = new(system.AppRolesGetRes) res.AppRolesInfoRes, err = service.AppRoles().GetByRoleId(ctx, req.RoleId) return } // Add 添加app角色 func (c *appRolesController) Add(ctx context.Context, req *system.AppRolesAddReq) (res *system.AppRolesAddRes, err error) { err = service.AppRoles().Add(ctx, req) return } // Edit 修改app角色 func (c *appRolesController) Edit(ctx context.Context, req *system.AppRolesEditReq) (res *system.AppRolesEditRes, err error) { err = service.AppRoles().Edit(ctx, req) return } // Delete 删除app角色 func (c *appRolesController) Delete(ctx context.Context, req *system.AppRolesDeleteReq) (res *system.AppRolesDeleteRes, err error) { err = service.AppRoles().Delete(ctx, req.RoleIds) return } // AddMenu 添加角色时绑定菜单 func (c *appRolesController) AddMenu(ctx context.Context, req *system.AppRolesAddMenuReq) (*system.AppRolesAddMenuRes, error) { err := g.Try(ctx, func(ctx context.Context) { var roleID uint // 判断角色名是否存在 var appRoles entity.AppRoles if err := dao.AppRoles.Ctx(ctx).Where(dao.AppRoles.Columns().RoleName, req.RoleName).Scan(&appRoles); errors.Is(err, sql.ErrNoRows) { roleId, err := dao.AppRoles.Ctx(ctx).Data(do.AppRoles{ RoleName: req.RoleName, }).InsertAndGetId() liberr.ErrIsNil(ctx, err, "添加角色失败") roleID = uint(roleId) } else { roleID = appRoles.RoleId } if len(req.MenuIds) > 0 { insertData := make([]do.AppRoleMenus, 0, len(req.MenuIds)) for _, menuId := range req.MenuIds { insertData = append(insertData, do.AppRoleMenus{ RoleId: roleID, MenuId: menuId, }) } // 删除原有的角色菜单 _, err := dao.AppRoleMenus.Ctx(ctx).Where("role_id", roleID).Delete() liberr.ErrIsNil(ctx, err, "删除角色菜单失败") _, err = dao.AppRoleMenus.Ctx(ctx).Where("role_id", roleID).Data(insertData).Insert() liberr.ErrIsNil(ctx, err, "添加角色菜单失败") } }) return &system.AppRolesAddMenuRes{}, err } // 获取一个角色的菜单 func (c *appRolesController) GetRoleMenus(ctx context.Context, req *system.AppRolesGetMenuReq) (*system.AppRolesGetMenuRes, error) { res := new(system.AppRolesGetMenuRes) err := g.Try(ctx, func(ctx context.Context) { err := dao.AppRoles.Ctx(ctx).WithAll().Where(dao.AppRoles.Columns().RoleId, req.RoleId).Scan(&res.List) // SELECT m.menu_id, m.menu_name // FROM app_menus m // JOIN app_role_menus rm ON m.menu_id = rm.menu_id // WHERE rm.role_id = 3; dao.AppMenus.Ctx(ctx).As("m").Fields("m.menu_id, m.menu_name"). InnerJoin("app_role_menus rm", "m.menu_id = rm.menu_id").Where("rm.role_id", req.RoleId).Scan(&res.List.Menus) liberr.ErrIsNil(ctx, err, "获取信息失败") }) return res, err }