add curPage

main
git 2025-12-13 15:01:11 +08:00
parent afa04cb1f6
commit ee8663a423
Signed by: git
GPG Key ID: 3F65EFFA44207ADD
2 changed files with 24 additions and 6 deletions

View File

@ -20,20 +20,27 @@ type Paginator[T any] struct {
func Cut[T any](items []T, page int, limit int, pageCount int) *Paginator[T] { func Cut[T any](items []T, page int, limit int, pageCount int) *Paginator[T] {
// 参数校验 // 参数校验
page = max(page, 1) page = max(page, 1)
limit = max(limit, 0) limit = max(limit, 1)
pageCount = max(pageCount, 0) pageCount = max(pageCount, 0)
return &Paginator[T]{ p := &Paginator[T]{
rawTtems: items, rawTtems: items,
curPage: page,
limit: limit, limit: limit,
pageCount: pageCount, pageCount: pageCount,
} }
total := p.TotalPage()
p.curPage = min(page, total)
return p
} }
func (p *Paginator[T]) Items() []T { func (p *Paginator[T]) Items() []T {
// 计算起始索引和结束索引 // 计算起始索引和结束索引
startIdx := (p.curPage - 1) * p.limit startIdx := (p.curPage - 1) * p.limit
startIdx = min(startIdx, len(p.rawTtems))
endIdx := startIdx + p.limit endIdx := startIdx + p.limit
endIdx = min(endIdx, len(p.rawTtems)) endIdx = min(endIdx, len(p.rawTtems))
@ -41,6 +48,11 @@ func (p *Paginator[T]) Items() []T {
return items return items
} }
// CurPage 当前页
func (p *Paginator[T]) CurPage() int {
return p.curPage
}
// TotalPage 总页数 // TotalPage 总页数
func (p *Paginator[T]) TotalPage() int { func (p *Paginator[T]) TotalPage() int {
if p.limit == 0 { if p.limit == 0 {
@ -78,11 +90,17 @@ func (p *Paginator[T]) pageRangeIdx() (int, int) {
if startPage < 1 { if startPage < 1 {
endPage = endPage - startPage + 1 endPage = endPage - startPage + 1
startPage = 1 startPage = 1
if endPage > total {
endPage = total
}
} }
if endPage > total { if endPage > total {
startPage = startPage - (endPage - total) startPage = startPage - (endPage - total)
endPage = total endPage = total
if startPage < 1 {
startPage = 1
}
} }
return startPage, endPage return startPage, endPage

View File

@ -5,9 +5,9 @@ import (
) )
func TestCut(t *testing.T) { func TestCut(t *testing.T) {
items := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} items := []int{1, 2, 3}
page := 3 page := 1
limit := 3 limit := 1
pageCount := 3 pageCount := 3
pag := Cut(items, page, limit, pageCount) pag := Cut(items, page, limit, pageCount)
t.Logf("pag: %s", pag) t.Logf("pag: %s", pag)