add curPage

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

View File

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