diff --git a/common/changes/@visactor/vtable/2040-bug-lastColResizeWidth_2024-07-04-10-59.json b/common/changes/@visactor/vtable/2040-bug-lastColResizeWidth_2024-07-04-10-59.json new file mode 100644 index 000000000..04d4c1171 --- /dev/null +++ b/common/changes/@visactor/vtable/2040-bug-lastColResizeWidth_2024-07-04-10-59.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "fix: last column resize width error #2040\n\n", + "type": "none", + "packageName": "@visactor/vtable" + } + ], + "packageName": "@visactor/vtable", + "email": "892739385@qq.com" +} \ No newline at end of file diff --git a/packages/vtable/src/event/listener/container-dom.ts b/packages/vtable/src/event/listener/container-dom.ts index 85c9a7981..136ce607f 100644 --- a/packages/vtable/src/event/listener/container-dom.ts +++ b/packages/vtable/src/event/listener/container-dom.ts @@ -6,6 +6,7 @@ import { handleWhell } from '../scroll'; import { browser } from '../../tools/helper'; import type { EventManager } from '../event'; import { getPixelRatio } from '../../tools/pixel-ratio'; +import { endResizeCol, endResizeRow } from './table-group'; export function bindContainerDomListener(eventManager: EventManager) { const table = eventManager.table; @@ -512,6 +513,11 @@ export function bindContainerDomListener(eventManager: EventManager) { table.eventManager.isDown = false; table.eventManager.isDraging = false; table.eventManager.inertiaScroll.endInertia(); + if (stateManager.isResizeCol()) { + endResizeCol(table); + } else if (stateManager.isResizeRow()) { + endResizeRow(table); + } }; eventManager.globalEventListeners.push({ name: 'pointerup', diff --git a/packages/vtable/src/event/listener/table-group.ts b/packages/vtable/src/event/listener/table-group.ts index a84d1c3ef..b60b4023f 100644 --- a/packages/vtable/src/event/listener/table-group.ts +++ b/packages/vtable/src/event/listener/table-group.ts @@ -957,7 +957,7 @@ export function bindGesture(eventManager: EventManager) { dblclickHandler(e, table); }); } -function endResizeCol(table: BaseTableAPI) { +export function endResizeCol(table: BaseTableAPI) { table.stateManager.endResizeCol(); // textStick 依赖了这个事件 所以一定要触发RESIZE_COLUMN_END // if ((table as any).hasListeners(TABLE_EVENT_TYPE.RESIZE_COLUMN_END)) { @@ -974,7 +974,7 @@ function endResizeCol(table: BaseTableAPI) { // } } -function endResizeRow(table: BaseTableAPI) { +export function endResizeRow(table: BaseTableAPI) { table.stateManager.endResizeRow(); table.fireListeners(TABLE_EVENT_TYPE.RESIZE_ROW_END, { diff --git a/packages/vtable/src/scenegraph/scenegraph.ts b/packages/vtable/src/scenegraph/scenegraph.ts index b9626d5df..b8d869059 100644 --- a/packages/vtable/src/scenegraph/scenegraph.ts +++ b/packages/vtable/src/scenegraph/scenegraph.ts @@ -1619,7 +1619,7 @@ export class Scenegraph { const drawRange = this.table.getDrawRange(); if (abstractY >= drawRange.top && abstractY <= drawRange.bottom) { // to do: 处理最后一列外调整列宽 - cell = this.table.getCellAt(abstractX - offset, abstractY); + cell = this.table.getCellAtRelativePosition(abstractX - offset, abstractY); return cell; } return { col: -1, row: -1 }; diff --git a/packages/vtable/src/ts-types/base-table.ts b/packages/vtable/src/ts-types/base-table.ts index d71bfe817..f17886b97 100644 --- a/packages/vtable/src/ts-types/base-table.ts +++ b/packages/vtable/src/ts-types/base-table.ts @@ -69,7 +69,8 @@ import type { WidthAdaptiveModeDef, HeightAdaptiveModeDef, ColumnInfo, - RowInfo + RowInfo, + CellAddressWithBound } from '.'; import type { TooltipOptions } from './tooltip'; import type { IWrapTextGraphicAttribute } from '../scenegraph/graphic/text'; @@ -624,7 +625,8 @@ export interface BaseTableAPI { isFrozenCell: (col: number, row: number) => { row: boolean; col: boolean } | null; getRowAt: (absoluteY: number) => { top: number; row: number; bottom: number }; getColAt: (absoluteX: number) => { left: number; col: number; right: number }; - getCellAt: (absoluteX: number, absoluteY: number) => CellAddress; + getCellAt: (absoluteX: number, absoluteY: number) => CellAddressWithBound; + getCellAtRelativePosition: (absoluteX: number, absoluteY: number) => CellAddressWithBound; _makeVisibleCell: (col: number, row: number) => void; // setFocusCursor(col: number, row: number): void; // focusCell(col: number, row: number): void;