page.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package page
  2. import "math"
  3. type Page struct {
  4. }
  5. // Paginator 分页方法,根据传递过来的页数,每页数,总数,返回分页的内容 7个页数 前 1,2,3,4,5 后 的格式返回,小于5页返回具体页数
  6. func (*Page) Paginator(page, prePage int, nums int64) map[string]interface{} {
  7. var beforePage int //前一页地址
  8. var AfterPage int //后一页地址
  9. //根据nums总数,和prepage每页数量 生成分页总数
  10. totalpages := int(math.Ceil(float64(nums) / float64(prePage))) //page总数
  11. if page > totalpages {
  12. page = totalpages
  13. }
  14. if page <= 0 {
  15. page = 1
  16. }
  17. var pages []int
  18. switch {
  19. case page >= totalpages-5 && totalpages > 5: //最后5页
  20. start := totalpages - 5 + 1
  21. beforePage = page - 1
  22. AfterPage = int(math.Min(float64(totalpages), float64(page+1)))
  23. pages = make([]int, 5)
  24. for i, _ := range pages {
  25. pages[i] = start + i
  26. }
  27. case page >= 3 && totalpages > 5:
  28. start := page - 3 + 1
  29. pages = make([]int, 5)
  30. beforePage = page - 3
  31. for i, _ := range pages {
  32. pages[i] = start + i
  33. }
  34. beforePage = page - 1
  35. AfterPage = page + 1
  36. default:
  37. pages = make([]int, int(math.Min(5, float64(totalpages))))
  38. for i, _ := range pages {
  39. pages[i] = i + 1
  40. }
  41. beforePage = int(math.Max(float64(1), float64(page-1)))
  42. AfterPage = page + 1
  43. //fmt.Println(pages)
  44. }
  45. paginatorMap := make(map[string]interface{})
  46. paginatorMap["pages"] = pages
  47. paginatorMap["totalPages"] = totalpages
  48. paginatorMap["beforePage"] = beforePage
  49. paginatorMap["AfterPage"] = AfterPage
  50. paginatorMap["currPage"] = page
  51. return paginatorMap
  52. }