package admin import ( "encoding/base64" "errors" "fmt" "github.com/gin-gonic/gin" "website-nav/http/param" "website-nav/http/response" "website-nav/http/vo" "website-nav/model" "website-nav/service" "website-nav/utils" ) type User struct{} func UserAPI() User { return User{} } // GetLoginUser // @description: 获取当前登陆用户信息 // @receiver u // @param c func (u User) GetLoginUser(c *gin.Context) { var loginUser *vo.User if loginUser = GetCurrentLoginUser(c); c.IsAborted() { return } response.R(c).OkWithData(loginUser) } // List // @description: 用户列表 // @receiver u // @param c func (u User) List(c *gin.Context) { var p param.UserList if err := c.ShouldBind(&p); err != nil { response.R(c).Validator(err) return } data, total, err := service.User().List(p) if err != nil { response.R(c).FailedWithError(err) return } response.R(c).Paginate(data, total, p.Current, p.Size) } // Save // @description: 新增/编辑用户 // @receiver u // @param c func (u User) Save(c *gin.Context) { var p param.SaveUser if err := c.ShouldBind(&p); err != nil { response.R(c).Validator(err) return } ent := &model.User{ Base: model.Base{ Id: p.Id, }, Account: p.Account, Password: p.Password, Avatar: p.Avatar, Nickname: p.Nickname, Contact: p.Contact, } if err := service.User().CreateUser(ent); err != nil { response.R(c).FailedWithError(err) return } response.R(c).OK() } // Delete // @description: 删除用户 // @receiver u // @param c func (u User) Delete(c *gin.Context) { var id = c.Param("id") if id == "" || id == "undefined" { response.R(c).Validator(errors.New("id不能为空")) return } if err := service.User().Delete(id); err != nil { response.R(c).FailedWithError(err) return } response.R(c).OK() } // ChangePassword // @description: 修改密码 // @receiver u // @param c func (u User) ChangePassword(c *gin.Context) { var p param.ChangePassword if err := c.ShouldBind(&p); err != nil { response.R(c).Validator(err) return } user := GetCurrentLoginUser(c) if user == nil { response.R(c).FailedWithError("用户信息错误") return } // 判断原密码是否对 if !utils.Password().ComparePassword(user.Password, p.OriginalPassword) { response.R(c).FailedWithError("原密码错误") return } // 修改密码 if err := service.User().ChangePassword(user.Id, p.NewPassword); err != nil { response.R(c).FailedWithError(err) return } response.R(c).OK() } // ResetPassword // @description: 重置密码 // @receiver UserApi // @param c func (u User) ResetPassword(c *gin.Context) { var id = c.Param("id") if id == "" || id == "undefined" { response.R(c).FailedWithError("id不能为空") return } loginUser := GetCurrentLoginUser(c) if loginUser == nil { response.R(c).FailedWithError("用户信息错误") return } // 先查询一下 user, err := service.User().GetUserById(id) if err != nil { response.R(c).FailedWithError("获取用户信息失败") return } if user.Account == loginUser.Account { response.R(c).FailedWithError("当前用户不可重置密码") return } // 修改密码 if err := service.User().ChangePassword(user.Id, "admin123"); err != nil { response.R(c).FailedWithError(err) return } response.R(c).OK() } // GenerateAvatar // @description: 生成头像 // @receiver UserApi // @param c func (u User) GenerateAvatar(c *gin.Context) { avatar, err := utils.Avatar().GenerateAvatar(false) if err != nil { response.R(c).FailedWithError(fmt.Errorf("生成头像失败: %s", err.Error())) return } response.R(c).OkWithData(fmt.Sprintf("data:image/png;base64,%s", base64.StdEncoding.EncodeToString([]byte(avatar)))) }