index.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package actions
  2. import (
  3. "IotAdmin/common/permission"
  4. "errors"
  5. "net/http"
  6. log "IotAdmin/core/logger"
  7. "IotAdmin/core/sdk/pkg"
  8. "IotAdmin/core/sdk/pkg/response"
  9. "github.com/gin-gonic/gin"
  10. "gorm.io/gorm"
  11. "IotAdmin/common/dto"
  12. "IotAdmin/common/models"
  13. )
  14. // IndexAction 通用查询动作
  15. func IndexAction(m models.ActiveRecord, d dto.Index, f func() interface{}) gin.HandlerFunc {
  16. return func(c *gin.Context) {
  17. db, err := pkg.GetOrm(c)
  18. if err != nil {
  19. log.Error(err)
  20. return
  21. }
  22. msgID := pkg.GenerateMsgIDFromContext(c)
  23. list := f()
  24. object := m.Generate()
  25. req := d.Generate()
  26. var count int64
  27. //查询列表
  28. err = req.Bind(c)
  29. if err != nil {
  30. response.Error(c, http.StatusUnprocessableEntity, err, "参数验证失败")
  31. return
  32. }
  33. //数据权限检查
  34. p := permission.GetPermissionFromContext(c)
  35. err = db.WithContext(c).Model(object).
  36. Scopes(
  37. dto.MakeCondition(req.GetNeedSearch()),
  38. dto.Paginate(req.GetPageSize(), req.GetPageIndex()),
  39. permission.Permission(object.TableName(), p),
  40. ).
  41. Find(list).Limit(-1).Offset(-1).
  42. Count(&count).Error
  43. if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
  44. log.Errorf("MsgID[%s] Index error: %s", msgID, err)
  45. response.Error(c, 500, err, "查询失败")
  46. return
  47. }
  48. response.PageOK(c, list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
  49. c.Next()
  50. }
  51. }