page_info.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package common
  2. import (
  3. "github.com/gin-gonic/gin"
  4. "strconv"
  5. )
  6. type PageInfo struct {
  7. Page int `json:"page"` // page num 页码
  8. PageSize int `json:"page_size"` // page size 页大小
  9. StartTimestamp int64 `json:"start_timestamp"` // 秒级
  10. EndTimestamp int64 `json:"end_timestamp"` // 秒级
  11. Total int `json:"total"` // 总条数,后设置
  12. Items any `json:"items"` // 数据,后设置
  13. }
  14. func (p *PageInfo) GetStartIdx() int {
  15. return (p.Page - 1) * p.PageSize
  16. }
  17. func (p *PageInfo) GetEndIdx() int {
  18. return p.Page * p.PageSize
  19. }
  20. func (p *PageInfo) GetPageSize() int {
  21. return p.PageSize
  22. }
  23. func (p *PageInfo) GetPage() int {
  24. return p.Page
  25. }
  26. func (p *PageInfo) SetTotal(total int) {
  27. p.Total = total
  28. }
  29. func (p *PageInfo) SetItems(items any) {
  30. p.Items = items
  31. }
  32. func GetPageQuery(c *gin.Context) (*PageInfo, error) {
  33. pageInfo := &PageInfo{}
  34. err := c.BindQuery(pageInfo)
  35. if err != nil {
  36. return nil, err
  37. }
  38. if pageInfo.Page < 1 {
  39. // 兼容
  40. page, _ := strconv.Atoi(c.Query("p"))
  41. if page != 0 {
  42. pageInfo.Page = page
  43. } else {
  44. pageInfo.Page = 1
  45. }
  46. }
  47. if pageInfo.PageSize == 0 {
  48. pageInfo.PageSize = ItemsPerPage
  49. }
  50. return pageInfo, nil
  51. }