From 8ae9863c5131d99aade818c116ffaa370598c8a8 Mon Sep 17 00:00:00 2001 From: ptma Date: Tue, 23 Jun 2026 15:49:20 +0800 Subject: [PATCH] pref(grid): improve paging row numbers and cell ellipsis symbols * pref(grid): improve paging row numbers and cell ellipsis symbols * fix(grid): paging row numbers is not processed when infiniteScroll enabled --- apps/desktop/src/components/grid/DataGrid.vue | 7 +++++-- .../desktop/src/lib/canvasDataGridRenderer.ts | 20 +++++++++++++++---- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/apps/desktop/src/components/grid/DataGrid.vue b/apps/desktop/src/components/grid/DataGrid.vue index 700b4da6b5..9638814a0f 100644 --- a/apps/desktop/src/components/grid/DataGrid.vue +++ b/apps/desktop/src/components/grid/DataGrid.vue @@ -4379,6 +4379,9 @@ function drawCanvasGrid() { rowCellsUseSelectionVisual, cellIsSelected, cellCanHover: canEditCellItem, + infiniteScrollEnabled: infiniteScrollEnabled.value, + pageSize: pageSize.value, + currentPage: currentPage.value, }); } @@ -7432,13 +7435,13 @@ const gridContextMenuItems = computed(() => { @dblclick.stop="toggleTranspose(item.displayIndex)" @contextmenu="onRowContext(item.id, item.displayIndex)" > - {{ item.displayIndex + 1 }} + {{ infiniteScrollEnabled ? item.displayIndex + 1 : item.displayIndex + 1 + (currentPage - 1) * pageSize }}
= FIT_CANVAS_TEXT_CACHE_MAX) fitCanvasTextCache.clear(); fitCanvasTextCache.set(cacheKey, result); return result; @@ -221,6 +226,9 @@ export function drawCanvasDataGrid(options: DrawCanvasDataGridOptions) { rowCellsUseSelectionVisual, cellIsSelected, cellCanHover, + infiniteScrollEnabled, + pageSize, + currentPage, } = options; const dpr = Math.max(1, options.pixelRatio ?? window.devicePixelRatio ?? 1); const pixelWidth = Math.max(1, Math.ceil(width * dpr)); @@ -287,7 +295,11 @@ export function drawCanvasDataGrid(options: DrawCanvasDataGridOptions) { ctx.font = item.status === "new" || item.status === "edited" ? semiboldFont : normalFont; ctx.textAlign = "center"; const textY = alignCanvasPixel(y + rowTextOffsetY, dpr); - ctx.fillText(String(item.displayIndex + 1), rowNumberTextX, textY); + if (infiniteScrollEnabled) { + ctx.fillText(String(item.displayIndex + 1), rowNumberTextX, textY); + } else { + ctx.fillText(String(item.displayIndex + 1 + pageSize * (currentPage - 1)), rowNumberTextX, textY); + } ctx.font = normalFont; ctx.strokeStyle = theme.border; @@ -360,7 +372,7 @@ export function drawCanvasDataGrid(options: DrawCanvasDataGridOptions) { const displayText = isEditingThisCell ? "" : formatCell(value, actualColIdx); const needsTruncation = ctx.measureText(displayText).width > paddedMaxWidth; const textMaxWidth = needsTruncation ? Math.max(0, x + colWidth - textLeft) : paddedMaxWidth; - const text = isEditingThisCell ? displayText : fitCanvasText(ctx, displayText, textMaxWidth); + const text = isEditingThisCell ? displayText : fitCanvasText(ctx, displayText, textMaxWidth - 12); ctx.fillText(text, textLeft, textY); if (item.isDeleted && text) { const textWidth = Math.min(ctx.measureText(text).width, textMaxWidth);