diff --git a/packages/renderless/src/pager/index.ts b/packages/renderless/src/pager/index.ts index 2c8905dd6a..c2205ff963 100644 --- a/packages/renderless/src/pager/index.ts +++ b/packages/renderless/src/pager/index.ts @@ -128,15 +128,19 @@ export const watchCurrentPage = } export const watchInternalPageCount = - ({ state, api }: Pick) => + ({ state, api, props }: Pick) => (pageCount: number | null): void => { const oldCurPage = state.internalCurrentPage + const validCurrentPage = api.getValidCurrentPage(props.currentPage) if (pageCount && pageCount > 0 && oldCurPage === 0) { state.internalCurrentPage = 1 } else if (oldCurPage > Number(pageCount)) { state.internalCurrentPage = pageCount || 1 state.userChangePageSize && api.emitChange() + } else if (oldCurPage < validCurrentPage) { + // total 从 0 等非法值变为有效后,恢复此前被裁剪的 current-page + state.internalCurrentPage = validCurrentPage } state.userChangePageSize = false diff --git a/packages/renderless/src/pager/vue.ts b/packages/renderless/src/pager/vue.ts index 63c795dd64..8a5e846361 100644 --- a/packages/renderless/src/pager/vue.ts +++ b/packages/renderless/src/pager/vue.ts @@ -137,7 +137,7 @@ export const renderless = ( watchInternalCurrentPage: watchInternalCurrentPage({ state, emit, props }), getInternalPageSize: getInternalPageSize({ state, props }), watchCurrentPage: watchCurrentPage({ state, api }), - watchInternalPageCount: watchInternalPageCount({ state, api }), + watchInternalPageCount: watchInternalPageCount({ state, api, props }), watchTotal: watchTotal({ state }), watchShowSizes: watchShowSizes({ nextTick, vm }), watchInternalPageSize: watchInternalPageSize({ emit, props }) diff --git a/packages/vue/src/pager/src/mobile-first.vue b/packages/vue/src/pager/src/mobile-first.vue index 85876dcf16..6e204156bd 100644 --- a/packages/vue/src/pager/src/mobile-first.vue +++ b/packages/vue/src/pager/src/mobile-first.vue @@ -708,12 +708,15 @@ export default defineComponent({ watch(internalPageCount, (pageCount) => { const oldCurPage = state.internalCurrentPage + const validCurrentPage = getValidCurrentPage(Number(props.currentPage)) if (pageCount && pageCount > 0 && oldCurPage === 0) { state.internalCurrentPage = 1 } else if (pageCount && oldCurPage > pageCount) { state.internalCurrentPage = pageCount === 0 ? 1 : pageCount state.userChangePageSize && emitChange() + } else if (oldCurPage < validCurrentPage) { + state.internalCurrentPage = validCurrentPage } state.userChangePageSize = false