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