page.go 1018 Bytes
Newer Older
haoyanbin's avatar
1  
haoyanbin committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
package utils

import "gorm.io/gorm"

//分页封装
func Paginate(page int, pageSize int) func(db *gorm.DB) *gorm.DB {
	return func(db *gorm.DB) *gorm.DB {
		if page == 0 {
			page = 1
		}
		switch {
		case pageSize > 100:
			pageSize = 100
		case pageSize <= 0:
			pageSize = 10
		}
		offset := (page - 1) * pageSize
		return db.Offset(offset).Limit(pageSize)
	}
}

type PageData struct {
	Page       int64
	PageSize   int64
	TotalCount int64
	TotalPage  int64
	Data       interface{}
}

func GetPageData(page, pageSize, total int64) (int64, int64, PageData) {
	if page <= 0 {
		page = 1
	}

	if pageSize <= 0 {
		pageSize = 10
	}

	var pageData PageData
	pageData.Page = page
	pageData.PageSize = pageSize
	pageData.TotalCount = total
	pageData.TotalPage = total / pageSize
	if total%pageSize > 0 {
		pageData.TotalPage += 1
	}

	if page > pageData.TotalPage {
		page = pageData.TotalPage
		pageData.Page = page
	}

	start := pageSize * (page - 1)
	if start < 0 {
		start = 0
	}
	return pageSize, start, pageData
}