controller.go 2.5 KB

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