finish paginator

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