| 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
 | | <template> |  |   <div :class="{ 'hidden': hidden }" class="pagination-container"> |  |     <el-pagination |  |       :background="background" |  |       v-model:current-page="currentPage" |  |       v-model:page-size="pageSize" |  |       :layout="layout" |  |       :page-sizes="pageSizes" |  |       :pager-count="pagerCount" |  |       :total="total" |  |       @size-change="handleSizeChange" |  |       @current-change="handleCurrentChange" |  |     /> |  |   </div> |  | </template> |  |   |  | <script setup> |  | import { scrollTo } from '@/utils/scroll-to' |  |   |  | const props = defineProps({ |  |   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 |  |   } |  | }) |  |   |  | const emit = defineEmits(); |  | const currentPage = computed({ |  |   get() { |  |     return props.page |  |   }, |  |   set(val) { |  |     emit('update:page', val) |  |   } |  | }) |  | const pageSize = computed({ |  |   get() { |  |     return props.limit |  |   }, |  |   set(val){ |  |     emit('update:limit', val) |  |   } |  | }) |  | function handleSizeChange(val) { |  |   if (currentPage.value * val > props.total) { |  |     currentPage.value = 1 |  |   } |  |   emit('pagination', { page: currentPage.value, limit: val }) |  |   if (props.autoScroll) { |  |     scrollTo(0, 800) |  |   } |  | } |  | function handleCurrentChange(val) { |  |   emit('pagination', { page: val, limit: pageSize.value }) |  |   if (props.autoScroll) { |  |     scrollTo(0, 800) |  |   } |  | } |  |   |  | </script> |  |   |  | <style scoped> |  | .pagination-container { |  |   background: #fff; |  | } |  | .pagination-container.hidden { |  |   display: none; |  | } |  | </style> | 
 |