default.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. package controllers
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "github.com/astaxie/beego"
  6. "github.com/astaxie/beego/logs"
  7. "nginx-ui/server/middleware"
  8. "nginx-ui/server/models"
  9. "strconv"
  10. )
  11. type BaseController struct {
  12. beego.Controller
  13. jsonData *models.RespData
  14. // Json real data
  15. respData map[string]any
  16. }
  17. func (c *BaseController) Json() {
  18. c.checkJsonData()
  19. if c.respData != nil {
  20. c.jsonData.Data = c.respData
  21. }
  22. c.Data["json"] = c.jsonData
  23. c.ServeJSON()
  24. }
  25. func (c *BaseController) PostJson(json interface{}) {
  26. c.Data["json"] = json
  27. c.ServeJSON()
  28. }
  29. func (c *BaseController) ErrorJson(error error) {
  30. c.SetCode(-1).SetMsg(error.Error()).Json()
  31. }
  32. func (c *BaseController) checkJsonData() *BaseController {
  33. data := c.jsonData
  34. if data == nil {
  35. data = &models.RespData{
  36. Code: 0,
  37. Msg: "success",
  38. Data: nil,
  39. }
  40. c.jsonData = data
  41. }
  42. return c
  43. }
  44. func (c *BaseController) SetData(v interface{}) *BaseController {
  45. c.checkJsonData()
  46. c.jsonData.Data = v
  47. return c
  48. }
  49. func (c *BaseController) AddRespData(k string, v interface{}) *BaseController {
  50. c.checkJsonData()
  51. if c.respData == nil {
  52. c.respData = map[string]any{}
  53. }
  54. c.respData[k] = v
  55. return c
  56. }
  57. func (c *BaseController) SetCode(code int) *BaseController {
  58. c.checkJsonData()
  59. c.jsonData.Code = code
  60. return c
  61. }
  62. func (c *BaseController) SetMsg(msg string) *BaseController {
  63. c.checkJsonData()
  64. c.jsonData.Msg = msg
  65. return c
  66. }
  67. func (c *BaseController) GetParam(k string) string {
  68. return c.Ctx.Input.Param(k)
  69. }
  70. func (c *BaseController) GetIntParam(k string) (int, error) {
  71. idStr := c.Ctx.Input.Param(k)
  72. id, err := strconv.Atoi(idStr)
  73. logs.Info("id", id)
  74. if err != nil {
  75. return 0, err
  76. }
  77. return id, nil
  78. }
  79. func (c *BaseController) GetUser(required bool) *models.User {
  80. data := c.GetSession("user")
  81. if data == nil && required {
  82. middleware.WriteForbidden(c.Ctx.ResponseWriter)
  83. return nil
  84. }
  85. if data == nil {
  86. return nil
  87. }
  88. user := data.(models.User)
  89. return &user
  90. }
  91. func (c *BaseController) RequiredUser() *models.User {
  92. return c.GetUser(true)
  93. }
  94. // ReadBody data 非指针
  95. func (c *BaseController) ReadBody(data any) bool {
  96. err := json.Unmarshal(c.Ctx.Input.RequestBody, &data)
  97. if err != nil {
  98. logs.Error(err, string(c.Ctx.Input.RequestBody))
  99. c.ErrorJson(errors.New("数据解析异常!"))
  100. return false
  101. }
  102. return true
  103. }
  104. func (c *BaseController) Forbidden() {
  105. c.SetCode(403).SetMsg("您没有权限操作该实例!").Json()
  106. }