Skip to content

Commit 4086c00

Browse files
committed
fix(Pagination): improve page size change handling and ensure current page consistency+
1 parent b546c09 commit 4086c00

File tree

1 file changed

+23
-26
lines changed

1 file changed

+23
-26
lines changed

packages/components/pagination/pagination.tsx

Lines changed: 23 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { defineComponent, computed, ref, watch, toRefs, getCurrentInstance } from 'vue';
1+
import { defineComponent, computed, ref, watch, toRefs, getCurrentInstance, nextTick } from 'vue';
22
import { isNaN, isObject } from 'lodash-es';
33
import {
44
PageFirstIcon as TdPageFirstIcon,
@@ -182,38 +182,35 @@ export default defineComponent({
182182
pageChangeMap[type]();
183183
};
184184

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;
194187

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;
196191

197-
if (innerCurrent.value > pageCount) {
198-
isIndexChange = true;
199-
}
200-
201-
/**
202-
* 分页大小变化事件
203-
* @param {Number} pageSize 分页大小
204-
* @param {Number} index 当前页
205-
*/
206192
const pageInfo = {
207-
current: isIndexChange ? pageCount : innerCurrent.value,
193+
current: indexExceeds ? newPageCount : innerCurrent.value,
208194
previous: innerCurrent.value,
209195
pageSize,
210196
};
197+
211198
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+
});
217214
};
218215

219216
const onJumperChange = (val: number) => {

0 commit comments

Comments
 (0)