add curPage
parent
afa04cb1f6
commit
ee8663a423
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue