分页实现

2018-07-09  本文已影响0人  我就是小政政
输入与输出

前端:antd-pro,后端:go
查看列表页-查询表格的url,发现模拟数据的url及响应如下:

输入:
api?currentPage=2&pageSize=10
输出:
{
    "list": [
        {
            "key": 0,
            "title": "一个任务名称 0",
            "owner": "曲丽丽",
            "description": "这是一段描述",
            "updatedAt": "2017-06-30T16:00:00.000Z",
            "createdAt": "2017-06-30T16:00:00.000Z",
        },
    "pagination": {
        "total": 46,
        "pageSize": 10,
        "current": 2
    }
}
效果
image.png
代码
package helper

import (
    "errors"
    "math"
)

type Pagination struct {
    Current   int64   //当前页
    Pagesize  int64   //每页条数
    Total     int64   //总条数
    PageCount int64   //总页数
    Nums      []int64 //分页序数
    NumsCount int64   //总页序数
}

/*
arg1:当前页
arg2:显示条数
arg3:总条数
return1:*Pagination
return2:error

示例:

func (this *TestController) Paging() {
    current, _ := this.GetInt64("current")
    pageSize, _ := this.GetInt64("pageSize")
    this.Data["pagination"] = Paginator(current, pageSize, 365)
    this.serverJson()
}

*/
func Paginator(current, pagesize, total int64) (*Pagination, error) {
    if total < 0 {
        return nil, errors.New("Error: invalid total num, total must >=0 ")
    }

    if current < 1 {
        current = 1
    }
    if pagesize < 1 {
        pagesize = 10
    }

    page_count := math.Ceil(float64(total) / float64(pagesize))

    pagination := new(Pagination)
    pagination.Current = current
    pagination.Pagesize = pagesize
    pagination.Total = total
    pagination.PageCount = int64(page_count)
    pagination.NumsCount = 7
    pagination.setNums()

    return pagination, nil
}

func (this *Pagination) setNums() {
    this.Nums = []int64{}
    if this.PageCount == 0 {
        return
    }

    half := math.Floor(float64(this.NumsCount) / float64(2))
    begin := this.Current - int64(half)
    if begin < 1 {
        begin = 1
    }

    end := begin + this.NumsCount - 1
    if end >= this.PageCount {
        begin = this.PageCount - this.NumsCount + 1
        if begin < 1 {
            begin = 1
        }
        end = this.PageCount
    }

    for i := begin; i <= end; i++ {
        this.Nums = append(this.Nums, i)
    }
}
上一篇 下一篇

猜你喜欢

热点阅读