You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

207 lines
6.6 KiB

  1. package api
  2. import (
  3. "fmt"
  4. "gin-vue-admin/controller/servers"
  5. "gin-vue-admin/middleware"
  6. "gin-vue-admin/model/modelInterface"
  7. "gin-vue-admin/model/sysModel"
  8. "github.com/dgrijalva/jwt-go"
  9. "github.com/gin-gonic/gin"
  10. uuid "github.com/satori/go.uuid"
  11. "mime/multipart"
  12. "time"
  13. )
  14. var (
  15. USER_HEADER_IMG_PATH string = "http://qmplusimg.henrongyi.top"
  16. USER_HEADER_BUCKET string = "qm-plus-img"
  17. )
  18. type RegistAndLoginStuct struct {
  19. Username string `json:"username"`
  20. Password string `json:"password"`
  21. }
  22. type RegestStuct struct {
  23. Username string `json:"userName"`
  24. Password string `json:"passWord"`
  25. NickName string `json:"nickName" gorm:"default:'QMPlusUser'"`
  26. HeaderImg string `json:"headerImg" gorm:"default:'http://www.henrongyi.top/avatar/lufu.jpg'"`
  27. AuthorityId string `json:"authorityId" gorm:"default:888"`
  28. }
  29. // @Tags Base
  30. // @Summary 用户注册账号
  31. // @Produce application/json
  32. // @Param data body sysModel.SysUser true "用户注册接口"
  33. // @Success 200 {string} string "{"success":true,"data":{},"msg":"注册成功"}"
  34. // @Router /base/regist [post]
  35. func Regist(c *gin.Context) {
  36. var R RegestStuct
  37. _ = c.BindJSON(&R)
  38. user := &sysModel.SysUser{Username: R.Username, NickName: R.NickName, Password: R.Password, HeaderImg: R.HeaderImg, AuthorityId: R.AuthorityId}
  39. err, user := user.Regist()
  40. if err != nil {
  41. servers.ReportFormat(c, false, fmt.Sprintf("%v", err), gin.H{
  42. "user": user,
  43. })
  44. } else {
  45. servers.ReportFormat(c, true, "创建成功", gin.H{
  46. "user": user,
  47. })
  48. }
  49. }
  50. // @Tags Base
  51. // @Summary 用户登录
  52. // @Produce application/json
  53. // @Param data body api.RegistAndLoginStuct true "用户登录接口"
  54. // @Success 200 {string} string "{"success":true,"data":{},"msg":"登陆成功"}"
  55. // @Router /base/login [post]
  56. func Login(c *gin.Context) {
  57. var L RegistAndLoginStuct
  58. _ = c.BindJSON(&L)
  59. U := &sysModel.SysUser{Username: L.Username, Password: L.Password}
  60. if err, user := U.Login(); err != nil {
  61. servers.ReportFormat(c, false, fmt.Sprintf("用户名密码错误或%v", err), gin.H{})
  62. } else {
  63. tokenNext(c, *user)
  64. }
  65. }
  66. //登录以后签发jwt
  67. func tokenNext(c *gin.Context, user sysModel.SysUser) {
  68. j := &middleware.JWT{
  69. []byte("qmPlus"), // 唯一签名
  70. }
  71. clams := middleware.CustomClaims{
  72. UUID: user.UUID,
  73. ID: user.ID,
  74. NickName: user.NickName,
  75. AuthorityId: user.AuthorityId,
  76. StandardClaims: jwt.StandardClaims{
  77. NotBefore: int64(time.Now().Unix() - 1000), // 签名生效时间
  78. ExpiresAt: int64(time.Now().Unix() + 60*60*24*7), // 过期时间 一周
  79. Issuer: "qmPlus", //签名的发行者
  80. },
  81. }
  82. token, err := j.CreateToken(clams)
  83. if err != nil {
  84. servers.ReportFormat(c, false, "获取token失败", gin.H{})
  85. } else {
  86. servers.ReportFormat(c, true, "登录成功", gin.H{"user": user, "token": token, "expiresAt": clams.StandardClaims.ExpiresAt * 1000})
  87. }
  88. }
  89. type ChangePasswordStutrc struct {
  90. Username string `json:"username"`
  91. Password string `json:"password"`
  92. NewPassword string `json:"newPassword"`
  93. }
  94. // @Tags SysUser
  95. // @Summary 用户修改密码
  96. // @Security ApiKeyAuth
  97. // @Produce application/json
  98. // @Param data body api.ChangePasswordStutrc true "用户修改密码"
  99. // @Success 200 {string} string "{"success":true,"data":{},"msg":"修改成功"}"
  100. // @Router /user/changePassword [post]
  101. func ChangePassword(c *gin.Context) {
  102. var params ChangePasswordStutrc
  103. _ = c.BindJSON(&params)
  104. U := &sysModel.SysUser{Username: params.Username, Password: params.Password}
  105. if err, _ := U.ChangePassword(params.NewPassword); err != nil {
  106. servers.ReportFormat(c, false, "修改失败,请检查用户名密码", gin.H{})
  107. } else {
  108. servers.ReportFormat(c, true, "修改成功", gin.H{})
  109. }
  110. }
  111. type UserHeaderImg struct {
  112. HeaderImg multipart.File `json:"headerImg"`
  113. }
  114. // @Tags SysUser
  115. // @Summary 用户上传头像
  116. // @Security ApiKeyAuth
  117. // @accept multipart/form-data
  118. // @Produce application/json
  119. // @Param headerImg formData file true "用户上传头像"
  120. // @Param username formData string true "用户上传头像"
  121. // @Success 200 {string} string "{"success":true,"data":{},"msg":"上传成功"}"
  122. // @Router /user/uploadHeaderImg [post]
  123. func UploadHeaderImg(c *gin.Context) {
  124. claims, _ := c.Get("claims")
  125. //获取头像文件
  126. // 这里我们通过断言获取 claims内的所有内容
  127. waitUse := claims.(*middleware.CustomClaims)
  128. uuid := waitUse.UUID
  129. _, header, err := c.Request.FormFile("headerImg")
  130. //便于找到用户 以后从jwt中取
  131. if err != nil {
  132. servers.ReportFormat(c, false, fmt.Sprintf("上传文件失败,%v", err), gin.H{})
  133. } else {
  134. //文件上传后拿到文件路径
  135. err, filePath, _ := servers.Upload(header, USER_HEADER_BUCKET, USER_HEADER_IMG_PATH)
  136. if err != nil {
  137. servers.ReportFormat(c, false, fmt.Sprintf("接收返回值失败,%v", err), gin.H{})
  138. } else {
  139. //修改数据库后得到修改后的user并且返回供前端使用
  140. err, user := new(sysModel.SysUser).UploadHeaderImg(uuid, filePath)
  141. if err != nil {
  142. servers.ReportFormat(c, false, fmt.Sprintf("修改数据库链接失败,%v", err), gin.H{})
  143. } else {
  144. servers.ReportFormat(c, true, "上传成功", gin.H{"user": user})
  145. }
  146. }
  147. }
  148. }
  149. // @Tags SysUser
  150. // @Summary 分页获取用户列表
  151. // @Security ApiKeyAuth
  152. // @accept application/json
  153. // @Produce application/json
  154. // @Param data body modelInterface.PageInfo true "分页获取用户列表"
  155. // @Success 200 {string} string "{"success":true,"data":{},"msg":"获取成功"}"
  156. // @Router /user/getUserList [post]
  157. func GetUserList(c *gin.Context) {
  158. var pageInfo modelInterface.PageInfo
  159. _ = c.BindJSON(&pageInfo)
  160. err, list, total := new(sysModel.SysUser).GetInfoList(pageInfo)
  161. if err != nil {
  162. servers.ReportFormat(c, false, fmt.Sprintf("获取数据失败,%v", err), gin.H{})
  163. } else {
  164. servers.ReportFormat(c, true, "获取数据成功", gin.H{
  165. "userList": list,
  166. "total": total,
  167. "page": pageInfo.Page,
  168. "pageSize": pageInfo.PageSize,
  169. })
  170. }
  171. }
  172. type SetUserAuth struct {
  173. UUID uuid.UUID `json:"uuid"`
  174. AuthorityId string `json:"authorityId"`
  175. }
  176. // @Tags SysUser
  177. // @Summary 设置用户权限
  178. // @Security ApiKeyAuth
  179. // @accept application/json
  180. // @Produce application/json
  181. // @Param data body api.SetUserAuth true "设置用户权限"
  182. // @Success 200 {string} string "{"success":true,"data":{},"msg":"修改成功"}"
  183. // @Router /user/setUserAuthority [post]
  184. func SetUserAuthority(c *gin.Context) {
  185. var sua SetUserAuth
  186. _ = c.BindJSON(&sua)
  187. err := new(sysModel.SysUser).SetUserAuthority(sua.UUID, sua.AuthorityId)
  188. if err != nil {
  189. servers.ReportFormat(c, false, fmt.Sprintf("修改失败,%v", err), gin.H{})
  190. } else {
  191. servers.ReportFormat(c, true, "修改成功", gin.H{})
  192. }
  193. }