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] {
|
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
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue