From 3bfcd15dc0ba830404023dc3a394261b3e366db8 Mon Sep 17 00:00:00 2001 From: Syngnat Date: Sat, 27 Jun 2026 16:41:12 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20fix(data-grid):=20=E5=85=81?= =?UTF-8?q?=E8=AE=B8=E6=9C=AA=E7=9F=A5=E6=80=BB=E6=95=B0=E7=BB=93=E6=9E=9C?= =?UTF-8?q?=E8=B7=B3=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 未知总数分页保留跳页控件 - 跳页输入不再被当前估算页数截断 Fixes #584 --- frontend/src/components/DataGrid.layout.test.tsx | 14 ++++++++------ frontend/src/components/DataGridPaginationBar.tsx | 12 +++++++----- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/frontend/src/components/DataGrid.layout.test.tsx b/frontend/src/components/DataGrid.layout.test.tsx index 63ff8ea..7a850be 100644 --- a/frontend/src/components/DataGrid.layout.test.tsx +++ b/frontend/src/components/DataGrid.layout.test.tsx @@ -1934,7 +1934,7 @@ describe('DataGrid layout', () => { expect(emptyPreviewMarkup).not.toContain('data_grid.preview_panel'); }); - it('keeps unknown-total pagination in sequential mode instead of pretending total pages are known', () => { + it('keeps unknown-total pagination sequential while still allowing direct page jumps', () => { const markup = renderDataGridWithI18n( { expect(markup).toContain('第 3 页'); expect(markup).not.toContain('3/4'); - expect(markup).not.toContain('data-grid-pagination-jump="true"'); + expect(markup).toContain('data-grid-pagination-jump="true"'); + expect(markup).toContain('跳页'); }); - it('keeps legacy unknown-total pagination in sequential mode instead of numbered pages', () => { + it('keeps legacy unknown-total pagination sequential while still allowing direct page jumps', () => { const previousUiVersion = mockStoreState.uiVersion; mockStoreState.uiVersion = 'legacy'; @@ -1998,7 +1999,8 @@ describe('DataGrid layout', () => { expect(markup).toContain('第 3 页'); expect(markup).toContain('data-grid-pagination-sequential="true"'); expect(markup).not.toContain('class="ant-pagination'); - expect(markup).not.toContain('data-grid-pagination-jump="true"'); + expect(markup).toContain('data-grid-pagination-jump="true"'); + expect(markup).toContain('跳页'); } finally { mockStoreState.uiVersion = previousUiVersion; } @@ -2557,8 +2559,8 @@ describe('DataGrid layout', () => { expect(css).toContain('overflow-x: auto;'); expect(paginationBarSource).toContain("label: translate('data_grid.pagination.page_size_option', { count: value })"); expect(paginationBarSource).not.toContain("label: `${value}/页`"); - expect(paginationBarSource).toContain('const maxJumpPage = Math.max(1, paginationTotalPages);'); - expect(paginationBarSource).toContain('Math.min(maxJumpPage, Math.max(1, Math.trunc(Number(jumpPage))))'); + expect(paginationBarSource).toContain('const maxJumpPage = showKnownPageCount ? Math.max(1, paginationTotalPages) : null;'); + expect(paginationBarSource).toContain('max={maxJumpPage ?? undefined}'); expect(paginationBarSource).toContain('onPressEnter={submitJumpPage}'); expect(paginationBarSource).toContain('data-grid-pagination-jump="true"'); expect(css).toContain('.data-grid-pagination-jump-input.ant-input-number-focused'); diff --git a/frontend/src/components/DataGridPaginationBar.tsx b/frontend/src/components/DataGridPaginationBar.tsx index 1bef385..0edcd78 100644 --- a/frontend/src/components/DataGridPaginationBar.tsx +++ b/frontend/src/components/DataGridPaginationBar.tsx @@ -58,9 +58,11 @@ const DataGridPaginationBar: React.FC = ({ return null; } - const maxJumpPage = Math.max(1, paginationTotalPages); + const maxJumpPage = showKnownPageCount ? Math.max(1, paginationTotalPages) : null; const normalizedJumpPage = Number.isFinite(Number(jumpPage)) && Number(jumpPage) > 0 - ? Math.min(maxJumpPage, Math.max(1, Math.trunc(Number(jumpPage)))) + ? (maxJumpPage !== null + ? Math.min(maxJumpPage, Math.max(1, Math.trunc(Number(jumpPage)))) + : Math.max(1, Math.trunc(Number(jumpPage)))) : null; const jumpDisabled = !onPageChange || normalizedJumpPage === null || normalizedJumpPage === pagination.current; const submitJumpPage = () => { @@ -68,13 +70,13 @@ const DataGridPaginationBar: React.FC = ({ if (normalizedJumpPage === pagination.current) return; onPageChange(normalizedJumpPage, pagination.pageSize); }; - const jumpPageControl = showKnownPageCount ? ( + const jumpPageControl = (
{translate('data_grid.pagination.jump_label')} = ({ {translate('data_grid.pagination.jump_action')}
- ) : null; + ); const sequentialPaginationControl = (