123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- package utility
- import (
- "fmt"
- "jybxseo/internal/consts"
- "strconv"
- )
- const (
- disabled = `disabled`
- li = `<li class="%s"><a href="%s">%s</a></li>`
- prevMoreClass = `prev-more`
- nextMoreClass = `next-more`
- active = `active`
- number = "number"
- ul = `<ul class="el-pager" data-page-num="%v" data-page-total="%v">%s</ul>`
- noHref = `javascript:void(0);`
- href = `/xxx/%d`
- prevPageIcon = `<i class="el-icon el-icon-arrow-left"></i>`
- nextPageIcon = `<i class="el-icon el-icon-arrow-right"></i>`
- moreIcon = `<i class="el-icon el-icon-more"></i>`
- prevPageClass = "prev-page"
- nextPageClass = "next-page"
- pagerNumSize = 5 //两个点点点之间的页面数量
- currPrevNextSize = 2 //当前页前后多少页开始显示点点点
- )
- type Pagination struct {
- PagingHtml string
- PageNum, PageCount, PageSize int
- UrlFormat string
- PrevHref, NextHref string
- }
- func GetLetterPaging(currentPage, totalPage int, href string) (pagingMap *Pagination) {
- if currentPage == 0 {
- currentPage = 1
- }
- pagination := &Pagination{
- PagingHtml: PaggingHtml(currentPage, totalPage, href),
- PageNum: currentPage,
- PageCount: totalPage,
- PageSize: consts.SettingPageSize,
- UrlFormat: href,
- }
- if currentPage > 1 {
- pagination.PrevHref = fmt.Sprintf(href, currentPage-1)
- }
- if currentPage < totalPage {
- pagination.NextHref = fmt.Sprintf(href, currentPage+1)
- }
- return pagination
- }
- func PaggingHtml(currentPage, totalPage int, href string) string {
- if currentPage > totalPage {
- return ""
- }
- ppc, npc := prevPageClass, nextPageClass
- pph, nph := fmt.Sprintf(href, currentPage-1), fmt.Sprintf(href, currentPage+1)
- if totalPage == 1 {
- ppc += " " + disabled
- npc += " " + disabled
- pph = noHref
- nph = noHref
- } else if currentPage == 1 {
- ppc += " " + disabled
- pph = noHref
- } else if currentPage == totalPage {
- npc += " " + disabled
- nph = noHref
- }
- lis := ""
- hasPrevMore, hasNextMore := false, false
- for i := 1; i <= totalPage; i++ {
- if i > 1 && i < totalPage && totalPage > pagerNumSize {
- isContinue := false
- if currentPage < pagerNumSize && i > pagerNumSize+1 {
- isContinue = true
- } else if currentPage >= pagerNumSize && currentPage < totalPage-currPrevNextSize-1 && (i < currentPage-currPrevNextSize || i > currentPage+currPrevNextSize) {
- isContinue = true
- } else if currentPage > totalPage-pagerNumSize+1 && i < totalPage-pagerNumSize {
- isContinue = true
- }
- if isContinue {
- if !hasPrevMore && i < currentPage {
- hasPrevMore = true
- lis += fmt.Sprintf(li, prevMoreClass, fmt.Sprintf(href, currentPage-pagerNumSize), moreIcon)
- } else if !hasNextMore && i > currentPage {
- hasNextMore = true
- lis += fmt.Sprintf(li, nextMoreClass, fmt.Sprintf(href, currentPage+pagerNumSize), moreIcon)
- }
- continue
- }
- }
- if i == currentPage {
- lis += fmt.Sprintf(li, number+" "+active, noHref, strconv.Itoa(i))
- } else {
- lis += fmt.Sprintf(li, number, fmt.Sprintf(href, i), strconv.Itoa(i))
- }
- }
- lis = fmt.Sprintf(li, ppc, pph, prevPageIcon) + lis + fmt.Sprintf(li, npc, nph, nextPageIcon)
- return fmt.Sprintf(ul, currentPage, totalPage, lis)
- }
|