@visactor/vtable 1.22.11-alpha.4 → 1.22.11-alpha.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/cjs/ListTable.d.ts +34 -7
  2. package/cjs/ListTable.js +134 -14
  3. package/cjs/ListTable.js.map +1 -1
  4. package/cjs/core/BaseTable.js +1 -1
  5. package/cjs/core/BaseTable.js.map +1 -1
  6. package/cjs/core/TABLE_EVENT_TYPE.d.ts +1 -0
  7. package/cjs/core/TABLE_EVENT_TYPE.js +1 -0
  8. package/cjs/core/TABLE_EVENT_TYPE.js.map +1 -1
  9. package/cjs/core/index.d.ts +1 -0
  10. package/cjs/core/index.js +30 -0
  11. package/cjs/core/index.js.map +1 -0
  12. package/cjs/core/record-helper.d.ts +4 -2
  13. package/cjs/core/record-helper.js +81 -24
  14. package/cjs/core/record-helper.js.map +1 -1
  15. package/cjs/data/DataSource.d.ts +1 -0
  16. package/cjs/data/DataSource.js +25 -3
  17. package/cjs/data/DataSource.js.map +1 -1
  18. package/cjs/dataset/DataStatistics.js +1 -2
  19. package/cjs/dataset/dataset-pivot-table.js +2 -1
  20. package/cjs/event/event.d.ts +2 -1
  21. package/cjs/event/event.js +20 -9
  22. package/cjs/event/event.js.map +1 -1
  23. package/cjs/header-helper/style.js +1 -2
  24. package/cjs/index.d.ts +1 -1
  25. package/cjs/index.js +1 -1
  26. package/cjs/index.js.map +1 -1
  27. package/cjs/layout/index.js +2 -1
  28. package/cjs/plugins/custom-cell-style.d.ts +5 -0
  29. package/cjs/plugins/custom-cell-style.js +9 -0
  30. package/cjs/plugins/custom-cell-style.js.map +1 -1
  31. package/cjs/plugins/index.js +1 -1
  32. package/cjs/ts-types/base-table.d.ts +2 -2
  33. package/cjs/ts-types/base-table.js.map +1 -1
  34. package/cjs/ts-types/events.d.ts +15 -0
  35. package/cjs/ts-types/events.js.map +1 -1
  36. package/cjs/ts-types/table-engine.d.ts +32 -6
  37. package/cjs/ts-types/table-engine.js.map +1 -1
  38. package/cjs/vrender.js.map +1 -1
  39. package/dist/vtable.js +375 -48
  40. package/dist/vtable.min.js +2 -2
  41. package/es/ListTable.d.ts +34 -7
  42. package/es/ListTable.js +130 -14
  43. package/es/ListTable.js.map +1 -1
  44. package/es/core/BaseTable.js +1 -1
  45. package/es/core/BaseTable.js.map +1 -1
  46. package/es/core/TABLE_EVENT_TYPE.d.ts +1 -0
  47. package/es/core/TABLE_EVENT_TYPE.js +1 -0
  48. package/es/core/TABLE_EVENT_TYPE.js.map +1 -1
  49. package/es/core/index.d.ts +1 -0
  50. package/es/core/index.js +2 -0
  51. package/es/core/index.js.map +1 -0
  52. package/es/core/record-helper.d.ts +4 -2
  53. package/es/core/record-helper.js +75 -20
  54. package/es/core/record-helper.js.map +1 -1
  55. package/es/data/DataSource.d.ts +1 -0
  56. package/es/data/DataSource.js +25 -3
  57. package/es/data/DataSource.js.map +1 -1
  58. package/es/dataset/DataStatistics.js +1 -2
  59. package/es/dataset/dataset-pivot-table.js +2 -1
  60. package/es/event/event.d.ts +2 -1
  61. package/es/event/event.js +20 -9
  62. package/es/event/event.js.map +1 -1
  63. package/es/header-helper/style.js +1 -2
  64. package/es/index.d.ts +1 -1
  65. package/es/index.js +1 -1
  66. package/es/index.js.map +1 -1
  67. package/es/layout/index.js +2 -1
  68. package/es/plugins/custom-cell-style.d.ts +5 -0
  69. package/es/plugins/custom-cell-style.js +9 -0
  70. package/es/plugins/custom-cell-style.js.map +1 -1
  71. package/es/plugins/index.js +1 -1
  72. package/es/ts-types/base-table.d.ts +2 -2
  73. package/es/ts-types/base-table.js.map +1 -1
  74. package/es/ts-types/events.d.ts +15 -0
  75. package/es/ts-types/events.js.map +1 -1
  76. package/es/ts-types/table-engine.d.ts +32 -6
  77. package/es/ts-types/table-engine.js.map +1 -1
  78. package/es/vrender.js.map +1 -1
  79. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ListTable.ts"],"names":[],"mappings":"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","file":"ListTable.js","sourcesContent":["import type {\n AggregationType,\n CellAddress,\n CellRange,\n ColumnsDefine,\n DropDownMenuEventInfo,\n FieldData,\n FieldDef,\n FieldFormat,\n FieldKeyDef,\n FilterRules,\n IPagination,\n ListTableAPI,\n ListTableConstructorOptions,\n MaybePromiseOrUndefined,\n SortOrder,\n SortState\n} from './ts-types';\nimport { HierarchyState } from './ts-types';\nimport { SimpleHeaderLayoutMap } from './layout';\nimport { isArray, isValid } from '@visactor/vutils';\nimport {\n _setDataSource,\n _setRecords,\n checkHasAggregationOnColumnDefine,\n generateAggregationForColumn\n} from './core/tableHelper';\nimport { BaseTable } from './core';\nimport type { BaseTableAPI, ListTableProtected } from './ts-types/base-table';\nimport { TABLE_EVENT_TYPE } from './core/TABLE_EVENT_TYPE';\nimport type { ITitleComponent } from './components/title/title';\nimport { Env } from './tools/env';\nimport * as editors from './edit/editors';\nimport { EditManager } from './edit/edit-manager';\nimport { computeColWidth } from './scenegraph/layout/compute-col-width';\nimport { computeRowHeight } from './scenegraph/layout/compute-row-height';\nimport { defaultOrderFn } from './tools/util';\nimport type { IEditor } from '@visactor/vtable-editors';\nimport type { ColumnData, ColumnDefine, HeaderData } from './ts-types/list-table/layout-map/api';\nimport { getCellRadioState, setCellRadioState } from './state/radio/radio';\nimport { cloneDeepSpec } from '@visactor/vutils-extension';\nimport { getGroupCheckboxState, setCellCheckboxState } from './state/checkbox/checkbox';\nimport type { IEmptyTipComponent } from './components/empty-tip/empty-tip';\nimport { Factory } from './core/factory';\nimport { getGroupByDataConfig } from './core/group-helper';\nimport { DataSource, type CachedDataSource } from './data';\nimport {\n listTableAddRecord,\n listTableAddRecords,\n listTableChangeCellValue,\n listTableChangeCellValues,\n listTableDeleteRecords,\n listTableUpdateRecords,\n sortRecords\n} from './core/record-helper';\nimport type { IListTreeStickCellPlugin, ListTreeStickCellPlugin } from './plugins/list-tree-stick-cell';\nimport { fixUpdateRowRange } from './tools/update-row';\nimport { clearChartRenderQueue } from './scenegraph/graphic/contributions/chart-render-helper';\nimport { getCustomMergeCellFunc } from './core/utils/get-custom-merge-cell-func';\nimport {\n adjustHeightResizedRowMap,\n adjustHeightResizedRowMapWithAddRecordIndex,\n adjustHeightResizedRowMapWithDeleteRecordIndex,\n adjustWidthResizedColMap\n} from './state/cell-move/adjust-header';\n// import {\n// registerAxis,\n// registerEmptyTip,\n// registerLegend,\n// registerMenu,\n// registerTitle,\n// registerTooltip\n// } from './components';\n// import {\n// registerChartCell,\n// registerCheckboxCell,\n// registerImageCell,\n// registerProgressBarCell,\n// registerRadioCell,\n// registerSparkLineCell,\n// registerTextCell,\n// registerVideoCell\n// } from './scenegraph/group-creater/cell-type';\n\n// registerAxis();\n// registerEmptyTip();\n// registerLegend();\n// registerMenu();\n// registerTitle();\n// registerTooltip();\n\n// registerChartCell();\n// registerCheckboxCell();\n// registerImageCell();\n// registerProgressBarCell();\n// registerRadioCell();\n// registerSparkLineCell();\n// registerTextCell();\n// registerVideoCell();\n\nexport class ListTable extends BaseTable implements ListTableAPI {\n declare internalProps: ListTableProtected;\n /**\n * 用户配置的options 只读 勿直接修改\n */\n declare options: ListTableConstructorOptions;\n showHeader = true;\n listTreeStickCellPlugin?: ListTreeStickCellPlugin;\n\n // eslint-disable-next-line default-param-last\n constructor(options: ListTableConstructorOptions);\n constructor(container: HTMLElement, options: ListTableConstructorOptions);\n constructor(container?: HTMLElement | ListTableConstructorOptions, options?: ListTableConstructorOptions) {\n super(container as HTMLElement, options);\n options = this.options;\n const internalProps = this.internalProps;\n internalProps.frozenColDragHeaderMode =\n options.dragOrder?.frozenColDragHeaderMode ?? options.frozenColDragHeaderMode;\n //分页配置\n this.pagination = options.pagination;\n internalProps.sortState = options.sortState;\n internalProps.multipleSort = !!options.multipleSort;\n internalProps.dataConfig = this.internalProps.groupBy\n ? getGroupByDataConfig(this.internalProps.groupBy, options.addRecordRule)\n : { addRecordRule: options.addRecordRule }; //cloneDeep(options.dataConfig ?? {});\n internalProps.columns = options.columns\n ? cloneDeepSpec(options.columns, ['children']) // children for react\n : options.header\n ? cloneDeepSpec(options.header, ['children'])\n : [];\n generateAggregationForColumn(this);\n // options.columns?.forEach((colDefine, index) => {\n // //如果editor 是一个IEditor的实例 需要这样重新赋值 否则clone后变质了\n // if (colDefine.editor) {\n // internalProps.columns[index].editor = colDefine.editor;\n // }\n // });\n\n internalProps.enableTreeNodeMerge =\n options.enableTreeNodeMerge ?? isValid((this.internalProps as ListTableProtected).groupBy) ?? false;\n\n this.internalProps.headerHelper.setTableColumnsEditor();\n this.showHeader = options.showHeader ?? true;\n\n this.internalProps.columnWidthConfig = options.columnWidthConfig;\n this.internalProps.rowHeightConfig = options.rowHeightConfig;\n\n this.transpose = options.transpose ?? false;\n if (Env.mode !== 'node') {\n this.editorManager = new EditManager(this);\n }\n this.refreshHeader();\n this.internalProps.useOneRowHeightFillAll = false;\n\n if (options.dataSource) {\n // _setDataSource(this, options.dataSource)\n this.dataSource = options.dataSource;\n } else if (options.records) {\n this.setRecords(options.records as any, { sortState: internalProps.sortState });\n } else {\n this.setRecords([]);\n }\n if (options.title) {\n const Title = Factory.getComponent('title') as ITitleComponent;\n internalProps.title = new Title(options.title, this);\n // this.scenegraph.resize();//下面有个resize了 所以这个可以去掉\n }\n if (this.options.emptyTip) {\n if (this.internalProps.emptyTip) {\n this.internalProps.emptyTip?.resetVisible();\n } else {\n const EmptyTip = Factory.getComponent('emptyTip') as IEmptyTipComponent;\n this.internalProps.emptyTip = new EmptyTip(this.options.emptyTip, this);\n this.internalProps.emptyTip?.resetVisible();\n }\n }\n\n if ((this.internalProps as ListTableProtected).enableTreeStickCell) {\n const ListTreeStickCellPlugin = Factory.getComponent('listTreeStickCellPlugin') as IListTreeStickCellPlugin;\n this.listTreeStickCellPlugin = new ListTreeStickCellPlugin(this);\n }\n //为了确保用户监听得到这个事件 这里做了异步 确保vtable实例已经初始化完成\n setTimeout(() => {\n if (this.isReleased) {\n return;\n }\n this.resize();\n this.fireListeners(TABLE_EVENT_TYPE.INITIALIZED, null);\n }, 0);\n }\n isListTable(): true {\n return true;\n }\n isPivotTable(): false {\n return false;\n }\n isPivotChart(): false {\n return false;\n }\n /**\n * Get the sort state.\n */\n get sortState(): SortState | SortState[] {\n return this.internalProps.sortState;\n }\n\n get records() {\n return this.dataSource?.records;\n }\n\n get recordsCount() {\n return this.dataSource.records.length;\n }\n\n // /**\n // * Gets the define of the header.\n // */\n // get columns(): ColumnsDefine {\n // return this.internalProps.columns;\n // }\n // /**\n // * Sets the define of the column.\n // */\n // set columns(columns: ColumnsDefine) {\n // this.internalProps.columns = columns;\n // this.options.columns = columns;\n // }\n /**\n * Sets the define of the column.\n */\n updateColumns(\n columns: ColumnsDefine,\n options: { clearColWidthCache?: boolean; clearRowHeightCache?: boolean } = {\n clearColWidthCache: false,\n clearRowHeightCache: true\n }\n ) {\n this.scenegraph.clearCells(); //将该代码提前 逻辑中有设置this.clear=true。refreshHeader逻辑中有判断clear这个值的地方\n const oldHoverState = { col: this.stateManager.hover.cellPos.col, row: this.stateManager.hover.cellPos.row };\n this.internalProps.columns = cloneDeepSpec(columns, ['children']);\n generateAggregationForColumn(this);\n // columns.forEach((colDefine, index) => {\n // if (colDefine.editor) {\n // this.internalProps.columns[index].editor = colDefine.editor;\n // }\n // });\n if (options?.clearColWidthCache) {\n this.internalProps._widthResizedColMap.clear();\n }\n this.options.columns = columns;\n this.internalProps.headerHelper.setTableColumnsEditor();\n this._hasAutoImageColumn = undefined;\n this.refreshHeader();\n this.dataSource.updateColumns?.(this.internalProps.columns);\n if (this.records && checkHasAggregationOnColumnDefine(this.internalProps.columns)) {\n this.dataSource.processRecords(this.dataSource.dataSourceObj?.records ?? this.dataSource.dataSourceObj);\n }\n this.internalProps.useOneRowHeightFillAll = false;\n\n this.headerStyleCache = new Map();\n this.bodyStyleCache = new Map();\n this.bodyBottomStyleCache = new Map();\n this.scenegraph.createSceneGraph(!!!options?.clearRowHeightCache);\n this.stateManager.updateHoverPos(oldHoverState.col, oldHoverState.row);\n this.renderAsync();\n this.eventManager.updateEventBinder();\n }\n\n /**\n * 作为 `updateColumns` 的轻量级替代方案,用于仅需重新创建场景图而无需重新定义列的场景,\n * 例如展开/折叠树形节点。此方法避免了 `updateColumns` 中开销较大的 `cloneDeepSpec` 深拷贝操作。\n *\n * 注意:此方法与 `updateColumns` 共享部分逻辑。如果将来修改了 `updateColumns`,\n * 请务必检查此方法,以确保逻辑一致性,防止出现“逻辑漂移”。\n */\n private _recreateSceneForStateChange(): void {\n this.scenegraph.clearCells();\n const oldHoverState = { col: this.stateManager.hover.cellPos.col, row: this.stateManager.hover.cellPos.row };\n\n this._hasAutoImageColumn = undefined;\n this.refreshHeader();\n if (this.records && checkHasAggregationOnColumnDefine(this.internalProps.columns)) {\n this.dataSource.processRecords(this.dataSource.dataSourceObj?.records ?? this.dataSource.dataSourceObj);\n }\n this.internalProps.useOneRowHeightFillAll = false;\n\n this.headerStyleCache = new Map();\n this.bodyStyleCache = new Map();\n this.bodyBottomStyleCache = new Map();\n this._updateSize();\n this.scenegraph.createSceneGraph();\n this.stateManager.updateHoverPos(oldHoverState.col, oldHoverState.row);\n this.renderAsync();\n this.eventManager.updateEventBinder();\n }\n /**\n * 添加列 TODO: 需要优化 这个方法目前直接调用了updateColumns 可以避免调用 做优化性能\n * @param column\n */\n addColumns(toAddColumns: ColumnDefine[], colIndex?: number, isMaintainArrayData: boolean = true) {\n const columns = this.options.columns;\n if (colIndex === undefined) {\n colIndex = columns.length;\n columns.push(...toAddColumns);\n } else {\n columns.splice(colIndex, 0, ...toAddColumns);\n }\n for (let i = 0; i < toAddColumns.length; i++) {\n this.colWidthsMap.addAndReorder(colIndex + i, toAddColumns[i].width ?? this.internalProps.defaultColWidth);\n }\n //#region 修正colWidthsMap中的列宽缓存\n this.internalProps._colRangeWidthsMap.clear();\n //_widthResizedColMap修养修正,里面的列号需要修正,保证删除某些列后 其他列号做对应调整\n const resizedColIndexs = Array.from(this.internalProps._widthResizedColMap.keys());\n for (let i = 0; i < resizedColIndexs.length; i++) {\n if ((resizedColIndexs[i] as number) >= (colIndex as number)) {\n this.internalProps._widthResizedColMap.delete(resizedColIndexs[i] as number);\n this.internalProps._widthResizedColMap.add((resizedColIndexs[i] as number) + toAddColumns.length);\n }\n }\n //#endregion\n\n if (isMaintainArrayData) {\n //重新整理column中的field值\n for (let i = 0; i < columns.length; i++) {\n columns[i].field = i;\n }\n\n //如果isMaintainArrayData为true 则需要维护其中是数组类型的数据\n for (let i = 0; i < this.records.length; i++) {\n const record = this.records[i];\n if (Array.isArray(record)) {\n record.splice(colIndex, 0, ...Array(toAddColumns.length).fill(undefined));\n }\n }\n }\n this.updateColumns(columns, { clearRowHeightCache: false });\n this.fireListeners(TABLE_EVENT_TYPE.ADD_COLUMN, {\n columnIndex: colIndex,\n columnCount: toAddColumns.length,\n columns\n });\n }\n /**\n * 删除列 TODO: 需要优化 这个方法目前直接调用了updateColumns 可以避免调用 做优化性能\n * @param colIndex\n */\n deleteColumns(deleteColIndexs: number[], isMaintainArrayData: boolean = true) {\n const columns = this.options.columns;\n deleteColIndexs.sort((a, b) => b - a);\n for (let i = 0; i < deleteColIndexs.length; i++) {\n columns.splice(deleteColIndexs[i], 1);\n //#region 修正colWidthsMap中的列宽缓存\n this.colWidthsMap.delAndReorder(deleteColIndexs[i]);\n this.internalProps._widthResizedColMap.delete(deleteColIndexs[i]);\n //#endregion\n if (isMaintainArrayData) {\n //如果isMaintainArrayData为true 则需要维护其中是数组类型的数据\n for (let j = 0; j < this.records.length; j++) {\n const record = this.records[j];\n if (Array.isArray(record)) {\n record.splice(deleteColIndexs[i], 1);\n }\n }\n }\n }\n //#region 修正colWidthsMap中的列宽缓存\n this.internalProps._colRangeWidthsMap.clear();\n //_widthResizedColMap修养修正,里面的列号需要修正,保证删除某些列后 其他列号做对应调整\n const resizedColIndexs = Array.from(this.internalProps._widthResizedColMap.keys());\n for (let i = 0; i < resizedColIndexs.length; i++) {\n for (let j = 0; j < deleteColIndexs.length; j++) {\n if ((resizedColIndexs[i] as number) > (deleteColIndexs[j] as number)) {\n this.internalProps._widthResizedColMap.delete(resizedColIndexs[i] as number);\n this.internalProps._widthResizedColMap.add((resizedColIndexs[i] as number) - (deleteColIndexs.length - j));\n break;\n }\n }\n }\n //#endregion\n if (isMaintainArrayData) {\n //重新整理column中的field值\n for (let i = 0; i < columns.length; i++) {\n columns[i].field = i;\n }\n }\n this.updateColumns(columns, { clearRowHeightCache: false });\n this.fireListeners(TABLE_EVENT_TYPE.DELETE_COLUMN, {\n deleteColIndexs: deleteColIndexs,\n columns\n });\n }\n\n get columns(): ColumnsDefine {\n // return this.internalProps.columns;\n return this.internalProps.layoutMap.columnTree.getCopiedTree(); //调整顺序后的columns\n }\n /**\n *@deprecated 请使用columns\n */\n get header(): ColumnsDefine {\n return this.internalProps.columns;\n }\n /**\n * @deprecated 请使用columns\n */\n set header(header: ColumnsDefine) {\n this.internalProps.columns = header;\n generateAggregationForColumn(this);\n this.options.header = header;\n this.refreshHeader();\n this.internalProps.useOneRowHeightFillAll = false;\n //需要异步等待其他事情都完成后再绘制\n this.renderAsync();\n }\n /**\n * Get the transpose.\n */\n get transpose(): boolean {\n return this.internalProps.transpose ?? false;\n }\n /**\n * Set the transpose from given\n */\n set transpose(transpose: boolean) {\n if (this.internalProps.transpose === transpose) {\n return;\n }\n this.internalProps.transpose = transpose;\n // this.options.transpose = transpose; // cause extr update in react\n if (this.internalProps.layoutMap) {\n //后面如果修改是否转置\n this.internalProps.layoutMap.transpose = transpose;\n this.refreshRowColCount();\n\n // 转置后为行布局,列宽只支持依据该列所有内容自适应宽度\n this._resetFrozenColCount();\n this.renderAsync();\n }\n }\n /** 获取单元格展示值 */\n getCellValue(col: number, row: number, skipCustomMerge?: boolean): FieldData {\n if (col === -1 || row === -1) {\n return null;\n }\n if (!skipCustomMerge) {\n const customMergeText = this.getCustomMergeValue(col, row);\n if (customMergeText) {\n return customMergeText;\n }\n }\n const table = this;\n if (table.internalProps.layoutMap.isSeriesNumber(col, row)) {\n if (table.internalProps.layoutMap.isSeriesNumberInHeader(col, row)) {\n const { title } = table.internalProps.layoutMap.getSeriesNumberHeader(col, row);\n return title;\n }\n let value;\n if ((this.internalProps as ListTableProtected).groupBy) {\n const record = table.getCellRawRecord(col, row);\n if (record?.vtableMerge) {\n return '';\n }\n if (!table.internalProps.layoutMap.isAggregation(col, row)) {\n value = (this.dataSource as CachedDataSource).getGroupSeriesNumber(row - this.columnHeaderLevelCount);\n }\n // const indexs = this.dataSource.currentIndexedData[row - this.columnHeaderLevelCount] as number[];\n // value = indexs[indexs.length - 1] + 1;\n } else {\n const define = table.getBodyColumnDefine(col, row);\n const checkboxSeriesNumberStyle = (table as ListTable).getFieldData(define.field, col, row);\n if (['number', 'string'].includes(typeof checkboxSeriesNumberStyle)) {\n value = checkboxSeriesNumberStyle;\n } else if (checkboxSeriesNumberStyle?.text) {\n value = checkboxSeriesNumberStyle.text ?? '';\n } else {\n value = row - this.columnHeaderLevelCount + 1;\n }\n }\n const { format } = table.internalProps.layoutMap.getSeriesNumberBody(col, row);\n return typeof format === 'function' ? format(col, row, this, value) : value;\n } else if (table.internalProps.layoutMap.isHeader(col, row)) {\n const { title } = table.internalProps.layoutMap.getHeader(col, row);\n return typeof title === 'function' ? title() : title;\n } else if (table.internalProps.layoutMap.isAggregation(col, row)) {\n if (table.internalProps.layoutMap.isTopAggregation(col, row)) {\n const aggregator = table.internalProps.layoutMap.getAggregatorOnTop(col, row);\n return aggregator?.formatValue ? aggregator.formatValue(col, row, this as BaseTableAPI) : '';\n } else if (table.internalProps.layoutMap.isBottomAggregation(col, row)) {\n const aggregator = table.internalProps.layoutMap.getAggregatorOnBottom(col, row);\n return aggregator?.formatValue ? aggregator.formatValue(col, row, this as BaseTableAPI) : '';\n }\n }\n const { field, fieldFormat } = table.internalProps.layoutMap.getBody(col, row) as ColumnData;\n return table.getFieldData(fieldFormat || field, col, row);\n }\n /** 获取单元格展示数据的format前的值 */\n getCellOriginValue(col: number, row: number): FieldData {\n if (col === -1 || row === -1) {\n return null;\n }\n const table = this;\n if (table.internalProps.layoutMap.isSeriesNumber(col, row)) {\n if (table.internalProps.layoutMap.isSeriesNumberInHeader(col, row)) {\n const { title } = table.internalProps.layoutMap.getSeriesNumberHeader(col, row);\n return title;\n }\n const { format } = table.internalProps.layoutMap.getSeriesNumberBody(col, row);\n return typeof format === 'function' ? format(col, row, this) : row - this.columnHeaderLevelCount;\n } else if (table.internalProps.layoutMap.isHeader(col, row)) {\n const { title } = table.internalProps.layoutMap.getHeader(col, row);\n return typeof title === 'function' ? title() : title;\n } else if (table.internalProps.layoutMap.isAggregation(col, row)) {\n if (table.internalProps.layoutMap.isTopAggregation(col, row)) {\n const aggregator = table.internalProps.layoutMap.getAggregatorOnTop(col, row);\n return aggregator?.value();\n } else if (table.internalProps.layoutMap.isBottomAggregation(col, row)) {\n const aggregator = table.internalProps.layoutMap.getAggregatorOnBottom(col, row);\n return aggregator?.value();\n }\n }\n const { field } = table.internalProps.layoutMap.getBody(col, row);\n return table.getFieldData(field, col, row);\n }\n /** 获取单元格展示数据源最原始值 */\n getCellRawValue(col: number, row: number): FieldData {\n if (col === -1 || row === -1) {\n return null;\n }\n const table = this;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n const { title } = table.internalProps.layoutMap.getHeader(col, row);\n return typeof title === 'function' ? title() : title;\n }\n const { field } = table.internalProps.layoutMap.getBody(col, row);\n return table.getRawFieldData(field, col, row);\n }\n /** 获取当前单元格在body部分的展示索引 即(row / col)-headerLevelCount。注:ListTable特有接口 */\n getRecordShowIndexByCell(col: number, row: number): number {\n const { layoutMap } = this.internalProps;\n return layoutMap.getRecordShowIndexByCell(col, row);\n }\n\n /** 获取当前单元格的数据是数据源中的第几条。\n * 如果是树形模式的表格,将返回数组,如[1,2] 数据源中第2条数据中children中的第3条\n * 注:ListTable特有接口 */\n getRecordIndexByCell(col: number, row: number): number | number[] {\n const { layoutMap } = this.internalProps;\n const recordShowIndex = layoutMap.getRecordShowIndexByCell(col, row);\n return this.dataSource.getRecordIndexPaths(recordShowIndex);\n }\n\n getTableIndexByRecordIndex(recordIndex: number | number[]) {\n if (this.transpose) {\n return this.dataSource.getTableIndex(recordIndex) + this.rowHeaderLevelCount;\n }\n return this.dataSource.getTableIndex(recordIndex) + this.columnHeaderLevelCount;\n }\n getTableIndexByField(field: FieldDef) {\n const colObj = this.internalProps.layoutMap.columnObjects.find((col: any) => col.field === field);\n if (!colObj) {\n return -1;\n }\n const layoutRange = this.internalProps.layoutMap.getBodyLayoutRangeById(colObj.id);\n if (this.transpose) {\n return layoutRange.start.row;\n }\n return layoutRange.start.col;\n }\n /**\n * 根据数据源中的index和field获取单元格行列号\n * @param field\n * @param recordIndex\n * @returns\n */\n getCellAddrByFieldRecord(field: FieldDef, recordIndex: number): CellAddress {\n if (this.transpose) {\n return { col: this.getTableIndexByRecordIndex(recordIndex), row: this.getTableIndexByField(field) };\n }\n return { col: this.getTableIndexByField(field), row: this.getTableIndexByRecordIndex(recordIndex) };\n }\n /**\n *\n * @param field 获取整体数据记录。可编辑单元格的话 对应编辑后format前\n * @param col\n * @param row\n */\n getCellOriginRecord(col: number, row: number): MaybePromiseOrUndefined {\n const table = this;\n const index = table.getRecordShowIndexByCell(col, row);\n if (index > -1) {\n return table.dataSource.get(index);\n }\n return undefined;\n }\n /**\n *\n * @param field 获取整体数据记录。可编辑的话 对应编辑前\n * @param col\n * @param row\n */\n getCellRawRecord(col: number, row: number): MaybePromiseOrUndefined {\n const table = this;\n const index = table.getRecordShowIndexByCell(col, row);\n if (index > -1) {\n return table.dataSource.getRaw(index);\n }\n return undefined;\n }\n /**\n * 该列是否可调整列宽\n * @param col\n * @returns\n */\n _canResizeColumn(col: number, row: number): boolean {\n const ifCan = super._canResizeColumn(col, row);\n if (ifCan) {\n if (!this.transpose) {\n // 列上是否配置了禁止拖拽列宽的配置项disableColumnResize\n const cellDefine = this.internalProps.layoutMap.getBody(col, this.columnHeaderLevelCount);\n const isSeriesNumber = this.internalProps.layoutMap.isSeriesNumber(col, row);\n if ((cellDefine as ColumnData)?.disableColumnResize) {\n return false;\n } else if (isSeriesNumber && this.internalProps.rowSeriesNumber.disableColumnResize === true) {\n return false;\n }\n }\n }\n return ifCan;\n }\n updateOption(\n options: ListTableConstructorOptions,\n updateConfig: { clearColWidthCache?: boolean; clearRowHeightCache?: boolean } = {\n clearColWidthCache: true,\n clearRowHeightCache: true\n }\n ) {\n const internalProps = this.internalProps;\n\n this.pluginManager.removeOrAddPlugins(options.plugins);\n super.updateOption(options, updateConfig);\n internalProps.frozenColDragHeaderMode =\n options.dragOrder?.frozenColDragHeaderMode ?? options.frozenColDragHeaderMode;\n //分页配置\n this.pagination = options.pagination;\n internalProps.sortState = options.sortState;\n // internalProps.dataConfig = {}; // cloneDeep(options.dataConfig ?? {});\n internalProps.dataConfig = (this.internalProps as ListTableProtected).groupBy\n ? getGroupByDataConfig((this.internalProps as ListTableProtected).groupBy, options.addRecordRule)\n : { addRecordRule: options.addRecordRule }; //cloneDeep(options.dataConfig ?? {});\n //更新protectedSpace\n this.showHeader = options.showHeader ?? true;\n internalProps.columns = options.columns\n ? cloneDeepSpec(options.columns, ['children'])\n : options.header\n ? cloneDeepSpec(options.header, ['children'])\n : [];\n generateAggregationForColumn(this);\n // options.columns.forEach((colDefine, index) => {\n // if (colDefine.editor) {\n // internalProps.columns[index].editor = colDefine.editor;\n // }\n // });\n internalProps.enableTreeNodeMerge =\n options.enableTreeNodeMerge ?? isValid((this.internalProps as ListTableProtected).groupBy) ?? false;\n\n this.internalProps.headerHelper.setTableColumnsEditor();\n // 处理转置\n this.transpose = options.transpose ?? false;\n // 更新表头\n this.refreshHeader();\n this.internalProps.useOneRowHeightFillAll = false;\n\n this.internalProps.columnWidthConfig = options.columnWidthConfig;\n this.internalProps.rowHeightConfig = options.rowHeightConfig;\n\n // this.hasMedia = null; // 避免重复绑定\n // 清空目前数据\n if (internalProps.releaseList) {\n for (let i = internalProps.releaseList.length - 1; i >= 0; i--) {\n const releaseObj = internalProps.releaseList[i];\n if (releaseObj instanceof DataSource) {\n releaseObj.updateColumns(this.internalProps.columns);\n } else {\n releaseObj?.release?.();\n internalProps.releaseList.splice(i, 1);\n }\n }\n }\n // // 恢复selection状态\n // internalProps.selection.range = range;\n // this._updateSize();\n // 传入新数据\n if (options.dataSource && this.dataSource !== options.dataSource) {\n // _setDataSource(this, options.dataSource);\n this.dataSource = options.dataSource;\n } else if (options.records) {\n this.setRecords(options.records as any, {\n sortState: options.sortState\n });\n } else {\n this.refreshRowColCount();\n this._resetFrozenColCount();\n // 生成单元格场景树\n this.scenegraph.createSceneGraph();\n this.render();\n }\n if (options.title) {\n const Title = Factory.getComponent('title') as ITitleComponent;\n internalProps.title = new Title(options.title, this);\n this.scenegraph.resize();\n }\n if (this.options.emptyTip) {\n if (this.internalProps.emptyTip) {\n this.internalProps.emptyTip?.resetVisible();\n } else {\n const EmptyTip = Factory.getComponent('emptyTip') as IEmptyTipComponent;\n this.internalProps.emptyTip = new EmptyTip(this.options.emptyTip, this);\n this.internalProps.emptyTip?.resetVisible();\n }\n }\n this.pluginManager.updatePlugins(options.plugins);\n setTimeout(() => {\n this.fireListeners(TABLE_EVENT_TYPE.UPDATED, null);\n }, 0);\n return new Promise(resolve => {\n setTimeout(resolve, 0);\n });\n }\n /**\n * 更新页码\n * @param pagination 修改页码\n */\n updatePagination(pagination: IPagination): void {\n if (this.pagination) {\n typeof pagination.currentPage === 'number' &&\n pagination.currentPage >= 0 &&\n (this.pagination.currentPage = pagination.currentPage);\n pagination.perPageCount &&\n (this.pagination.perPageCount = pagination.perPageCount || this.pagination.perPageCount);\n this.internalProps.layoutMap.clearCellRangeMap();\n this.internalProps.useOneRowHeightFillAll = false;\n // 清空单元格内容\n this.scenegraph.clearCells();\n //数据源缓存数据更新\n this.dataSource.updatePagination(this.pagination);\n this.refreshRowColCount();\n this.stateManager.initCheckedState(this.records);\n // 生成单元格场景树\n this.scenegraph.createSceneGraph();\n this.renderAsync();\n }\n }\n /** @private */\n refreshHeader(): void {\n const table = this;\n const internalProps = table.internalProps;\n const transpose = table.transpose;\n const showHeader = table.showHeader;\n const layoutMap = (internalProps.layoutMap = new SimpleHeaderLayoutMap(\n this,\n internalProps.columns ?? [],\n showHeader,\n table.options.hierarchyIndent\n ));\n\n layoutMap.transpose = transpose;\n\n if (!transpose) {\n //设置列宽 这里需要优化,考虑转置表格的情况 transpose,转置表格不需要设置colWidth TODO\n this.setMinMaxLimitWidth(true);\n }\n //刷新表头,原来这里是_refreshRowCount 后改名为_refreshRowColCount 因为表头定义会影响行数,而转置模式下会影响列数\n this.refreshRowColCount();\n }\n\n refreshRowColCount(): void {\n const table = this;\n const { layoutMap } = table.internalProps;\n if (!layoutMap) {\n return;\n }\n\n const dataCount = table.internalProps.dataSource?.length ?? 0;\n layoutMap.recordsCount =\n dataCount +\n (dataCount > 0 || !!this.options.showAggregationWhenEmpty\n ? layoutMap.hasAggregationOnTopCount + layoutMap.hasAggregationOnBottomCount\n : 0);\n\n if (table.transpose) {\n table.rowCount = layoutMap.rowCount ?? 0;\n table.colCount = layoutMap.colCount ?? 0;\n // table.frozenRowCount = 0;\n // table.frozenColCount = layoutMap.headerLevelCount; //这里不要这样写 这个setter会检查扁头宽度 可能将frozenColCount置为0\n this.internalProps.frozenColCount = Math.max(\n (layoutMap.headerLevelCount ?? 0) + layoutMap.leftRowSeriesNumberColumnCount,\n this.options.frozenColCount ?? 0\n );\n this.internalProps.frozenRowCount = this.options.frozenRowCount ?? 0;\n if (table.bottomFrozenRowCount !== (this.options.bottomFrozenRowCount ?? 0)) {\n table.bottomFrozenRowCount = this.options.bottomFrozenRowCount ?? 0;\n }\n if (table.rightFrozenColCount !== (this.options.rightFrozenColCount ?? 0)) {\n table.rightFrozenColCount = this.options.rightFrozenColCount ?? 0;\n }\n } else {\n table.colCount = layoutMap.colCount ?? 0;\n table.rowCount = layoutMap.recordsCount * layoutMap.bodyRowSpanCount + layoutMap.headerLevelCount;\n // table.frozenColCount = table.options.frozenColCount ?? 0; //这里不要这样写 这个setter会检查扁头宽度 可能将frozenColCount置为0\n this.internalProps.frozenColCount = this.options.frozenColCount ?? 0;\n // 当冻结列数大于等于列数时,则冻结列数置为0,可以查看demo中的list-groupBy.ts来调试这个问题\n if (this.options.frozenColCount >= this.colCount) {\n this.internalProps.frozenColCount = 0;\n }\n // 不能使用frozenRowCount setter 因为会把options.frozenRowCount赋值\n table._setFrozenRowCount(Math.max(layoutMap.headerLevelCount, this.options.frozenRowCount ?? 0));\n\n if (table.bottomFrozenRowCount !== (this.options.bottomFrozenRowCount ?? 0)) {\n table.bottomFrozenRowCount = this.options.bottomFrozenRowCount ?? 0;\n }\n if (table.rightFrozenColCount !== (this.options.rightFrozenColCount ?? 0)) {\n table.rightFrozenColCount = this.options.rightFrozenColCount ?? 0;\n }\n }\n this.stateManager.setFrozenCol(this.internalProps.frozenColCount);\n // this.scenegraph.proxy?.refreshRowColCount();\n }\n /**\n * 获取records数据源中 字段对应的value 值是format之后的\n * @param field\n * @param col\n * @param row\n * @returns\n */\n getFieldData(field: FieldDef | FieldFormat | undefined, col: number, row: number): FieldData {\n if (field === null) {\n return null;\n }\n const table = this;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n return null;\n }\n const index = table.getRecordShowIndexByCell(\n table.transpose ? col - table.internalProps.layoutMap.leftRowSeriesNumberColumnCount : col,\n row\n );\n return table.internalProps.dataSource.getField(index, field, col, row, this);\n }\n /**\n * 获取records数据源中 字段对应的value 值是数据源中原始值\n * @param field\n * @param col\n * @param row\n * @returns\n */\n getRawFieldData(field: FieldDef | FieldFormat | undefined, col: number, row: number): FieldData {\n if (field === null) {\n return null;\n }\n const table = this;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n return null;\n }\n const index = table.getRecordShowIndexByCell(col, row);\n return table.internalProps.dataSource.getRawField(index, field, col, row, this);\n }\n /**\n * 拖拽移动表头位置\n * @param source 移动源位置\n * @param target 移动目标位置\n */\n _moveHeaderPosition(source: CellAddress, target: CellAddress) {\n const sourceCellRange = this.getCellRange(source.col, source.row);\n const targetCellRange = this.getCellRange(target.col, target.row);\n // 调用布局类 布局数据结构调整为移动位置后的\n const moveContext = this.internalProps.layoutMap.moveHeaderPosition(source, target);\n if (moveContext) {\n if (moveContext.moveType === 'column') {\n //colWidthsMap 中存储着每列的宽度 根据移动 sourceCol targetCol 调整其中的位置\n // this.colWidthsMap.adjustOrder(moveContext.sourceIndex, moveContext.targetIndex, moveContext.sourceSize);\n this.colWidthsMap.exchangeOrder(\n sourceCellRange.start.col,\n sourceCellRange.end.col - sourceCellRange.start.col + 1,\n targetCellRange.start.col,\n targetCellRange.end.col - targetCellRange.start.col + 1,\n moveContext.targetIndex\n );\n adjustWidthResizedColMap(moveContext, this);\n\n if (!this.transpose) {\n //下面代码取自refreshHeader列宽设置逻辑\n //设置列宽极限值 TODO 目前是有问题的 最大最小宽度限制 移动列位置后不正确\n this.colWidthsLimit = {}; //需要先清空\n this.setMinMaxLimitWidth();\n }\n // // 清空相关缓存\n // const colStart = Math.min(moveContext.sourceIndex, moveContext.targetIndex);\n // const colEnd = Math.max(moveContext.sourceIndex, moveContext.targetIndex);\n // for (let col = colStart; col <= colEnd; col++) {\n // this._clearColRangeWidthsMap(col);\n // }\n } else {\n // // 清空相关缓存\n // const rowStart = Math.min(moveContext.sourceIndex, moveContext.targetIndex);\n // const rowEnd = Math.max(moveContext.sourceIndex, moveContext.targetIndex);\n // for (let row = rowStart; row <= rowEnd; row++) {\n // this._clearRowRangeHeightsMap(row);\n // }\n //colWidthsMap 中存储着每列的宽度 根据移动 sourceCol targetCol 调整其中的位置\n // this.rowHeightsMap.adjustOrder(moveContext.sourceIndex, moveContext.targetIndex, moveContext.moveSize);\n if (moveContext.targetIndex > moveContext.sourceIndex) {\n this.rowHeightsMap.exchangeOrder(\n moveContext.sourceIndex,\n moveContext.sourceSize,\n moveContext.targetIndex + moveContext.sourceSize - moveContext.targetSize,\n moveContext.targetSize,\n moveContext.targetIndex\n );\n } else {\n this.rowHeightsMap.exchangeOrder(\n moveContext.sourceIndex,\n moveContext.sourceSize,\n moveContext.targetIndex,\n moveContext.targetSize,\n moveContext.targetIndex\n );\n }\n adjustHeightResizedRowMap(moveContext, this);\n }\n return moveContext;\n }\n return null;\n }\n changeRecordOrder(sourceIndex: number, targetIndex: number) {\n if (this.transpose) {\n sourceIndex = this.getRecordShowIndexByCell(sourceIndex, 0);\n targetIndex = this.getRecordShowIndexByCell(targetIndex, 0);\n } else {\n sourceIndex = this.getRecordShowIndexByCell(0, sourceIndex);\n targetIndex = this.getRecordShowIndexByCell(0, targetIndex);\n }\n this.dataSource.changeOrder(sourceIndex, targetIndex);\n }\n /**\n * 方法适用于获取body中某条数据的行列号\n * @param findTargetRecord 通过数据对象或者指定函数来计算数据条目index\n * @param field\n * @returns\n */\n getCellAddress(findTargetRecord: any | ((record: any) => boolean), field: FieldDef): CellAddress {\n let targetRecordIndex: number;\n\n for (let i = 0; i < this.internalProps.records.length; i++) {\n const record = this.internalProps.records[i];\n if (typeof findTargetRecord === 'function') {\n if ((<Function>findTargetRecord)(record)) {\n targetRecordIndex = i;\n }\n } else {\n let isAllRight = true;\n for (const prop in findTargetRecord) {\n if (record[prop] !== findTargetRecord[prop]) {\n isAllRight = false;\n break;\n }\n }\n if (isAllRight) {\n targetRecordIndex = i;\n }\n }\n if (isValid(targetRecordIndex)) {\n break;\n }\n }\n const cellRange = this.getCellRangeByField(field, targetRecordIndex);\n if (cellRange) {\n return { row: cellRange.start.row, col: cellRange.start.col };\n }\n return undefined;\n }\n /**\n * 获取指定field及指定数据条index的单元格位置\n * @param {*} field\n * @param {number} index 要获取的第几条数据\n * @return {number} 返回单元格的坐标范围 TODO 转置表有问题bug\n */\n getCellRangeByField(field: FieldDef, index: number): CellRange | null {\n const { layoutMap } = this.internalProps;\n const colObj = layoutMap.columnObjects.find((col: any) => col.field === field);\n if (colObj) {\n const layoutRange = layoutMap.getBodyLayoutRangeById(colObj.id);\n let startRow;\n if (isValid(index)) {\n startRow = layoutMap.getRecordStartRowByRecordIndex(index);\n }\n if (this.transpose) {\n return {\n start: {\n row: layoutRange.start.row,\n col: isValid(startRow) ? startRow + layoutRange.start.col : undefined\n },\n end: {\n row: layoutRange.end.row,\n col: isValid(startRow) ? startRow + layoutRange.end.col : undefined\n }\n };\n }\n return {\n start: {\n col: layoutRange.start.col,\n row: isValid(startRow) ? startRow + layoutRange.start.row : undefined // layoutRange.start.row这里是0 所以无意义\n },\n end: {\n col: layoutRange.end.col,\n row: isValid(startRow) ? startRow + layoutRange.end.row : undefined // layoutRange.start.row这里是0 所以无意义\n }\n };\n }\n return null;\n }\n /**\n * 获取层级节点收起展开的状态\n * @param col\n * @param row\n * @returns\n */\n getHierarchyState(col: number, row: number) {\n if (this.isHeader(col, row)) {\n return (this._getHeaderLayoutMap(col, row) as HeaderData)?.hierarchyState;\n }\n if (\n !(this.internalProps as ListTableProtected).groupBy ||\n (isArray((this.internalProps as ListTableProtected).groupBy) &&\n ((this.internalProps as ListTableProtected).groupBy as string[]).length === 0)\n ) {\n const define = this.getBodyColumnDefine(col, row) as ColumnDefine;\n if (!define.tree) {\n return HierarchyState.none;\n }\n }\n const index = this.getRecordShowIndexByCell(col, row);\n return this.dataSource.getHierarchyState(index);\n }\n /**\n * 获取单元格所在数据源的层级节点收起展开的状态\n * @param col\n * @param row\n * @returns\n */\n getRecordHierarchyState(col: number, row: number) {\n let recordIndex;\n if (this.transpose) {\n this.getRecordShowIndexByCell(col, 0);\n } else {\n recordIndex = this.getRecordShowIndexByCell(0, row);\n }\n return this.dataSource.getHierarchyState(recordIndex);\n }\n /**\n * 表头切换层级状态\n * @param col\n * @param row\n * @param recalculateColWidths 是否重新计算列宽 默认为true.(设置width:auto或者 autoWidth 情况下才有必要考虑该参数)\n */\n toggleHierarchyState(col: number, row: number, recalculateColWidths: boolean = true) {\n this.stateManager.updateHoverIcon(col, row, undefined, undefined);\n const hierarchyState = this.getHierarchyState(col, row);\n if (this.isHeader(col, row)) {\n // 表头的展开和收起\n const headerTreeNode = this.internalProps.layoutMap.getHeader(col, row) as any;\n const { hierarchyState: rawHierarchyState, define: columnDefine } = headerTreeNode;\n if (![HierarchyState.collapse, HierarchyState.expand].includes(rawHierarchyState) || !columnDefine) {\n return;\n }\n const children = columnDefine.columns;\n // 有子节点才需要自动展开和折叠\n if (!!Array.isArray(children) && children.length > 0) {\n const hierarchyState =\n rawHierarchyState === HierarchyState.expand ? HierarchyState.collapse : HierarchyState.expand;\n headerTreeNode.hierarchyState = hierarchyState;\n headerTreeNode.define.hierarchyState = hierarchyState;\n // 全量更新\n this.updateColumns(this.internalProps.columns);\n }\n\n this.fireListeners(TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE, {\n col,\n row,\n hierarchyState,\n originData: headerTreeNode,\n cellLocation: this.getCellLocation(col, row)\n });\n return;\n }\n\n if (hierarchyState === HierarchyState.expand) {\n this._refreshHierarchyState(col, row, recalculateColWidths);\n this.fireListeners(TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE, {\n col: col,\n row: row,\n hierarchyState: HierarchyState.collapse\n });\n } else if (hierarchyState === HierarchyState.collapse) {\n const record = this.getCellOriginRecord(col, row);\n if (Array.isArray(record.children)) {\n //children 是数组 表示已经有子树节点信息\n this._refreshHierarchyState(col, row, recalculateColWidths);\n }\n this.fireListeners(TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE, {\n col: col,\n row: row,\n hierarchyState: HierarchyState.expand,\n originData: record\n });\n }\n }\n /**\n * 开启层级节点展开的loading动画状态,在设置数据调用setRecordChildren后会自动关闭loading\n * @param col\n * @param row\n */\n setLoadingHierarchyState(col: number, row: number) {\n this.scenegraph.setLoadingHierarchyState(col, row);\n }\n\n /** 刷新当前节点收起展开状态,如手动更改过 */\n _refreshHierarchyState(col: number, row: number, recalculateColWidths: boolean = true) {\n let notFillWidth = false;\n let notFillHeight = false;\n const checkHasChart = this.internalProps.layoutMap.checkHasChart();\n // 检查当前状态总宽高未撑满autoFill是否在起作用\n if (checkHasChart) {\n if (this.autoFillWidth) {\n notFillWidth = this.getAllColsWidth() <= this.tableNoFrameWidth;\n }\n if (this.autoFillHeight) {\n notFillHeight = this.getAllRowsHeight() <= this.tableNoFrameHeight;\n }\n }\n const index = this.getRecordShowIndexByCell(col, row);\n const diffDataIndices = this.dataSource.toggleHierarchyState(\n index,\n this.scenegraph.proxy.rowStart - this.columnHeaderLevelCount,\n Math.max(\n this.scenegraph.proxy.rowEnd - this.columnHeaderLevelCount,\n this.scenegraph.proxy.rowStart - this.columnHeaderLevelCount + this.scenegraph.proxy.rowLimit - 1\n )\n );\n const diffPositions = this.internalProps.layoutMap.toggleHierarchyState(diffDataIndices);\n //影响行数\n this.refreshRowColCount();\n\n // for bottom frozen row height map\n for (let row = this.rowCount - this.bottomFrozenRowCount; row < this.rowCount; row++) {\n const newHeight = computeRowHeight(row, 0, this.colCount - 1, this);\n this._setRowHeight(row, newHeight);\n }\n\n this.clearCellStyleCache();\n this.internalProps.layoutMap.clearCellRangeMap();\n this.internalProps.useOneRowHeightFillAll = false;\n // ts-ignore\n // this.scenegraph.updateHierarchyIcon(col, row);// 添加了updateCells:[{ col, row }] 就不需要单独更新图标了(只更新图标针对有自定义元素的情况 会有更新不到问题)'\n // const updateCells = [{ col, row }];\n // // 如果需要移出的节点超过了当前加载部分最后一行 则转变成更新对应的行\n // if (\n // diffPositions.removeCellPositions?.length > 0 &&\n // diffPositions.removeCellPositions[diffPositions.removeCellPositions.length - 1].row >=\n // this.scenegraph.proxy.rowEnd\n // ) {\n // for (let i = 0; i <= diffPositions.removeCellPositions.length - 1; i++) {\n // if (diffPositions.removeCellPositions[i].row <= this.scenegraph.proxy.rowEnd) {\n // updateCells.push({\n // col: diffPositions.removeCellPositions[i].col,\n // row: diffPositions.removeCellPositions[i].row\n // });\n // }\n // }\n // diffPositions.removeCellPositions = [];\n\n // // reset proxy row config\n // this.scenegraph.proxy.refreshRowCount();\n // }\n\n const { updateCells, addCells, removeCells } = fixUpdateRowRange(diffPositions, col, row, this);\n this.reactCustomLayout?.clearCache();\n this.scenegraph.updateRow(\n // diffPositions.removeCellPositions,\n // diffPositions.addCellPositions,\n removeCells,\n addCells,\n updateCells,\n recalculateColWidths,\n true\n );\n this.reactCustomLayout?.updateAllCustomCell();\n\n if (checkHasChart) {\n // 检查更新节点状态后总宽高未撑满autoFill是否在起作用\n if (this.autoFillWidth && !notFillWidth) {\n notFillWidth = this.getAllColsWidth() <= this.tableNoFrameWidth;\n }\n if (this.autoFillHeight && !notFillHeight) {\n notFillHeight = this.getAllRowsHeight() <= this.tableNoFrameHeight;\n }\n if (this.widthMode === 'adaptive' || notFillWidth || this.heightMode === 'adaptive' || notFillHeight) {\n this.scenegraph.updateChartSizeForResizeColWidth(-1); // 如果收起展开有性能问题 可以排查下这个防范\n }\n }\n }\n\n _hasHierarchyTreeHeader() {\n return (this.options.columns ?? this.options.header)?.some((column, i) => column.tree);\n }\n\n getMenuInfo(col: number, row: number, type: string): DropDownMenuEventInfo {\n const result: DropDownMenuEventInfo = {\n field: this.getHeaderField(col, row),\n value: this.getCellValue(col, row),\n cellLocation: this.getCellLocation(col, row),\n event: undefined\n };\n return result;\n }\n _getSortFuncFromHeaderOption(\n columns: ColumnsDefine | undefined,\n field: FieldDef,\n fieldKey?: FieldKeyDef\n ): SortState['orderFn'] | undefined {\n if (!columns) {\n columns = this.internalProps.columns;\n }\n if (field && columns && columns.length > 0) {\n for (let i = 0; i < columns.length; i++) {\n const header = columns[i];\n if (\n ((fieldKey && fieldKey === header.fieldKey) || (!fieldKey && header.field === field)) &&\n header.sort &&\n typeof header.sort === 'function'\n ) {\n return header.sort;\n } else if (header.columns) {\n const sort = this._getSortFuncFromHeaderOption(header.columns, field, fieldKey);\n if (sort) {\n return sort;\n }\n }\n }\n }\n return undefined;\n }\n /**\n * 更新排序状态\n * @param sortState 要设置的排序状态\n * @param executeSort 是否执行内部排序逻辑,设置false将只更新图标状态\n */\n updateSortState(sortState: SortState[] | SortState | null, executeSort: boolean = true) {\n if (!sortState) {\n // 解除排序状态\n if (this.internalProps.sortState) {\n if (Array.isArray(this.internalProps.sortState)) {\n for (let i = 0; i < (<SortState[]>this.internalProps.sortState).length; i++) {\n sortState = this.internalProps.sortState?.[i];\n sortState && (sortState.order = 'normal');\n }\n } else {\n (<SortState>this.internalProps.sortState).order = 'normal';\n sortState = this.internalProps.sortState;\n }\n }\n } else {\n this.internalProps.sortState = sortState;\n // 这里的sortState需要有field属性\n // this.stateManager.setSortState(sortState as SortState);\n }\n\n sortState = Array.isArray(sortState) ? sortState : [sortState];\n\n if (sortState.some((item: any) => item.field) && executeSort) {\n if (this.internalProps.layoutMap.headerObjects.some(item => item.define.sort !== false)) {\n this.dataSource.sort(\n sortState.map((item: any) => {\n const sortFunc = this._getSortFuncFromHeaderOption(this.internalProps.columns, item.field);\n const hd = this.internalProps.layoutMap.headerObjects.find((col: any) => col && col.field === item.field);\n return {\n field: item.field,\n order: item.order,\n orderFn: sortFunc ?? defaultOrderFn\n };\n })\n );\n\n // clear cell range cache\n this.internalProps.layoutMap.clearCellRangeMap();\n this.internalProps.useOneRowHeightFillAll = false;\n this.scenegraph.sortCell();\n }\n }\n if (sortState.length) {\n this.stateManager.updateSortState(sortState);\n }\n }\n updateFilterRules(\n filterRules: FilterRules,\n options: {\n clearRowHeightCache?: boolean;\n onFilterRecordsEnd?: (records: any[]) => any[];\n } = { clearRowHeightCache: true }\n ) {\n this.scenegraph.clearCells();\n if (this.sortState) {\n this.dataSource.updateFilterRulesForSorted(filterRules);\n sortRecords(this);\n } else {\n this.dataSource.updateFilterRules(filterRules, options?.onFilterRecordsEnd);\n }\n this.refreshRowColCount();\n this.stateManager.initCheckedState(this.records);\n this.scenegraph.createSceneGraph(!!!options?.clearRowHeightCache);\n this.internalProps.emptyTip?.resetVisible();\n this.resize();\n }\n /** 获取过滤后的数据 */\n getFilteredRecords() {\n return this.dataSource.records;\n }\n /** 获取某个字段下checkbox 全部数据的选中状态 顺序对应原始传入数据records 不是对应表格展示row的状态值 */\n getCheckboxState(field?: string | number) {\n if (this.stateManager.checkedState.size < this.rowCount - this.columnHeaderLevelCount) {\n this.stateManager.initLeftRecordsCheckState(this.records);\n }\n if (isValid(field)) {\n // let stateArr = this.stateManager.checkedState.values() as any;\n // map按照key(dataIndex)的升序输出value\n // const keys = Array.from(this.stateManager.checkedState.keys()).sort(\n // (a: string, b: string) => Number(a) - Number(b)\n // );\n const keys = Array.from(this.stateManager.checkedState.keys()).sort((a: string, b: string) => {\n // number or number[]\n const aArr = (a as string).split(',');\n const bArr = (b as string).split(',');\n const maxLength = Math.max(aArr.length, bArr.length);\n\n // judge from first to last\n for (let i = 0; i < maxLength; i++) {\n const a = Number(aArr[i]) ?? 0;\n const b = Number(bArr[i]) ?? 0;\n if (a !== b) {\n return a - b;\n }\n }\n return 0;\n });\n let stateArr = keys.map(key => this.stateManager.checkedState.get(key));\n\n if (this.options.groupBy) {\n stateArr = getGroupCheckboxState(this) as any;\n }\n return Array.from(stateArr, (state: any) => {\n return state && state[field];\n });\n }\n return [...this.stateManager.checkedState.values()];\n }\n /** 获取某个单元格checkbox的状态 */\n getCellCheckboxState(col: number, row: number) {\n const define = this.getBodyColumnDefine(col, row) as ColumnDefine;\n const field = define?.field;\n const cellType = this.getCellType(col, row);\n if (isValid(field) && (cellType === 'checkbox' || cellType === 'switch')) {\n const dataIndex = this.dataSource.getIndexKey(this.getRecordShowIndexByCell(col, row)).toString();\n return this.stateManager.checkedState.get(dataIndex)?.[field as string | number];\n }\n return undefined;\n }\n /** 获取某个字段下checkbox 全部数据的选中状态 顺序对应原始传入数据records 不是对应表格展示row的状态值 */\n getRadioState(field?: string | number) {\n if (isValid(field)) {\n return this.stateManager.radioState[field];\n }\n return this.stateManager.radioState;\n }\n /** 获取某个单元格checkbox的状态 */\n getCellRadioState(col: number, row: number): boolean | number {\n return getCellRadioState(col, row, this);\n }\n setCellCheckboxState(col: number, row: number, checked: boolean | 'indeterminate') {\n setCellCheckboxState(col, row, checked, this);\n }\n setCellRadioState(col: number, row: number, index?: number) {\n setCellRadioState(col, row, index, this);\n }\n\n // switch 开关类型,状态管理同checkbox\n getSwitchState(field?: string | number) {\n return this.getCheckboxState(field);\n }\n getCellSwitchState(col: number, row: number) {\n return this.getCellCheckboxState(col, row);\n }\n setCellSwitchState(col: number, row: number, checked: boolean | 'indeterminate') {\n this.setCellCheckboxState(col, row, checked);\n }\n\n /**\n * 设置表格数据 及排序状态\n * @param records\n * @param option 附近参数,其中的sortState为排序状态,如果设置null 将清除目前的排序状态\n */\n setRecords(records: Array<any>, option?: { sortState?: SortState | SortState[] | null }): void {\n clearChartRenderQueue();\n // 释放事件 及 对象\n this.internalProps.dataSource?.release();\n // 过滤掉dataSource的引用\n this.internalProps.releaseList = this.internalProps.releaseList?.filter((item: any) => !item.dataSourceObj);\n this.internalProps.dataSource = null;\n let sort: SortState | SortState[];\n if (Array.isArray(option) || (option as any)?.order) {\n //兼容之前第二个参数为sort的情况\n sort = <any>option;\n } else if (option) {\n sort = option.sortState;\n } else if (option === null) {\n //兼容之前第二个参数为null来清除sort排序状态的逻辑\n sort = null;\n }\n const time = typeof window !== 'undefined' ? window.performance.now() : 0;\n const oldHoverState = { col: this.stateManager.hover.cellPos.col, row: this.stateManager.hover.cellPos.row };\n // 清空单元格内容\n this.scenegraph.clearCells();\n\n //重复逻辑抽取updateWidthHeight\n if (sort !== undefined) {\n if (sort === null || (!Array.isArray(sort) && isValid(sort.field)) || Array.isArray(sort)) {\n this.internalProps.sortState = this.internalProps.multipleSort ? (Array.isArray(sort) ? sort : [sort]) : sort;\n this.stateManager.setSortState((this as any).sortState as SortState);\n }\n }\n if (records) {\n _setRecords(this, records);\n if ((this as any).sortState) {\n const sortState = Array.isArray((this as any).sortState) ? (this as any).sortState : [(this as any).sortState];\n\n // 根据sort规则进行排序\n if (sortState.some((item: any) => item.order && item.field && item.order !== 'normal')) {\n // hd?.define?.sort && //如果这里也判断 那想要利用sortState来排序 但不显示排序图标就实现不了\n if (this.internalProps.layoutMap.headerObjectsIncludeHided.some(item => item.define.sort !== false)) {\n this.dataSource.sort(\n sortState.map((item: any) => {\n const sortFunc = this._getSortFuncFromHeaderOption(undefined, item.field);\n // 如果sort传入的信息不能生成正确的sortFunc,直接更新表格,避免首次加载无法正常显示内容\n const hd = this.internalProps.layoutMap.headerObjectsIncludeHided.find(\n (col: any) => col && col.field === item.field\n );\n return {\n field: item.field,\n order: item.order || 'asc',\n orderFn: sortFunc ?? defaultOrderFn\n };\n })\n );\n }\n }\n }\n this.refreshRowColCount();\n } else {\n _setRecords(this, records);\n }\n\n this.stateManager.initCheckedState(records);\n // this.internalProps.frozenColCount = this.options.frozenColCount || this.rowHeaderLevelCount;\n // 生成单元格场景树\n this.clearCellStyleCache();\n this.scenegraph.createSceneGraph();\n this.stateManager.updateHoverPos(oldHoverState.col, oldHoverState.row);\n\n this._updateSize();\n if (this.internalProps.title && !this.internalProps.title.isReleased) {\n this.internalProps.title.resize();\n }\n this.scenegraph.resize();\n\n if (this.options.emptyTip) {\n if (this.internalProps.emptyTip) {\n this.internalProps.emptyTip?.resetVisible();\n } else {\n const EmptyTip = Factory.getComponent('emptyTip') as IEmptyTipComponent;\n this.internalProps.emptyTip = new EmptyTip(this.options.emptyTip, this);\n this.internalProps.emptyTip?.resetVisible();\n }\n }\n\n this.render();\n if (isValid(oldHoverState.col) && isValid(oldHoverState.row) && oldHoverState.col >= 0 && oldHoverState.row >= 0) {\n setTimeout(() => {\n this.internalProps?.tooltipHandler.showTooltip(oldHoverState.col, oldHoverState.row);\n }, 0);\n }\n console.log('setRecords cost time:', (typeof window !== 'undefined' ? window.performance.now() : 0) - time);\n }\n /**\n * 基本表格树形展示场景下,如果需要动态插入子节点的数据可以配合使用该接口,其他情况不适用\n * @param records 设置到单元格其子节点的数据\n * @param col 需要设置子节点的单元格地址\n * @param row 需要设置子节点的单元格地址\n * @param recalculateColWidths 是否重新计算列宽 默认为true.(设置width:auto或者 autoWidth 情况下才有必要考虑该参数)\n */\n setRecordChildren(records: any[], col: number, row: number, recalculateColWidths: boolean = true) {\n const record = this.getCellOriginRecord(col, row);\n record.children = records;\n const index = this.getRecordShowIndexByCell(col, row);\n this.dataSource.setRecord(record, index);\n this._refreshHierarchyState(col, row, recalculateColWidths);\n }\n\n startEditCell(col?: number, row?: number, value?: string | number) {\n if (isValid(col) && isValid(row)) {\n this.eventManager.isDraging = false;\n this.selectCell(col, row);\n this.editorManager.startEditCell(col, row, value);\n } else if (this.stateManager.select?.cellPos) {\n const { col, row } = this.stateManager.select.cellPos;\n if (isValid(col) && isValid(row)) {\n this.editorManager.startEditCell(col, row, value);\n }\n }\n }\n /** 结束编辑 */\n completeEditCell() {\n this.editorManager.completeEdit();\n }\n /** 获取单元格对应的编辑器 */\n getEditor(col: number, row: number) {\n const lastSelectedCellEditor = this.editorManager.cacheLastSelectedCellEditor[`${col}-${row}`];\n if (lastSelectedCellEditor) {\n return lastSelectedCellEditor;\n }\n Object.values(this.editorManager.cacheLastSelectedCellEditor).forEach((editor: IEditor) => editor?.onEnd?.());\n this.editorManager.cacheLastSelectedCellEditor = {};\n const define = this.getBodyColumnDefine(col, row);\n let editor = this.isHeader(col, row)\n ? (define as ColumnDefine)?.headerEditor ?? this.options.headerEditor\n : (define as ColumnDefine)?.editor ?? this.options.editor;\n\n if (typeof editor === 'function') {\n const arg = {\n col,\n row,\n dataValue: this.getCellOriginValue(col, row),\n value: this.getCellValue(col, row) || '',\n table: this\n };\n editor = (editor as Function)(arg);\n }\n if (typeof editor === 'string') {\n editor = editors.get(editor);\n }\n if (editor) {\n this.editorManager.cacheLastSelectedCellEditor[`${col}-${row}`] = editor as IEditor;\n }\n return editor as IEditor;\n }\n /** 检查单元格是否定义过编辑器 不管编辑器是否有效 只要有定义就返回true */\n isHasEditorDefine(col: number, row: number) {\n const define = this.getBodyColumnDefine(col, row);\n let editorDefine = this.isHeader(col, row)\n ? (define as ColumnDefine)?.headerEditor ?? this.options.headerEditor\n : (define as ColumnDefine)?.editor ?? this.options.editor;\n\n if (typeof editorDefine === 'function') {\n const arg = {\n col,\n row,\n dataValue: this.getCellOriginValue(col, row),\n value: this.getCellValue(col, row) || '',\n table: this\n };\n editorDefine = (editorDefine as Function)(arg);\n }\n return isValid(editorDefine);\n }\n\n /**\n * 更改单元格数据 会触发change_cell_value事件\n * @param col\n * @param row\n * @param value 更改后的值\n * @param workOnEditableCell 限制只能更改配置了编辑器的单元格值。快捷键paste这里配置的true,限制只能修改可编辑单元格值\n * @param triggerEvent 是否在值发生改变的时候触发change_cell_value事件\n */\n changeCellValue(\n col: number,\n row: number,\n value: string | number | null,\n workOnEditableCell = false,\n triggerEvent = true\n ) {\n return listTableChangeCellValue(col, row, value, workOnEditableCell, triggerEvent, this);\n }\n /**\n * 批量更新多个单元格的数据\n * @param col 粘贴数据的起始列号\n * @param row 粘贴数据的起始行号\n * @param values 多个单元格的数据数组\n * @param workOnEditableCell 是否仅更改可编辑单元格\n * @param triggerEvent 是否在值发生改变的时候触发change_cell_value事件\n */\n changeCellValues(\n startCol: number,\n startRow: number,\n values: (string | number)[][],\n workOnEditableCell = false,\n triggerEvent = true\n ) {\n return listTableChangeCellValues(startCol, startRow, values, workOnEditableCell, triggerEvent, this);\n }\n /**\n * 添加数据 单条数据\n * @param record 数据\n * @param recordIndex 向数据源中要插入的位置,从0开始。不设置recordIndex的话 默认追加到最后。\n * 如果设置了排序规则recordIndex无效,会自动适应排序逻辑确定插入顺序。\n * recordIndex 可以通过接口getRecordShowIndexByCell获取\n */\n addRecord(record: any, recordIndex?: number | number[]) {\n const success = listTableAddRecord(record, recordIndex, this);\n adjustHeightResizedRowMapWithAddRecordIndex(this as ListTable, recordIndex as number, [record]);\n this.internalProps.emptyTip?.resetVisible();\n // 只在成功添加时触发事件\n if (success) {\n this.fireListeners(TABLE_EVENT_TYPE.ADD_RECORD, {\n records: [record],\n recordIndex,\n recordCount: 1\n });\n }\n }\n\n /**\n * 添加数据 支持多条数据\n * @param records 多条数据\n * @param recordIndex 向数据源中要插入的位置,从0开始。不设置recordIndex的话 默认追加到最后。\n * 如果设置了排序规则recordIndex无效,会自动适应排序逻辑确定插入顺序。\n * recordIndex 可以通过接口getRecordShowIndexByCell获取\n */\n addRecords(records: any[], recordIndex?: number | number[]) {\n const success = listTableAddRecords(records, recordIndex, this);\n //_heightResizedRowMap修正,里面的行号需要修正,保证添加数据后 其他行号做对应调整\n if (typeof recordIndex === 'number') {\n adjustHeightResizedRowMapWithAddRecordIndex(this as ListTable, recordIndex as number, records);\n }\n this.internalProps.emptyTip?.resetVisible();\n\n // 只在成功添加时触发事件\n if (success) {\n this.fireListeners(TABLE_EVENT_TYPE.ADD_RECORD, {\n records,\n recordIndex,\n recordCount: records.length\n });\n }\n }\n\n /**\n * 删除数据 支持多条数据\n * @param recordIndexs 要删除数据的索引(显示在body中的索引,即要修改的是body部分的第几行数据)\n */\n deleteRecords(recordIndexs: number[] | number[][]) {\n listTableDeleteRecords(recordIndexs, this);\n adjustHeightResizedRowMapWithDeleteRecordIndex(this as ListTable, recordIndexs as number[]);\n this.internalProps.emptyTip?.resetVisible();\n const rowIndexs = [];\n for (let i = 0; i < recordIndexs.length; i++) {\n rowIndexs.push(this.getBodyRowIndexByRecordIndex(recordIndexs[i]) + this.columnHeaderLevelCount);\n }\n // 触发删除数据记录事件 - 假设操作成功\n this.fireListeners(TABLE_EVENT_TYPE.DELETE_RECORD, {\n recordIndexs,\n rowIndexs,\n deletedCount: Array.isArray(recordIndexs[0])\n ? (recordIndexs as number[][]).length\n : (recordIndexs as number[]).length\n });\n }\n\n /**\n * 修改数据 支持多条数据\n * @param records 修改数据条目\n * @param recordIndexs 对应修改数据的索引\n * 基本表格中显示在body中的索引,即要修改的是body部分的第几行数据;\n * 如果是树形结构的话 recordIndexs 为数组,数组中每个元素为data的原始数据索引;\n */\n updateRecords(records: any[], recordIndexs: (number | number[])[]) {\n listTableUpdateRecords(records, recordIndexs, this);\n\n // 触发更新数据记录事件 - 假设操作成功\n this.fireListeners(TABLE_EVENT_TYPE.UPDATE_RECORD, {\n records,\n recordIndexs,\n updateCount: records.length\n });\n }\n\n _hasCustomRenderOrLayout() {\n const { headerObjects } = this.internalProps.layoutMap;\n if (this.options.customRender) {\n return true;\n }\n\n for (let i = 0; i < headerObjects.length; i++) {\n const headerObject = headerObjects[i];\n if (\n headerObject?.define?.customLayout ||\n headerObject?.define?.headerCustomLayout ||\n headerObject?.define?.customRender ||\n headerObject?.define?.headerCustomRender\n ) {\n return true;\n }\n }\n return false;\n }\n /**\n * 根据字段获取聚合值\n * @param field 字段名\n * 返回数组,包括列号和每一列的聚合值数组\n */\n getAggregateValuesByField(field: string | number): {\n col: number;\n aggregateValue: { aggregationType: AggregationType; value: number | string }[];\n }[] {\n const columns = this.internalProps.layoutMap.getColumnByField(field);\n const results: {\n col: number;\n aggregateValue: { aggregationType: AggregationType; value: number | string }[];\n }[] = [];\n for (let i = 0; i < columns.length; i++) {\n const aggregator = columns[i].columnDefine.aggregator;\n delete columns[i].columnDefine;\n if (aggregator) {\n const columnAggregateValue: {\n col: number;\n aggregateValue: { aggregationType: AggregationType; value: number | string }[];\n } = {\n col: columns[i].col,\n aggregateValue: null\n };\n columnAggregateValue.aggregateValue = [];\n if (Array.isArray(aggregator)) {\n for (let j = 0; j < aggregator.length; j++) {\n columnAggregateValue.aggregateValue.push({\n aggregationType: aggregator[j].type as AggregationType,\n value: aggregator[j].value()\n });\n }\n } else {\n columnAggregateValue.aggregateValue.push({\n aggregationType: aggregator.type as AggregationType,\n value: aggregator.value()\n });\n }\n\n results.push(columnAggregateValue);\n }\n }\n return results;\n }\n /** 是否为聚合值单元格 */\n isAggregation(col: number, row: number): boolean {\n return this.internalProps.layoutMap.isAggregation(col, row);\n }\n\n getGroupTitleLevel(col: number, row: number): number | undefined {\n if (!(this.internalProps as ListTableProtected).groupBy) {\n return undefined;\n }\n const indexArr = this.dataSource.getIndexKey(this.getRecordShowIndexByCell(col, row));\n const groupLength = (this.dataSource as CachedDataSource).getGroupLength() ?? 0;\n let indexArrLngth = isArray(indexArr) ? indexArr.length - 1 : 0;\n if (groupLength > 0 && indexArrLngth === groupLength) {\n indexArrLngth = undefined;\n }\n return indexArrLngth;\n }\n /**\n * 根据数据的索引获取应该显示在body的第几行\n * @param {number} index The record index.\n */\n getBodyRowIndexByRecordIndex(index: number | number[]): number {\n if (Array.isArray(index) && index.length === 1) {\n index = index[0];\n }\n return this.dataSource.getTableIndex(index);\n }\n\n release() {\n this.editorManager?.release();\n super.release();\n }\n\n /**\n * 展开所有树形节点\n */\n expandAllTreeNode(): void {\n if (!this._hasHierarchyTreeHeader()) {\n return;\n }\n\n let stateChanged = false;\n\n // 展开所有数据行节点\n if (this.dataSource && typeof (this.dataSource as any).expandAllNodes === 'function') {\n (this.dataSource as any).expandAllNodes();\n stateChanged = true;\n }\n\n // 刷新视图\n if (stateChanged) {\n // 使用轻量级的更新管道,而非重量级的 `updateColumns`。\n // 这个新方法会处理表头刷新、场景创建和渲染。\n this._recreateSceneForStateChange();\n\n this.fireListeners(TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE, {\n col: -1, // 表示非特定单元格操作\n row: -1,\n hierarchyState: HierarchyState.expand,\n originData: { children: this.records }\n });\n }\n }\n\n /**\n * 折叠所有树形节点\n */\n collapseAllTreeNode(): void {\n if (!this._hasHierarchyTreeHeader()) {\n return;\n }\n\n let stateChanged = false;\n\n // 折叠所有数据行节点\n if (this.dataSource && typeof (this.dataSource as any).collapseAllNodes === 'function') {\n (this.dataSource as any).collapseAllNodes();\n stateChanged = true;\n }\n\n // 刷新视图\n if (stateChanged) {\n // 使用轻量级的更新管道,而非重量级的 `updateColumns`。\n // 这个新方法会处理表头刷新、场景创建和渲染。\n this._recreateSceneForStateChange();\n\n this.fireListeners(TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE, {\n col: -1,\n row: -1,\n hierarchyState: HierarchyState.collapse,\n originData: { children: this.records }\n });\n }\n }\n /** 获取某个单元格checkbox的状态 */\n\n /**\n * 合并单元格 对外接口 。会自动刷新渲染节点\n * 注意:如果之前options有customMergeCell的函数配置,将失效重置为空数组\n */\n mergeCells(startCol: number, startRow: number, endCol: number, endRow: number) {\n // 先检查一遍这个区域是否有合并情况 有的话 不能再次合并\n for (let i = startCol; i <= endCol; i++) {\n for (let j = startRow; j <= endRow; j++) {\n const cellRange = this.getCellRange(i, j);\n if (cellRange.start.col !== cellRange.end.col || cellRange.start.row !== cellRange.end.row) {\n return;\n }\n }\n }\n if (!this.options.customMergeCell) {\n this.options.customMergeCell = [];\n } else if (typeof this.options.customMergeCell === 'function') {\n this.options.customMergeCell = [];\n }\n this.options.customMergeCell.push({\n text: this.getCellValue(startCol, startRow),\n range: {\n start: {\n col: startCol,\n row: startRow\n },\n end: {\n col: endCol,\n row: endRow\n }\n }\n });\n this.internalProps.customMergeCell = getCustomMergeCellFunc(this.options.customMergeCell);\n for (let i = startCol; i <= endCol; i++) {\n for (let j = startRow; j <= endRow; j++) {\n this.scenegraph.updateCellContent(i, j);\n }\n }\n this.scenegraph.updateNextFrame();\n }\n /** 取消合并单元格 对外接口 。会自动刷新渲染节点\n * 注意:如果之前options有customMergeCell的函数配置,将失效重置为空数组\n */\n unmergeCells(startCol: number, startRow: number, endCol: number, endRow: number) {\n if (!this.options.customMergeCell) {\n this.options.customMergeCell = [];\n } else if (typeof this.options.customMergeCell === 'function') {\n this.options.customMergeCell = [];\n }\n this.options.customMergeCell = this.options.customMergeCell.filter(item => {\n const { start, end } = item.range;\n return !(start.col === startCol && start.row === startRow && end.col === endCol && end.row === endRow);\n });\n this.internalProps.customMergeCell = getCustomMergeCellFunc(this.options.customMergeCell);\n for (let i = startCol; i <= endCol; i++) {\n for (let j = startRow; j <= endRow; j++) {\n this.scenegraph.updateCellContent(i, j);\n }\n }\n this.scenegraph.updateNextFrame();\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/ListTable.ts"],"names":[],"mappings":"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","file":"ListTable.js","sourcesContent":["import type {\n AggregationType,\n CellAddress,\n CellRange,\n ColumnsDefine,\n DropDownMenuEventInfo,\n FieldData,\n FieldDef,\n FieldFormat,\n FieldKeyDef,\n FilterRules,\n IPagination,\n ListTableAPI,\n ListTableConstructorOptions,\n MaybePromiseOrUndefined,\n SortOrder,\n SortState\n} from './ts-types';\nimport { HierarchyState } from './ts-types';\nimport { SimpleHeaderLayoutMap } from './layout';\nimport { isArray, isValid } from '@visactor/vutils';\nimport {\n _setDataSource,\n _setRecords,\n checkHasAggregationOnColumnDefine,\n generateAggregationForColumn\n} from './core/tableHelper';\nimport { BaseTable } from './core';\nimport type { BaseTableAPI, ListTableProtected } from './ts-types/base-table';\nimport { TABLE_EVENT_TYPE } from './core/TABLE_EVENT_TYPE';\nimport type { ITitleComponent } from './components/title/title';\nimport { Env } from './tools/env';\nimport * as editors from './edit/editors';\nimport { EditManager } from './edit/edit-manager';\nimport { computeColWidth } from './scenegraph/layout/compute-col-width';\nimport { computeRowHeight } from './scenegraph/layout/compute-row-height';\nimport { defaultOrderFn } from './tools/util';\nimport type { IEditor } from '@visactor/vtable-editors';\nimport type { ColumnData, ColumnDefine, HeaderData } from './ts-types/list-table/layout-map/api';\nimport { getCellRadioState, setCellRadioState } from './state/radio/radio';\nimport { cloneDeepSpec } from '@visactor/vutils-extension';\nimport { getGroupCheckboxState, setCellCheckboxState } from './state/checkbox/checkbox';\nimport type { IEmptyTipComponent } from './components/empty-tip/empty-tip';\nimport { Factory } from './core/factory';\nimport { getGroupByDataConfig } from './core/group-helper';\nimport { DataSource, type CachedDataSource } from './data';\nimport { getValueFromDeepArray } from './data/DataSource';\nimport {\n listTableAddRecord,\n listTableAddRecords,\n listTableChangeCellValue,\n listTableChangeCellValues,\n listTableChangeCellValuesByIds,\n listTableDeleteRecords,\n listTableUpdateRecords,\n sortRecords\n} from './core/record-helper';\nimport type { IListTreeStickCellPlugin, ListTreeStickCellPlugin } from './plugins/list-tree-stick-cell';\nimport { fixUpdateRowRange } from './tools/update-row';\nimport { clearChartRenderQueue } from './scenegraph/graphic/contributions/chart-render-helper';\nimport { getCustomMergeCellFunc } from './core/utils/get-custom-merge-cell-func';\nimport {\n adjustHeightResizedRowMap,\n adjustHeightResizedRowMapWithAddRecordIndex,\n adjustHeightResizedRowMapWithDeleteRecordIndex,\n adjustWidthResizedColMap\n} from './state/cell-move/adjust-header';\n// import {\n// registerAxis,\n// registerEmptyTip,\n// registerLegend,\n// registerMenu,\n// registerTitle,\n// registerTooltip\n// } from './components';\n// import {\n// registerChartCell,\n// registerCheckboxCell,\n// registerImageCell,\n// registerProgressBarCell,\n// registerRadioCell,\n// registerSparkLineCell,\n// registerTextCell,\n// registerVideoCell\n// } from './scenegraph/group-creater/cell-type';\n\n// registerAxis();\n// registerEmptyTip();\n// registerLegend();\n// registerMenu();\n// registerTitle();\n// registerTooltip();\n\n// registerChartCell();\n// registerCheckboxCell();\n// registerImageCell();\n// registerProgressBarCell();\n// registerRadioCell();\n// registerSparkLineCell();\n// registerTextCell();\n// registerVideoCell();\n\nexport class ListTable extends BaseTable implements ListTableAPI {\n declare internalProps: ListTableProtected;\n /**\n * 用户配置的options 只读 勿直接修改\n */\n declare options: ListTableConstructorOptions;\n showHeader = true;\n listTreeStickCellPlugin?: ListTreeStickCellPlugin;\n\n // eslint-disable-next-line default-param-last\n constructor(options: ListTableConstructorOptions);\n constructor(container: HTMLElement, options: ListTableConstructorOptions);\n constructor(container?: HTMLElement | ListTableConstructorOptions, options?: ListTableConstructorOptions) {\n super(container as HTMLElement, options);\n options = this.options;\n const internalProps = this.internalProps;\n internalProps.frozenColDragHeaderMode =\n options.dragOrder?.frozenColDragHeaderMode ?? options.frozenColDragHeaderMode;\n //分页配置\n this.pagination = options.pagination;\n internalProps.sortState = options.sortState;\n internalProps.multipleSort = !!options.multipleSort;\n internalProps.dataConfig = this.internalProps.groupBy\n ? getGroupByDataConfig(this.internalProps.groupBy, options.addRecordRule)\n : { addRecordRule: options.addRecordRule }; //cloneDeep(options.dataConfig ?? {});\n internalProps.columns = options.columns\n ? cloneDeepSpec(options.columns, ['children']) // children for react\n : options.header\n ? cloneDeepSpec(options.header, ['children'])\n : [];\n generateAggregationForColumn(this);\n // options.columns?.forEach((colDefine, index) => {\n // //如果editor 是一个IEditor的实例 需要这样重新赋值 否则clone后变质了\n // if (colDefine.editor) {\n // internalProps.columns[index].editor = colDefine.editor;\n // }\n // });\n\n internalProps.enableTreeNodeMerge =\n options.enableTreeNodeMerge ?? isValid((this.internalProps as ListTableProtected).groupBy) ?? false;\n\n this.internalProps.headerHelper.setTableColumnsEditor();\n this.showHeader = options.showHeader ?? true;\n\n this.internalProps.columnWidthConfig = options.columnWidthConfig;\n this.internalProps.rowHeightConfig = options.rowHeightConfig;\n\n this.transpose = options.transpose ?? false;\n if (Env.mode !== 'node') {\n this.editorManager = new EditManager(this);\n }\n this.refreshHeader();\n this.internalProps.useOneRowHeightFillAll = false;\n\n if (options.dataSource) {\n // _setDataSource(this, options.dataSource)\n this.dataSource = options.dataSource;\n } else if (options.records) {\n this.setRecords(options.records as any, { sortState: internalProps.sortState });\n } else {\n this.setRecords([]);\n }\n if (options.title) {\n const Title = Factory.getComponent('title') as ITitleComponent;\n internalProps.title = new Title(options.title, this);\n // this.scenegraph.resize();//下面有个resize了 所以这个可以去掉\n }\n if (this.options.emptyTip) {\n if (this.internalProps.emptyTip) {\n this.internalProps.emptyTip?.resetVisible();\n } else {\n const EmptyTip = Factory.getComponent('emptyTip') as IEmptyTipComponent;\n this.internalProps.emptyTip = new EmptyTip(this.options.emptyTip, this);\n this.internalProps.emptyTip?.resetVisible();\n }\n }\n\n if ((this.internalProps as ListTableProtected).enableTreeStickCell) {\n const ListTreeStickCellPlugin = Factory.getComponent('listTreeStickCellPlugin') as IListTreeStickCellPlugin;\n this.listTreeStickCellPlugin = new ListTreeStickCellPlugin(this);\n }\n //为了确保用户监听得到这个事件 这里做了异步 确保vtable实例已经初始化完成\n setTimeout(() => {\n if (this.isReleased) {\n return;\n }\n this.resize();\n this.fireListeners(TABLE_EVENT_TYPE.INITIALIZED, null);\n }, 0);\n }\n isListTable(): true {\n return true;\n }\n isPivotTable(): false {\n return false;\n }\n isPivotChart(): false {\n return false;\n }\n /**\n * Get the sort state.\n */\n get sortState(): SortState | SortState[] {\n return this.internalProps.sortState;\n }\n\n get records() {\n return this.dataSource?.records;\n }\n\n get recordsCount() {\n return this.dataSource.records.length;\n }\n\n // /**\n // * Gets the define of the header.\n // */\n // get columns(): ColumnsDefine {\n // return this.internalProps.columns;\n // }\n // /**\n // * Sets the define of the column.\n // */\n // set columns(columns: ColumnsDefine) {\n // this.internalProps.columns = columns;\n // this.options.columns = columns;\n // }\n /**\n * Sets the define of the column.\n */\n updateColumns(\n columns: ColumnsDefine,\n options: { clearColWidthCache?: boolean; clearRowHeightCache?: boolean } = {\n clearColWidthCache: false,\n clearRowHeightCache: true\n }\n ) {\n this.scenegraph.clearCells(); //将该代码提前 逻辑中有设置this.clear=true。refreshHeader逻辑中有判断clear这个值的地方\n const oldHoverState = { col: this.stateManager.hover.cellPos.col, row: this.stateManager.hover.cellPos.row };\n this.internalProps.columns = cloneDeepSpec(columns, ['children']);\n generateAggregationForColumn(this);\n // columns.forEach((colDefine, index) => {\n // if (colDefine.editor) {\n // this.internalProps.columns[index].editor = colDefine.editor;\n // }\n // });\n if (options?.clearColWidthCache) {\n this.internalProps._widthResizedColMap.clear();\n }\n this.options.columns = columns;\n this.internalProps.headerHelper.setTableColumnsEditor();\n this._hasAutoImageColumn = undefined;\n this.refreshHeader();\n this.dataSource.updateColumns?.(this.internalProps.columns);\n if (this.records && checkHasAggregationOnColumnDefine(this.internalProps.columns)) {\n this.dataSource.processRecords(this.dataSource.dataSourceObj?.records ?? this.dataSource.dataSourceObj);\n }\n this.internalProps.useOneRowHeightFillAll = false;\n\n this.headerStyleCache = new Map();\n this.bodyStyleCache = new Map();\n this.bodyBottomStyleCache = new Map();\n this.scenegraph.createSceneGraph(!!!options?.clearRowHeightCache);\n this.stateManager.updateHoverPos(oldHoverState.col, oldHoverState.row);\n this.renderAsync();\n this.eventManager.updateEventBinder();\n }\n\n /**\n * 作为 `updateColumns` 的轻量级替代方案,用于仅需重新创建场景图而无需重新定义列的场景,\n * 例如展开/折叠树形节点。此方法避免了 `updateColumns` 中开销较大的 `cloneDeepSpec` 深拷贝操作。\n *\n * 注意:此方法与 `updateColumns` 共享部分逻辑。如果将来修改了 `updateColumns`,\n * 请务必检查此方法,以确保逻辑一致性,防止出现“逻辑漂移”。\n */\n private _recreateSceneForStateChange(): void {\n this.scenegraph.clearCells();\n const oldHoverState = { col: this.stateManager.hover.cellPos.col, row: this.stateManager.hover.cellPos.row };\n\n this._hasAutoImageColumn = undefined;\n this.refreshHeader();\n if (this.records && checkHasAggregationOnColumnDefine(this.internalProps.columns)) {\n this.dataSource.processRecords(this.dataSource.dataSourceObj?.records ?? this.dataSource.dataSourceObj);\n }\n this.internalProps.useOneRowHeightFillAll = false;\n\n this.headerStyleCache = new Map();\n this.bodyStyleCache = new Map();\n this.bodyBottomStyleCache = new Map();\n this._updateSize();\n this.scenegraph.createSceneGraph();\n this.stateManager.updateHoverPos(oldHoverState.col, oldHoverState.row);\n this.renderAsync();\n this.eventManager.updateEventBinder();\n }\n /**\n * 添加列 TODO: 需要优化 这个方法目前直接调用了updateColumns 可以避免调用 做优化性能\n * @param column\n */\n addColumns(toAddColumns: ColumnDefine[], colIndex?: number, isMaintainArrayData: boolean = true) {\n const columns = this.options.columns;\n if (colIndex === undefined) {\n colIndex = columns.length;\n columns.push(...toAddColumns);\n } else {\n columns.splice(colIndex, 0, ...toAddColumns);\n }\n for (let i = 0; i < toAddColumns.length; i++) {\n this.colWidthsMap.addAndReorder(colIndex + i, toAddColumns[i].width ?? this.internalProps.defaultColWidth);\n }\n //#region 修正colWidthsMap中的列宽缓存\n this.internalProps._colRangeWidthsMap.clear();\n //_widthResizedColMap修养修正,里面的列号需要修正,保证删除某些列后 其他列号做对应调整\n const resizedColIndexs = Array.from(this.internalProps._widthResizedColMap.keys());\n for (let i = 0; i < resizedColIndexs.length; i++) {\n if ((resizedColIndexs[i] as number) >= (colIndex as number)) {\n this.internalProps._widthResizedColMap.delete(resizedColIndexs[i] as number);\n this.internalProps._widthResizedColMap.add((resizedColIndexs[i] as number) + toAddColumns.length);\n }\n }\n //#endregion\n\n if (isMaintainArrayData) {\n //重新整理column中的field值\n for (let i = 0; i < columns.length; i++) {\n columns[i].field = i;\n }\n\n //如果isMaintainArrayData为true 则需要维护其中是数组类型的数据\n for (let i = 0; i < this.records.length; i++) {\n const record = this.records[i];\n if (Array.isArray(record)) {\n record.splice(colIndex, 0, ...Array(toAddColumns.length).fill(undefined));\n }\n }\n }\n this.updateColumns(columns, { clearRowHeightCache: false });\n this.fireListeners(TABLE_EVENT_TYPE.ADD_COLUMN, {\n columnIndex: colIndex,\n columnCount: toAddColumns.length,\n columns\n });\n }\n /**\n * 删除列 TODO: 需要优化 这个方法目前直接调用了updateColumns 可以避免调用 做优化性能\n * @param colIndex\n */\n deleteColumns(deleteColIndexs: number[], isMaintainArrayData: boolean = true) {\n const columns = this.options.columns;\n deleteColIndexs.sort((a, b) => b - a);\n for (let i = 0; i < deleteColIndexs.length; i++) {\n columns.splice(deleteColIndexs[i], 1);\n //#region 修正colWidthsMap中的列宽缓存\n this.colWidthsMap.delAndReorder(deleteColIndexs[i]);\n this.internalProps._widthResizedColMap.delete(deleteColIndexs[i]);\n //#endregion\n if (isMaintainArrayData) {\n //如果isMaintainArrayData为true 则需要维护其中是数组类型的数据\n for (let j = 0; j < this.records.length; j++) {\n const record = this.records[j];\n if (Array.isArray(record)) {\n record.splice(deleteColIndexs[i], 1);\n }\n }\n }\n }\n //#region 修正colWidthsMap中的列宽缓存\n this.internalProps._colRangeWidthsMap.clear();\n //_widthResizedColMap修养修正,里面的列号需要修正,保证删除某些列后 其他列号做对应调整\n const resizedColIndexs = Array.from(this.internalProps._widthResizedColMap.keys());\n for (let i = 0; i < resizedColIndexs.length; i++) {\n for (let j = 0; j < deleteColIndexs.length; j++) {\n if ((resizedColIndexs[i] as number) > (deleteColIndexs[j] as number)) {\n this.internalProps._widthResizedColMap.delete(resizedColIndexs[i] as number);\n this.internalProps._widthResizedColMap.add((resizedColIndexs[i] as number) - (deleteColIndexs.length - j));\n break;\n }\n }\n }\n //#endregion\n if (isMaintainArrayData) {\n //重新整理column中的field值\n for (let i = 0; i < columns.length; i++) {\n columns[i].field = i;\n }\n }\n this.updateColumns(columns, { clearRowHeightCache: false });\n this.fireListeners(TABLE_EVENT_TYPE.DELETE_COLUMN, {\n deleteColIndexs: deleteColIndexs,\n columns\n });\n }\n\n get columns(): ColumnsDefine {\n // return this.internalProps.columns;\n return this.internalProps.layoutMap.columnTree.getCopiedTree(); //调整顺序后的columns\n }\n /**\n *@deprecated 请使用columns\n */\n get header(): ColumnsDefine {\n return this.internalProps.columns;\n }\n /**\n * @deprecated 请使用columns\n */\n set header(header: ColumnsDefine) {\n this.internalProps.columns = header;\n generateAggregationForColumn(this);\n this.options.header = header;\n this.refreshHeader();\n this.internalProps.useOneRowHeightFillAll = false;\n //需要异步等待其他事情都完成后再绘制\n this.renderAsync();\n }\n /**\n * Get the transpose.\n */\n get transpose(): boolean {\n return this.internalProps.transpose ?? false;\n }\n /**\n * Set the transpose from given\n */\n set transpose(transpose: boolean) {\n if (this.internalProps.transpose === transpose) {\n return;\n }\n this.internalProps.transpose = transpose;\n // this.options.transpose = transpose; // cause extr update in react\n if (this.internalProps.layoutMap) {\n //后面如果修改是否转置\n this.internalProps.layoutMap.transpose = transpose;\n this.refreshRowColCount();\n\n // 转置后为行布局,列宽只支持依据该列所有内容自适应宽度\n this._resetFrozenColCount();\n this.renderAsync();\n }\n }\n /** 获取单元格展示值 */\n getCellValue(col: number, row: number, skipCustomMerge?: boolean): FieldData {\n if (col === -1 || row === -1) {\n return null;\n }\n if (!skipCustomMerge) {\n const customMergeText = this.getCustomMergeValue(col, row);\n if (customMergeText) {\n return customMergeText;\n }\n }\n const table = this;\n if (table.internalProps.layoutMap.isSeriesNumber(col, row)) {\n if (table.internalProps.layoutMap.isSeriesNumberInHeader(col, row)) {\n const { title } = table.internalProps.layoutMap.getSeriesNumberHeader(col, row);\n return title;\n }\n let value;\n if ((this.internalProps as ListTableProtected).groupBy) {\n const record = table.getCellRawRecord(col, row);\n if (record?.vtableMerge) {\n return '';\n }\n if (!table.internalProps.layoutMap.isAggregation(col, row)) {\n value = (this.dataSource as CachedDataSource).getGroupSeriesNumber(row - this.columnHeaderLevelCount);\n }\n // const indexs = this.dataSource.currentIndexedData[row - this.columnHeaderLevelCount] as number[];\n // value = indexs[indexs.length - 1] + 1;\n } else {\n const define = table.getBodyColumnDefine(col, row);\n const checkboxSeriesNumberStyle = (table as ListTable).getFieldData(define.field, col, row);\n if (['number', 'string'].includes(typeof checkboxSeriesNumberStyle)) {\n value = checkboxSeriesNumberStyle;\n } else if (checkboxSeriesNumberStyle?.text) {\n value = checkboxSeriesNumberStyle.text ?? '';\n } else {\n value = row - this.columnHeaderLevelCount + 1;\n }\n }\n const { format } = table.internalProps.layoutMap.getSeriesNumberBody(col, row);\n return typeof format === 'function' ? format(col, row, this, value) : value;\n } else if (table.internalProps.layoutMap.isHeader(col, row)) {\n const { title } = table.internalProps.layoutMap.getHeader(col, row);\n return typeof title === 'function' ? title() : title;\n } else if (table.internalProps.layoutMap.isAggregation(col, row)) {\n if (table.internalProps.layoutMap.isTopAggregation(col, row)) {\n const aggregator = table.internalProps.layoutMap.getAggregatorOnTop(col, row);\n return aggregator?.formatValue ? aggregator.formatValue(col, row, this as BaseTableAPI) : '';\n } else if (table.internalProps.layoutMap.isBottomAggregation(col, row)) {\n const aggregator = table.internalProps.layoutMap.getAggregatorOnBottom(col, row);\n return aggregator?.formatValue ? aggregator.formatValue(col, row, this as BaseTableAPI) : '';\n }\n }\n const { field, fieldFormat } = table.internalProps.layoutMap.getBody(col, row) as ColumnData;\n return table.getFieldData(fieldFormat || field, col, row);\n }\n /** 获取单元格展示数据的format前的值 */\n getCellOriginValue(col: number, row: number): FieldData {\n if (col === -1 || row === -1) {\n return null;\n }\n const table = this;\n if (table.internalProps.layoutMap.isSeriesNumber(col, row)) {\n if (table.internalProps.layoutMap.isSeriesNumberInHeader(col, row)) {\n const { title } = table.internalProps.layoutMap.getSeriesNumberHeader(col, row);\n return title;\n }\n const { format } = table.internalProps.layoutMap.getSeriesNumberBody(col, row);\n return typeof format === 'function' ? format(col, row, this) : row - this.columnHeaderLevelCount;\n } else if (table.internalProps.layoutMap.isHeader(col, row)) {\n const { title } = table.internalProps.layoutMap.getHeader(col, row);\n return typeof title === 'function' ? title() : title;\n } else if (table.internalProps.layoutMap.isAggregation(col, row)) {\n if (table.internalProps.layoutMap.isTopAggregation(col, row)) {\n const aggregator = table.internalProps.layoutMap.getAggregatorOnTop(col, row);\n return aggregator?.value();\n } else if (table.internalProps.layoutMap.isBottomAggregation(col, row)) {\n const aggregator = table.internalProps.layoutMap.getAggregatorOnBottom(col, row);\n return aggregator?.value();\n }\n }\n const { field } = table.internalProps.layoutMap.getBody(col, row);\n return table.getFieldData(field, col, row);\n }\n /** 获取单元格展示数据源最原始值 */\n getCellRawValue(col: number, row: number): FieldData {\n if (col === -1 || row === -1) {\n return null;\n }\n const table = this;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n const { title } = table.internalProps.layoutMap.getHeader(col, row);\n return typeof title === 'function' ? title() : title;\n }\n const { field } = table.internalProps.layoutMap.getBody(col, row);\n return table.getRawFieldData(field, col, row);\n }\n /** 获取当前单元格在body部分的展示索引 即(row / col)-headerLevelCount。注:ListTable特有接口 */\n getRecordShowIndexByCell(col: number, row: number): number {\n const { layoutMap } = this.internalProps;\n return layoutMap.getRecordShowIndexByCell(col, row);\n }\n\n /** 获取当前单元格的数据是数据源中的第几条。\n * 如果是树形模式的表格,将返回数组,如[1,2] 数据源中第2条数据中children中的第3条\n * 注:ListTable特有接口 */\n getRecordIndexByCell(col: number, row: number): number | number[] {\n const { layoutMap } = this.internalProps;\n const recordShowIndex = layoutMap.getRecordShowIndexByCell(col, row);\n return this.dataSource.getRecordIndexPaths(recordShowIndex);\n }\n\n getTableIndexByRecordIndex(recordIndex: number | number[]) {\n if (this.transpose) {\n return this.dataSource.getTableIndex(recordIndex) + this.rowHeaderLevelCount;\n }\n return this.dataSource.getTableIndex(recordIndex) + this.columnHeaderLevelCount;\n }\n getTableIndexByField(field: FieldDef) {\n const colObj = this.internalProps.layoutMap.columnObjects.find((col: any) => col.field === field);\n if (!colObj) {\n return -1;\n }\n const layoutRange = this.internalProps.layoutMap.getBodyLayoutRangeById(colObj.id);\n if (this.transpose) {\n return layoutRange.start.row;\n }\n return layoutRange.start.col;\n }\n /**\n * 根据数据源中的index和field获取单元格行列号\n * @param field\n * @param recordIndex\n * @returns\n */\n getCellAddrByFieldRecord(field: FieldDef, recordIndex: number | number[]): CellAddress {\n if (this.transpose) {\n return { col: this.getTableIndexByRecordIndex(recordIndex), row: this.getTableIndexByField(field) };\n }\n return { col: this.getTableIndexByField(field), row: this.getTableIndexByRecordIndex(recordIndex) };\n }\n /**\n *\n * @param field 获取整体数据记录。可编辑单元格的话 对应编辑后format前\n * @param col\n * @param row\n */\n getCellOriginRecord(col: number, row: number): MaybePromiseOrUndefined {\n const table = this;\n const index = table.getRecordShowIndexByCell(col, row);\n if (index > -1) {\n return table.dataSource.get(index);\n }\n return undefined;\n }\n /**\n *\n * @param field 获取整体数据记录。可编辑的话 对应编辑前\n * @param col\n * @param row\n */\n getCellRawRecord(col: number, row: number): MaybePromiseOrUndefined {\n const table = this;\n const index = table.getRecordShowIndexByCell(col, row);\n if (index > -1) {\n return table.dataSource.getRaw(index);\n }\n return undefined;\n }\n /**\n * 该列是否可调整列宽\n * @param col\n * @returns\n */\n _canResizeColumn(col: number, row: number): boolean {\n const ifCan = super._canResizeColumn(col, row);\n if (ifCan) {\n if (!this.transpose) {\n // 列上是否配置了禁止拖拽列宽的配置项disableColumnResize\n const cellDefine = this.internalProps.layoutMap.getBody(col, this.columnHeaderLevelCount);\n const isSeriesNumber = this.internalProps.layoutMap.isSeriesNumber(col, row);\n if ((cellDefine as ColumnData)?.disableColumnResize) {\n return false;\n } else if (isSeriesNumber && this.internalProps.rowSeriesNumber.disableColumnResize === true) {\n return false;\n }\n }\n }\n return ifCan;\n }\n updateOption(\n options: ListTableConstructorOptions,\n updateConfig: { clearColWidthCache?: boolean; clearRowHeightCache?: boolean } = {\n clearColWidthCache: true,\n clearRowHeightCache: true\n }\n ) {\n const internalProps = this.internalProps;\n\n this.pluginManager.removeOrAddPlugins(options.plugins);\n super.updateOption(options, updateConfig);\n internalProps.frozenColDragHeaderMode =\n options.dragOrder?.frozenColDragHeaderMode ?? options.frozenColDragHeaderMode;\n //分页配置\n this.pagination = options.pagination;\n internalProps.sortState = options.sortState;\n // internalProps.dataConfig = {}; // cloneDeep(options.dataConfig ?? {});\n internalProps.dataConfig = (this.internalProps as ListTableProtected).groupBy\n ? getGroupByDataConfig((this.internalProps as ListTableProtected).groupBy, options.addRecordRule)\n : { addRecordRule: options.addRecordRule }; //cloneDeep(options.dataConfig ?? {});\n //更新protectedSpace\n this.showHeader = options.showHeader ?? true;\n internalProps.columns = options.columns\n ? cloneDeepSpec(options.columns, ['children'])\n : options.header\n ? cloneDeepSpec(options.header, ['children'])\n : [];\n generateAggregationForColumn(this);\n // options.columns.forEach((colDefine, index) => {\n // if (colDefine.editor) {\n // internalProps.columns[index].editor = colDefine.editor;\n // }\n // });\n internalProps.enableTreeNodeMerge =\n options.enableTreeNodeMerge ?? isValid((this.internalProps as ListTableProtected).groupBy) ?? false;\n\n this.internalProps.headerHelper.setTableColumnsEditor();\n // 处理转置\n this.transpose = options.transpose ?? false;\n // 更新表头\n this.refreshHeader();\n this.internalProps.useOneRowHeightFillAll = false;\n\n this.internalProps.columnWidthConfig = options.columnWidthConfig;\n this.internalProps.rowHeightConfig = options.rowHeightConfig;\n\n // this.hasMedia = null; // 避免重复绑定\n // 清空目前数据\n if (internalProps.releaseList) {\n for (let i = internalProps.releaseList.length - 1; i >= 0; i--) {\n const releaseObj = internalProps.releaseList[i];\n if (releaseObj instanceof DataSource) {\n releaseObj.updateColumns(this.internalProps.columns);\n } else {\n releaseObj?.release?.();\n internalProps.releaseList.splice(i, 1);\n }\n }\n }\n // // 恢复selection状态\n // internalProps.selection.range = range;\n // this._updateSize();\n // 传入新数据\n if (options.dataSource && this.dataSource !== options.dataSource) {\n // _setDataSource(this, options.dataSource);\n this.dataSource = options.dataSource;\n } else if (options.records) {\n this.setRecords(options.records as any, {\n sortState: options.sortState\n });\n } else {\n this.refreshRowColCount();\n this._resetFrozenColCount();\n // 生成单元格场景树\n this.scenegraph.createSceneGraph();\n this.render();\n }\n if (options.title) {\n const Title = Factory.getComponent('title') as ITitleComponent;\n internalProps.title = new Title(options.title, this);\n this.scenegraph.resize();\n }\n if (this.options.emptyTip) {\n if (this.internalProps.emptyTip) {\n this.internalProps.emptyTip?.resetVisible();\n } else {\n const EmptyTip = Factory.getComponent('emptyTip') as IEmptyTipComponent;\n this.internalProps.emptyTip = new EmptyTip(this.options.emptyTip, this);\n this.internalProps.emptyTip?.resetVisible();\n }\n }\n this.pluginManager.updatePlugins(options.plugins);\n setTimeout(() => {\n this.fireListeners(TABLE_EVENT_TYPE.UPDATED, null);\n }, 0);\n return new Promise(resolve => {\n setTimeout(resolve, 0);\n });\n }\n /**\n * 更新页码\n * @param pagination 修改页码\n */\n updatePagination(pagination: IPagination): void {\n if (this.pagination) {\n typeof pagination.currentPage === 'number' &&\n pagination.currentPage >= 0 &&\n (this.pagination.currentPage = pagination.currentPage);\n pagination.perPageCount &&\n (this.pagination.perPageCount = pagination.perPageCount || this.pagination.perPageCount);\n this.internalProps.layoutMap.clearCellRangeMap();\n this.internalProps.useOneRowHeightFillAll = false;\n // 清空单元格内容\n this.scenegraph.clearCells();\n //数据源缓存数据更新\n this.dataSource.updatePagination(this.pagination);\n this.refreshRowColCount();\n this.stateManager.initCheckedState(this.records);\n // 生成单元格场景树\n this.scenegraph.createSceneGraph();\n this.renderAsync();\n }\n }\n /** @private */\n refreshHeader(): void {\n const table = this;\n const internalProps = table.internalProps;\n const transpose = table.transpose;\n const showHeader = table.showHeader;\n const layoutMap = (internalProps.layoutMap = new SimpleHeaderLayoutMap(\n this,\n internalProps.columns ?? [],\n showHeader,\n table.options.hierarchyIndent\n ));\n\n layoutMap.transpose = transpose;\n\n if (!transpose) {\n //设置列宽 这里需要优化,考虑转置表格的情况 transpose,转置表格不需要设置colWidth TODO\n this.setMinMaxLimitWidth(true);\n }\n //刷新表头,原来这里是_refreshRowCount 后改名为_refreshRowColCount 因为表头定义会影响行数,而转置模式下会影响列数\n this.refreshRowColCount();\n }\n\n refreshRowColCount(): void {\n const table = this;\n const { layoutMap } = table.internalProps;\n if (!layoutMap) {\n return;\n }\n\n const dataCount = table.internalProps.dataSource?.length ?? 0;\n layoutMap.recordsCount =\n dataCount +\n (dataCount > 0 || !!this.options.showAggregationWhenEmpty\n ? layoutMap.hasAggregationOnTopCount + layoutMap.hasAggregationOnBottomCount\n : 0);\n\n if (table.transpose) {\n table.rowCount = layoutMap.rowCount ?? 0;\n table.colCount = layoutMap.colCount ?? 0;\n // table.frozenRowCount = 0;\n // table.frozenColCount = layoutMap.headerLevelCount; //这里不要这样写 这个setter会检查扁头宽度 可能将frozenColCount置为0\n this.internalProps.frozenColCount = Math.max(\n (layoutMap.headerLevelCount ?? 0) + layoutMap.leftRowSeriesNumberColumnCount,\n this.options.frozenColCount ?? 0\n );\n this.internalProps.frozenRowCount = this.options.frozenRowCount ?? 0;\n if (table.bottomFrozenRowCount !== (this.options.bottomFrozenRowCount ?? 0)) {\n table.bottomFrozenRowCount = this.options.bottomFrozenRowCount ?? 0;\n }\n if (table.rightFrozenColCount !== (this.options.rightFrozenColCount ?? 0)) {\n table.rightFrozenColCount = this.options.rightFrozenColCount ?? 0;\n }\n } else {\n table.colCount = layoutMap.colCount ?? 0;\n table.rowCount = layoutMap.recordsCount * layoutMap.bodyRowSpanCount + layoutMap.headerLevelCount;\n // table.frozenColCount = table.options.frozenColCount ?? 0; //这里不要这样写 这个setter会检查扁头宽度 可能将frozenColCount置为0\n this.internalProps.frozenColCount = this.options.frozenColCount ?? 0;\n // 当冻结列数大于等于列数时,则冻结列数置为0,可以查看demo中的list-groupBy.ts来调试这个问题\n if (this.options.frozenColCount >= this.colCount) {\n this.internalProps.frozenColCount = 0;\n }\n // 不能使用frozenRowCount setter 因为会把options.frozenRowCount赋值\n table._setFrozenRowCount(Math.max(layoutMap.headerLevelCount, this.options.frozenRowCount ?? 0));\n\n if (table.bottomFrozenRowCount !== (this.options.bottomFrozenRowCount ?? 0)) {\n table.bottomFrozenRowCount = this.options.bottomFrozenRowCount ?? 0;\n }\n if (table.rightFrozenColCount !== (this.options.rightFrozenColCount ?? 0)) {\n table.rightFrozenColCount = this.options.rightFrozenColCount ?? 0;\n }\n }\n this.stateManager.setFrozenCol(this.internalProps.frozenColCount);\n // this.scenegraph.proxy?.refreshRowColCount();\n }\n /**\n * 获取records数据源中 字段对应的value 值是format之后的\n * @param field\n * @param col\n * @param row\n * @returns\n */\n getFieldData(field: FieldDef | FieldFormat | undefined, col: number, row: number): FieldData {\n if (field === null) {\n return null;\n }\n const table = this;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n return null;\n }\n const index = table.getRecordShowIndexByCell(\n table.transpose ? col - table.internalProps.layoutMap.leftRowSeriesNumberColumnCount : col,\n row\n );\n return table.internalProps.dataSource.getField(index, field, col, row, this);\n }\n /**\n * 获取records数据源中 字段对应的value 值是数据源中原始值\n * @param field\n * @param col\n * @param row\n * @returns\n */\n getRawFieldData(field: FieldDef | FieldFormat | undefined, col: number, row: number): FieldData {\n if (field === null) {\n return null;\n }\n const table = this;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n return null;\n }\n const index = table.getRecordShowIndexByCell(col, row);\n return table.internalProps.dataSource.getRawField(index, field, col, row, this);\n }\n /**\n * 拖拽移动表头位置\n * @param source 移动源位置\n * @param target 移动目标位置\n */\n _moveHeaderPosition(source: CellAddress, target: CellAddress) {\n const sourceCellRange = this.getCellRange(source.col, source.row);\n const targetCellRange = this.getCellRange(target.col, target.row);\n // 调用布局类 布局数据结构调整为移动位置后的\n const moveContext = this.internalProps.layoutMap.moveHeaderPosition(source, target);\n if (moveContext) {\n if (moveContext.moveType === 'column') {\n //colWidthsMap 中存储着每列的宽度 根据移动 sourceCol targetCol 调整其中的位置\n // this.colWidthsMap.adjustOrder(moveContext.sourceIndex, moveContext.targetIndex, moveContext.sourceSize);\n this.colWidthsMap.exchangeOrder(\n sourceCellRange.start.col,\n sourceCellRange.end.col - sourceCellRange.start.col + 1,\n targetCellRange.start.col,\n targetCellRange.end.col - targetCellRange.start.col + 1,\n moveContext.targetIndex\n );\n adjustWidthResizedColMap(moveContext, this);\n\n if (!this.transpose) {\n //下面代码取自refreshHeader列宽设置逻辑\n //设置列宽极限值 TODO 目前是有问题的 最大最小宽度限制 移动列位置后不正确\n this.colWidthsLimit = {}; //需要先清空\n this.setMinMaxLimitWidth();\n }\n // // 清空相关缓存\n // const colStart = Math.min(moveContext.sourceIndex, moveContext.targetIndex);\n // const colEnd = Math.max(moveContext.sourceIndex, moveContext.targetIndex);\n // for (let col = colStart; col <= colEnd; col++) {\n // this._clearColRangeWidthsMap(col);\n // }\n } else {\n // // 清空相关缓存\n // const rowStart = Math.min(moveContext.sourceIndex, moveContext.targetIndex);\n // const rowEnd = Math.max(moveContext.sourceIndex, moveContext.targetIndex);\n // for (let row = rowStart; row <= rowEnd; row++) {\n // this._clearRowRangeHeightsMap(row);\n // }\n //colWidthsMap 中存储着每列的宽度 根据移动 sourceCol targetCol 调整其中的位置\n // this.rowHeightsMap.adjustOrder(moveContext.sourceIndex, moveContext.targetIndex, moveContext.moveSize);\n if (moveContext.targetIndex > moveContext.sourceIndex) {\n this.rowHeightsMap.exchangeOrder(\n moveContext.sourceIndex,\n moveContext.sourceSize,\n moveContext.targetIndex + moveContext.sourceSize - moveContext.targetSize,\n moveContext.targetSize,\n moveContext.targetIndex\n );\n } else {\n this.rowHeightsMap.exchangeOrder(\n moveContext.sourceIndex,\n moveContext.sourceSize,\n moveContext.targetIndex,\n moveContext.targetSize,\n moveContext.targetIndex\n );\n }\n adjustHeightResizedRowMap(moveContext, this);\n }\n return moveContext;\n }\n return null;\n }\n changeRecordOrder(sourceIndex: number, targetIndex: number) {\n if (this.transpose) {\n sourceIndex = this.getRecordShowIndexByCell(sourceIndex, 0);\n targetIndex = this.getRecordShowIndexByCell(targetIndex, 0);\n } else {\n sourceIndex = this.getRecordShowIndexByCell(0, sourceIndex);\n targetIndex = this.getRecordShowIndexByCell(0, targetIndex);\n }\n this.dataSource.changeOrder(sourceIndex, targetIndex);\n }\n /**\n * 方法适用于获取body中某条数据的行列号\n * @param findTargetRecord 通过数据对象或者指定函数来计算数据条目index\n * @param field\n * @returns\n */\n getCellAddress(findTargetRecord: any | ((record: any) => boolean), field: FieldDef): CellAddress {\n let targetRecordIndex: number;\n\n for (let i = 0; i < this.internalProps.records.length; i++) {\n const record = this.internalProps.records[i];\n if (typeof findTargetRecord === 'function') {\n if ((<Function>findTargetRecord)(record)) {\n targetRecordIndex = i;\n }\n } else {\n let isAllRight = true;\n for (const prop in findTargetRecord) {\n if (record[prop] !== findTargetRecord[prop]) {\n isAllRight = false;\n break;\n }\n }\n if (isAllRight) {\n targetRecordIndex = i;\n }\n }\n if (isValid(targetRecordIndex)) {\n break;\n }\n }\n const cellRange = this.getCellRangeByField(field, targetRecordIndex);\n if (cellRange) {\n return { row: cellRange.start.row, col: cellRange.start.col };\n }\n return undefined;\n }\n /**\n * 获取指定field及指定数据条index的单元格位置\n * @param {*} field\n * @param {number} index 要获取的第几条数据\n * @return {number} 返回单元格的坐标范围 TODO 转置表有问题bug\n */\n getCellRangeByField(field: FieldDef, index: number): CellRange | null {\n const { layoutMap } = this.internalProps;\n const colObj = layoutMap.columnObjects.find((col: any) => col.field === field);\n if (colObj) {\n const layoutRange = layoutMap.getBodyLayoutRangeById(colObj.id);\n let startRow;\n if (isValid(index)) {\n startRow = layoutMap.getRecordStartRowByRecordIndex(index);\n }\n if (this.transpose) {\n return {\n start: {\n row: layoutRange.start.row,\n col: isValid(startRow) ? startRow + layoutRange.start.col : undefined\n },\n end: {\n row: layoutRange.end.row,\n col: isValid(startRow) ? startRow + layoutRange.end.col : undefined\n }\n };\n }\n return {\n start: {\n col: layoutRange.start.col,\n row: isValid(startRow) ? startRow + layoutRange.start.row : undefined // layoutRange.start.row这里是0 所以无意义\n },\n end: {\n col: layoutRange.end.col,\n row: isValid(startRow) ? startRow + layoutRange.end.row : undefined // layoutRange.start.row这里是0 所以无意义\n }\n };\n }\n return null;\n }\n /**\n * 获取层级节点收起展开的状态\n * @param col\n * @param row\n * @returns\n */\n getHierarchyState(col: number, row: number) {\n if (this.isHeader(col, row)) {\n return (this._getHeaderLayoutMap(col, row) as HeaderData)?.hierarchyState;\n }\n if (\n !(this.internalProps as ListTableProtected).groupBy ||\n (isArray((this.internalProps as ListTableProtected).groupBy) &&\n ((this.internalProps as ListTableProtected).groupBy as string[]).length === 0)\n ) {\n const define = this.getBodyColumnDefine(col, row) as ColumnDefine;\n if (!define.tree) {\n return HierarchyState.none;\n }\n }\n const index = this.getRecordShowIndexByCell(col, row);\n return this.dataSource.getHierarchyState(index);\n }\n /**\n * 获取单元格所在数据源的层级节点收起展开的状态\n * @param col\n * @param row\n * @returns\n */\n getRecordHierarchyState(col: number, row: number) {\n let recordIndex;\n if (this.transpose) {\n this.getRecordShowIndexByCell(col, 0);\n } else {\n recordIndex = this.getRecordShowIndexByCell(0, row);\n }\n return this.dataSource.getHierarchyState(recordIndex);\n }\n /**\n * 表头切换层级状态\n * @param col\n * @param row\n * @param recalculateColWidths 是否重新计算列宽 默认为true.(设置width:auto或者 autoWidth 情况下才有必要考虑该参数)\n */\n toggleHierarchyState(col: number, row: number, recalculateColWidths: boolean = true) {\n this.stateManager.updateHoverIcon(col, row, undefined, undefined);\n const hierarchyState = this.getHierarchyState(col, row);\n if (this.isHeader(col, row)) {\n // 表头的展开和收起\n const headerTreeNode = this.internalProps.layoutMap.getHeader(col, row) as any;\n const { hierarchyState: rawHierarchyState, define: columnDefine } = headerTreeNode;\n if (![HierarchyState.collapse, HierarchyState.expand].includes(rawHierarchyState) || !columnDefine) {\n return;\n }\n const children = columnDefine.columns;\n // 有子节点才需要自动展开和折叠\n if (!!Array.isArray(children) && children.length > 0) {\n const hierarchyState =\n rawHierarchyState === HierarchyState.expand ? HierarchyState.collapse : HierarchyState.expand;\n headerTreeNode.hierarchyState = hierarchyState;\n headerTreeNode.define.hierarchyState = hierarchyState;\n // 全量更新\n this.updateColumns(this.internalProps.columns);\n }\n\n this.fireListeners(TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE, {\n col,\n row,\n hierarchyState,\n originData: headerTreeNode,\n cellLocation: this.getCellLocation(col, row)\n });\n return;\n }\n\n if (hierarchyState === HierarchyState.expand) {\n this._refreshHierarchyState(col, row, recalculateColWidths);\n this.fireListeners(TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE, {\n col: col,\n row: row,\n hierarchyState: HierarchyState.collapse\n });\n } else if (hierarchyState === HierarchyState.collapse) {\n const record = this.getCellOriginRecord(col, row);\n if (Array.isArray(record.children)) {\n //children 是数组 表示已经有子树节点信息\n this._refreshHierarchyState(col, row, recalculateColWidths);\n }\n this.fireListeners(TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE, {\n col: col,\n row: row,\n hierarchyState: HierarchyState.expand,\n originData: record\n });\n }\n }\n /**\n * 开启层级节点展开的loading动画状态,在设置数据调用setRecordChildren后会自动关闭loading\n * @param col\n * @param row\n */\n setLoadingHierarchyState(col: number, row: number) {\n this.scenegraph.setLoadingHierarchyState(col, row);\n }\n\n /** 刷新当前节点收起展开状态,如手动更改过 */\n _refreshHierarchyState(col: number, row: number, recalculateColWidths: boolean = true) {\n let notFillWidth = false;\n let notFillHeight = false;\n const checkHasChart = this.internalProps.layoutMap.checkHasChart();\n // 检查当前状态总宽高未撑满autoFill是否在起作用\n if (checkHasChart) {\n if (this.autoFillWidth) {\n notFillWidth = this.getAllColsWidth() <= this.tableNoFrameWidth;\n }\n if (this.autoFillHeight) {\n notFillHeight = this.getAllRowsHeight() <= this.tableNoFrameHeight;\n }\n }\n const index = this.getRecordShowIndexByCell(col, row);\n const diffDataIndices = this.dataSource.toggleHierarchyState(\n index,\n this.scenegraph.proxy.rowStart - this.columnHeaderLevelCount,\n Math.max(\n this.scenegraph.proxy.rowEnd - this.columnHeaderLevelCount,\n this.scenegraph.proxy.rowStart - this.columnHeaderLevelCount + this.scenegraph.proxy.rowLimit - 1\n )\n );\n const diffPositions = this.internalProps.layoutMap.toggleHierarchyState(diffDataIndices);\n //影响行数\n this.refreshRowColCount();\n\n // for bottom frozen row height map\n for (let row = this.rowCount - this.bottomFrozenRowCount; row < this.rowCount; row++) {\n const newHeight = computeRowHeight(row, 0, this.colCount - 1, this);\n this._setRowHeight(row, newHeight);\n }\n\n this.clearCellStyleCache();\n this.internalProps.layoutMap.clearCellRangeMap();\n this.internalProps.useOneRowHeightFillAll = false;\n // ts-ignore\n // this.scenegraph.updateHierarchyIcon(col, row);// 添加了updateCells:[{ col, row }] 就不需要单独更新图标了(只更新图标针对有自定义元素的情况 会有更新不到问题)'\n // const updateCells = [{ col, row }];\n // // 如果需要移出的节点超过了当前加载部分最后一行 则转变成更新对应的行\n // if (\n // diffPositions.removeCellPositions?.length > 0 &&\n // diffPositions.removeCellPositions[diffPositions.removeCellPositions.length - 1].row >=\n // this.scenegraph.proxy.rowEnd\n // ) {\n // for (let i = 0; i <= diffPositions.removeCellPositions.length - 1; i++) {\n // if (diffPositions.removeCellPositions[i].row <= this.scenegraph.proxy.rowEnd) {\n // updateCells.push({\n // col: diffPositions.removeCellPositions[i].col,\n // row: diffPositions.removeCellPositions[i].row\n // });\n // }\n // }\n // diffPositions.removeCellPositions = [];\n\n // // reset proxy row config\n // this.scenegraph.proxy.refreshRowCount();\n // }\n\n const { updateCells, addCells, removeCells } = fixUpdateRowRange(diffPositions, col, row, this);\n this.reactCustomLayout?.clearCache();\n this.scenegraph.updateRow(\n // diffPositions.removeCellPositions,\n // diffPositions.addCellPositions,\n removeCells,\n addCells,\n updateCells,\n recalculateColWidths,\n true\n );\n this.reactCustomLayout?.updateAllCustomCell();\n\n if (checkHasChart) {\n // 检查更新节点状态后总宽高未撑满autoFill是否在起作用\n if (this.autoFillWidth && !notFillWidth) {\n notFillWidth = this.getAllColsWidth() <= this.tableNoFrameWidth;\n }\n if (this.autoFillHeight && !notFillHeight) {\n notFillHeight = this.getAllRowsHeight() <= this.tableNoFrameHeight;\n }\n if (this.widthMode === 'adaptive' || notFillWidth || this.heightMode === 'adaptive' || notFillHeight) {\n this.scenegraph.updateChartSizeForResizeColWidth(-1); // 如果收起展开有性能问题 可以排查下这个防范\n }\n }\n }\n\n _hasHierarchyTreeHeader() {\n return (this.options.columns ?? this.options.header)?.some((column, i) => column.tree);\n }\n\n getMenuInfo(col: number, row: number, type: string): DropDownMenuEventInfo {\n const result: DropDownMenuEventInfo = {\n field: this.getHeaderField(col, row),\n value: this.getCellValue(col, row),\n cellLocation: this.getCellLocation(col, row),\n event: undefined\n };\n return result;\n }\n _getSortFuncFromHeaderOption(\n columns: ColumnsDefine | undefined,\n field: FieldDef,\n fieldKey?: FieldKeyDef\n ): SortState['orderFn'] | undefined {\n if (!columns) {\n columns = this.internalProps.columns;\n }\n if (field && columns && columns.length > 0) {\n for (let i = 0; i < columns.length; i++) {\n const header = columns[i];\n if (\n ((fieldKey && fieldKey === header.fieldKey) || (!fieldKey && header.field === field)) &&\n header.sort &&\n typeof header.sort === 'function'\n ) {\n return header.sort;\n } else if (header.columns) {\n const sort = this._getSortFuncFromHeaderOption(header.columns, field, fieldKey);\n if (sort) {\n return sort;\n }\n }\n }\n }\n return undefined;\n }\n /**\n * 更新排序状态\n * @param sortState 要设置的排序状态\n * @param executeSort 是否执行内部排序逻辑,设置false将只更新图标状态\n */\n updateSortState(sortState: SortState[] | SortState | null, executeSort: boolean = true) {\n if (!sortState) {\n // 解除排序状态\n if (this.internalProps.sortState) {\n if (Array.isArray(this.internalProps.sortState)) {\n for (let i = 0; i < (<SortState[]>this.internalProps.sortState).length; i++) {\n sortState = this.internalProps.sortState?.[i];\n sortState && (sortState.order = 'normal');\n }\n } else {\n (<SortState>this.internalProps.sortState).order = 'normal';\n sortState = this.internalProps.sortState;\n }\n }\n } else {\n this.internalProps.sortState = sortState;\n // 这里的sortState需要有field属性\n // this.stateManager.setSortState(sortState as SortState);\n }\n\n sortState = Array.isArray(sortState) ? sortState : [sortState];\n\n if (sortState.some((item: any) => item.field) && executeSort) {\n if (this.internalProps.layoutMap.headerObjects.some(item => item.define.sort !== false)) {\n this.dataSource.sort(\n sortState.map((item: any) => {\n const sortFunc = this._getSortFuncFromHeaderOption(this.internalProps.columns, item.field);\n const hd = this.internalProps.layoutMap.headerObjects.find((col: any) => col && col.field === item.field);\n return {\n field: item.field,\n order: item.order,\n orderFn: sortFunc ?? defaultOrderFn\n };\n })\n );\n\n // clear cell range cache\n this.internalProps.layoutMap.clearCellRangeMap();\n this.internalProps.useOneRowHeightFillAll = false;\n this.scenegraph.sortCell();\n }\n }\n if (sortState.length) {\n this.stateManager.updateSortState(sortState);\n }\n }\n updateFilterRules(\n filterRules: FilterRules,\n options: {\n clearRowHeightCache?: boolean;\n onFilterRecordsEnd?: (records: any[]) => any[];\n } = { clearRowHeightCache: true }\n ) {\n this.scenegraph.clearCells();\n if (this.sortState) {\n this.dataSource.updateFilterRulesForSorted(filterRules);\n sortRecords(this);\n } else {\n this.dataSource.updateFilterRules(filterRules, options?.onFilterRecordsEnd);\n }\n this.refreshRowColCount();\n this.stateManager.initCheckedState(this.records);\n this.scenegraph.createSceneGraph(!!!options?.clearRowHeightCache);\n this.internalProps.emptyTip?.resetVisible();\n this.resize();\n }\n /** 获取过滤后的数据 */\n getFilteredRecords() {\n return this.dataSource.records;\n }\n /** 获取某个字段下checkbox 全部数据的选中状态 顺序对应原始传入数据records 不是对应表格展示row的状态值 */\n getCheckboxState(field?: string | number) {\n if (this.stateManager.checkedState.size < this.rowCount - this.columnHeaderLevelCount) {\n this.stateManager.initLeftRecordsCheckState(this.records);\n }\n if (isValid(field)) {\n // let stateArr = this.stateManager.checkedState.values() as any;\n // map按照key(dataIndex)的升序输出value\n // const keys = Array.from(this.stateManager.checkedState.keys()).sort(\n // (a: string, b: string) => Number(a) - Number(b)\n // );\n const keys = Array.from(this.stateManager.checkedState.keys()).sort((a: string, b: string) => {\n // number or number[]\n const aArr = (a as string).split(',');\n const bArr = (b as string).split(',');\n const maxLength = Math.max(aArr.length, bArr.length);\n\n // judge from first to last\n for (let i = 0; i < maxLength; i++) {\n const a = Number(aArr[i]) ?? 0;\n const b = Number(bArr[i]) ?? 0;\n if (a !== b) {\n return a - b;\n }\n }\n return 0;\n });\n let stateArr = keys.map(key => this.stateManager.checkedState.get(key));\n\n if (this.options.groupBy) {\n stateArr = getGroupCheckboxState(this) as any;\n }\n return Array.from(stateArr, (state: any) => {\n return state && state[field];\n });\n }\n return [...this.stateManager.checkedState.values()];\n }\n /** 获取某个单元格checkbox的状态 */\n getCellCheckboxState(col: number, row: number) {\n const define = this.getBodyColumnDefine(col, row) as ColumnDefine;\n const field = define?.field;\n const cellType = this.getCellType(col, row);\n if (isValid(field) && (cellType === 'checkbox' || cellType === 'switch')) {\n const dataIndex = this.dataSource.getIndexKey(this.getRecordShowIndexByCell(col, row)).toString();\n return this.stateManager.checkedState.get(dataIndex)?.[field as string | number];\n }\n return undefined;\n }\n /** 获取某个字段下checkbox 全部数据的选中状态 顺序对应原始传入数据records 不是对应表格展示row的状态值 */\n getRadioState(field?: string | number) {\n if (isValid(field)) {\n return this.stateManager.radioState[field];\n }\n return this.stateManager.radioState;\n }\n /** 获取某个单元格checkbox的状态 */\n getCellRadioState(col: number, row: number): boolean | number {\n return getCellRadioState(col, row, this);\n }\n setCellCheckboxState(col: number, row: number, checked: boolean | 'indeterminate') {\n setCellCheckboxState(col, row, checked, this);\n }\n setCellRadioState(col: number, row: number, index?: number) {\n setCellRadioState(col, row, index, this);\n }\n\n // switch 开关类型,状态管理同checkbox\n getSwitchState(field?: string | number) {\n return this.getCheckboxState(field);\n }\n getCellSwitchState(col: number, row: number) {\n return this.getCellCheckboxState(col, row);\n }\n setCellSwitchState(col: number, row: number, checked: boolean | 'indeterminate') {\n this.setCellCheckboxState(col, row, checked);\n }\n\n /**\n * 设置表格数据 及排序状态\n * @param records\n * @param option 附近参数,其中的sortState为排序状态,如果设置null 将清除目前的排序状态\n */\n setRecords(records: Array<any>, option?: { sortState?: SortState | SortState[] | null }): void {\n clearChartRenderQueue();\n // 释放事件 及 对象\n this.internalProps.dataSource?.release();\n // 过滤掉dataSource的引用\n this.internalProps.releaseList = this.internalProps.releaseList?.filter((item: any) => !item.dataSourceObj);\n this.internalProps.dataSource = null;\n let sort: SortState | SortState[];\n if (Array.isArray(option) || (option as any)?.order) {\n //兼容之前第二个参数为sort的情况\n sort = <any>option;\n } else if (option) {\n sort = option.sortState;\n } else if (option === null) {\n //兼容之前第二个参数为null来清除sort排序状态的逻辑\n sort = null;\n }\n const time = typeof window !== 'undefined' ? window.performance.now() : 0;\n const oldHoverState = { col: this.stateManager.hover.cellPos.col, row: this.stateManager.hover.cellPos.row };\n // 清空单元格内容\n this.scenegraph.clearCells();\n\n //重复逻辑抽取updateWidthHeight\n if (sort !== undefined) {\n if (sort === null || (!Array.isArray(sort) && isValid(sort.field)) || Array.isArray(sort)) {\n this.internalProps.sortState = this.internalProps.multipleSort ? (Array.isArray(sort) ? sort : [sort]) : sort;\n this.stateManager.setSortState((this as any).sortState as SortState);\n }\n }\n if (records) {\n _setRecords(this, records);\n if ((this as any).sortState) {\n const sortState = Array.isArray((this as any).sortState) ? (this as any).sortState : [(this as any).sortState];\n\n // 根据sort规则进行排序\n if (sortState.some((item: any) => item.order && item.field && item.order !== 'normal')) {\n // hd?.define?.sort && //如果这里也判断 那想要利用sortState来排序 但不显示排序图标就实现不了\n if (this.internalProps.layoutMap.headerObjectsIncludeHided.some(item => item.define.sort !== false)) {\n this.dataSource.sort(\n sortState.map((item: any) => {\n const sortFunc = this._getSortFuncFromHeaderOption(undefined, item.field);\n // 如果sort传入的信息不能生成正确的sortFunc,直接更新表格,避免首次加载无法正常显示内容\n const hd = this.internalProps.layoutMap.headerObjectsIncludeHided.find(\n (col: any) => col && col.field === item.field\n );\n return {\n field: item.field,\n order: item.order || 'asc',\n orderFn: sortFunc ?? defaultOrderFn\n };\n })\n );\n }\n }\n }\n this.refreshRowColCount();\n } else {\n _setRecords(this, records);\n }\n\n this.stateManager.initCheckedState(records);\n // this.internalProps.frozenColCount = this.options.frozenColCount || this.rowHeaderLevelCount;\n // 生成单元格场景树\n this.clearCellStyleCache();\n this.scenegraph.createSceneGraph();\n this.stateManager.updateHoverPos(oldHoverState.col, oldHoverState.row);\n\n this._updateSize();\n if (this.internalProps.title && !this.internalProps.title.isReleased) {\n this.internalProps.title.resize();\n }\n this.scenegraph.resize();\n\n if (this.options.emptyTip) {\n if (this.internalProps.emptyTip) {\n this.internalProps.emptyTip?.resetVisible();\n } else {\n const EmptyTip = Factory.getComponent('emptyTip') as IEmptyTipComponent;\n this.internalProps.emptyTip = new EmptyTip(this.options.emptyTip, this);\n this.internalProps.emptyTip?.resetVisible();\n }\n }\n\n this.render();\n if (isValid(oldHoverState.col) && isValid(oldHoverState.row) && oldHoverState.col >= 0 && oldHoverState.row >= 0) {\n setTimeout(() => {\n this.internalProps?.tooltipHandler.showTooltip(oldHoverState.col, oldHoverState.row);\n }, 0);\n }\n console.log('setRecords cost time:', (typeof window !== 'undefined' ? window.performance.now() : 0) - time);\n }\n /**\n * 基本表格树形展示场景下,如果需要动态插入子节点的数据可以配合使用该接口,其他情况不适用\n * @param records 设置到单元格其子节点的数据\n * @param col 需要设置子节点的单元格地址\n * @param row 需要设置子节点的单元格地址\n * @param recalculateColWidths 是否重新计算列宽 默认为true.(设置width:auto或者 autoWidth 情况下才有必要考虑该参数)\n */\n setRecordChildren(records: any[], col: number, row: number, recalculateColWidths: boolean = true) {\n const record = this.getCellOriginRecord(col, row);\n record.children = records;\n const index = this.getRecordShowIndexByCell(col, row);\n this.dataSource.setRecord(record, index);\n this._refreshHierarchyState(col, row, recalculateColWidths);\n }\n\n startEditCell(col?: number, row?: number, value?: string | number) {\n if (isValid(col) && isValid(row)) {\n this.eventManager.isDraging = false;\n this.selectCell(col, row);\n this.editorManager.startEditCell(col, row, value);\n } else if (this.stateManager.select?.cellPos) {\n const { col, row } = this.stateManager.select.cellPos;\n if (isValid(col) && isValid(row)) {\n this.editorManager.startEditCell(col, row, value);\n }\n }\n }\n /** 结束编辑 */\n completeEditCell() {\n this.editorManager.completeEdit();\n }\n /** 获取单元格对应的编辑器 */\n getEditor(col: number, row: number) {\n const lastSelectedCellEditor = this.editorManager.cacheLastSelectedCellEditor[`${col}-${row}`];\n if (lastSelectedCellEditor) {\n return lastSelectedCellEditor;\n }\n Object.values(this.editorManager.cacheLastSelectedCellEditor).forEach((editor: IEditor) => editor?.onEnd?.());\n this.editorManager.cacheLastSelectedCellEditor = {};\n const define = this.getBodyColumnDefine(col, row);\n let editor = this.isHeader(col, row)\n ? (define as ColumnDefine)?.headerEditor ?? this.options.headerEditor\n : (define as ColumnDefine)?.editor ?? this.options.editor;\n\n if (typeof editor === 'function') {\n const arg = {\n col,\n row,\n dataValue: this.getCellOriginValue(col, row),\n value: this.getCellValue(col, row) || '',\n table: this\n };\n editor = (editor as Function)(arg);\n }\n if (typeof editor === 'string') {\n editor = editors.get(editor);\n }\n if (editor) {\n this.editorManager.cacheLastSelectedCellEditor[`${col}-${row}`] = editor as IEditor;\n }\n return editor as IEditor;\n }\n /** 检查单元格是否定义过编辑器 不管编辑器是否有效 只要有定义就返回true */\n isHasEditorDefine(col: number, row: number) {\n const define = this.getBodyColumnDefine(col, row);\n let editorDefine = this.isHeader(col, row)\n ? (define as ColumnDefine)?.headerEditor ?? this.options.headerEditor\n : (define as ColumnDefine)?.editor ?? this.options.editor;\n\n if (typeof editorDefine === 'function') {\n const arg = {\n col,\n row,\n dataValue: this.getCellOriginValue(col, row),\n value: this.getCellValue(col, row) || '',\n table: this\n };\n editorDefine = (editorDefine as Function)(arg);\n }\n return isValid(editorDefine);\n }\n\n /**\n * 更改单元格数据 会触发change_cell_value事件\n * @param col\n * @param row\n * @param value 更改后的值\n * @param workOnEditableCell 限制只能更改配置了编辑器的单元格值。快捷键paste这里配置的true,限制只能修改可编辑单元格值\n * @param triggerEvent 是否在值发生改变的时候触发change_cell_value事件\n */\n changeCellValue(\n col: number,\n row: number,\n value: string | number | null,\n workOnEditableCell = false,\n triggerEvent = true,\n silentChangeCellValuesEvent?: boolean\n ) {\n return listTableChangeCellValue(\n col,\n row,\n value,\n workOnEditableCell,\n triggerEvent,\n this,\n silentChangeCellValuesEvent\n );\n }\n /**\n * 批量更新多个单元格的数据\n * @param col 粘贴数据的起始列号\n * @param row 粘贴数据的起始行号\n * @param values 多个单元格的数据数组\n * @param workOnEditableCell 是否仅更改可编辑单元格\n * @param triggerEvent 是否在值发生改变的时候触发change_cell_value事件\n */\n changeCellValues(\n startCol: number,\n startRow: number,\n values: (string | number)[][],\n workOnEditableCell = false,\n triggerEvent = true,\n silentChangeCellValuesEvent?: boolean\n ) {\n return listTableChangeCellValues(\n startCol,\n startRow,\n values,\n workOnEditableCell,\n triggerEvent,\n this,\n silentChangeCellValuesEvent\n );\n }\n\n changeCellValuesByIds(\n ranges: CellRange[],\n value: string | number | null,\n workOnEditableCell = false,\n triggerEvent = true,\n silentChangeCellValuesEvent?: boolean\n ) {\n // @ts-ignore\n return listTableChangeCellValuesByIds(\n ranges,\n value,\n workOnEditableCell,\n triggerEvent,\n this,\n silentChangeCellValuesEvent\n );\n }\n\n changeSourceCellValue(recordIndex: number | number[], field: FieldDef, value: string | number | null) {\n const tableIndex = this.getTableIndexByRecordIndex(recordIndex);\n const cellAddr = this.getCellAddrByFieldRecord(field, recordIndex);\n if (tableIndex < 0 || cellAddr.col < 0 || cellAddr.row < 0) {\n return;\n }\n this.dataSource.changeFieldValue(value, tableIndex, field, cellAddr.col, cellAddr.row, this);\n const beforeChangeValue = this.getCellRawValue(cellAddr.col, cellAddr.row);\n const oldValue = this.getCellOriginValue(cellAddr.col, cellAddr.row);\n const changedValue = this.getCellOriginValue(cellAddr.col, cellAddr.row);\n if (oldValue !== changedValue) {\n const changeValue = {\n col: cellAddr.col,\n row: cellAddr.row,\n recordIndex,\n field,\n rawValue: beforeChangeValue,\n currentValue: oldValue,\n changedValue\n };\n this.fireListeners(TABLE_EVENT_TYPE.CHANGE_CELL_VALUE, changeValue);\n this.fireListeners(TABLE_EVENT_TYPE.CHANGE_CELL_VALUES, { values: [changeValue] });\n }\n }\n\n changeCellValueByRecord(\n recordIndex: number | number[],\n field: FieldDef,\n value: string | number | null,\n options?: {\n triggerEvent?: boolean;\n silentChangeCellValuesEvent?: boolean;\n autoRefresh?: boolean;\n }\n ) {\n const triggerEvent = options?.triggerEvent ?? true;\n const silentChangeCellValuesEvent = options?.silentChangeCellValuesEvent;\n const autoRefresh = options?.autoRefresh ?? true;\n\n const records = (this.dataSource as DataSource).dataSourceObj?.records as any[] | undefined;\n let record: any;\n let oldValue: any;\n if (Array.isArray(records) && (typeof field === 'string' || typeof field === 'number')) {\n record = Array.isArray(recordIndex) ? getValueFromDeepArray(records, recordIndex) : records[recordIndex];\n oldValue = record?.[field as any];\n }\n\n this.dataSource.changeFieldValueByRecordIndex(value, recordIndex, field, this);\n\n if (!triggerEvent) {\n return;\n }\n\n const changedValue =\n record && (typeof field === 'string' || typeof field === 'number') ? record?.[field as any] : (value as any);\n\n if (oldValue !== changedValue) {\n const cellAddr = this.getCellAddrByFieldRecord(field, recordIndex);\n const changeValue = {\n col: cellAddr?.col ?? -1,\n row: cellAddr?.row ?? -1,\n recordIndex,\n field,\n rawValue: oldValue,\n currentValue: oldValue,\n changedValue\n };\n this.fireListeners(TABLE_EVENT_TYPE.CHANGE_CELL_VALUE, changeValue);\n if (!silentChangeCellValuesEvent) {\n this.fireListeners(TABLE_EVENT_TYPE.CHANGE_CELL_VALUES, { values: [changeValue] });\n }\n }\n\n if (autoRefresh) {\n this.refreshAfterSourceChange();\n }\n }\n\n changeCellValueBySource(\n recordIndex: number | number[],\n field: FieldDef,\n value: string | number | null,\n triggerEvent = true,\n silentChangeCellValuesEvent?: boolean\n ) {\n return this.changeCellValueByRecord(recordIndex, field, value, {\n triggerEvent,\n silentChangeCellValuesEvent,\n autoRefresh: true\n });\n }\n\n changeCellValuesByRecords(\n changeValues: {\n recordIndex: number | number[];\n field: FieldDef;\n value: string | number | null;\n }[],\n options?: {\n triggerEvent?: boolean;\n silentChangeCellValuesEvent?: boolean;\n autoRefresh?: boolean;\n }\n ) {\n const triggerEvent = options?.triggerEvent ?? true;\n const silentChangeCellValuesEvent = options?.silentChangeCellValuesEvent;\n const autoRefresh = options?.autoRefresh ?? true;\n\n const resultChangeValues: {\n col: number;\n row: number;\n recordIndex?: number | number[];\n field?: any;\n rawValue: string | number;\n currentValue: string | number;\n changedValue: string | number;\n }[] = [];\n\n for (let i = 0; i < changeValues.length; i++) {\n const { recordIndex, field, value } = changeValues[i];\n\n const records = (this.dataSource as DataSource).dataSourceObj?.records as any[] | undefined;\n let record: any;\n let oldValue: any;\n if (Array.isArray(records) && (typeof field === 'string' || typeof field === 'number')) {\n record = Array.isArray(recordIndex) ? getValueFromDeepArray(records, recordIndex) : records[recordIndex];\n oldValue = record?.[field as any];\n }\n\n this.dataSource.changeFieldValueByRecordIndex(value, recordIndex, field, this);\n\n if (triggerEvent) {\n const changedValue =\n record && (typeof field === 'string' || typeof field === 'number') ? record?.[field as any] : (value as any);\n if (oldValue !== changedValue) {\n const changeValue = {\n col: (this.getCellAddrByFieldRecord(field, recordIndex)?.col ?? -1) as number,\n row: (this.getCellAddrByFieldRecord(field, recordIndex)?.row ?? -1) as number,\n recordIndex,\n field,\n rawValue: oldValue,\n currentValue: oldValue,\n changedValue\n };\n this.fireListeners(TABLE_EVENT_TYPE.CHANGE_CELL_VALUE, changeValue);\n resultChangeValues.push(changeValue);\n }\n }\n }\n\n if (!silentChangeCellValuesEvent && resultChangeValues.length && triggerEvent) {\n this.fireListeners(TABLE_EVENT_TYPE.CHANGE_CELL_VALUES, { values: resultChangeValues });\n }\n\n if (autoRefresh) {\n this.refreshAfterSourceChange();\n }\n }\n\n changeCellValuesBySource(\n changeValues: {\n recordIndex: number | number[];\n field: FieldDef;\n value: string | number | null;\n }[],\n triggerEvent = true,\n silentChangeCellValuesEvent?: boolean\n ) {\n return this.changeCellValuesByRecords(changeValues, {\n triggerEvent,\n silentChangeCellValuesEvent,\n autoRefresh: true\n });\n }\n\n refreshAfterSourceChange(options?: {\n reapplyFilter?: boolean;\n reapplySort?: boolean;\n clearRowHeightCache?: boolean;\n }) {\n const reapplyFilter = options?.reapplyFilter ?? true;\n const reapplySort = options?.reapplySort ?? true;\n const clearRowHeightCache = options?.clearRowHeightCache ?? true;\n\n this.scenegraph.clearCells();\n\n if (this.sortState && reapplySort) {\n (this.dataSource as any).clearSortedIndexMap?.();\n (this.dataSource as any).sortedIndexMap?.clear?.();\n }\n\n if (reapplyFilter) {\n if (this.sortState && reapplySort) {\n this.dataSource.updateFilterRulesForSorted(this.dataSource.dataConfig?.filterRules);\n sortRecords(this);\n } else {\n this.dataSource.updateFilterRules(this.dataSource.dataConfig?.filterRules);\n }\n } else if (this.sortState && reapplySort) {\n sortRecords(this);\n }\n\n const traverseColumns = (columns: ColumnsDefine) => {\n for (let i = 0; i < (columns?.length ?? 0); i++) {\n const column: any = columns[i];\n const aggregators = column?.vtable_aggregator;\n if (aggregators) {\n if (Array.isArray(aggregators)) {\n for (let j = 0; j < aggregators.length; j++) {\n aggregators[j]?.recalculate?.();\n }\n } else {\n aggregators?.recalculate?.();\n }\n }\n if (column?.columns) {\n traverseColumns(column.columns);\n }\n }\n };\n traverseColumns(this.internalProps.columns);\n\n this.refreshRowColCount();\n this.internalProps.layoutMap.clearCellRangeMap();\n this.internalProps.useOneRowHeightFillAll = false;\n this.stateManager.initCheckedState(this.records);\n this.scenegraph.createSceneGraph(!clearRowHeightCache);\n this.internalProps.emptyTip?.resetVisible();\n this.resize();\n }\n /**\n * 添加数据 单条数据\n * @param record 数据\n * @param recordIndex 向数据源中要插入的位置,从0开始。不设置recordIndex的话 默认追加到最后。\n * 如果设置了排序规则recordIndex无效,会自动适应排序逻辑确定插入顺序。\n * recordIndex 可以通过接口getRecordShowIndexByCell获取\n */\n addRecord(record: any, recordIndex?: number | number[], triggerEvent = true) {\n const success = listTableAddRecord(record, recordIndex, this);\n adjustHeightResizedRowMapWithAddRecordIndex(this as ListTable, recordIndex as number, [record]);\n this.internalProps.emptyTip?.resetVisible();\n // 只在成功添加时触发事件\n if (triggerEvent && success) {\n this.fireListeners(TABLE_EVENT_TYPE.ADD_RECORD, {\n records: [record],\n recordIndex,\n recordCount: 1\n });\n }\n }\n\n /**\n * 添加数据 支持多条数据\n * @param records 多条数据\n * @param recordIndex 向数据源中要插入的位置,从0开始。不设置recordIndex的话 默认追加到最后。\n * 如果设置了排序规则recordIndex无效,会自动适应排序逻辑确定插入顺序。\n * recordIndex 可以通过接口getRecordShowIndexByCell获取\n */\n addRecords(records: any[], recordIndex?: number | number[], triggerEvent = true) {\n const success = listTableAddRecords(records, recordIndex, this);\n //_heightResizedRowMap修正,里面的行号需要修正,保证添加数据后 其他行号做对应调整\n if (typeof recordIndex === 'number') {\n adjustHeightResizedRowMapWithAddRecordIndex(this as ListTable, recordIndex as number, records);\n }\n this.internalProps.emptyTip?.resetVisible();\n\n // 只在成功添加时触发事件\n if (triggerEvent && success) {\n this.fireListeners(TABLE_EVENT_TYPE.ADD_RECORD, {\n records,\n recordIndex,\n recordCount: records.length\n });\n }\n }\n\n /**\n * 删除数据 支持多条数据\n * @param recordIndexs 要删除数据的索引(显示在body中的索引,即要修改的是body部分的第几行数据)\n */\n deleteRecords(recordIndexs: number[] | number[][], triggerEvent = true) {\n const deletedRecords: any[] = [];\n // 收集被删除的记录\n if (recordIndexs?.length > 0) {\n recordIndexs.forEach(index => {\n let record = null;\n if (typeof index === 'number') {\n record = this.dataSource.get(index);\n } else {\n // 目前无法正确处理嵌套情况\n record = [];\n }\n\n deletedRecords.push(record);\n });\n }\n\n listTableDeleteRecords(recordIndexs, this);\n adjustHeightResizedRowMapWithDeleteRecordIndex(this as ListTable, recordIndexs as number[]);\n this.internalProps.emptyTip?.resetVisible();\n const rowIndexs = [];\n for (let i = 0; i < recordIndexs.length; i++) {\n rowIndexs.push(this.getBodyRowIndexByRecordIndex(recordIndexs[i]) + this.columnHeaderLevelCount);\n }\n // 触发删除数据记录事件 - 假设操作成功\n if (triggerEvent) {\n this.fireListeners(TABLE_EVENT_TYPE.DELETE_RECORD, {\n recordIndexs,\n records: deletedRecords,\n rowIndexs,\n deletedCount: Array.isArray(recordIndexs[0])\n ? (recordIndexs as number[][]).length\n : (recordIndexs as number[]).length\n });\n }\n }\n\n /**\n * 修改数据 支持多条数据\n * @param records 修改数据条目\n * @param recordIndexs 对应修改数据的索引\n * 基本表格中显示在body中的索引,即要修改的是body部分的第几行数据;\n * 如果是树形结构的话 recordIndexs 为数组,数组中每个元素为data的原始数据索引;\n */\n updateRecords(records: any[], recordIndexs: (number | number[])[], triggerEvent = true) {\n listTableUpdateRecords(records, recordIndexs, this);\n\n // 触发更新数据记录事件 - 假设操作成功\n if (triggerEvent) {\n this.fireListeners(TABLE_EVENT_TYPE.UPDATE_RECORD, {\n records,\n recordIndexs,\n updateCount: records.length\n });\n }\n }\n\n _hasCustomRenderOrLayout() {\n const { headerObjects } = this.internalProps.layoutMap;\n if (this.options.customRender) {\n return true;\n }\n\n for (let i = 0; i < headerObjects.length; i++) {\n const headerObject = headerObjects[i];\n if (\n headerObject?.define?.customLayout ||\n headerObject?.define?.headerCustomLayout ||\n headerObject?.define?.customRender ||\n headerObject?.define?.headerCustomRender\n ) {\n return true;\n }\n }\n return false;\n }\n /**\n * 根据字段获取聚合值\n * @param field 字段名\n * 返回数组,包括列号和每一列的聚合值数组\n */\n getAggregateValuesByField(field: string | number): {\n col: number;\n aggregateValue: { aggregationType: AggregationType; value: number | string }[];\n }[] {\n const columns = this.internalProps.layoutMap.getColumnByField(field);\n const results: {\n col: number;\n aggregateValue: { aggregationType: AggregationType; value: number | string }[];\n }[] = [];\n for (let i = 0; i < columns.length; i++) {\n const aggregator = columns[i].columnDefine.aggregator;\n delete columns[i].columnDefine;\n if (aggregator) {\n const columnAggregateValue: {\n col: number;\n aggregateValue: { aggregationType: AggregationType; value: number | string }[];\n } = {\n col: columns[i].col,\n aggregateValue: null\n };\n columnAggregateValue.aggregateValue = [];\n if (Array.isArray(aggregator)) {\n for (let j = 0; j < aggregator.length; j++) {\n columnAggregateValue.aggregateValue.push({\n aggregationType: aggregator[j].type as AggregationType,\n value: aggregator[j].value()\n });\n }\n } else {\n columnAggregateValue.aggregateValue.push({\n aggregationType: aggregator.type as AggregationType,\n value: aggregator.value()\n });\n }\n\n results.push(columnAggregateValue);\n }\n }\n return results;\n }\n /** 是否为聚合值单元格 */\n isAggregation(col: number, row: number): boolean {\n return this.internalProps.layoutMap.isAggregation(col, row);\n }\n\n getGroupTitleLevel(col: number, row: number): number | undefined {\n if (!(this.internalProps as ListTableProtected).groupBy) {\n return undefined;\n }\n const indexArr = this.dataSource.getIndexKey(this.getRecordShowIndexByCell(col, row));\n const groupLength = (this.dataSource as CachedDataSource).getGroupLength() ?? 0;\n let indexArrLngth = isArray(indexArr) ? indexArr.length - 1 : 0;\n if (groupLength > 0 && indexArrLngth === groupLength) {\n indexArrLngth = undefined;\n }\n return indexArrLngth;\n }\n /**\n * 根据数据的索引获取应该显示在body的第几行\n * @param {number} index The record index.\n */\n getBodyRowIndexByRecordIndex(index: number | number[]): number {\n if (Array.isArray(index) && index.length === 1) {\n index = index[0];\n }\n return this.dataSource.getTableIndex(index);\n }\n\n release() {\n this.editorManager?.release();\n super.release();\n }\n\n /**\n * 展开所有树形节点\n */\n expandAllTreeNode(): void {\n if (!this._hasHierarchyTreeHeader()) {\n return;\n }\n\n let stateChanged = false;\n\n // 展开所有数据行节点\n if (this.dataSource && typeof (this.dataSource as any).expandAllNodes === 'function') {\n (this.dataSource as any).expandAllNodes();\n stateChanged = true;\n }\n\n // 刷新视图\n if (stateChanged) {\n // 使用轻量级的更新管道,而非重量级的 `updateColumns`。\n // 这个新方法会处理表头刷新、场景创建和渲染。\n this._recreateSceneForStateChange();\n\n this.fireListeners(TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE, {\n col: -1, // 表示非特定单元格操作\n row: -1,\n hierarchyState: HierarchyState.expand,\n originData: { children: this.records }\n });\n }\n }\n\n /**\n * 折叠所有树形节点\n */\n collapseAllTreeNode(): void {\n if (!this._hasHierarchyTreeHeader()) {\n return;\n }\n\n let stateChanged = false;\n\n // 折叠所有数据行节点\n if (this.dataSource && typeof (this.dataSource as any).collapseAllNodes === 'function') {\n (this.dataSource as any).collapseAllNodes();\n stateChanged = true;\n }\n\n // 刷新视图\n if (stateChanged) {\n // 使用轻量级的更新管道,而非重量级的 `updateColumns`。\n // 这个新方法会处理表头刷新、场景创建和渲染。\n this._recreateSceneForStateChange();\n\n this.fireListeners(TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE, {\n col: -1,\n row: -1,\n hierarchyState: HierarchyState.collapse,\n originData: { children: this.records }\n });\n }\n }\n /** 获取某个单元格checkbox的状态 */\n\n /**\n * 合并单元格 对外接口 。会自动刷新渲染节点\n * 注意:如果之前options有customMergeCell的函数配置,将失效重置为空数组\n */\n mergeCells(startCol: number, startRow: number, endCol: number, endRow: number) {\n // 先检查一遍这个区域是否有合并情况 有的话 不能再次合并\n for (let i = startCol; i <= endCol; i++) {\n for (let j = startRow; j <= endRow; j++) {\n const cellRange = this.getCellRange(i, j);\n if (cellRange.start.col !== cellRange.end.col || cellRange.start.row !== cellRange.end.row) {\n return;\n }\n }\n }\n if (!this.options.customMergeCell) {\n this.options.customMergeCell = [];\n } else if (typeof this.options.customMergeCell === 'function') {\n this.options.customMergeCell = [];\n }\n this.options.customMergeCell.push({\n text: this.getCellValue(startCol, startRow),\n range: {\n start: {\n col: startCol,\n row: startRow\n },\n end: {\n col: endCol,\n row: endRow\n }\n }\n });\n this.internalProps.customMergeCell = getCustomMergeCellFunc(this.options.customMergeCell);\n for (let i = startCol; i <= endCol; i++) {\n for (let j = startRow; j <= endRow; j++) {\n this.scenegraph.updateCellContent(i, j);\n }\n }\n this.scenegraph.updateNextFrame();\n }\n /** 取消合并单元格 对外接口 。会自动刷新渲染节点\n * 注意:如果之前options有customMergeCell的函数配置,将失效重置为空数组\n */\n unmergeCells(startCol: number, startRow: number, endCol: number, endRow: number) {\n if (!this.options.customMergeCell) {\n this.options.customMergeCell = [];\n } else if (typeof this.options.customMergeCell === 'function') {\n this.options.customMergeCell = [];\n }\n this.options.customMergeCell = this.options.customMergeCell.filter(item => {\n const { start, end } = item.range;\n return !(start.col === startCol && start.row === startRow && end.col === endCol && end.row === endRow);\n });\n this.internalProps.customMergeCell = getCustomMergeCellFunc(this.options.customMergeCell);\n for (let i = startCol; i <= endCol; i++) {\n for (let j = startRow; j <= endRow; j++) {\n this.scenegraph.updateCellContent(i, j);\n }\n }\n this.scenegraph.updateNextFrame();\n }\n}\n"]}