1
+ <!-- 基于 ruoyi-vue3 的 Pagination 重构,核心是简化无用的属性,并使用 ts 重写 -->
1
2
<template >
2
- <div :class = " { hidden } " class = " pagination-container " >
3
- < el-pagination
4
- :background = " background "
5
- v-model:current-page = " currentPage "
6
- v-model:page-size = " pageSize "
7
- :layout = " layout "
8
- :page-sizes = " pageSizes "
9
- :pager-count = " pagerCount "
10
- :total = " total "
11
- @size-change = " handleSizeChange "
12
- @current -change =" handleCurrentChange "
13
- />
14
- </ div >
3
+ <el-pagination
4
+ v-show = " total > 0 "
5
+ class = " float-right mt-15px mb-15px "
6
+ :background = " true "
7
+ layout = " total, sizes, prev, pager, next, jumper "
8
+ :page-sizes = " [10, 20, 30, 50] "
9
+ v-model:current-page = " currentPage "
10
+ v-model:page-size = " pageSize "
11
+ :pager-count = " pagerCount "
12
+ :total = " total "
13
+ @size -change =" handleSizeChange "
14
+ @current-change = " handleCurrentChange "
15
+ / >
15
16
</template >
16
-
17
17
<script setup>
18
- // TODO 芋艿:ts 重写
19
- // TODO 芋艿:scrollTo 接入
20
- // import { scrollTo } from '@/utils/scroll-to'
21
18
import { computed } from ' vue'
22
19
23
20
const props = defineProps ({
21
+ // 总条目数
24
22
total: {
25
23
required: true ,
26
24
type: Number
27
25
},
26
+ // 当前页数:pageNo
28
27
page: {
29
28
type: Number ,
30
29
default: 1
31
30
},
31
+ // 每页显示条目个数:pageSize
32
32
limit: {
33
33
type: Number ,
34
34
default: 20
35
35
},
36
- pageSizes: {
37
- type: Array ,
38
- default () {
39
- return [10 , 20 , 30 , 50 ]
40
- }
41
- },
36
+ // 设置最大页码按钮数。 页码按钮的数量,当总页数超过该值时会折叠
42
37
// 移动端页码按钮的数量端默认值 5
43
38
pagerCount: {
44
39
type: Number ,
45
40
default: document .body .clientWidth < 992 ? 5 : 7
46
- },
47
- layout: {
48
- type: String ,
49
- default: ' total, sizes, prev, pager, next, jumper'
50
- },
51
- background: {
52
- type: Boolean ,
53
- default: true
54
- },
55
- autoScroll: {
56
- type: Boolean ,
57
- default: true
58
- },
59
- hidden: {
60
- type: Boolean ,
61
- default: false
62
41
}
63
42
})
64
43
@@ -68,6 +47,7 @@ const currentPage = computed({
68
47
return props .page
69
48
},
70
49
set (val ) {
50
+ // 触发 update:page 事件,更新 limit 属性,从而更新 pageNo
71
51
emit (' update:page' , val)
72
52
}
73
53
})
@@ -76,32 +56,20 @@ const pageSize = computed({
76
56
return props .limit
77
57
},
78
58
set (val ) {
59
+ // 触发 update:limit 事件,更新 limit 属性,从而更新 pageSize
79
60
emit (' update:limit' , val)
80
61
}
81
62
})
82
- function handleSizeChange (val ) {
63
+ const handleSizeChange = (val ) => {
64
+ // 如果修改后超过最大页面,强制跳转到第 1 页
83
65
if (currentPage .value * val > props .total ) {
84
66
currentPage .value = 1
85
67
}
68
+ // 触发 pagination 事件,重新加载列表
86
69
emit (' pagination' , { page: currentPage .value , limit: val })
87
- if (props .autoScroll ) {
88
- // scrollTo(0, 800)
89
- }
90
70
}
91
- function handleCurrentChange (val ) {
71
+ const handleCurrentChange = (val ) => {
72
+ // 触发 pagination 事件,重新加载列表
92
73
emit (' pagination' , { page: val, limit: pageSize .value })
93
- if (props .autoScroll ) {
94
- // scrollTo(0, 800)
95
- }
96
74
}
97
75
</script >
98
-
99
- <style scoped>
100
- .pagination-container {
101
- background : #fff ;
102
- padding : 32px 16px ;
103
- }
104
- .pagination-container.hidden {
105
- display : none ;
106
- }
107
- </style >
0 commit comments