zhaolei
9 days ago 921de2254ff5712a44ed8575ee8efe34252f6603
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
using Microsoft.AspNetCore.Components;
using System;
using System.Collections.Generic;
 
namespace Bootstrap.Admin.Pages.Components
{
    /// <summary>
    /// 分页组件基类
    /// </summary>
    public class PaginationBase : ComponentBase
    {
        /// <summary>
        /// 
        /// </summary>
        [Parameter]
        public int TotalCount { get; set; }
 
        /// <summary>
        /// 
        /// </summary>
        [Parameter]
        public int PageIndex { get; set; } = 1;
 
        /// <summary>
        /// 
        /// </summary>
        [Parameter]
        public int PageItems { get; set; }
 
        /// <summary>
        /// 获得/设置 页码总数
        /// </summary>
        public int PageCount
        {
            get
            {
                return (int)Math.Ceiling(TotalCount * 1.0 / PageItems); ;
            }
        }
 
        /// <summary>
        /// 
        /// </summary>
        [Parameter]
        public Action<int, int> OnPageClick { get; set; } = new Action<int, int>((pageIndex, pageItems) => { });
 
        /// <summary>
        /// 
        /// </summary>
        [Parameter]
        public Action<int> OnPageItemsChange { get; set; } = new Action<int>((pageItems) => { });
 
        /// <summary>
        /// 
        /// </summary>
        protected void MovePrev()
        {
            if (PageIndex > 1) OnPageClick(PageIndex - 1, PageItems);
            else OnPageClick(PageCount, PageItems);
        }
 
        /// <summary>
        /// 
        /// </summary>
        protected void MoveNext()
        {
            if (PageIndex < PageCount) OnPageClick(PageIndex + 1, PageItems);
            else OnPageClick(1, PageItems);
        }
 
        /// <summary>
        /// 
        /// </summary>
        /// <param name="pageItems"></param>
        protected void ClickItem(int pageItems)
        {
            PageItems = pageItems;
            OnPageItemsChange(PageItems);
        }
 
        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        protected IEnumerable<int> GetPages()
        {
            var pages = new List<int>() { 20, 40, 80, 100, 200 };
            var ret = new List<int>();
            for (int i = 0; i < pages.Count; i++)
            {
                ret.Add(pages[i]);
                if (pages[i] >= TotalCount) break;
            }
            return ret;
        }
 
        /// <summary>
        /// 
        /// </summary>
        protected int StartPageIndex { get; set; }
 
        /// <summary>
        /// 
        /// </summary>
        protected int EndPageIndex { get; set; }
 
        /// <summary>
        /// 
        /// </summary>
        protected override void OnParametersSet()
        {
            // 计算 分页开始页码与结束页码
            StartPageIndex = Math.Max(1, PageIndex - 4);
            EndPageIndex = Math.Min(PageCount, PageIndex + 5);
        }
    }
}