| 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
 | | <template> |  |   <div :class="{'hidden':hidden}" class="pagination-container"> |  |     <el-pagination |  |       :background="background" |  |       :current-page.sync="currentPage" |  |       :page-size.sync="pageSize" |  |       :layout="layout" |  |       :page-sizes="pageSizes" |  |       :pager-count="pagerCount" |  |       :total="total" |  |       v-bind="$attrs" |  |       @size-change="handleSizeChange" |  |       @current-change="handleCurrentChange" |  |     /> |  |   </div> |  | </template> |  |   |  | <script> |  | import { scrollTo } from '@/utils/scroll-to' |  |   |  | export default { |  |   name: 'Pagination', |  |   props: { |  |     total: { |  |       required: true, |  |       type: Number |  |     }, |  |     page: { |  |       type: Number, |  |       default: 1 |  |     }, |  |     limit: { |  |       type: Number, |  |       default: 20 |  |     }, |  |     pageSizes: { |  |       type: Array, |  |       default() { |  |         return [10, 20, 30, 50] |  |       } |  |     }, |  |     // 移动端页码按钮的数量端默认值5 |  |     pagerCount: { |  |       type: Number, |  |       default: document.body.clientWidth < 992 ? 5 : 7 |  |     }, |  |     layout: { |  |       type: String, |  |       default: 'total, sizes, prev, pager, next, jumper' |  |     }, |  |     background: { |  |       type: Boolean, |  |       default: true |  |     }, |  |     autoScroll: { |  |       type: Boolean, |  |       default: true |  |     }, |  |     hidden: { |  |       type: Boolean, |  |       default: false |  |     } |  |   }, |  |   data() { |  |     return { |  |     }; |  |   }, |  |   computed: { |  |     currentPage: { |  |       get() { |  |         return this.page |  |       }, |  |       set(val) { |  |         this.$emit('update:page', val) |  |       } |  |     }, |  |     pageSize: { |  |       get() { |  |         return this.limit |  |       }, |  |       set(val) { |  |         this.$emit('update:limit', val) |  |       } |  |     } |  |   }, |  |   methods: { |  |     handleSizeChange(val) { |  |       if (this.currentPage * val > this.total) { |  |         this.currentPage = 1 |  |       } |  |       this.$emit('pagination', { page: this.currentPage, limit: val }) |  |       if (this.autoScroll) { |  |         scrollTo(0, 800) |  |       } |  |     }, |  |     handleCurrentChange(val) { |  |       this.$emit('pagination', { page: val, limit: this.pageSize }) |  |       if (this.autoScroll) { |  |         scrollTo(0, 800) |  |       } |  |     } |  |   } |  | } |  | </script> |  |   |  | <style scoped> |  | .pagination-container { |  |   background: #fff; |  |   padding: 32px 16px; |  | } |  | .pagination-container.hidden { |  |   display: none; |  | } |  | </style> | 
 |