finish paginator

v1.0.8
git 2025-12-13 15:11:33 +08:00
parent 0db3b850e7
commit 334117d67f
Signed by: git
GPG Key ID: 3F65EFFA44207ADD
2 changed files with 18 additions and 11 deletions

View File

@ -6,18 +6,18 @@ import (
)
type Paginator[T any] struct {
rawTtems []T // 当前页的数据
rawTtems []T // 原始数据
curPage int // 当前页
limit int // 每页数量
pageCount int // 最多显示的总页数
limit int // 每页数量, 至少为1
pageCount int // 最多显示的总页数, 0表示不限制
}
// Cut 按分页切割数据
// New 按分页切割数据
// @param items 原始数据
// @param page 当前页
// @param limit 每页数量, 0 表示不分页
// @param pageCount 最多显示的总页数, 0 表示不限制
func Cut[T any](items []T, page int, limit int, pageCount int) *Paginator[T] {
// @param limit 每页数量, 至少为1
// @param pageCount 最多显示的总页数, 0表示不限制
func New[T any](items []T, page int, limit int, pageCount int) *Paginator[T] {
// 参数校验
page = max(page, 1)
limit = max(limit, 1)
@ -48,6 +48,11 @@ func (p *Paginator[T]) Items() []T {
return items
}
// TotalCount rawItems 总数量
func (p *Paginator[T]) TotalCount() int {
return len(p.rawTtems)
}
// CurPage 当前页
func (p *Paginator[T]) CurPage() int {
return p.curPage
@ -106,7 +111,7 @@ func (p *Paginator[T]) pageRangeIdx() (int, int) {
return startPage, endPage
}
// FirstPage 第一页, 如果limit为0, 表示不显示
// FirstPage 第一页, 如果为0, 表示不显示
func (p *Paginator[T]) FirstPage() int {
if p.limit == 0 {
return 0
@ -120,7 +125,7 @@ func (p *Paginator[T]) FirstPage() int {
return 0
}
// FirstPage 第一页, 如果limit为0, 表示不显示
// LastPage 最后一页, 如果为0, 表示不显示
func (p *Paginator[T]) LastPage() int {
if p.limit == 0 {
return 0
@ -166,6 +171,7 @@ func (p *Paginator[T]) PageRange() []int {
return pages
}
// String 打印分页信息
func (p *Paginator[T]) String() string {
pages := p.PageRange()
@ -180,5 +186,6 @@ func (p *Paginator[T]) String() string {
}
pageStr := strings.Join(buf, " ")
return fmt.Sprintf("items=%v\nfirst=%d, preview=%d pages=%s, next=%d, last=%d", p.Items(), p.FirstPage(), p.PreviewPage(), pageStr, p.NextPage(), p.LastPage())
return fmt.Sprintf("items=%v\nfirst=%d, preview=%d pages=%s, next=%d, last=%d",
p.Items(), p.FirstPage(), p.PreviewPage(), pageStr, p.NextPage(), p.LastPage())
}

View File

@ -9,6 +9,6 @@ func TestCut(t *testing.T) {
page := 2
limit := 1
pageCount := 1
pag := Cut(items, page, limit, pageCount)
pag := New(items, page, limit, pageCount)
t.Logf("pag: %s", pag)
}