1+ <template >
2+ <div class =" layui-box layui-laypage layui-laypage-default" >
3+
4+ <template v-for =" lay in layout " >
5+ <span v-if =" lay == 'total'" class =" layui-laypage-count" >共 {{total}} 条</span >
6+ <a v-if =" lay == 'prev'"
7+ href =" javascript:;"
8+ @click =" handlePrev"
9+ class =" layui-laypage-prev "
10+ :class =" {
11+ 'layui-disabled': currentPage <= 1
12+ }" >
13+ {{prevText}}
14+ </a >
15+
16+ <template v-if =" lay == ' body' " >
17+ <template v-if =" pages .length > pagerCount " >
18+ <a v-if =" currentPage != 1" @click =" handleClick(1)" href =" javascript:;" >{{1}}</a >
19+ <span v-if =" currentPage > 1 + ((pagerCount - 1) / 2)" class =" layui-laypage-spr" >…</span >
20+
21+ <template v-for =" page in pages " >
22+ <a v-if =" page != currentPage && page > 1 && page < pages.length && (page > currentPage - ((pagerCount - 1) / 2) && page < currentPage + ((pagerCount - 1) / 2))"
23+ @click =" handleClick(page)" href =" javascript:;" >{{page}}</a >
24+ <span v-if =" page == currentPage" class =" layui-laypage-curr" >
25+ <em class =" layui-laypage-em"
26+ :class =" 'layui-bg-' + theme"
27+ :style =" color ? 'background-color: ' + color : ''" ></em >
28+ <em >{{page}}</em >
29+ </span >
30+ </template >
31+ <span v-if =" currentPage < pages.length - ((pagerCount - 1) / 2)" class =" layui-laypage-spr" >…</span >
32+ <a v-if =" currentPage != pages.length" @click =" handleClick(pages.length)" href =" javascript:;" >{{pages.length}}</a >
33+
34+ </template >
35+ <template v-else >
36+ <template v-for =" page in pages " >
37+ <a v-if =" page != currentPage" @click =" handleClick(page)" href =" javascript:;" >{{page}}</a >
38+ <span v-if =" page == currentPage" class =" layui-laypage-curr" >
39+ <em class =" layui-laypage-em"
40+ :class =" 'layui-bg-' + theme"
41+ :style =" color ? 'background-color: ' + color : ''" ></em >
42+ <em >{{page}}</em >
43+ </span >
44+ </template >
45+ </template >
46+ </template >
47+
48+
49+ <a v-if =" lay == 'next'"
50+ href =" javascript:;"
51+ @click =" handleNext"
52+ class =" layui-laypage-next"
53+ :class =" {
54+ 'layui-disabled': currentPage >= pages.length
55+ }" >
56+ {{nextText}}
57+ </a >
58+
59+ <span v-if =" lay == 'limit'" class =" layui-laypage-limits" >
60+ <select :value =" size" @change =" handleChange" >
61+ <option v-for =" num in limits" :value =" num" >{{num}} 条/页</option >
62+ </select >
63+ </span >
64+
65+ <span v-if =" lay == 'page'" class =" layui-laypage-skip" >
66+ 到第<input type =" text" :value =" currentPage" @change =" handleChangePage" class =" layui-input" >页
67+ </span >
68+
69+ </template >
70+
71+ </div >
72+ </template >
73+
74+ <script >
75+ export default {
76+ name: " LayPagination" ,
77+ data () {
78+ return {
79+ pages: [],
80+ size: 0
81+ }
82+ },
83+ props: {
84+ total: Number ,
85+ pageSize: {
86+ type: Number ,
87+ default () {
88+ return 10
89+ }
90+ },
91+ currentPage: {
92+ type: Number ,
93+ default () {
94+ return 1
95+ }
96+ },
97+ prevText: {
98+ type: String ,
99+ default () {
100+ return ' 上一页'
101+ }
102+ },
103+ nextText: {
104+ type: String ,
105+ default () {
106+ return ' 下一页'
107+ }
108+ },
109+ theme: String ,
110+ color: String ,
111+ pagerCount: {
112+ type: Number ,
113+ default () {
114+ return 7
115+ }
116+ },
117+ layout: {
118+ type: Array ,
119+ default () {
120+ return [' prev' , ' body' , ' next' ]
121+ }
122+ },
123+ limits: {
124+ type: Array ,
125+ default () {
126+ return [10 , 20 , 30 ]
127+ }
128+ }
129+
130+
131+ },
132+ mounted () {
133+ this .size = this .pageSize
134+ this .changePages ()
135+ },
136+ watch: {
137+ total () {
138+ this .changePages ()
139+
140+ },
141+ pageSize () {
142+ this .changePages ()
143+ }
144+ },
145+ methods: {
146+ changePages () {
147+ const length = Math .ceil (this .total / this .size )
148+ const pages = []
149+ for (let i = 1 ; i <= length; i++ ) {
150+ pages .push (i)
151+ }
152+ this .pages = pages
153+ },
154+ handleChangePage (e ){
155+ let page = parseInt (e .target .value ) || 1
156+ page = page > this .pages .length ? this .pages .length : page
157+ this .handleClick (page)
158+ },
159+ handleChange (e ){
160+ this .size = parseInt (e .target .value )
161+
162+ this .changePages ()
163+ this .$emit (' update:pageSize' , this .size )
164+ this .$emit (' size-change' , this .size )
165+ },
166+ handleClick (page ) {
167+ this .$emit (' update:currentPage' , page)
168+ this .$emit (' current-change' , page)
169+ },
170+ handleNext () {
171+ const {currentPage , pages , handleClick } = this
172+ const page = currentPage + 1
173+ if (currentPage < pages .length ) {
174+ handleClick (page)
175+ }
176+ },
177+ handlePrev () {
178+ const {currentPage , handleClick } = this
179+ const page = currentPage - 1
180+ if (currentPage > 1 ) {
181+ handleClick (page)
182+ }
183+ }
184+ }
185+ }
186+ </script >
187+
188+ <style scoped>
189+
190+ </style >
0 commit comments