From 4a640a0c029f95e9a45a272043b596f27a35c8b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8B=AC=E6=9C=A8=E8=88=9F?= <1978141412@qq.com> Date: Mon, 31 Aug 2026 10:23:37 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E8=A1=A8=E6=A0=BC?= =?UTF-8?q?=E8=A1=8C=E7=8A=B6=E6=80=81=E7=B4=A2=E5=BC=95=E5=AF=B9=E8=B1=A1?= =?UTF-8?q?=EF=BC=8C=E4=BC=98=E5=8C=96=E8=A1=A8=E6=A0=BC=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=97=B6=E6=9F=A5=E8=AF=A2=E8=A1=A8=E6=A0=BC?= =?UTF-8?q?=E8=A1=8C=E7=8A=B6=E6=80=81=E5=AF=B9=E8=B1=A1=E9=80=9F=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/runtime/CHANGELOG.md | 4 ++++ .../control/grid/grid/grid.controller.ts | 18 +++++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/packages/runtime/CHANGELOG.md b/packages/runtime/CHANGELOG.md index c2220bc4f..2fbe375cd 100644 --- a/packages/runtime/CHANGELOG.md +++ b/packages/runtime/CHANGELOG.md @@ -7,6 +7,10 @@ ## [Unreleased] +### Changed + +- 添加表格行状态索引对象,优化表格状态更新时查询表格行状态对象速度 + ## [0.7.41-alpha.133] - 2026-08-28 ### Added diff --git a/packages/runtime/src/controller/control/grid/grid/grid.controller.ts b/packages/runtime/src/controller/control/grid/grid/grid.controller.ts index 80aba7f3a..0357bae89 100644 --- a/packages/runtime/src/controller/control/grid/grid/grid.controller.ts +++ b/packages/runtime/src/controller/control/grid/grid/grid.controller.ts @@ -109,6 +109,14 @@ export class GridController< return this.evt; } + /** + * @description 行状态索引缓存 + * @protected + * @type {Map} + * @memberof GridController + */ + protected rowStateIndexMap: Map = new Map(); + /** * 单元格超出呈现模式 * @@ -763,6 +771,7 @@ export class GridController< * @param rows */ async updateRows(rows: IGridRowState[]): Promise { + this.rowStateIndexMap.clear(); for (const row of rows) { await Promise.all([ ...Object.values(row.uaColStates).map(uaState => @@ -1988,11 +1997,14 @@ export class GridController< findRowStateIndex(data: IData): number { const isCreate = data.srfuf === Srfuf.CREATE; const compareKey = isCreate ? 'tempsrfkey' : 'srfkey'; + if (data[compareKey] && this.rowStateIndexMap.has(data[compareKey])) { + return this.rowStateIndexMap.get(data[compareKey])!; + } // 识别联合主键场景,unionkeys参数以|分割,同一条数据关联多个版本情况 const unionKeys = this.controlParams.unionkeys ? this.controlParams.unionkeys.split('|') : undefined; - return this.state.rows.findIndex(item => { + const index = this.state.rows.findIndex(item => { if (unionKeys) { let result = item.data[compareKey] === data[compareKey]; if (!result) return false; @@ -2007,6 +2019,10 @@ export class GridController< } return item.data[compareKey] === data[compareKey]; }); + if (data[compareKey]) { + this.rowStateIndexMap.set(data[compareKey], index); + } + return index; } /** -- Gitee