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