186 lines
3.7 KiB
Go
186 lines
3.7 KiB
Go
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))))
|
|
}
|