page_info.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package common
  2. import (
  3. "strconv"
  4. "github.com/gin-gonic/gin"
  5. )
  6. type PageInfo struct {
  7. Page int `json:"page"` // page num 页码
  8. PageSize int `json:"page_size"` // page size 页大小
  9. Total int `json:"total"` // 总条数,后设置
  10. Items any `json:"items"` // 数据,后设置
  11. }
  12. func (p *PageInfo) GetStartIdx() int {
  13. return (p.Page - 1) * p.PageSize
  14. }
  15. func (p *PageInfo) GetEndIdx() int {
  16. return p.Page * p.PageSize
  17. }
  18. func (p *PageInfo) GetPageSize() int {
  19. return p.PageSize
  20. }
  21. func (p *PageInfo) GetPage() int {
  22. return p.Page
  23. }
  24. func (p *PageInfo) SetTotal(total int) {
  25. p.Total = total
  26. }
  27. func (p *PageInfo) SetItems(items any) {
  28. p.Items = items
  29. }
  30. func GetPageQuery(c *gin.Context) *PageInfo {
  31. pageInfo := &PageInfo{}
  32. // 手动获取并处理每个参数
  33. if page, err := strconv.Atoi(c.Query("page")); err == nil {
  34. pageInfo.Page = page
  35. }
  36. if pageSize, err := strconv.Atoi(c.Query("page_size")); err == nil {
  37. pageInfo.PageSize = pageSize
  38. }
  39. if pageInfo.Page < 1 {
  40. // 兼容
  41. page, _ := strconv.Atoi(c.Query("p"))
  42. if page != 0 {
  43. pageInfo.Page = page
  44. } else {
  45. pageInfo.Page = 1
  46. }
  47. }
  48. if pageInfo.PageSize == 0 {
  49. // 兼容
  50. pageSize, _ := strconv.Atoi(c.Query("ps"))
  51. if pageSize != 0 {
  52. pageInfo.PageSize = pageSize
  53. }
  54. if pageInfo.PageSize == 0 {
  55. pageSize, _ = strconv.Atoi(c.Query("size")) // token page
  56. if pageSize != 0 {
  57. pageInfo.PageSize = pageSize
  58. }
  59. }
  60. if pageInfo.PageSize == 0 {
  61. pageInfo.PageSize = ItemsPerPage
  62. }
  63. }
  64. if pageInfo.PageSize > 100 {
  65. pageInfo.PageSize = 100
  66. }
  67. return pageInfo
  68. }