|
1 | | -import { defineComponent, computed, ref, watch, toRefs, getCurrentInstance } from 'vue'; |
| 1 | +import { defineComponent, computed, ref, watch, toRefs, getCurrentInstance, nextTick } from 'vue'; |
2 | 2 | import { isNaN, isObject } from 'lodash-es'; |
3 | 3 | import { |
4 | 4 | PageFirstIcon as TdPageFirstIcon, |
@@ -182,38 +182,35 @@ export default defineComponent({ |
182 | 182 | pageChangeMap[type](); |
183 | 183 | }; |
184 | 184 |
|
185 | | - const onSelectorChange: (e: string) => void = (e) => { |
186 | | - if (props.disabled) { |
187 | | - return; |
188 | | - } |
189 | | - const pageSize: number = parseInt(e, 10); |
190 | | - let pageCount = 1; |
191 | | - if (pageSize > 0) { |
192 | | - pageCount = Math.max(Math.ceil(props.total / pageSize), 1); |
193 | | - } |
| 185 | + const onSelectorChange = (val: string | number) => { |
| 186 | + if (props.disabled) return; |
194 | 187 |
|
195 | | - let isIndexChange = false; |
| 188 | + const pageSize = Number(val); |
| 189 | + const newPageCount = pageSize > 0 ? Math.max(Math.ceil(props.total / pageSize), 1) : 1; |
| 190 | + const indexExceeds = innerCurrent.value > newPageCount; |
196 | 191 |
|
197 | | - if (innerCurrent.value > pageCount) { |
198 | | - isIndexChange = true; |
199 | | - } |
200 | | - |
201 | | - /** |
202 | | - * 分页大小变化事件 |
203 | | - * @param {Number} pageSize 分页大小 |
204 | | - * @param {Number} index 当前页 |
205 | | - */ |
206 | 192 | const pageInfo = { |
207 | | - current: isIndexChange ? pageCount : innerCurrent.value, |
| 193 | + current: indexExceeds ? newPageCount : innerCurrent.value, |
208 | 194 | previous: innerCurrent.value, |
209 | 195 | pageSize, |
210 | 196 | }; |
| 197 | + |
211 | 198 | setInnerPageSize(pageSize, pageInfo); |
212 | | - if (isIndexChange) { |
213 | | - toPage(pageCount, pageInfo); |
214 | | - } else { |
215 | | - props.onChange?.(pageInfo); |
216 | | - } |
| 199 | + |
| 200 | + nextTick(() => { |
| 201 | + if (indexExceeds) { |
| 202 | + // 如果组件为受控(外部传入 current),优先使用受控值(且小于 newPageCount) |
| 203 | + const controlledCurrent = current?.value; |
| 204 | + |
| 205 | + if (controlledCurrent != null && controlledCurrent < newPageCount) { |
| 206 | + toPage(controlledCurrent, pageInfo); |
| 207 | + } else { |
| 208 | + toPage(newPageCount, pageInfo); |
| 209 | + } |
| 210 | + } else { |
| 211 | + props.onChange?.(pageInfo); |
| 212 | + } |
| 213 | + }); |
217 | 214 | }; |
218 | 215 |
|
219 | 216 | const onJumperChange = (val: number) => { |
|
0 commit comments