|
13 | 13 | <ArrowLeft></ArrowLeft> |
14 | 14 | </Button> |
15 | 15 | </li> |
16 | | - <!-- 首页按钮 --> |
17 | | - <li :class="['nt-pagination-item', currentPage === 1 ? 'is-active' : '']"> |
18 | | - <a href="javascript:void" title="1" @click="handleTo(1)">1</a> |
19 | | - </li> |
20 | | - <!-- 向前5页 --> |
21 | | - <li class="nt-pagination-item" v-if="currentPage > 4"> |
22 | | - <a |
23 | | - href="javascript:void" |
24 | | - @mouseenter="handleMoreHover(1)" |
25 | | - @mouseleave="handleMoreHover(0)" |
26 | | - title="向前5页" |
27 | | - @click="handleTo(currentPage - 5)" |
| 16 | + <template v-if="simple"> |
| 17 | + <li class="nt-pagination-item nt-pagination-simple-layout"> |
| 18 | + <input |
| 19 | + class="nt-input nt-pagination-simple-input" |
| 20 | + :value="currentPage" |
| 21 | + type="text" |
| 22 | + inputmode="numeric" |
| 23 | + @input="handlePageInput" |
| 24 | + @keyup.enter="handlePageSure" |
| 25 | + @blur="handlePageSure" |
| 26 | + /> |
| 27 | + <span class="nt-pagination-simple-divide">/</span> |
| 28 | + <span>{{ totalPage }}</span> |
| 29 | + </li> |
| 30 | + </template> |
| 31 | + <template v-else> |
| 32 | + <!-- 首页按钮 --> |
| 33 | + <li :class="['nt-pagination-item', currentPage === 1 ? 'is-active' : '']"> |
| 34 | + <a href="javascript:void" title="1" @click="handleTo(1)">1</a> |
| 35 | + </li> |
| 36 | + <!-- 向前5页 --> |
| 37 | + <li class="nt-pagination-item" v-if="currentPage > 4"> |
| 38 | + <a |
| 39 | + href="javascript:void" |
| 40 | + @mouseenter="handleMoreHover(1)" |
| 41 | + @mouseleave="handleMoreHover(0)" |
| 42 | + title="向前5页" |
| 43 | + @click="handleTo(currentPage - 5)" |
| 44 | + > |
| 45 | + <More v-if="moreFocus !== 1"></More> |
| 46 | + <DArrowLeft v-else-if="moreFocus === 1"></DArrowLeft> |
| 47 | + </a> |
| 48 | + </li> |
| 49 | + <!-- 中间部分,显示包括当前页在内的最多5页 --> |
| 50 | + <li |
| 51 | + v-for="n in centerRange" |
| 52 | + :key="n" |
| 53 | + :class="['nt-pagination-item', currentPage === n ? 'is-active' : '']" |
28 | 54 | > |
29 | | - <More v-if="moreFocus !== 1"></More> |
30 | | - <DArrowLeft v-else-if="moreFocus === 1"></DArrowLeft> |
31 | | - </a> |
32 | | - </li> |
33 | | - <!-- 中间部分,显示包括当前页在内的最多5页 --> |
34 | | - <li |
35 | | - v-for="n in centerRange" |
36 | | - :key="n" |
37 | | - :class="['nt-pagination-item', currentPage === n ? 'is-active' : '']" |
38 | | - > |
39 | | - <a href="javascript:void" :title="String(n)" @click="handleTo(n)">{{ |
40 | | - n |
41 | | - }}</a> |
42 | | - </li> |
43 | | - <!-- 向后5页 --> |
44 | | - <li class="nt-pagination-item" v-if="currentPage < totalPage - 3"> |
45 | | - <a |
46 | | - href="javascript:void" |
47 | | - @mouseenter="handleMoreHover(2)" |
48 | | - @mouseleave="handleMoreHover(0)" |
49 | | - title="向前5页" |
50 | | - @click="handleTo(currentPage + 5)" |
| 55 | + <a href="javascript:void" :title="String(n)" @click="handleTo(n)">{{ |
| 56 | + n |
| 57 | + }}</a> |
| 58 | + </li> |
| 59 | + <!-- 向后5页 --> |
| 60 | + <li class="nt-pagination-item" v-if="currentPage < totalPage - 3"> |
| 61 | + <a |
| 62 | + href="javascript:void" |
| 63 | + @mouseenter="handleMoreHover(2)" |
| 64 | + @mouseleave="handleMoreHover(0)" |
| 65 | + title="向前5页" |
| 66 | + @click="handleTo(currentPage + 5)" |
| 67 | + > |
| 68 | + <More v-if="moreFocus !== 2"></More> |
| 69 | + <DArrowRight v-else-if="moreFocus === 2"></DArrowRight> |
| 70 | + </a> |
| 71 | + </li> |
| 72 | + <!-- 末尾页按钮 --> |
| 73 | + <li |
| 74 | + v-if="totalPage > 1" |
| 75 | + @click="handleTo(totalPage)" |
| 76 | + :class="[ |
| 77 | + 'nt-pagination-item', |
| 78 | + currentPage === totalPage ? 'is-active' : '', |
| 79 | + ]" |
51 | 80 | > |
52 | | - <More v-if="moreFocus !== 2"></More> |
53 | | - <DArrowRight v-else-if="moreFocus === 2"></DArrowRight> |
54 | | - </a> |
55 | | - </li> |
56 | | - <!-- 末尾页按钮 --> |
57 | | - <li |
58 | | - v-if="totalPage > 1" |
59 | | - @click="handleTo(totalPage)" |
60 | | - :class="[ |
61 | | - 'nt-pagination-item', |
62 | | - currentPage === totalPage ? 'is-active' : '', |
63 | | - ]" |
64 | | - > |
65 | | - <a href="javascript:void" :title="totalPage + ''">{{ totalPage }}</a> |
66 | | - </li> |
| 81 | + <a href="javascript:void" :title="totalPage + ''">{{ totalPage }}</a> |
| 82 | + </li> |
| 83 | + </template> |
| 84 | + |
67 | 85 | <!-- 下一页切换按钮 --> |
68 | 86 | <li class="nt-pagination-item"> |
69 | 87 | <Button |
@@ -103,12 +121,15 @@ const props = withDefaults( |
103 | 121 | align?: 'start' | 'center' | 'end'; |
104 | 122 | /** 只有一页时是否隐藏分页器 */ |
105 | 123 | hideOnSinglePage?: boolean; |
| 124 | + /** 是否为简单分页 */ |
| 125 | + simple?: boolean; |
106 | 126 | }>(), |
107 | 127 | { |
108 | 128 | pageSize: 10, |
109 | 129 | defaultCurrentPage: 1, |
110 | 130 | align: 'start', |
111 | 131 | hideOnSinglePage: false, |
| 132 | + simple: false, |
112 | 133 | }, |
113 | 134 | ); |
114 | 135 |
|
@@ -175,4 +196,33 @@ function handleTo(p: number) { |
175 | 196 | emits('change', p); |
176 | 197 | } |
177 | 198 | } |
| 199 | +
|
| 200 | +function handlePageInput(e: Event) { |
| 201 | + const $target = e.target as HTMLInputElement; |
| 202 | + const value = $target.value; |
| 203 | + let val: string | number = parseInt(value, 10); |
| 204 | + if (Number.isNaN(val)) { |
| 205 | + val = ''; |
| 206 | + } else { |
| 207 | + val = Math.abs(val); |
| 208 | + if (val < 1) { |
| 209 | + val = 1; |
| 210 | + } else if (val > totalPage.value) { |
| 211 | + val = totalPage.value; |
| 212 | + } |
| 213 | + } |
| 214 | + val = String(val); |
| 215 | + if (val !== value) { |
| 216 | + $target.value = val; |
| 217 | + } |
| 218 | +} |
| 219 | +
|
| 220 | +function handlePageSure(e: Event) { |
| 221 | + const $target = e.target as HTMLInputElement; |
| 222 | + const value = $target.value; |
| 223 | + const pageValue = parseInt(value, 10); |
| 224 | + if (!Number.isNaN(pageValue)) { |
| 225 | + handleTo(pageValue); |
| 226 | + } |
| 227 | +} |
178 | 228 | </script> |
0 commit comments