@visactor/vtable 1.22.11-alpha.10 → 1.22.11-alpha.11
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.
- package/cjs/PivotChart.js.map +1 -1
- package/cjs/core/BaseTable.js +1 -1
- package/cjs/core/BaseTable.js.map +1 -1
- package/cjs/event/listener/table-group.js.map +1 -1
- package/cjs/index.d.ts +1 -1
- package/cjs/index.js +1 -1
- package/cjs/index.js.map +1 -1
- package/cjs/layout/index.js +1 -2
- package/cjs/layout/layout-helper.js +1 -1
- package/cjs/layout/pivot-header-layout.js +4 -3
- package/cjs/layout/pivot-header-layout.js.map +1 -1
- package/cjs/layout/row-height-map.js +1 -1
- package/cjs/layout/simple-header-layout.js +1 -1
- package/cjs/layout/tree-helper.js +1 -1
- package/cjs/plugins/custom-cell-style.js +2 -1
- package/cjs/plugins/interface.js +1 -1
- package/cjs/plugins/invert-highlight.js +1 -1
- package/cjs/plugins/list-tree-stick-cell.js +1 -1
- package/cjs/plugins/plugin-manager.js +1 -1
- package/cjs/scenegraph/graphic/active-cell-chart-list.d.ts +5 -1
- package/cjs/scenegraph/graphic/active-cell-chart-list.js +45 -12
- package/cjs/scenegraph/graphic/active-cell-chart-list.js.map +1 -1
- package/cjs/scenegraph/graphic/chart.js +2 -2
- package/cjs/scenegraph/graphic/chart.js.map +1 -1
- package/cjs/scenegraph/scenegraph.js +7 -16
- package/cjs/scenegraph/scenegraph.js.map +1 -1
- package/cjs/state/state.js +1 -1
- package/cjs/vrender.js.map +1 -1
- package/dist/vtable.js +61 -24
- package/dist/vtable.min.js +1 -1
- package/es/PivotChart.js.map +1 -1
- package/es/core/BaseTable.js +1 -1
- package/es/core/BaseTable.js.map +1 -1
- package/es/event/listener/table-group.js.map +1 -1
- package/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/es/index.js.map +1 -1
- package/es/layout/index.js +1 -2
- package/es/layout/layout-helper.js +1 -1
- package/es/layout/pivot-header-layout.js +4 -2
- package/es/layout/pivot-header-layout.js.map +1 -1
- package/es/layout/row-height-map.js +1 -1
- package/es/layout/simple-header-layout.js +1 -1
- package/es/layout/tree-helper.js +1 -1
- package/es/plugins/custom-cell-style.js +2 -1
- package/es/plugins/interface.js +1 -1
- package/es/plugins/invert-highlight.js +1 -1
- package/es/plugins/list-tree-stick-cell.js +1 -1
- package/es/plugins/plugin-manager.js +1 -1
- package/es/scenegraph/graphic/active-cell-chart-list.d.ts +5 -1
- package/es/scenegraph/graphic/active-cell-chart-list.js +40 -10
- package/es/scenegraph/graphic/active-cell-chart-list.js.map +1 -1
- package/es/scenegraph/graphic/chart.js +2 -3
- package/es/scenegraph/graphic/chart.js.map +1 -1
- package/es/scenegraph/scenegraph.js +8 -17
- package/es/scenegraph/scenegraph.js.map +1 -1
- package/es/state/state.js +1 -1
- package/es/vrender.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/layout/pivot-header-layout.ts"],"names":[],"mappings":"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","file":"pivot-header-layout.js","sourcesContent":["/* eslint-disable sort-imports */\nimport { transpose } from '../tools/util';\nimport type {\n CellAddress,\n CellRange,\n IPivotTableCellHeaderPaths,\n LayoutObjectId,\n ShowColumnRowType,\n CellLocation,\n IHeaderTreeDefine,\n IDimension,\n IIndicator,\n ITitleDefine,\n ICornerDefine,\n IDimensionInfo,\n IExtensionRowDefine,\n IPagination,\n IColumnDimension,\n IRowDimension,\n IChartIndicator,\n IRowSeriesNumber,\n CellPivotRole\n} from '../ts-types';\nimport { HierarchyState } from '../ts-types';\nimport type {\n HeaderData,\n IndicatorData,\n LayoutMapAPI,\n SeriesNumberColumnData,\n // PivotTableLayoutDefine,\n WidthData\n} from '../ts-types/list-table/layout-map/api';\n// import { EmptyDataCache } from './utils';\nimport type { PivotTable } from '../PivotTable';\nimport type { PivotChart } from '../PivotChart';\nimport { IndicatorDimensionKeyPlaceholder } from '../tools/global';\nimport { diffCellAddress, diffCellAddressForGridTree, diffCellAddressForGridTreeOnColumn } from '../tools/diff-cell';\nimport {\n checkHasCartesianChart,\n checkHasChart,\n getChartAxes,\n getChartDataId,\n getChartSpec,\n getRawChartSpec,\n isCartesianChart,\n isHasCartesianChartInline,\n isNoChartDataRenderNothing,\n isShareChartSpec\n} from './chart-helper/get-chart-spec';\nimport type { ITreeLayoutHeadNode, LayouTreeNode } from './tree-helper';\nimport {\n DimensionTree,\n countLayoutTree,\n dealHeader,\n dealHeaderForGridTreeMode,\n dealHeaderForTreeMode,\n generateLayoutTree\n} from './tree-helper';\nimport type { Dataset } from '../dataset/dataset';\nimport { cloneDeep, isArray, isValid } from '@visactor/vutils';\nimport type { TextStyle } from '../body-helper/style';\nimport type { ITableAxisOption } from '../ts-types/component/axis';\nimport { getQuadProps } from '../scenegraph/utils/padding';\nimport type { GetAxisConfigInPivotChart } from './chart-helper/get-axis-config';\nimport { Factory } from '../core/factory';\n\n// export const sharedVar = { seqId: 0 };\n// let colIndex = 0;\n\nconst defaultDimension = { startInTotal: 0, afterSpanLevel: 0 };\nexport class PivotHeaderLayoutMap implements LayoutMapAPI {\n sharedVar: { seqId: number };\n colIndex = 0;\n _showHeader = true;\n rowDimensionTree: DimensionTree;\n columnDimensionTree: DimensionTree;\n rowTree: IHeaderTreeDefine[];\n columnTree: IHeaderTreeDefine[];\n cornerHeaderObjs: HeaderData[];\n columnHeaderObjs: HeaderData[] = [];\n rowHeaderObjs: HeaderData[] = [];\n\n private _cornerHeaderCellFullPathIds: number[][] = [];\n private _columnHeaderCellFullPathIds: number[][] = [];\n private _rowHeaderCellFullPathIds: number[][] = [];\n private _rowHeaderCellFullPathIds_FULL: number[][] = []; //分页需求新增 为了保存全量的id 当页的是_rowHeaderCellFullPathIds\n\n /**下面四份代表实际展示的 如果隐藏了某部分表头 那这里就会相比上面的数组少了隐藏掉的id 例如收hideIndicatorName影响*/\n _cornerHeaderCellIds: number[][] = [];\n private _columnHeaderCellIds: number[][] = [];\n private _rowHeaderCellIds: number[][] = [];\n private _rowHeaderCellIds_FULL: number[][] = []; //分页需求新增 为了保存全量的id 当页的是_rowHeaderCellIds\n\n private _columnWidths: WidthData[] = [];\n private _columnHeaderLevelCount: number;\n private _rowHeaderLevelCount: number;\n rowsDefine: (IRowDimension | string)[];\n columnsDefine: (IColumnDimension | string)[];\n indicatorsDefine: (IIndicator | IChartIndicator | string)[];\n columnPaths: number[][] = [];\n _headerObjects: HeaderData[] = [];\n private _headerObjectMap: { [key: LayoutObjectId]: HeaderData } = {};\n // private _emptyDataCache = new EmptyDataCache();\n _indicators: IndicatorData[] = [];\n indicatorTitle: string;\n indicatorsAsCol = true;\n hideIndicatorName = false;\n _showRowHeader = true;\n _showColumnHeader = true;\n _rowHeaderTitle: ITitleDefine;\n _columnHeaderTitle: ITitleDefine;\n cornerSetting: ICornerDefine;\n private _indicatorShowType: ShowColumnRowType = 'column';\n /**层级维度结构显示形式 */\n rowHierarchyType?: 'grid' | 'tree' | 'grid-tree';\n columnHierarchyType?: 'grid' | 'grid-tree';\n\n rowExpandLevel?: number;\n columnExpandLevel?: number;\n rowHierarchyIndent?: number;\n rowHierarchyTextStartAlignment?: boolean = false;\n /**\n * 行表头对应的维度key集合\n */\n rowDimensionKeys: string[] = [];\n /**\n * 列表头对应的维度key集合\n */\n colDimensionKeys: string[] = [];\n indicatorKeys: string[] = [];\n indicatorDimensionKey: string = IndicatorDimensionKeyPlaceholder;\n // 缓存行号列号对应的cellRange 需要注意当表头位置拖拽后 这个缓存的行列号已不准确 进行重置\n // private _cellRangeMap: Map<string, CellRange>; //存储单元格的行列号范围 针对解决是否为合并单元格情况\n private _largeCellRangeCache: CellRange[];\n // 缓存行号列号对应的headerPath,注意树形结构展开需要清除! 需要注意当表头位置拖拽后 这个缓存的行列号已不准确 进行重置\n private _CellHeaderPathMap: Map<string, IPivotTableCellHeaderPaths>;\n _table: PivotTable | PivotChart;\n extensionRows: IExtensionRowDefine[];\n _rowHeaderExtensionTree: any = {};\n\n /**\n * 扩展行表头对应的维度key集合\n */\n _extensionRowDimensionKeys: string[][] = [];\n fullRowDimensionKeys: string[] = [];\n\n dataset: Dataset;\n /**\n * 分页配置\n */\n pagination: IPagination;\n currentPageStartIndex: number;\n currentPageEndIndex: number;\n // _extensionRowHeaderCellIds\n //#region pivotChart专有\n /** 指标轴是否存在(按方位区分,用于更精确布局) */\n hasLeftIndicatorAxis: boolean = false;\n hasRightIndicatorAxis: boolean = false;\n hasTopIndicatorAxis: boolean = false;\n hasBottomIndicatorAxis: boolean = false;\n /** 图表spec中barWidth的收集 */\n _chartItemSpanSize: number;\n _chartPaddingInner: number;\n _chartPaddingOuter: number;\n _chartItemBandSize: number;\n _chartPadding?: number | number[];\n\n rowSeriesNumberColumn: SeriesNumberColumnData[];\n leftRowSeriesNumberColumn: SeriesNumberColumnData[];\n leftRowSeriesNumberColumnCount: number = 0;\n rightRowSeriesNumberColumn: SeriesNumberColumnData[];\n rightRowSeriesNumberColumnCount: number = 0;\n //#endregion\n\n _useGetBodyCache: boolean = false;\n _getBodyCache: Map<number, IndicatorData | SeriesNumberColumnData> = new Map();\n\n _useHeaderPathCache: boolean = false;\n _colHeaderPathCache: Map<number, ITreeLayoutHeadNode[]> = new Map();\n _rowHeaderPathCache: Map<number, ITreeLayoutHeadNode[]> = new Map();\n constructor(\n table: PivotTable | PivotChart,\n dataset: Dataset,\n columnDimensionTree: DimensionTree,\n rowDimensionTree: DimensionTree\n ) {\n this.sharedVar = table.layoutNodeId;\n this._table = table;\n if ((table as PivotTable).options.rowHierarchyType === 'tree') {\n this.extensionRows = (table as PivotTable).options.extensionRows;\n }\n this.dataset = dataset;\n // this._cellRangeMap = new Map();\n this._largeCellRangeCache = [];\n this._CellHeaderPathMap = new Map();\n // this.showHeader = showHeader;\n // this.pivotLayout = pivotLayoutObj;\n this.rowTree = table.internalProps.rowTree;\n this.columnTree = table.internalProps.columnTree;\n this.rowsDefine = table.internalProps.rows ?? [];\n this.columnsDefine = table.internalProps.columns ?? [];\n this.indicatorsDefine = table.internalProps.indicators ?? [];\n this.indicatorTitle = table.options.indicatorTitle;\n this.indicatorsAsCol = table.options.indicatorsAsCol ?? true;\n this.hideIndicatorName = table.options.hideIndicatorName ?? false;\n this.showRowHeader = table.options.showRowHeader ?? true;\n this.showColumnHeader = table.options.showColumnHeader ?? true;\n this.rowHeaderTitle = table.options.rowHeaderTitle;\n this.columnHeaderTitle = table.options.columnHeaderTitle;\n this.rowHierarchyType = (table as PivotTable).options.rowHierarchyType ?? 'grid';\n this.columnHierarchyType = (table as PivotTable).options.columnHierarchyType ?? 'grid';\n this.rowExpandLevel = (table as PivotTable).options.rowExpandLevel ?? 1;\n this.columnExpandLevel = (table as PivotTable).options.columnExpandLevel ?? 1;\n this.rowHierarchyIndent = (table as PivotTable).options.rowHierarchyIndent ?? 20;\n this.rowHierarchyTextStartAlignment = (table as PivotTable).options.rowHierarchyTextStartAlignment;\n this.cornerSetting = Object.assign({ titleOnDimension: 'column', forceShowHeader: false }, table.options.corner);\n\n if (this._table.options?.customConfig?.enablePivotPathCache) {\n this._useHeaderPathCache = true;\n this._colHeaderPathCache.clear();\n this._rowHeaderPathCache.clear();\n }\n\n if (dataset) {\n this.rowTree = dataset.rowHeaderTree;\n this.columnTree = dataset.colHeaderTree;\n }\n // 收集指标所有key\n this.indicatorsDefine?.forEach(indicator => {\n // this.indicatorKeys[indicator.indicatorKey] = indicator.value;\n if (typeof indicator === 'string') {\n this.indicatorKeys.push(indicator);\n } else {\n this.indicatorKeys.push(indicator.indicatorKey);\n }\n });\n this.columnDimensionTree = columnDimensionTree; // new DimensionTree((this.columnTree as ITreeLayoutHeadNode[]) ?? [], this.sharedVar);\n this.rowDimensionTree = rowDimensionTree;\n // new DimensionTree(\n // (this.rowTree as ITreeLayoutHeadNode[]) ?? [],\n // this.sharedVar,\n // this.rowHierarchyType,\n // this.rowHierarchyType === 'tree' ? this.rowExpandLevel : undefined\n // );\n this.colDimensionKeys = this.columnDimensionTree.dimensionKeysIncludeVirtual.valueArr();\n this.rowDimensionKeys = this.rowDimensionTree.dimensionKeysIncludeVirtual.valueArr();\n this.fullRowDimensionKeys = this.fullRowDimensionKeys.concat(this.rowDimensionKeys);\n\n if (this._table.isPivotChart()) {\n this.hasLeftIndicatorAxis = false;\n this.hasRightIndicatorAxis = false;\n this.hasTopIndicatorAxis = false;\n this.hasBottomIndicatorAxis = false;\n\n // 根据 chartSpec.axes / pivotChartAxes 推断“指标轴”的分布(按方位),并写回到 indicator define 上供后续轴配置/布局使用\n this.indicatorsDefine.forEach((indicatorObject: any) => {\n // 默认全部置为 false,避免复用旧对象时残留脏数据\n indicatorObject.hasLeftIndicatorAxis = false;\n indicatorObject.hasRightIndicatorAxis = false;\n indicatorObject.hasTopIndicatorAxis = false;\n indicatorObject.hasBottomIndicatorAxis = false;\n\n if (!indicatorObject?.chartSpec) {\n return;\n }\n\n const axes = indicatorObject.chartSpec.axes ?? (this._table as PivotChart).pivotChartAxes ?? [];\n const visibleOrients = new Set<string>();\n (axes ?? []).forEach((axis: any) => {\n if (axis?.orient && axis.visible !== false) {\n visibleOrients.add(axis.orient);\n }\n });\n\n const isMultiSeries = indicatorObject.chartSpec?.series?.length > 1;\n\n if (this.indicatorsAsCol) {\n // 指标在列:指标轴位于 top/bottom\n let hasTop = visibleOrients.has('top');\n let hasBottom = visibleOrients.has('bottom');\n\n // 未配置 axes 时,默认存在 bottom 指标轴(与现有 bottomFrozenRowCount 逻辑保持一致)\n if (!axes.length) {\n hasBottom = true;\n }\n\n // 多系列场景:若未显式隐藏 top 轴,则认为存在 top 副指标轴(并同时认为 bottom 主指标轴存在)\n if (isMultiSeries) {\n const topHiddenExplicitly = axes.some((axis: any) => axis?.orient === 'top' && axis.visible === false);\n if (!axes.length || !topHiddenExplicitly) {\n hasTop = true;\n const bottomHiddenExplicitly = axes.some(\n (axis: any) => axis?.orient === 'bottom' && axis.visible === false\n );\n if (!bottomHiddenExplicitly) {\n hasBottom = true;\n }\n }\n }\n\n indicatorObject.hasTopIndicatorAxis = hasTop;\n indicatorObject.hasBottomIndicatorAxis = hasBottom;\n // 指标在列时 left/right 不是“指标轴”\n indicatorObject.hasLeftIndicatorAxis = false;\n indicatorObject.hasRightIndicatorAxis = false;\n } else {\n // 指标在行:指标轴位于 left/right\n let hasLeft = visibleOrients.has('left');\n let hasRight = visibleOrients.has('right');\n\n // 未配置 axes 时,默认存在 left 指标轴(与现有 leftAxesCount/布局逻辑保持一致)\n if (!axes.length) {\n hasLeft = true;\n }\n\n // 多系列场景:若未显式隐藏 right 轴,则认为存在 right 副指标轴(并同时认为 left 主指标轴存在)\n if (isMultiSeries) {\n const rightHiddenExplicitly = axes.some((axis: any) => axis?.orient === 'right' && axis.visible === false);\n if (!axes.length || !rightHiddenExplicitly) {\n hasRight = true;\n const leftHiddenExplicitly = axes.some((axis: any) => axis?.orient === 'left' && axis.visible === false);\n if (!leftHiddenExplicitly) {\n hasLeft = true;\n }\n }\n }\n\n indicatorObject.hasLeftIndicatorAxis = hasLeft;\n indicatorObject.hasRightIndicatorAxis = hasRight;\n // 指标在行时 top/bottom 不是“指标轴”\n indicatorObject.hasTopIndicatorAxis = false;\n indicatorObject.hasBottomIndicatorAxis = false;\n }\n\n // 汇总到 layout 级别(任意指标存在对应方位轴,则 layout 认为存在)\n this.hasLeftIndicatorAxis ||= !!indicatorObject.hasLeftIndicatorAxis;\n this.hasRightIndicatorAxis ||= !!indicatorObject.hasRightIndicatorAxis;\n this.hasTopIndicatorAxis ||= !!indicatorObject.hasTopIndicatorAxis;\n this.hasBottomIndicatorAxis ||= !!indicatorObject.hasBottomIndicatorAxis;\n });\n }\n this.resetRowHeaderLevelCount();\n this.resetColumnHeaderLevelCount();\n\n // this.indicatorsAsCol = !isValid(this.rowDimensionKeys.find(key => key === this.indicatorDimensionKey));\n // this.colAttrs[this.colAttrs.length-1]===this.indicatorDimensionKey&&this.colAttrs.pop();\n // this.rowAttrs[this.rowAttrs.length-1]===this.indicatorDimensionKey&&this.rowAttrs.pop();\n //生成列表头单元格\n this._generateColHeaderIds();\n\n this.colIndex = 0;\n //生成行表头单元格\n this._generateRowHeaderIds();\n\n this._rowHeaderCellFullPathIds_FULL = transpose(this._rowHeaderCellFullPathIds_FULL);\n if ((table as PivotTable).options.rowHierarchyType === 'tree' && this.extensionRows?.length >= 1) {\n this.generateExtensionRowTree();\n\n this.extensionRows.forEach(extensionRow => {\n const rowKeys: string[] = [];\n extensionRow.rows.forEach(row => {\n if (typeof row === 'string') {\n rowKeys.push(row);\n } else {\n rowKeys.push(row.dimensionKey);\n }\n });\n this._extensionRowDimensionKeys.push(rowKeys);\n this.fullRowDimensionKeys = this.fullRowDimensionKeys.concat(rowKeys);\n });\n }\n\n this.sharedVar.seqId = Math.max(this.sharedVar.seqId, this._headerObjects.length);\n //#region 生成cornerHeaderObjs及_cornerHeaderCellIds\n // if (this.cornerSetting.titleOnDimension === 'all') {\n let colDimensionKeys = this.columnDimensionTree.dimensionKeysIncludeVirtual.valueArr();\n //#region 处理需求 当没有数据时仍然显示角头维度名称\n if (\n this.dataset &&\n !this._table.isPivotChart() &&\n (this.dataset.records?.length ?? 0) === 0 &&\n !this.dataset.customColTree\n // &&\n // !this.dataset.customRowTree\n ) {\n colDimensionKeys = this.columnsDefine.map(define => {\n if (typeof define === 'string') {\n return define;\n }\n return define.dimensionKey;\n });\n if (this.indicatorsAsCol) {\n colDimensionKeys.push(this.indicatorDimensionKey);\n }\n }\n //#endregion\n\n colDimensionKeys = this.columnHeaderTitle ? [''].concat(colDimensionKeys) : colDimensionKeys;\n\n let rowDimensionKeys: string[];\n let extensionRowDimensions = [];\n if (this.rowHierarchyType === 'tree' && this.extensionRows?.length >= 1) {\n // 如果是有扩展行维度\n const rowTreeFirstKey = [];\n rowTreeFirstKey.push(this.rowDimensionKeys[0]);\n this._extensionRowDimensionKeys.forEach(extensionRowKeys => {\n rowTreeFirstKey.push(extensionRowKeys[0]);\n });\n extensionRowDimensions = this.extensionRows.reduce((dimensions, cur) => {\n return dimensions.concat(cur.rows);\n }, []);\n\n rowDimensionKeys = this.rowHeaderTitle ? [''].concat(rowTreeFirstKey as any) : rowTreeFirstKey;\n } else {\n //#region 处理需求 当没有数据时仍然显示角头维度名称\n rowDimensionKeys = this.rowDimensionTree.dimensionKeysIncludeVirtual.valueArr();\n if (\n this.dataset &&\n !this._table.isPivotChart() &&\n (this.dataset.records?.length ?? 0) === 0 &&\n // !this.dataset.customColTree &&\n !this.dataset.customRowTree\n ) {\n rowDimensionKeys = this.rowsDefine.map(define => {\n if (typeof define === 'string') {\n return define;\n }\n return define.dimensionKey;\n });\n if (!this.indicatorsAsCol) {\n rowDimensionKeys.push(this.indicatorDimensionKey);\n }\n }\n //#endregion\n rowDimensionKeys = this.rowHeaderTitle ? [''].concat(rowDimensionKeys) : rowDimensionKeys;\n }\n\n this.cornerHeaderObjs = this._addCornerHeaders(\n colDimensionKeys,\n rowDimensionKeys,\n this.columnsDefine.concat(...this.rowsDefine, ...extensionRowDimensions)\n );\n //#endregion\n this.colIndex = 0;\n this._headerObjectMap = this._headerObjects.reduce((o, e) => {\n o[e.id as number] = e;\n return o;\n }, {} as { [key: LayoutObjectId]: HeaderData });\n\n if (this.indicatorsAsCol && !this.hideIndicatorName) {\n this._indicatorShowType = 'column';\n } else if (!this.indicatorsAsCol && !this.hideIndicatorName) {\n this._indicatorShowType = 'row';\n } else {\n this._indicatorShowType = 'none';\n }\n\n this.generateCellIdsConsiderHideHeader();\n this.setPagination((table as PivotTable).options.pagination);\n\n if (this._table.isPivotChart()) {\n this._chartItemSpanSize = 0;\n this._chartItemBandSize = 0;\n // this._chartPadding ;\n this._indicators.find(indicatorObject => {\n if ((indicatorObject?.style as TextStyle)?.padding) {\n this._chartPadding = (indicatorObject.style as TextStyle).padding as number;\n }\n if (indicatorObject.chartSpec?.barWidth && typeof indicatorObject.chartSpec.barWidth === 'number') {\n this._chartItemSpanSize = indicatorObject.chartSpec?.barWidth;\n }\n const bandAxisConfig = indicatorObject.chartSpec?.axes?.find((axis: any) => {\n return axis.type === 'band';\n });\n if (bandAxisConfig?.bandSize) {\n this._chartItemBandSize = bandAxisConfig?.bandSize;\n this._chartPaddingInner =\n (isArray(bandAxisConfig.paddingInner) ? bandAxisConfig.paddingInner[0] : bandAxisConfig.paddingInner) ?? 0;\n this._chartPaddingOuter =\n (isArray(bandAxisConfig.paddingOuter) ? bandAxisConfig.paddingOuter[0] : bandAxisConfig.paddingOuter) ?? 0;\n }\n if (this._chartItemSpanSize > 0) {\n return true;\n }\n indicatorObject.chartSpec.series?.find((seriesObject: any) => {\n if (seriesObject.barWidth && typeof seriesObject.barWidth === 'number') {\n this._chartItemSpanSize = seriesObject.barWidth;\n }\n if (this._chartItemSpanSize > 0) {\n return true;\n }\n return false;\n });\n // if (this._chartItemSpanSize > 0) {\n // return true;\n // }\n return false;\n });\n }\n this.handleRowSeriesNumber(table.internalProps.rowSeriesNumber);\n\n this.setColumnWidths();\n }\n handleRowSeriesNumber(rowSeriesNumber: IRowSeriesNumber) {\n if (rowSeriesNumber) {\n if (Array.isArray(rowSeriesNumber)) {\n this.rowSeriesNumberColumn = rowSeriesNumber.map((seriesNumber: IRowSeriesNumber) => {\n return {\n id: '',\n title: seriesNumber.title,\n define: seriesNumber,\n cellType: seriesNumber.cellType ?? 'text',\n headerType: seriesNumber.cellType && seriesNumber.cellType !== 'radio' ? seriesNumber.cellType : 'text',\n width: seriesNumber.width,\n style: seriesNumber.style,\n format: seriesNumber.format,\n field: (seriesNumber as any).field,\n icon: seriesNumber.icon,\n headerIcon: seriesNumber.headerIcon,\n isChildNode: false\n };\n });\n } else {\n this.rowSeriesNumberColumn = [\n {\n id: '',\n title: rowSeriesNumber.title,\n define: rowSeriesNumber,\n cellType: rowSeriesNumber.cellType ?? 'text',\n headerType:\n rowSeriesNumber.cellType && rowSeriesNumber.cellType !== 'radio' ? rowSeriesNumber.cellType : 'text',\n style: rowSeriesNumber.style,\n width: rowSeriesNumber.width,\n format: rowSeriesNumber.format,\n field: '', // rowSeriesNumber.field,\n icon: rowSeriesNumber.icon,\n headerIcon: rowSeriesNumber.headerIcon,\n isChildNode: false\n }\n ];\n }\n this.leftRowSeriesNumberColumn = this.rowSeriesNumberColumn.filter(rowSeriesNumberItem => {\n // if (rowSeriesNumberItem.define.align === 'left' || !isValid(rowSeriesNumberItem.define.align)) {\n // return true;\n // }\n return true;\n });\n this.rightRowSeriesNumberColumn = this.rowSeriesNumberColumn.filter(rowSeriesNumberItem => {\n // if (rowSeriesNumberItem.define.align === 'right') {\n // return true;\n // }\n return false;\n });\n this.leftRowSeriesNumberColumnCount = this.leftRowSeriesNumberColumn.length;\n this.rightRowSeriesNumberColumnCount = this.rightRowSeriesNumberColumn.length;\n }\n }\n _generateColHeaderIds() {\n if (this.columnDimensionTree.tree.children?.length >= 1) {\n if (this.columnHierarchyType === 'grid-tree') {\n const startCol = 0;\n this._addHeadersForGridTreeMode(\n this._columnHeaderCellFullPathIds,\n startCol,\n this.columnDimensionTree.tree.children,\n [],\n this.columnDimensionTree.totalLevel,\n this._getColumnHeaderTreeExpandedMaxLevelCount(),\n true,\n this.columnsDefine,\n this.columnHeaderObjs,\n false\n );\n } else {\n //#region 处理需求 当没有数据时仍然显示角头维度名称\n let startRow = 0;\n if (\n this.dataset &&\n !this._table.isPivotChart() &&\n (this.dataset.records?.length ?? 0) === 0 &&\n !this.dataset.customColTree &&\n !this.dataset.customRowTree &&\n this.indicatorsAsCol &&\n this._getColumnHeaderTreeExpandedMaxLevelCount() < this.columnHeaderLevelCount\n ) {\n startRow = this.columnHeaderLevelCount - this._getColumnHeaderTreeExpandedMaxLevelCount();\n for (let i = 0; i < startRow; i++) {\n this._columnHeaderCellFullPathIds.unshift([]);\n }\n }\n //#endregion\n this._addHeaders(\n this._columnHeaderCellFullPathIds,\n startRow,\n this.columnDimensionTree.tree.children,\n [],\n this.columnHeaderObjs\n // this.columnDimensionTree.totalLevel,\n // this.indicatorKeys\n );\n }\n }\n // if (typeof this.showColumnHeader !== 'boolean') {\n if (this.columnHeaderTitle) {\n this.sharedVar.seqId = Math.max(this.sharedVar.seqId, this._headerObjects.length);\n const id = ++this.sharedVar.seqId;\n const firstRowIds = Array(this.colCount - this.rowHeaderLevelCount - this.rightFrozenColCount).fill(id);\n this._columnHeaderCellFullPathIds.unshift(firstRowIds);\n const cell: HeaderData = {\n id,\n title:\n typeof this.columnHeaderTitle.title === 'string'\n ? this.columnHeaderTitle.title\n : (this.columnsDefine.reduce((title: string, value) => {\n if (typeof value === 'string') {\n return title;\n }\n return title + (title ? `/${value.title}` : `${value.title}`);\n }, '') as string),\n field: undefined,\n headerType: this.columnHeaderTitle?.headerType ?? 'text',\n style: this.columnHeaderTitle?.headerStyle,\n define: <any>{\n id,\n disableHeaderHover: !!this.columnHeaderTitle?.disableHeaderHover,\n disableHeaderSelect: !!this.columnHeaderTitle?.disableHeaderSelect\n }\n };\n this.columnHeaderObjs.push(cell);\n this._headerObjects[id] = cell;\n }\n }\n _generateRowHeaderIds() {\n if (this.rowDimensionTree.tree.children?.length >= 1) {\n if (this.rowHierarchyType === 'tree') {\n this._addHeadersForTreeMode(\n this._rowHeaderCellFullPathIds_FULL,\n 0,\n this.rowDimensionTree.tree.children,\n [],\n this.rowDimensionTree.totalLevel,\n true,\n this.rowsDefine,\n this.rowHeaderObjs\n );\n } else if (this.rowHierarchyType === 'grid-tree') {\n const startRow = 0;\n this._addHeadersForGridTreeMode(\n this._rowHeaderCellFullPathIds_FULL,\n startRow,\n this.rowDimensionTree.tree.children,\n [],\n this.rowDimensionTree.totalLevel,\n this._getRowHeaderTreeExpandedMaxLevelCount(),\n true,\n this.rowsDefine,\n this.rowHeaderObjs,\n true\n // this.columnDimensionTree.totalLevel,\n // this.indicatorKeys\n );\n } else {\n //#region 处理需求 当没有数据时仍然显示角头维度名称\n let startRow = 0;\n if (\n this.dataset &&\n !this._table.isPivotChart() &&\n (this.dataset.records?.length ?? 0) === 0 &&\n !this.dataset.customColTree &&\n !this.dataset.customRowTree &&\n !this.indicatorsAsCol &&\n this._getRowHeaderTreeExpandedMaxLevelCount() < this.rowHeaderLevelCount\n ) {\n startRow = this.rowHeaderLevelCount - this._getRowHeaderTreeExpandedMaxLevelCount();\n for (let i = 0; i < startRow; i++) {\n this._rowHeaderCellFullPathIds_FULL.unshift([]);\n }\n }\n //#endregion\n this._addHeaders(\n this._rowHeaderCellFullPathIds_FULL,\n startRow,\n this.rowDimensionTree.tree.children,\n [],\n this.rowHeaderObjs\n // this.columnDimensionTree.totalLevel,\n // this.indicatorKeys\n );\n }\n }\n // if (typeof this.showRowHeader !== 'boolean') {\n if (this.rowHeaderTitle) {\n this.sharedVar.seqId = Math.max(this.sharedVar.seqId, this._headerObjects.length);\n const id = ++this.sharedVar.seqId;\n const firstColIds = Array(this._rowHeaderCellFullPathIds_FULL[0]?.length ?? this.rowDimensionTree.tree.size).fill(\n id\n );\n this._rowHeaderCellFullPathIds_FULL.unshift(firstColIds);\n const cell: HeaderData = {\n id,\n title:\n typeof this.rowHeaderTitle.title === 'string'\n ? this.rowHeaderTitle.title\n : (this.rowsDefine.reduce((title: string, value) => {\n if (typeof value === 'string') {\n return title;\n }\n return title + (title ? `/${value.title}` : `${value.title}`);\n }, '') as string),\n field: undefined,\n headerType: this.rowHeaderTitle?.headerType ?? 'text',\n style: this.rowHeaderTitle?.headerStyle,\n define: <any>{\n id,\n disableHeaderHover: !!this.rowHeaderTitle?.disableHeaderHover,\n disableHeaderSelect: !!this.rowHeaderTitle?.disableHeaderSelect\n }\n };\n this.rowHeaderObjs.push(cell);\n this._headerObjects[id] = cell;\n }\n }\n _getRowHeaderTreeExpandedMaxLevelCount() {\n if (this.rowHierarchyType === 'tree') {\n return 1;\n } else if (this.rowHierarchyType === 'grid-tree') {\n return this.cornerSetting.titleOnDimension === 'row'\n ? this.rowDimensionTree.totalLevel\n : this.indicatorsAsCol\n ? this.rowDimensionTree.expandedMaxLevel\n : this.rowDimensionTree.expandedMaxLevel + 1;\n }\n return this.rowDimensionTree.totalLevel;\n }\n _getColumnHeaderTreeExpandedMaxLevelCount() {\n if (this.columnHierarchyType === 'grid-tree') {\n return this.cornerSetting.titleOnDimension === 'column'\n ? this.columnDimensionTree.totalLevel\n : this.indicatorsAsCol === false\n ? this.columnDimensionTree.expandedMaxLevel\n : this.columnDimensionTree.expandedMaxLevel + 1;\n }\n return this.columnDimensionTree.totalLevel;\n }\n /** 行表头和列表头的组织都是走这个函数,这个函数的行列命名是按照列头的逻辑来写的,所以组织行头的时候需要思维做下转换 */\n _addHeaders(\n _headerCellIds: number[][],\n row: number,\n header: ITreeLayoutHeadNode[],\n roots: number[],\n results: HeaderData[]\n // totalLevel: number,\n // indicatorKeys: string[]\n ) {\n const _this = this;\n function _newRow(row: number): number[] {\n const newRow: number[] = (_headerCellIds[row] = []);\n if (_this.colIndex === 0) {\n return newRow;\n }\n const prev = _headerCellIds[row - 1];\n for (let col = 0; col < prev?.length; col++) {\n newRow[col] = prev[col];\n }\n return newRow;\n }\n if (!_headerCellIds[row]) {\n _newRow(row);\n }\n\n for (let i = 0; i < header.length; i++) {\n const hd = header[i];\n dealHeader(\n hd,\n _headerCellIds,\n results,\n roots,\n row,\n this\n // totalLevel, indicatorKeys\n );\n }\n }\n /** 行表头和列表头的组织都是走这个函数,这个函数的行列命名是按照列头的逻辑来写的,所以组织行头的时候需要思维做下转换 */\n _addHeadersForTreeMode(\n _headerCellIds: number[][],\n row: number,\n header: ITreeLayoutHeadNode[],\n roots: number[],\n totalLevel: number,\n show: boolean,\n dimensions: (IDimension | string)[],\n results: HeaderData[]\n ) {\n const _this = this;\n function _newRow(row: number): number[] {\n const newRow: number[] = (_headerCellIds[row] = []);\n if (_this.colIndex === 0) {\n return newRow;\n }\n const prev = _headerCellIds[row - 1];\n for (let col = 0; col < prev?.length; col++) {\n newRow[col] = prev[col];\n }\n return newRow;\n }\n if (!_headerCellIds[row]) {\n _newRow(row);\n }\n\n for (let i = 0; i < header.length; i++) {\n const hd = header[i];\n dealHeaderForTreeMode(hd, _headerCellIds, results, roots, row, totalLevel, show, dimensions, this);\n }\n }\n _addHeadersForGridTreeMode(\n _headerCellIds: number[][],\n row: number,\n header: ITreeLayoutHeadNode[],\n roots: number[],\n totalLevel: number,\n expandedMaxLevel: number,\n show: boolean,\n dimensions: (IDimension | string)[],\n results: HeaderData[],\n isRowTree: boolean\n ) {\n const _this = this;\n function _newRow(row: number): number[] {\n const newRow: number[] = (_headerCellIds[row] = []);\n if (_this.colIndex === 0) {\n return newRow;\n }\n const prev = _headerCellIds[row - 1];\n for (let col = 0; col < prev?.length; col++) {\n newRow[col] = prev[col];\n }\n return newRow;\n }\n if (!_headerCellIds[row]) {\n _newRow(row);\n }\n\n for (let i = 0; i < header.length; i++) {\n const hd = header[i];\n dealHeaderForGridTreeMode(\n hd,\n _headerCellIds,\n results,\n roots,\n row,\n totalLevel,\n expandedMaxLevel,\n show,\n dimensions,\n isRowTree,\n this.indicatorsAsCol,\n this\n );\n }\n }\n private _addCornerHeaders(\n colDimensionKeys: string[] | null,\n rowDimensionKeys: string[] | null,\n dimensions: (string | IDimension)[]\n ) {\n this._cornerHeaderCellFullPathIds = [];\n const results: HeaderData[] = [];\n const colLevelCount =\n this.columnHierarchyType === 'grid-tree'\n ? this._getColumnHeaderTreeExpandedMaxLevelCount() || this.columnHeaderLevelCount\n : this.columnHeaderLevelCount;\n const rowLevelCount =\n this.rowHierarchyType === 'grid-tree'\n ? this._getRowHeaderTreeExpandedMaxLevelCount() || this.rowHeaderLevelCount\n : this.rowHeaderLevelCount;\n if (colLevelCount === 0 || rowLevelCount === 0) {\n return results;\n }\n if (this.cornerSetting.titleOnDimension === 'all') {\n if (this.indicatorsAsCol) {\n if (colDimensionKeys) {\n for (let i = 0; i < colLevelCount; i++) {\n const dimensionKey = colDimensionKeys[i];\n const id = ++this.sharedVar.seqId;\n const dimensionInfo: IDimension = dimensions.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === dimensionKey\n ) as IDimension;\n const cell: HeaderData = {\n id,\n title:\n dimensionKey === this.indicatorDimensionKey\n ? this.indicatorTitle\n : dimensionInfo\n ? dimensionInfo.title\n : dimensionKey === 'axis'\n ? ''\n : (dimensionKey as string),\n field: dimensionKey, //'维度名称',\n style: this.cornerSetting.headerStyle,\n headerType: this.cornerSetting.headerType ?? 'text',\n showSort: dimensionInfo?.showSortInCorner,\n sort: dimensionInfo?.sort,\n define: <any>{\n showSort: dimensionInfo?.showSortInCorner,\n sort: dimensionInfo?.sort,\n dimensionKey: dimensionKey, // '维度名称',\n id,\n value: dimensionKey,\n headerEditor: this.cornerSetting.headerEditor,\n disableHeaderHover: !!this.cornerSetting.disableHeaderHover,\n disableHeaderSelect: !!this.cornerSetting.disableHeaderSelect\n },\n dropDownMenu: dimensionInfo?.cornerDropDownMenu,\n headerIcon: dimensionInfo?.cornerHeaderIcon,\n pivotInfo: {\n value: dimensionInfo?.title ?? '',\n dimensionKey,\n isPivotCorner: true\n // customInfo: dimensionInfo?.customInfo\n },\n description: dimensionInfo?.cornerDescription\n };\n results[id] = cell;\n this._headerObjects[id] = cell;\n\n if (!this._cornerHeaderCellFullPathIds[i]) {\n this._cornerHeaderCellFullPathIds[i] = [];\n }\n for (let r = 0; r < rowLevelCount; r++) {\n this._cornerHeaderCellFullPathIds[i][r] = id;\n }\n }\n }\n if (rowDimensionKeys) {\n for (let i = 0; i < rowLevelCount; i++) {\n const dimensionKey = rowDimensionKeys[i];\n const id = ++this.sharedVar.seqId;\n const dimensionInfo: IDimension = dimensions.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === dimensionKey\n ) as IDimension;\n const cell: HeaderData = {\n id,\n title:\n dimensionKey === this.indicatorDimensionKey\n ? this.indicatorTitle\n : dimensionInfo\n ? dimensionInfo.title\n : dimensionKey === 'axis'\n ? ''\n : (dimensionKey as string),\n field: dimensionKey, //'维度名称',\n style: this.cornerSetting.headerStyle,\n headerType: this.cornerSetting.headerType ?? 'text',\n showSort: dimensionInfo?.showSortInCorner,\n sort: dimensionInfo?.sort,\n define: <any>{\n showSort: dimensionInfo?.showSortInCorner,\n sort: dimensionInfo?.sort,\n dimensionKey: dimensionKey, // '维度名称',\n id,\n value: dimensionKey,\n headerEditor: this.cornerSetting.headerEditor,\n disableHeaderHover: !!this.cornerSetting.disableHeaderHover,\n disableHeaderSelect: !!this.cornerSetting.disableHeaderSelect\n },\n dropDownMenu: dimensionInfo?.cornerDropDownMenu,\n headerIcon: dimensionInfo?.cornerHeaderIcon,\n pivotInfo: {\n value: dimensionInfo?.title ?? '',\n dimensionKey,\n isPivotCorner: true\n // customInfo: dimensionInfo?.customInfo\n },\n description: dimensionInfo?.cornerDescription\n };\n results[id] = cell;\n this._headerObjects[id] = cell;\n if (!this._cornerHeaderCellFullPathIds[this._cornerHeaderCellFullPathIds.length - 1]) {\n this._cornerHeaderCellFullPathIds[this._cornerHeaderCellFullPathIds.length - 1] = [];\n }\n this._cornerHeaderCellFullPathIds[this._cornerHeaderCellFullPathIds.length - 1][i] = id;\n }\n }\n } else {\n if (rowDimensionKeys) {\n for (let i = 0; i < rowLevelCount; i++) {\n const dimensionKey = rowDimensionKeys[i];\n const id = ++this.sharedVar.seqId;\n const dimensionInfo: IDimension = dimensions.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === dimensionKey\n ) as IDimension;\n const cell: HeaderData = {\n id,\n title:\n dimensionKey === this.indicatorDimensionKey\n ? this.indicatorTitle\n : dimensionInfo\n ? dimensionInfo.title\n : dimensionKey === 'axis'\n ? ''\n : (dimensionKey as string),\n field: dimensionKey, //'维度名称',\n style: this.cornerSetting.headerStyle,\n headerType: this.cornerSetting.headerType ?? 'text',\n showSort: dimensionInfo?.showSortInCorner,\n sort: dimensionInfo?.sort,\n define: <any>{\n showSort: dimensionInfo?.showSortInCorner,\n sort: dimensionInfo?.sort,\n dimensionKey: dimensionKey, // '维度名称',\n id,\n value: dimensionKey,\n headerEditor: this.cornerSetting.headerEditor,\n disableHeaderHover: !!this.cornerSetting.disableHeaderHover,\n disableHeaderSelect: !!this.cornerSetting.disableHeaderSelect\n },\n dropDownMenu: dimensionInfo?.cornerDropDownMenu,\n headerIcon: dimensionInfo?.cornerHeaderIcon,\n pivotInfo: {\n value: dimensionInfo?.title ?? '',\n dimensionKey,\n isPivotCorner: true\n // customInfo: dimensionInfo?.customInfo\n },\n description: dimensionInfo?.cornerDescription\n };\n results[id] = cell;\n this._headerObjects[id] = cell;\n\n for (let r = 0; r < colLevelCount; r++) {\n if (!this._cornerHeaderCellFullPathIds[r]) {\n this._cornerHeaderCellFullPathIds[r] = [];\n }\n this._cornerHeaderCellFullPathIds[r][i] = id;\n }\n }\n }\n if (colDimensionKeys) {\n for (let c = 0; c < colLevelCount; c++) {\n const dimensionKey = colDimensionKeys[c];\n const id = ++this.sharedVar.seqId;\n const dimensionInfo: IDimension = dimensions.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === dimensionKey\n ) as IDimension;\n const cell: HeaderData = {\n id,\n title:\n dimensionKey === this.indicatorDimensionKey\n ? this.indicatorTitle\n : dimensionInfo\n ? dimensionInfo.title\n : dimensionKey === 'axis'\n ? ''\n : (dimensionKey as string),\n field: dimensionKey, //'维度名称',\n style: this.cornerSetting.headerStyle,\n headerType: this.cornerSetting.headerType ?? 'text',\n showSort: dimensionInfo?.showSortInCorner,\n sort: dimensionInfo?.sort,\n define: <any>{\n showSort: dimensionInfo?.showSortInCorner,\n sort: dimensionInfo?.sort,\n dimensionKey: dimensionKey, // '维度名称',\n id,\n value: dimensionKey,\n headerEditor: this.cornerSetting.headerEditor,\n disableHeaderHover: !!this.cornerSetting.disableHeaderHover,\n disableHeaderSelect: !!this.cornerSetting.disableHeaderSelect\n },\n dropDownMenu: dimensionInfo?.cornerDropDownMenu,\n headerIcon: dimensionInfo?.cornerHeaderIcon,\n pivotInfo: {\n value: dimensionInfo?.title ?? '',\n dimensionKey,\n isPivotCorner: true\n // customInfo: dimensionInfo?.customInfo\n },\n description: dimensionInfo?.cornerDescription\n };\n results[id] = cell;\n this._headerObjects[id] = cell;\n // if (!this._cornerHeaderCellFullPathIds[indicatorAtIndex]) {\n // this._cornerHeaderCellFullPathIds[indicatorAtIndex] = [];\n // }\n this._cornerHeaderCellFullPathIds[c][this._cornerHeaderCellFullPathIds[c].length - 1] = id;\n }\n }\n }\n } else if (this.cornerSetting.titleOnDimension === 'row' || this.cornerSetting.titleOnDimension === 'column') {\n const dimensionKeys = this.cornerSetting?.titleOnDimension === 'row' ? rowDimensionKeys : colDimensionKeys;\n if (dimensionKeys) {\n dimensionKeys.forEach((dimensionKey: string, key: number) => {\n const id = ++this.sharedVar.seqId;\n // const dimensionInfo: IDimension =\n // (this.rowsDefine?.find(dimension =>\n // typeof dimension === 'string' ? false : dimension.dimensionKey === dimensionKey\n // ) as IDimension) ??\n // (this.columnsDefine?.find(dimension =>\n // typeof dimension === 'string' ? false : dimension.dimensionKey === dimensionKey\n // ) as IDimension);\n const dimensionInfo: IDimension = dimensions.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === dimensionKey\n ) as IDimension;\n const cell: HeaderData = {\n id,\n title:\n dimensionKey === this.indicatorDimensionKey\n ? this.indicatorTitle\n : dimensionInfo\n ? dimensionInfo.title\n : dimensionKey === 'axis'\n ? ''\n : (dimensionKey as string),\n field: dimensionKey, //'维度名称',\n style: this.cornerSetting.headerStyle,\n headerType: this.cornerSetting.headerType ?? 'text',\n showSort: dimensionInfo?.showSortInCorner,\n sort: dimensionInfo?.sort,\n define: <any>{\n showSort: dimensionInfo?.showSortInCorner,\n sort: dimensionInfo?.sort,\n dimensionKey: dimensionKey, // '维度名称',\n id,\n value: dimensionKey,\n headerCustomRender: this.cornerSetting.customRender,\n headerCustomLayout: this.cornerSetting.customLayout,\n headerEditor: this.cornerSetting.headerEditor,\n disableHeaderHover: !!this.cornerSetting.disableHeaderHover,\n disableHeaderSelect: !!this.cornerSetting.disableHeaderSelect\n },\n dropDownMenu: dimensionInfo?.cornerDropDownMenu,\n headerIcon: dimensionInfo?.cornerHeaderIcon,\n pivotInfo: {\n value: dimensionInfo?.title ?? '',\n dimensionKey,\n isPivotCorner: true\n // customInfo: dimensionInfo?.customInfo\n },\n description: dimensionInfo?.cornerDescription\n };\n results[id] = cell;\n this._headerObjects[id] = cell;\n if (this.cornerSetting.titleOnDimension === 'column') {\n if (!this._cornerHeaderCellFullPathIds[key]) {\n this._cornerHeaderCellFullPathIds[key] = [];\n }\n for (let r = 0; r < this.rowHeaderLevelCount; r++) {\n this._cornerHeaderCellFullPathIds[key][r] = id;\n }\n } else if (this.cornerSetting.titleOnDimension === 'row') {\n for (let r = 0; r < this.columnHeaderLevelCount; r++) {\n if (!this._cornerHeaderCellFullPathIds[r]) {\n this._cornerHeaderCellFullPathIds[r] = [];\n }\n this._cornerHeaderCellFullPathIds[r][key] = id;\n }\n }\n });\n }\n } else {\n const id = ++this.sharedVar.seqId;\n const cell: HeaderData = {\n id,\n title: '',\n field: '维度名称',\n style: this.cornerSetting.headerStyle,\n headerType: this.cornerSetting.headerType ?? 'text',\n define: <any>{\n dimensionKey: '维度名称',\n id,\n headerCustomRender: this.cornerSetting.customRender,\n headerCustomLayout: this.cornerSetting.customLayout,\n disableHeaderHover: !!this.cornerSetting.disableHeaderHover,\n disableHeaderSelect: !!this.cornerSetting.disableHeaderSelect\n }\n };\n results[id] = cell;\n this._headerObjects[id] = cell;\n for (let r = 0; r < this.columnHeaderLevelCount; r++) {\n for (let j = 0; j < this.rowHeaderLevelCount; j++) {\n if (!this._cornerHeaderCellFullPathIds[r]) {\n this._cornerHeaderCellFullPathIds[r] = [];\n }\n this._cornerHeaderCellFullPathIds[r][j] = id;\n }\n }\n }\n\n return results;\n }\n private generateExtensionRowTree() {\n this.extensionRows.forEach((extensionRow, indexP) => {\n const old_rowHeaderCellIds = this._rowHeaderCellFullPathIds_FULL;\n this._rowHeaderCellFullPathIds_FULL = [];\n old_rowHeaderCellIds.forEach((row_ids: number[], index) => {\n const key = row_ids[row_ids.length - 1];\n this.colIndex = 0;\n let tree;\n if (typeof extensionRow.rowTree === 'function') {\n const fullCellIds = this.findFullCellIds(row_ids);\n tree = (extensionRow.rowTree as Function)(\n fullCellIds.map((id: number) => {\n return { dimensionKey: this._headerObjects[id].field, value: this._headerObjects[id].title };\n })\n );\n } else {\n // 需要clone一份 否则跟DimensionTree有引用关系\n tree = cloneDeep(extensionRow.rowTree);\n }\n let rowExtensionDimensionTree;\n if (this._rowHeaderExtensionTree[key]) {\n this._rowHeaderExtensionTree[key].reset(this._rowHeaderExtensionTree[key].tree.children);\n rowExtensionDimensionTree = this._rowHeaderExtensionTree[key];\n } else {\n rowExtensionDimensionTree = new DimensionTree(tree ?? [], this.sharedVar, this.rowHierarchyType, undefined);\n this._rowHeaderExtensionTree[key] = rowExtensionDimensionTree;\n }\n\n const extensionRowTreeHeaderIds: number[][] = [];\n this._addHeadersForTreeMode(\n extensionRowTreeHeaderIds,\n 0,\n rowExtensionDimensionTree.tree.children,\n [],\n rowExtensionDimensionTree.totalLevel,\n true,\n extensionRow.rows,\n this.rowHeaderObjs\n );\n for (let i = 0; i < extensionRowTreeHeaderIds[0].length; i++) {\n this._rowHeaderCellFullPathIds_FULL.push(row_ids.concat(extensionRowTreeHeaderIds[0][i]));\n }\n });\n });\n }\n private setColumnWidths() {\n const returnWidths: WidthData[] = new Array(this.colCount).fill(undefined);\n if (this.leftRowSeriesNumberColumnCount) {\n returnWidths[0] = this.leftRowSeriesNumberColumn[0];\n }\n if (this.showHeader && this.showRowHeader) {\n if (this.rowHeaderTitle) {\n returnWidths[0 + this.leftRowSeriesNumberColumnCount] = {};\n }\n if (this.rowHierarchyType === 'tree') {\n const mainDimensionFirstRowKey = this.rowDimensionKeys[0];\n if (mainDimensionFirstRowKey) {\n const dimension = this.rowsDefine?.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === mainDimensionFirstRowKey\n ) as IRowDimension;\n dimension &&\n (returnWidths[0 + (this.rowHeaderTitle ? 1 : 0) + this.leftRowSeriesNumberColumnCount] = {\n width: dimension.width,\n minWidth: dimension.minWidth,\n maxWidth: dimension.maxWidth\n });\n }\n this._extensionRowDimensionKeys?.forEach((extensionRowDimensionKeys, index) => {\n const curDimensionFirstRowKey = extensionRowDimensionKeys[0];\n if (curDimensionFirstRowKey) {\n const dimension = this.extensionRows[index].rows?.find((dimension: string | IRowDimension) =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === curDimensionFirstRowKey\n ) as IRowDimension;\n dimension &&\n (returnWidths[index + 1 + (this.rowHeaderTitle ? 1 : 0) + this.leftRowSeriesNumberColumnCount] = {\n width: dimension.width,\n minWidth: dimension.minWidth,\n maxWidth: dimension.maxWidth\n });\n }\n });\n // const _headerCellIds = this._rowHeaderCellIds[0];\n // _headerCellIds.forEach((cellId, index) => {\n // const headerDefine = this._headerObjectMap[cellId];\n // headerDefine &&\n // (returnWidths[index + (this.rowHeaderTitle ? 1 : 0)] = {\n // width: headerDefine.width,\n // minWidth: headerDefine.minWidth,\n // maxWidth: headerDefine.maxWidth\n // });\n // });\n } else {\n const rowDimensionKeys =\n this.rowDimensionTree.totalLevel > 0\n ? this.rowDimensionTree.dimensionKeysIncludeVirtual.valueArr()\n : this.rowsDefine.map(dimension => {\n if (typeof dimension === 'string') {\n return dimension;\n }\n return dimension.dimensionKey;\n });\n rowDimensionKeys.forEach((objKey, index) => {\n const dimension = this.rowsDefine?.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === objKey\n ) as IRowDimension;\n dimension &&\n (returnWidths[index + (this.rowHeaderTitle ? 1 : 0) + this.leftRowSeriesNumberColumnCount] = {\n width: dimension.width,\n minWidth: dimension.minWidth,\n maxWidth: dimension.maxWidth\n });\n });\n }\n }\n if (this.indicatorsAsCol) {\n for (let i = this.rowHeaderLevelCount + this.leftRowSeriesNumberColumnCount; i < this.colCount; i++) {\n const cellDefine = this.getBody(i, this.columnHeaderLevelCount);\n returnWidths[i] = {\n width: cellDefine?.width,\n minWidth: cellDefine?.minWidth,\n maxWidth: cellDefine?.maxWidth\n };\n }\n } else {\n let width: string | number | undefined = 0;\n let maxWidth: string | number | undefined;\n let minWidth: string | number | undefined;\n let isAuto;\n this._indicators?.forEach((obj, index) => {\n if (typeof obj.width === 'number') {\n width = Math.max(obj.width, <number>width);\n } else if (obj.width === 'auto') {\n isAuto = true;\n }\n if (typeof obj.minWidth === 'number') {\n minWidth = Math.max(obj.minWidth, <number>minWidth ?? 0);\n }\n if (typeof obj.maxWidth === 'number') {\n maxWidth = Math.min(obj.maxWidth, <number>maxWidth ?? Number.MAX_VALUE);\n }\n });\n width = width > 0 ? width : isAuto ? 'auto' : undefined;\n returnWidths.fill(\n { width, minWidth, maxWidth },\n this.rowHeaderLevelCount + this.leftRowSeriesNumberColumnCount,\n this.colCount - this.rightFrozenColCount\n );\n }\n this._columnWidths = returnWidths;\n }\n\n get columnWidths(): WidthData[] {\n return this._columnWidths;\n }\n getColumnWidthDefined(col: number): WidthData {\n return this._columnWidths[col];\n }\n get showHeader(): boolean {\n return this._showHeader;\n }\n set showHeader(_showHeader: boolean) {\n this._showHeader = _showHeader;\n }\n get showColumnHeader(): boolean {\n return this._showColumnHeader;\n }\n set showColumnHeader(_showColumnHeader: boolean) {\n this._showColumnHeader = _showColumnHeader;\n }\n get showRowHeader(): boolean {\n return this._showRowHeader;\n }\n set showRowHeader(_showRowHeader: boolean) {\n this._showRowHeader = _showRowHeader;\n }\n get columnHeaderTitle(): ITitleDefine {\n return this._columnHeaderTitle;\n }\n set columnHeaderTitle(_columnHeaderTitle: ITitleDefine) {\n this._columnHeaderTitle = _columnHeaderTitle;\n }\n get rowHeaderTitle(): ITitleDefine {\n return this._rowHeaderTitle;\n }\n set rowHeaderTitle(_rowHeaderTitle: ITitleDefine) {\n this._rowHeaderTitle = _rowHeaderTitle;\n }\n getHeaderFieldKey(col: number, row: number): undefined {\n return undefined;\n }\n getCellLocation(col: number, row: number): CellLocation {\n if (this.isCornerHeader(col, row)) {\n return 'cornerHeader';\n } else if (this.isColumnHeader(col, row)) {\n return 'columnHeader';\n } else if (this.isRowHeader(col, row)) {\n return 'rowHeader';\n }\n return 'body';\n }\n // isHeaderNode(col: number, row: number): boolean {\n // const header = this.getHeader(col, row);\n // if (\n // header &&\n // header.define &&\n // (!(<any>header.define).columns || (<any>header.define).hideColumnsSubHeader)\n // )\n // return true;\n // return false;\n // }\n\n isHeader(col: number, row: number): boolean {\n if (\n col >= this.leftRowSeriesNumberColumnCount &&\n col < this.rowHeaderLevelCount + this.leftRowSeriesNumberColumnCount\n ) {\n return true;\n }\n if (row >= 0 && row < this.columnHeaderLevelCount) {\n return true;\n }\n if (col >= this.colCount - this.rightHeaderColCount) {\n return true;\n }\n if (row >= this.rowCount - this.bottomHeaderRowCount) {\n return true;\n }\n return false;\n }\n isCornerHeader(col: number, row: number): boolean {\n if (\n col >= 0 &&\n col < this.rowHeaderLevelCount + this.leftRowSeriesNumberColumnCount &&\n row >= 0 &&\n row < this.columnHeaderLevelCount\n ) {\n return true;\n }\n return false;\n }\n isColumnHeader(col: number, row: number): boolean {\n if (\n col >= this.rowHeaderLevelCount + this.leftRowSeriesNumberColumnCount &&\n row >= 0 &&\n row < this.columnHeaderLevelCount\n ) {\n return true;\n }\n return false;\n }\n isRowHeader(col: number, row: number): boolean {\n if (\n col >= this.leftRowSeriesNumberColumnCount &&\n col < this.rowHeaderLevelCount + this.leftRowSeriesNumberColumnCount &&\n row >= this.columnHeaderLevelCount\n ) {\n return true;\n }\n return false;\n }\n\n isFrozen(col: number, row: number): boolean {\n return (\n this.isFrozenColumn(col) ||\n this.isRightFrozenColumn(col) ||\n this.isBottomFrozenRow(row) ||\n this.isFrozenRow(row) ||\n this.isSeriesNumberInBody(col, row) ||\n this.isSeriesNumberInHeader(col, row)\n );\n }\n /**\n * 是否属于冻结左侧列\n * @param col\n * @param row 不传的话 只需要判断col,传入row的话非冻结角头部分的才返回true\n * @returns\n */\n isFrozenColumn(col: number, row?: number): boolean {\n if (isValid(row)) {\n if (\n col >= 0 &&\n col < this.frozenColCount &&\n row >= this.frozenRowCount &&\n row < this.rowCount - this.bottomFrozenRowCount\n ) {\n return true;\n }\n } else {\n if (this.frozenColCount > 0 && col >= 0 && col < this.frozenColCount) {\n return true;\n }\n }\n return false;\n }\n /**\n * 是否属于右侧冻结列\n * @param col\n * @param row 不传的话 只需要判断col,传入row的话非冻结角头部分的才返回true\n * @returns\n */\n isRightFrozenColumn(col: number, row?: number): boolean {\n if (isValid(row)) {\n if (\n col >= this.colCount - this.rightFrozenColCount &&\n row >= this.frozenRowCount &&\n row < this.rowCount - this.bottomFrozenRowCount\n ) {\n return true;\n }\n } else {\n if (this.rightFrozenColCount > 0 && col >= this.colCount - this.rightFrozenColCount) {\n return true;\n }\n }\n return false;\n }\n /**\n * 是否属于冻结顶部行\n * @param col 只传入col一个值的话 会被当做row\n * @param row 不传的话只需要判断col(其实会当做row);传入两个值的话非冻结角头部分的才返回true\n * @returns\n */\n isFrozenRow(col: number, row?: number): boolean {\n if (isValid(row)) {\n if (\n row >= 0 &&\n row < this.frozenRowCount &&\n col >= this.frozenColCount &&\n col < this.colCount - this.rightFrozenColCount\n ) {\n return true;\n }\n } else {\n row = col;\n if (this.frozenRowCount > 0 && row >= 0 && row < this.frozenRowCount) {\n return true;\n }\n }\n return false;\n }\n /**\n * 是否属于冻结底部行\n * @param col 只传入col一个值的话 会被当做row\n * @param row 不传的话只需要判断col(其实会当做row);传入两个值的话非冻结角头部分的才返回true\n * @returns\n */\n isBottomFrozenRow(col: number, row?: number): boolean {\n if (isValid(row)) {\n if (\n row >= this.rowCount - this.bottomFrozenRowCount &&\n col >= this.frozenColCount &&\n col < this.colCount - this.rightFrozenColCount\n ) {\n return true;\n }\n } else {\n row = col;\n if (this.bottomFrozenRowCount > 0 && row >= this.rowCount - this.bottomFrozenRowCount) {\n return true;\n }\n }\n return false;\n }\n isLeftTopCorner(col: number, row: number): boolean {\n if (col >= 0 && col < this.frozenColCount && row >= 0 && row < this.frozenRowCount) {\n return true;\n }\n return false;\n }\n isLeftBottomCorner(col: number, row: number): boolean {\n if (col >= 0 && col < this.frozenColCount && row >= this.rowCount - this.bottomFrozenRowCount) {\n return true;\n }\n return false;\n }\n isRightTopCorner(col: number, row: number): boolean {\n if (col >= this.colCount - this.rightFrozenColCount && row >= 0 && row < this.frozenRowCount) {\n return true;\n }\n return false;\n }\n isRightBottomCorner(col: number, row: number): boolean {\n if (col >= this.colCount - this.rightFrozenColCount && row >= this.rowCount - this.bottomFrozenRowCount) {\n return true;\n }\n return false;\n }\n\n getColumnHeaderRange(): CellRange {\n return {\n start: { col: this.rowHeaderLevelCount, row: 0 },\n end: { col: this.colCount - 1, row: this.columnHeaderLevelCount - 1 }\n };\n }\n getRowHeaderRange(): CellRange {\n return {\n start: { col: 0, row: this.columnHeaderLevelCount },\n end: { col: this.rowHeaderLevelCount - 1, row: this.rowCount - 1 }\n };\n }\n getCornerHeaderRange(): CellRange {\n return {\n start: { col: 0, row: 0 },\n end: { col: this.rowHeaderLevelCount - 1, row: this.columnHeaderLevelCount - 1 }\n };\n }\n getBodyRange(): CellRange {\n return {\n start: { col: this.rowHeaderLevelCount, row: this.columnHeaderLevelCount },\n end: { col: this.colCount - 1, row: this.rowCount - 1 }\n };\n }\n resetCellIds() {\n // for (let row = 0; row < this.columnHeaderLevelCount; row++) {}\n }\n get frozenColCount(): number {\n if (this._table.internalProps.frozenColCount) {\n if (this.colCount > this._table.internalProps.frozenColCount) {\n return this._table.internalProps.frozenColCount;\n }\n return this.colCount;\n }\n return 0;\n }\n get frozenRowCount(): number {\n if (this._table.internalProps.frozenRowCount) {\n if (this.rowCount >= this._table.internalProps.frozenRowCount) {\n return this._table.internalProps.frozenRowCount;\n }\n return this.rowCount;\n }\n return 0;\n }\n get headerLevelCount(): number {\n return this.columnHeaderLevelCount;\n }\n resetColumnHeaderLevelCount() {\n if (this.showHeader && this.showColumnHeader) {\n if (\n this._table.isPivotChart() &&\n this.indicatorsAsCol &&\n !this.dataset?.colKeys?.length &&\n this.columnDimensionTree?.tree?.level === 0 &&\n !this.hasTopIndicatorAxis\n ) {\n this.columnHeaderLevelCount = 0;\n return;\n }\n // let count = this.indicatorsAsCol\n // ? this.hideIndicatorName //设置隐藏表头,且表头最下面一级就是指标维度 则-1\n // ? this.colDimensionKeys[this.colDimensionKeys.length - 1] === this.indicatorDimensionKey\n // ? this.columnDimensionTree.totalLevel - 1\n // : this.columnDimensionTree.totalLevel\n // : this.columnDimensionTree.totalLevel\n // : this.columnDimensionTree.totalLevel;\n let count = this._getColumnHeaderTreeExpandedMaxLevelCount();\n if (\n this.indicatorsAsCol &&\n this.hideIndicatorName &&\n this.colDimensionKeys[this.colDimensionKeys.length - 1] === this.indicatorDimensionKey\n ) {\n count--;\n }\n\n //#region 处理需求 当没有数据时仍然显示角头维度名称\n if (\n count === 0 &&\n this.dataset &&\n !this.dataset.customColTree?.length //根据情况来加的判断条件 之前是只兼容没有设置两个自定义树的情况 现在对有自定义树的情况也处理出现角头\n // && !this.dataset.customRowTree?.length\n ) {\n if (\n (this.cornerSetting.titleOnDimension === 'row' || this.cornerSetting.titleOnDimension === 'all') &&\n this.cornerSetting.forceShowHeader\n ) {\n count = 1;\n } else if (\n !this._table.isPivotChart() &&\n (this.dataset.records?.length ?? 0) === 0 &&\n (this.cornerSetting.titleOnDimension === 'column' || this.cornerSetting.titleOnDimension === 'all')\n ) {\n count = this.columnsDefine.length ?? 0;\n }\n } else if (\n this.dataset &&\n !this._table.isPivotChart() &&\n (this.dataset.records?.length ?? 0) === 0 &&\n !this.dataset.customColTree // 这里不能改为 !this.dataset.customColTree?.length 否则透视图会出错 透视图case很多rowTree columnTree rows columns都是[]\n // &&\n // !this.dataset.customRowTree\n ) {\n if (this.cornerSetting.titleOnDimension === 'column' || this.cornerSetting.titleOnDimension === 'all') {\n count = this.columnsDefine.length ?? 0;\n if (!this.hideIndicatorName && this.indicatorsAsCol) {\n count++;\n }\n }\n }\n //#endregion\n if (this.columnHeaderTitle) {\n count += 1;\n }\n if (\n this._table.isPivotChart() &&\n this.indicatorsAsCol &&\n !this.hasTopIndicatorAxis &&\n checkHasCartesianChart(this.indicatorsDefine)\n ) {\n count -= 1;\n }\n\n this.columnHeaderLevelCount = count;\n return;\n }\n // this.columnHeaderLevelCount = 0;\n this.columnHeaderLevelCount = !this.indicatorsAsCol ? 0 : this.hideIndicatorName ? 0 : 1;\n return;\n }\n resetRowHeaderLevelCount() {\n if (this.showHeader && this.showRowHeader) {\n if (this.rowHierarchyType === 'tree') {\n const extensionRowCount = this.extensionRows?.length ?? 0;\n if (this.rowHeaderTitle) {\n this.rowHeaderLevelCount = 1 + (this.rowDimensionTree.totalLevel ? 1 : 0) + extensionRowCount;\n return;\n }\n this.rowHeaderLevelCount = (this.rowDimensionTree.totalLevel ? 1 : 0) + extensionRowCount;\n return;\n }\n const rowLevelCount = this._getRowHeaderTreeExpandedMaxLevelCount();\n // const rowLevelCount = this.rowDimensionTree.totalLevel;\n // // let count = this.indicatorsAsCol\n // // ? rowLevelCount\n // // : this.hideIndicatorName //设置隐藏表头,且表头最下面一级就是指标维度 则-1\n // // ? this.rowDimensionKeys[this.rowDimensionKeys.length - 1] === this.indicatorDimensionKey\n // // ? rowLevelCount - 1\n // // : rowLevelCount\n // // : rowLevelCount;\n\n let count = rowLevelCount;\n\n // if (this._table.isPivotChart()&&this.indicatorsAsCol) {\n // count+=1;\n // }\n //#region 处理需求 当没有数据时仍然显示角头维度名称\n if (\n count === 0 &&\n this.dataset &&\n // && !this.dataset.customColTree\n !this.dataset.customRowTree?.length //根据情况来加的判断条件 之前是只兼容没有设置两个自定义树的情况 现在对有自定义树的情况也处理出现角头\n ) {\n if (\n (this.cornerSetting.titleOnDimension === 'column' || this.cornerSetting.titleOnDimension === 'all') &&\n this.cornerSetting.forceShowHeader\n ) {\n count = 1;\n } else if (\n !this._table.isPivotChart() &&\n (this.dataset.records?.length ?? 0) === 0 &&\n (this.cornerSetting.titleOnDimension === 'row' || this.cornerSetting.titleOnDimension === 'all')\n ) {\n count = this.rowsDefine.length ?? 0;\n }\n } else if (\n this.dataset &&\n !this._table.isPivotChart() &&\n (this.dataset.records?.length ?? 0) === 0 &&\n // !this.dataset.customColTree &&\n !this.dataset.customRowTree // 这里不能改为 !this.dataset.customRowTree?.length 否则透视图会出错 透视图case很多rowTree columnTree rows columns都是[]\n ) {\n if (this.cornerSetting.titleOnDimension === 'row' || this.cornerSetting.titleOnDimension === 'all') {\n count = this.rowsDefine.length;\n if (!this.hideIndicatorName && !this.indicatorsAsCol) {\n count++;\n }\n }\n }\n //#endregion\n if (\n !this.indicatorsAsCol &&\n (this.hideIndicatorName ||\n (!this.hasLeftIndicatorAxis &&\n this._table.isPivotChart() &&\n checkHasCartesianChart(this.indicatorsDefine))) &&\n this.rowDimensionKeys[this.rowDimensionKeys.length - 1] === this.indicatorDimensionKey\n ) {\n count = rowLevelCount - 1;\n }\n\n if (this.rowHeaderTitle) {\n count += 1;\n }\n\n this.rowHeaderLevelCount = count;\n return;\n }\n // return 0;\n this.rowHeaderLevelCount = this.indicatorsAsCol ? 0 : this.hideIndicatorName ? 0 : 1;\n return;\n }\n get columnHeaderLevelCount(): number {\n return this._columnHeaderLevelCount;\n }\n set columnHeaderLevelCount(count: number) {\n this._columnHeaderLevelCount = count;\n }\n get rowHeaderLevelCount(): number {\n return this._rowHeaderLevelCount;\n }\n set rowHeaderLevelCount(count: number) {\n this._rowHeaderLevelCount = count;\n }\n get colCount(): number {\n let bodyColCount;\n if (\n this._getColumnHeaderTreeExpandedMaxLevelCount() > 0 ||\n this._table.isPivotChart() ||\n (this.dataset.records as Array<any>)?.length > 0 ||\n (this.dataset.records && !Array.isArray(this.dataset.records))\n ) {\n bodyColCount =\n (this._columnHeaderCellIds[0]?.length ?? this.columnDimensionTree.tree.size) ||\n (this._indicators?.length > 0 ? 1 : 0);\n } else {\n bodyColCount = 0;\n }\n return bodyColCount + this.rowHeaderLevelCount + this.rightHeaderColCount + this.leftRowSeriesNumberColumnCount; // 小心rightFrozenColCount和colCount的循环引用 造成调用栈溢出\n }\n get rowCount(): number {\n return (\n ((this._table.records || this.dataset.records\n ? Array.isArray(this._table.records)\n ? this._table.records.length > 0\n : true\n : false) &&\n this._indicators?.length > 0 && // 前两个判断条件来判断 有展示的body值的情况 需要展示body row\n !this._rowHeaderCellIds?.length // 需要展示body值 但 _rowHeaderCellIds的长度维度为0 无rows 行表头为空\n ? 1 //兼容bugserver: https://bugserver.cn.goofy.app/case?product=VTable&fileid=65364a57173c354c242a7c4f\n : this._rowHeaderCellIds?.length ?? 0) + //兼容 bugserver:https://bugserver.cn.goofy.app/case?product=VTable&fileid=6527ac0695c0cdbd788cf17d\n this.columnHeaderLevelCount +\n this.bottomHeaderRowCount // 小心bottomFrozenRowCount和rowCount的循环引用 造成调用栈溢出\n );\n }\n get bodyRowSpanCount() {\n return this.rowDimensionTree.tree.size;\n }\n get bottomFrozenRowCount(): number {\n //下面是pivot-layout中逻辑\n if (!this._table.isPivotChart()) {\n if (this._table.internalProps.bottomFrozenRowCount) {\n if (this.rowCount - this.headerLevelCount >= this._table.internalProps.bottomFrozenRowCount) {\n return this._table.internalProps.bottomFrozenRowCount;\n }\n return this.rowCount - this.headerLevelCount;\n }\n return 0;\n }\n if (this.indicatorKeys.length >= 1 && checkHasCartesianChart(this.indicatorsDefine)) {\n const axisOption = ((this._table as PivotChart).pivotChartAxes as ITableAxisOption[]).find(axisOption => {\n return axisOption.orient === 'bottom';\n });\n if (axisOption?.visible === false) {\n return 0;\n }\n if (this.indicatorsAsCol) {\n // 指标在列上,指标及其对应坐标轴显示在底部,下侧冻结行数为1\n return 1;\n }\n return 1; // 指标在行上,维度对应坐标轴显示在底部,下侧冻结行数为1\n }\n return 0;\n }\n get rightFrozenColCount(): number {\n //下面是pivot-layout中逻辑\n if (!this._table.isPivotChart()) {\n if (this._table.internalProps.rightFrozenColCount) {\n if (this.colCount - this.rowHeaderLevelCount >= this._table.internalProps.rightFrozenColCount) {\n return this._table.internalProps.rightFrozenColCount;\n }\n return this.colCount - this.rowHeaderLevelCount;\n }\n return 0;\n }\n const axisOption = ((this._table as PivotChart).pivotChartAxes as ITableAxisOption[]).find(axisOption => {\n return axisOption.orient === 'right';\n });\n if (axisOption?.visible === false) {\n return 0;\n }\n\n if (this.indicatorsAsCol) {\n return 0; // 指标在列上,没有图表需要显示右轴\n } else if (this.hasRightIndicatorAxis) {\n // 查找指标,判断是否有双轴情况,如果有,则右侧冻结列数为1\n return 1;\n }\n return 0;\n }\n\n /** 不包括冻结的行 还是不确定应不应该包括*/\n get bodyRowCount(): number | undefined {\n return this.rowCount - this.bottomFrozenRowCount - this.headerLevelCount;\n }\n /** 不包括冻结的列 */\n get bodyColCount(): number | undefined {\n return this.colCount - this.rightFrozenColCount - this.rowHeaderLevelCount;\n }\n get headerObjects(): HeaderData[] {\n return this._headerObjects;\n }\n get columnObjects(): IndicatorData[] {\n return this._indicators;\n }\n getCellId(col: number, row: number): LayoutObjectId {\n if (row >= 0 && col >= 0) {\n if (this.isSeriesNumber(col, row)) {\n return '';\n } else if (this.isCornerHeader(col, row)) {\n return this._cornerHeaderCellIds[row]?.[col - this.leftRowSeriesNumberColumnCount];\n } else if (this.isColumnHeader(col, row)) {\n return this._columnHeaderCellIds[row]?.[col - this.rowHeaderLevelCount - this.leftRowSeriesNumberColumnCount];\n } else if (this.isRowHeader(col, row)) {\n return this._rowHeaderCellIds[row - this.columnHeaderLevelCount]?.[col - this.leftRowSeriesNumberColumnCount];\n } else if (this.isRightFrozenColumn(col, row)) {\n return this._rowHeaderCellIds[row - this.columnHeaderLevelCount]?.[this.rowHeaderLevelCount - 1];\n } else if (this.isBottomFrozenRow(col, row)) {\n return this._columnHeaderCellIds[this.columnHeaderLevelCount - 1]?.[\n col - this.rowHeaderLevelCount - this.leftRowSeriesNumberColumnCount\n ];\n }\n }\n return undefined;\n }\n // getCellIdOnHeader(col: number, row: number): LayoutObjectId {\n // if (row >= 0 && col >= 0) {\n // if (this.isCornerHeader(col, row)) return this._cornerHeaderCellIds[row][col];\n // else if (this.isColumnHeader(col, row))\n // return this._columnHeaderCellIds[row][col - this.rowHeaderLevelCount];\n // else if (this.isRowHeader(col, row))\n // return this._rowHeaderCellIds[row - this.columnHeaderLevelCount]?.[col];\n // return this.getCellIdOnHeader(\n // col >= this.rowHeaderLevelCount ? this.rowHeaderLevelCount - 1 : col,\n // row >= this.columnHeaderLevelCount ? this.columnHeaderLevelCount - 1 : row\n // );\n // }\n // return 0;\n // }\n getHeader(col: number, row: number): HeaderData | SeriesNumberColumnData {\n if (this.isSeriesNumberInHeader(col, row)) {\n return this.getSeriesNumberHeader(col, row);\n }\n const id = this.getCellId(col, row);\n return this._headerObjectMap[id as number] ?? { id: undefined, field: '', headerType: 'text', define: undefined };\n }\n getHeaderField(col: number, row: number) {\n const id = this.getCellId(col, row);\n return this._headerObjectMap[id as number]?.field || this.getBody(col, row)?.field;\n }\n getHeaderCellAdressById(id: number): CellAddress | undefined {\n for (let i = 0; i < this._columnHeaderCellIds.length; i++) {\n const row = this._columnHeaderCellIds[i];\n for (let j = 0; j < row.length; j++) {\n if (row[j] === id) {\n return { col: j + this._table.frozenColCount, row: i };\n }\n }\n }\n for (let i = 0; i < this._rowHeaderCellIds.length; i++) {\n const row = this._rowHeaderCellIds[i];\n for (let j = 0; j < row.length; j++) {\n if (row[j] === id) {\n return { col: j, row: i + this._table.frozenRowCount };\n }\n }\n }\n for (let i = 0; i < this._cornerHeaderCellIds.length; i++) {\n const row = this._cornerHeaderCellIds[i];\n for (let j = 0; j < row.length; j++) {\n if (row[j] === id) {\n return { col: j, row: i };\n }\n }\n }\n return undefined;\n }\n /** 透视表中此函数有问题 应该传入paths */\n getHeaderCellAddressByField(field: string) {\n const hd = this.headerObjects.find((col: any) => col && col.field === field);\n return hd && this.getHeaderCellAdressById(hd.id as number);\n }\n //TODO 这里的indicators是否可以改为和真正指标值一样数量 但目前也不会造成太多内存浪费 对象较简单 引用对象\n getBody(_col: number, _row: number): IndicatorData | SeriesNumberColumnData {\n const cache = this.getBodyWidthCache(_col, _row);\n if (cache) {\n return cache;\n }\n if (this.isSeriesNumber(_col, _row)) {\n const body = this.getSeriesNumberBody(_col, _row);\n this.setBodyWidthCache(_col, _row, body);\n return body;\n }\n // let indicatorData;\n //正常情况下 通过行号或者列号可以取到Indicator的配置信息 但如果指标在前维度在后的情况下(如风神:列配置【指标名称,地区】) indicators中的数量是和真正指标值一样数量\n // if (this.indicatorsAsCol) indicatorData = this.indicators[_col - this.rowHeaderLevelCount];\n // else indicatorData = this.indicators[_row - this.columnHeaderLevelCount];\n // if (indicatorData) return indicatorData;\n const paths = this.getCellHeaderPaths(_col, _row);\n if (this.indicatorsAsCol) {\n const indicatorKey = paths.colHeaderPaths?.find(colPath => colPath.indicatorKey)?.indicatorKey;\n const body = isValid(indicatorKey)\n ? this._indicators?.find(indicator => indicator.indicatorKey === indicatorKey) ??\n this._indicators[0] ?? {\n id: '',\n field: undefined,\n indicatorKey: undefined,\n cellType: 'text',\n define: undefined\n }\n : ({\n id: '',\n field: undefined,\n indicatorKey: undefined,\n cellType: 'text',\n define: undefined\n } as IndicatorData);\n this.setBodyWidthCache(_col, _row, body);\n return body;\n }\n const indicatorKey = paths.rowHeaderPaths?.find(rowPath => rowPath.indicatorKey)?.indicatorKey;\n const body = isValid(indicatorKey)\n ? this._indicators?.find(indicator => indicator.indicatorKey === indicatorKey) ??\n this._indicators[0] ?? {\n id: '',\n field: undefined,\n indicatorKey: undefined,\n cellType: 'text',\n define: undefined\n }\n : ({\n id: '',\n field: undefined,\n indicatorKey: undefined,\n cellType: 'text',\n define: undefined\n } as IndicatorData);\n this.setBodyWidthCache(_col, _row, body);\n return body;\n }\n // getBodyLayoutRangeById(id: LayoutObjectId): CellRange {\n // for (let col = 0; col < (this.colCount ?? 0); col++) {\n // if (id === this.columnObjects[col].id) {\n // return {\n // start: { col, row: 0 },\n // end: { col, row: 0 }\n // };\n // }\n // }\n\n // throw new Error(`can not found body layout @id=${id as number}`);\n // }\n getCellRange(col: number, row: number): CellRange {\n const result: CellRange = { start: { col, row }, end: { col, row } };\n if (!this.isHeader(col, row) || col === -1 || row === -1) {\n // || this.isIndicatorHeader(col, row)// 为什么加想不想来了 但是如果加上指标属于合并单元格的情况就会有问题了\n return result;\n }\n\n if (this.isRightFrozenColumn(col, row) || this.isBottomFrozenRow(col, row)) {\n return result;\n }\n\n if (this._table.isPivotChart()) {\n if (this.isLeftBottomCorner(col, row)) {\n return {\n start: {\n col: 0,\n row: this.rowCount - this.bottomFrozenRowCount\n },\n end: {\n col: this.frozenColCount - 1,\n row: this.rowCount - 1\n }\n };\n } else if (this.isRightTopCorner(col, row)) {\n return {\n start: {\n col: this.colCount - this.rightFrozenColCount,\n row: 0\n },\n end: {\n col: this.colCount - 1,\n row: this.frozenRowCount - 1\n }\n };\n } else if (this.isRightBottomCorner(col, row)) {\n return {\n start: {\n col: this.colCount - this.rightFrozenColCount,\n row: this.rowCount - this.bottomFrozenRowCount\n },\n end: {\n col: this.colCount - 1,\n row: this.rowCount - 1\n }\n };\n }\n }\n\n // if (this._cellRangeMap.has(`$${col}$${row}`)) {\n // return this._cellRangeMap.get(`$${col}$${row}`);\n // }\n for (let i = 0; i < this._largeCellRangeCache.length; i++) {\n const range = this._largeCellRangeCache[i];\n if (col >= range.start.col && col <= range.end.col && row >= range.start.row && row <= range.end.row) {\n return range;\n }\n }\n if (this.isHeader(col, row) && col !== -1 && row !== -1) {\n //in header\n const id = this.getCellId(col, row);\n for (let c = col - 1; c >= 0; c--) {\n if (id !== this.getCellId(c, row)) {\n break;\n }\n result.start.col = c;\n }\n for (let c = col + 1; c < (this.colCount ?? 0); c++) {\n if (id !== this.getCellId(c, row)) {\n break;\n }\n result.end.col = c;\n }\n for (let r = row - 1; r >= 0; r--) {\n if (\n id !== this.getCellId(col, r)\n // ||\n // (col >= 1 && this.getCellId(col - 1, row) !== this.getCellId(col - 1, r))\n ) {\n break;\n }\n result.start.row = r;\n }\n for (let r = row + 1; r < (this.rowCount ?? 0); r++) {\n if (\n id !== this.getCellId(col, r) ||\n (this.isSeriesNumberInHeader(col, row) && r >= this.columnHeaderLevelCount)\n // ||\n // (col >= 1 && this.getCellId(col - 1, row) !== this.getCellId(col - 1, r))\n ) {\n break;\n }\n result.end.row = r;\n }\n }\n // this._cellRangeMap.set(`${col}-${row}`, result);\n if (result.end.col - result.start.col > 100 || result.end.row - result.start.row > 100) {\n // only cache large range to avoid long col&row search\n this._largeCellRangeCache.push(result);\n }\n return result;\n }\n isCellRangeEqual(col: number, row: number, targetCol: number, targetRow: number): boolean {\n const range1 = this.getCellRange(col, row);\n const range2 = this.getCellRange(targetCol, targetRow);\n return (\n range1.start.col === range2.start.col &&\n range1.end.col === range2.end.col &&\n range1.start.row === range2.start.row &&\n range1.end.row === range2.end.row\n );\n }\n\n getBodyIndexByRow(row: number): number {\n if (row < this.columnHeaderLevelCount) {\n return -1;\n } else if (row >= this.rowCount - this.bottomHeaderRowCount) {\n return -1;\n }\n return row - this.columnHeaderLevelCount;\n // return this.indicatorsAsCol\n // ? row - this.columnHeaderLevelCount\n // : Math.floor((row - this.columnHeaderLevelCount) / this.indicatorKeys.length);\n }\n get bottomHeaderRowCount() {\n if (this._table.isPivotChart()) {\n return this.bottomFrozenRowCount;\n }\n return 0;\n }\n\n get rightHeaderColCount() {\n if (this._table.isPivotChart()) {\n return this.rightFrozenColCount;\n }\n return 0;\n }\n getBodyIndexByCol(col: number): number {\n if (col < this.rowHeaderLevelCount + this.leftRowSeriesNumberColumnCount) {\n return -1;\n } else if (col >= this.colCount - this.rightHeaderColCount) {\n return -1;\n }\n return col - this.rowHeaderLevelCount - this.leftRowSeriesNumberColumnCount;\n }\n getRecordStartRowByRecordIndex(index: number): number {\n return this.columnHeaderLevelCount + index;\n }\n getRecordShowIndexByCell(col: number, row: number): number {\n return undefined;\n }\n // getCellRangeTranspose(): CellRange {\n // return { start: { col: 0, row: 0 }, end: { col: 0, row: 0 } };\n // }\n\n getCellHeaderPathsWithTreeNode(col: number, row: number): IPivotTableCellHeaderPaths {\n // if (this._CellHeaderPathMap.has(`$${col}$${row}`))\n // if (this._CellHeaderPathMap.has(`${col}-${row}`)) {\n // return this._CellHeaderPathMap.get(`${col}-${row}`);\n // }\n // if (col === this._lastCellCol && row === this._lastCellRow) {\n // return this._lastCellHeaderPath;\n // }\n\n let _largeCellRangeCacheIndex = -1;\n for (let i = 0; i < this._largeCellRangeCache.length; i++) {\n const range = this._largeCellRangeCache[i];\n if (col >= range.start.col && col <= range.end.col && row >= range.start.row && row <= range.end.row) {\n _largeCellRangeCacheIndex = i;\n break;\n }\n }\n\n let colPath: ITreeLayoutHeadNode[] = this.getColHeaderPathCache(col, row);\n let rowPath: ITreeLayoutHeadNode[] = this.getRowHeaderPathCache(col, row);\n\n // if (_largeCellRangeCacheIndex !== -1) {\n // const range = this._largeCellRangeCache[_largeCellRangeCacheIndex];\n // if (this._CellHeaderPathMap.has(`${range.start.col}-${range.start.row}`)) {\n // return this._CellHeaderPathMap.get(`${range.start.col}-${range.start.row}`);\n // }\n // }\n // console.log(`${col}-${row}`);\n const recordCol = this.getBodyIndexByCol(col);\n const recordRow = this.getBodyIndexByRow(row) + this.currentPageStartIndex;\n\n // column\n if (!colPath && row >= 0 && recordCol >= 0) {\n colPath = [];\n if (this.columnHierarchyType === 'grid-tree') {\n const col_pathIds: number[] = [];\n this._columnHeaderCellFullPathIds.map(arr => {\n col_pathIds.push(arr[recordCol]);\n }); //获取当前行的cellId 但这个cellId不是各级维度都有的 下面逻辑就是找全路径然后再去各个树找path的过程\n\n const findedRowPath = this.getTreePathByCellIds(col_pathIds);\n // rowPath = rowPath.concat(findedRowPath);\n colPath.push(...findedRowPath);\n } else {\n colPath = this.columnDimensionTree.getTreePath(\n recordCol,\n this.showHeader && this.showColumnHeader\n ? row - (this.columnHeaderTitle ? 1 : 0)\n : this.columnDimensionTree.totalLevel\n );\n }\n // this._colHeaderPathCache.set(col, colPath);\n this.setColHeaderPathCache(col, row, colPath);\n }\n\n // row\n if (!rowPath && col >= 0 && recordRow >= 0) {\n rowPath = [];\n if (this.rowHierarchyType === 'tree') {\n // 注释了原有逻辑\n // if (col >= this.rowHeaderLevelCount) {\n // //body单元格 col代表寻找的深度 这里需要加上行表头的整体深度\n // rowPath = this.rowDimensionTree.getTreePath(recordRow, col + this.rowDimensionTree.totalLevel);\n // } else {\n // //header单元格 col代表寻找的深度 这里需要加上当前单元格行表头的深度\n // const hd = this.getHeader(col, row);\n // rowPath = this.rowDimensionTree.getTreePath(recordRow, col + hd.hierarchyLevel);\n // }\n // 考虑多层级的ExtensionRowTree\n const row_pathIds = this._rowHeaderCellFullPathIds[recordRow]; //获取当前行的cellId 但这个cellId不是各级维度都有的 下面逻辑就是找全路径然后再去各个树找path的过程\n let findTree = this.rowDimensionTree; //第一棵寻找的树是第一列的维度树 主树\n let level = 0; //level和col对应,代表一层层树找的过程\n while (findTree && row_pathIds) {\n const pathIds: (number | string)[] = []; // pathIds记录寻找当前树需要匹配的cellId\n let cellId: LayoutObjectId = row_pathIds[level]; //row_pathIds中每个值对应了pathIds的一个节点cellId\n pathIds.push(cellId);\n while (true) {\n const hd: HeaderData = this._headerObjectMap[cellId];\n if (hd?.parentCellId) {\n // 将parentCellId加入pathIds\n pathIds.unshift(hd.parentCellId);\n cellId = hd.parentCellId;\n } else {\n break;\n }\n }\n // 组装好pathIds后从树中找出具体路径paths\n const findedRowPath = this.getTreePathByCellIds(pathIds);\n // rowPath = rowPath.concat(findedRowPath);\n rowPath.push(...findedRowPath);\n findTree = this._rowHeaderExtensionTree[row_pathIds[level]];\n level++;\n }\n } else if (this.rowHierarchyType === 'grid-tree') {\n const row_pathIds = this._rowHeaderCellFullPathIds[recordRow]; //获取当前行的cellId 但这个cellId不是各级维度都有的 下面逻辑就是找全路径然后再去各个树找path的过程\n\n const findedRowPath = this.getTreePathByCellIds(row_pathIds);\n // rowPath = rowPath.concat(findedRowPath);\n rowPath.push(...findedRowPath);\n } else {\n rowPath = this.rowDimensionTree.getTreePath(\n recordRow,\n this.showHeader && this.showRowHeader\n ? col - (this.rowHeaderTitle ? 1 : 0) - this.leftRowSeriesNumberColumnCount\n : this.rowDimensionTree.totalLevel\n );\n }\n // this._rowHeaderPathCache.set(row, rowPath);\n this.setRowHeaderPathCache(col, row, rowPath);\n }\n const p = { colHeaderPaths: colPath, rowHeaderPaths: rowPath, cellLocation: this.getCellLocation(col, row) };\n // this._CellHeaderPathMap.set(`${col}-${row}`, p);\n return p;\n }\n\n getTreePathByCellIds(row_pathIds: LayoutObjectId[]) {\n const paths: ITreeLayoutHeadNode[] = [];\n for (let i = 0; i < row_pathIds.length; i++) {\n const id = row_pathIds[i];\n if (i > 0 && id === row_pathIds[i - 1]) {\n continue;\n }\n const hd: HeaderData = this._headerObjects[id as number];\n if (hd?.define) {\n paths.push(hd.define as any as ITreeLayoutHeadNode); // tree 或者 grid-tree 的define 就是node节点复制上的\n }\n }\n return paths;\n }\n getCellHeaderPaths(col: number, row: number): IPivotTableCellHeaderPaths {\n const headerPathsWidthNode = this.getCellHeaderPathsWithTreeNode(col, row);\n const headerPaths: IPivotTableCellHeaderPaths = {\n colHeaderPaths: [],\n rowHeaderPaths: [],\n cellLocation: headerPathsWidthNode.cellLocation\n };\n headerPathsWidthNode.colHeaderPaths?.forEach((colHeader: any) => {\n const colHeaderPath: {\n dimensionKey?: string;\n indicatorKey?: string;\n value?: string;\n virtual?: boolean;\n role?: CellPivotRole;\n } = {};\n colHeaderPath.dimensionKey = colHeader.dimensionKey;\n colHeaderPath.indicatorKey = colHeader.indicatorKey;\n colHeaderPath.value = colHeader.value ?? this.getIndicatorInfoByIndicatorKey(colHeader.indicatorKey)?.title ?? '';\n colHeaderPath.virtual = colHeader.virtual;\n colHeaderPath.role = colHeader.role;\n headerPaths.colHeaderPaths!.push(colHeaderPath);\n });\n\n headerPathsWidthNode.rowHeaderPaths?.forEach((rowHeader: any) => {\n if (rowHeader.dimensionKey !== 'axis') {\n const rowHeaderPath: {\n dimensionKey?: string;\n indicatorKey?: string;\n value?: string;\n virtual?: boolean;\n role?: CellPivotRole;\n } = {};\n rowHeaderPath.dimensionKey = rowHeader.dimensionKey;\n rowHeaderPath.indicatorKey = rowHeader.indicatorKey;\n // 如果value为null且没有indicatorKey时保持value为null(区分null和空字符串,防止单元格数据匹配不对)\n rowHeaderPath.value =\n rowHeader.value ??\n (rowHeader.indicatorKey\n ? this.getIndicatorInfoByIndicatorKey(rowHeader.indicatorKey)?.title ?? ''\n : rowHeader.value);\n rowHeaderPath.virtual = rowHeader.virtual;\n rowHeaderPath.role = rowHeader.role;\n headerPaths.rowHeaderPaths!.push(rowHeaderPath);\n }\n });\n return headerPaths;\n }\n getCellRowHeaderFullPaths(col: number): IDimensionInfo[] {\n const headerPaths: IDimensionInfo[] = [];\n //根据rows和indicatorAsCol来获取行表头路径,只需要考虑rowHierarchyType为grid的情况\n if (this.rowHierarchyType === 'grid') {\n for (let i = 0; i <= Math.min(this.rowsDefine.length - 1, col); i++) {\n const rowDefine = this.rowsDefine[i];\n if (typeof rowDefine === 'string') {\n headerPaths.push({\n dimensionKey: rowDefine\n });\n } else {\n headerPaths.push({\n dimensionKey: rowDefine.dimensionKey\n });\n }\n }\n if (col >= this.rowsDefine.length && this.indicatorsAsCol === false && this.indicatorsDefine.length > 0) {\n if (typeof this.indicatorsDefine[0] === 'string') {\n headerPaths.push({\n indicatorKey: this.indicatorsDefine[0]\n });\n } else {\n headerPaths.push({\n indicatorKey: this.indicatorsDefine[0].indicatorKey\n });\n }\n }\n }\n return headerPaths;\n }\n private getIndicatorInfoByIndicatorKey(indicatorKey: string) {\n const indicatorInfo = this.indicatorsDefine?.find(indicator => {\n if (typeof indicator === 'string') {\n return false;\n }\n if (indicatorKey) {\n return indicator.indicatorKey === indicatorKey;\n }\n return false;\n }) as IIndicator;\n return indicatorInfo;\n }\n /**\n *\n * @param row_pathIds 当前_rowHeaderCellIds 可能只存储了一列id如:\n * [\n * [47],\n * [50]\n * ]\n * 但实际可能是有两三层或更多,所以全路径dimensionPath的话应该对应更多\n * [\n * [47, 48, 49]\n * [50, 51, 52]\n * ]\n * @returns 返回对应每一层维度对应的headerId, [47]为参数的话 返回 [47, 48, 49]\n */\n private findFullCellIds(row_pathIds: LayoutObjectId[]) {\n const pathIds = []; // pathIds记录寻找当前树需要匹配的cellId\n for (let level = 0; level < row_pathIds.length; level++) {\n let cellId: LayoutObjectId = row_pathIds[level]; //row_pathIds中每个值对应了pathIds的一个节点cellId\n pathIds.push(cellId);\n while (true) {\n const hd: HeaderData = this._headerObjectMap[cellId];\n if (hd?.parentCellId) {\n // 将parentCellId加入pathIds\n pathIds.unshift(hd.parentCellId);\n cellId = hd.parentCellId;\n } else {\n break;\n }\n }\n }\n return pathIds;\n }\n getHeaderDimension(col: number, row: number): IDimension | undefined {\n if (this.isHeader(col, row)) {\n const header = this.getHeader(col, row);\n const dimension =\n this.rowsDefine?.find(dimension => typeof dimension !== 'string' && dimension.dimensionKey === header.field) ??\n this.columnsDefine?.find(dimension => typeof dimension !== 'string' && dimension.dimensionKey === header.field);\n return dimension as IDimension;\n }\n return undefined;\n }\n /**\n * 判读是否为指标名称单元格。非角头部分,行表头或者列表头显示的指标名\n * @param col\n * @param row\n * @returns\n */\n isColumnIndicatorHeader(col: number, row: number): boolean {\n if (\n this._indicatorShowType === 'column' &&\n row === this.columnHeaderLevelCount - 1 &&\n col >= this.rowHeaderLevelCount\n ) {\n return true;\n }\n return false;\n }\n /**\n * 判读是否为指标名称单元格。非角头部分,行表头或者列表头显示的指标名\n * @param col\n * @param row\n * @returns\n */\n isRowIndicatorHeader(col: number, row: number): boolean {\n if (\n this._indicatorShowType === 'row' &&\n col === this.rowHeaderLevelCount - 1 &&\n row >= this.columnHeaderLevelCount\n ) {\n return true;\n }\n return false;\n }\n /**\n * 判读是否为指标名称单元格。非角头部分,行表头或者列表头显示的指标名\n * @param col\n * @param row\n * @returns\n */\n isIndicatorHeader(col: number, row: number): boolean {\n return this.isColumnIndicatorHeader(col, row) || this.isRowIndicatorHeader(col, row);\n }\n\n /**\n * 统一的行布局重建方法。\n * 在行维度树的节点状态全部发生改变后,调用此方法来完整地重新计算和生成布局。\n */\n private _rebuildRowLayout() {\n // 1. 基于节点最新的状态,重置并重新计算整个维度树的布局信息\n this.rowDimensionTree.reset(this.rowDimensionTree.tree.children);\n\n // 2. 重置行头相关的计数和缓存\n this.resetRowHeaderLevelCount();\n this._rowHeaderCellFullPathIds_FULL = [];\n this.rowDimensionKeys = this.rowDimensionTree.dimensionKeysIncludeVirtual.valueArr();\n this.fullRowDimensionKeys = [...this.rowDimensionKeys];\n\n // 3. 根据模式重新生成行头单元格ID\n if (this.rowHierarchyType === 'tree') {\n this._addHeadersForTreeMode(\n this._rowHeaderCellFullPathIds_FULL,\n 0,\n this.rowDimensionTree.tree.children,\n [],\n this.rowDimensionTree.totalLevel,\n true,\n this.rowsDefine,\n this.rowHeaderObjs\n );\n } else if (this.rowHierarchyType === 'grid-tree') {\n this._addHeadersForGridTreeMode(\n this._rowHeaderCellFullPathIds_FULL,\n 0,\n this.rowDimensionTree.tree.children,\n [],\n this.rowDimensionTree.totalLevel,\n this._getRowHeaderTreeExpandedMaxLevelCount(),\n true,\n this.rowsDefine,\n this.rowHeaderObjs,\n true\n );\n // 重新生成角头\n this.cornerHeaderObjs = this._addCornerHeaders(\n this.colDimensionKeys,\n this.rowDimensionKeys,\n this.columnsDefine.concat(...this.rowsDefine)\n );\n }\n\n // 4. 处理行标题\n if (this.rowHeaderTitle) {\n const id = ++this.sharedVar.seqId;\n const firstColIds = Array(this.rowCount - this.columnHeaderLevelCount).fill(id);\n this._rowHeaderCellFullPathIds_FULL.unshift(firstColIds);\n const cell: HeaderData = {\n id,\n title:\n typeof this.rowHeaderTitle.title === 'string'\n ? this.rowHeaderTitle.title\n : (this.rowsDefine.reduce((title: string, value) => {\n if (typeof value === 'string') {\n return title;\n }\n return title + (title ? `/${value.title}` : `${value.title}`);\n }, '') as string),\n field: undefined,\n headerType: this.rowHeaderTitle?.headerType ?? 'text',\n style: this.rowHeaderTitle?.headerStyle,\n define: {\n field: '',\n headerType: 'text',\n cellType: 'text',\n disableHeaderHover: !!this.rowHeaderTitle?.disableHeaderHover,\n disableHeaderSelect: !!this.rowHeaderTitle?.disableHeaderSelect\n }\n };\n this.rowHeaderObjs.push(cell);\n this._headerObjects[id] = cell;\n }\n\n // 5. 转置并完成后续处理\n this._rowHeaderCellFullPathIds_FULL = transpose(this._rowHeaderCellFullPathIds_FULL);\n if (this.rowHierarchyType === 'tree' && this.extensionRows?.length >= 1) {\n this.generateExtensionRowTree();\n }\n\n // 6. 重置所有对象映射和缓存\n this.colIndex = 0;\n this._headerObjectMap = this._headerObjects.reduce((o, e) => {\n o[e.id as number] = e;\n return o;\n }, {} as { [key: LayoutObjectId]: HeaderData });\n this._CellHeaderPathMap = new Map();\n this._largeCellRangeCache.length = 0;\n\n // 7. 应用隐藏和分页逻辑,并设置列宽\n this.generateCellIdsConsiderHideHeader();\n this.setPagination(this.pagination);\n if (this.rowHierarchyType === 'grid-tree') {\n this.setColumnWidths();\n }\n }\n\n /**\n * 统一的列布局重建方法。\n * 在列维度树的节点状态全部发生改变后,调用此方法来完整地重新计算和生成布局。\n */\n private _rebuildColumnLayout() {\n // 1. 基于节点最新的状态,重置并重新计算整个维度树的布局信息\n this.columnDimensionTree.reset(this.columnDimensionTree.tree.children);\n\n // 2. 重置列头相关的计数和缓存\n this.resetColumnHeaderLevelCount();\n this._columnHeaderCellFullPathIds = []; // 使用源文件中的变量名\n this.colDimensionKeys = this.columnDimensionTree.dimensionKeysIncludeVirtual.valueArr();\n\n // 3. 根据模式重新生成列头单元格ID\n if (this.columnHierarchyType === 'grid-tree') {\n this._addHeadersForGridTreeMode(\n this._columnHeaderCellFullPathIds,\n 0,\n this.columnDimensionTree.tree.children,\n [],\n this.columnDimensionTree.totalLevel,\n this._getColumnHeaderTreeExpandedMaxLevelCount(),\n true,\n this.columnsDefine,\n this.columnHeaderObjs,\n false\n );\n // 重新生成角头\n this.cornerHeaderObjs = this._addCornerHeaders(\n this.colDimensionKeys,\n this.rowDimensionKeys,\n this.columnsDefine.concat(...this.rowsDefine)\n );\n }\n\n // 4. 处理列标题\n if (this.columnHeaderTitle) {\n const id = ++this.sharedVar.seqId;\n const firstRowIds = Array(this.colCount - this.rowHeaderLevelCount - this.rightFrozenColCount).fill(id);\n this._columnHeaderCellFullPathIds.unshift(firstRowIds);\n const cell: HeaderData = {\n id,\n title:\n typeof this.columnHeaderTitle.title === 'string'\n ? this.columnHeaderTitle.title\n : (this.columnsDefine.reduce((title: string, value) => {\n if (typeof value === 'string') {\n return title;\n }\n return title + (title ? `/${value.title}` : `${value.title}`);\n }, '') as string),\n field: undefined,\n headerType: this.columnHeaderTitle?.headerType ?? 'text',\n style: this.columnHeaderTitle?.headerStyle,\n define: <any>{\n id,\n disableHeaderHover: !!this.columnHeaderTitle?.disableHeaderHover,\n disableHeaderSelect: !!this.columnHeaderTitle?.disableHeaderSelect\n }\n };\n this.columnHeaderObjs.push(cell);\n this._headerObjects[id] = cell;\n }\n\n // 5. 重置所有对象映射和缓存\n this.colIndex = 0;\n this._headerObjectMap = this._headerObjects.reduce((o, e) => {\n o[e.id as number] = e;\n return o;\n }, {} as { [key: LayoutObjectId]: HeaderData });\n this._CellHeaderPathMap = new Map();\n this._largeCellRangeCache.length = 0;\n\n // 6. 应用隐藏和分页逻辑,并设置列宽\n this.generateCellIdsConsiderHideHeader();\n if (this.columnHierarchyType === 'grid-tree') {\n this.setColumnWidths();\n }\n }\n\n /**\n * 点击某个单元格的展开折叠按钮 改变该节点的状态 维度树重置\n * @param col\n * @param row\n */\n toggleHierarchyState(col: number, row: number) {\n this.colIndex = 0;\n const lastLevelIndex = //这个变量赋值必须要写到前面 resetRowHeaderLevelCount会更新\n (this.indicatorsAsCol ? this.rowHeaderLevelCount - 1 : this.rowHeaderLevelCount - 2) -\n this.leftRowSeriesNumberColumnCount;\n const oldRowHeaderCellIds = this._rowHeaderCellFullPathIds_FULL.slice(0);\n const oldRowHeaderCellPositons = oldRowHeaderCellIds.map((id, row) => {\n return { col, row: row + this.columnHeaderLevelCount };\n });\n const hd = this.getHeader(col, row);\n (<any>hd.define).hierarchyState =\n (<any>hd.define).hierarchyState === HierarchyState.collapse ? HierarchyState.expand : HierarchyState.collapse;\n //过程类似构造函数处理过程\n this.rowDimensionTree.reset(this.rowDimensionTree.tree.children);\n this.resetRowHeaderLevelCount();\n this._rowHeaderCellFullPathIds_FULL = [];\n this.rowDimensionKeys = this.rowDimensionTree.dimensionKeysIncludeVirtual.valueArr();\n this.fullRowDimensionKeys = [];\n this.fullRowDimensionKeys = this.fullRowDimensionKeys.concat(this.rowDimensionKeys);\n\n if (this.rowHierarchyType === 'tree') {\n // 确保extensionRows的维度键也被包含在fullRowDimensionKeys中\n if (this.extensionRows?.length > 0) {\n this.extensionRows.forEach(extensionRow => {\n const extensionRowDimensionKeys =\n extensionRow.rows?.map(row => (typeof row === 'string' ? row : row.dimensionKey)) || [];\n this.fullRowDimensionKeys = this.fullRowDimensionKeys.concat(extensionRowDimensionKeys);\n });\n }\n\n this._addHeadersForTreeMode(\n this._rowHeaderCellFullPathIds_FULL,\n 0,\n this.rowDimensionTree.tree.children,\n [],\n this.rowDimensionTree.totalLevel,\n true,\n this.rowsDefine,\n this.rowHeaderObjs\n );\n } else if (this.rowHierarchyType === 'grid-tree') {\n const startRow = 0;\n this._addHeadersForGridTreeMode(\n this._rowHeaderCellFullPathIds_FULL,\n startRow,\n this.rowDimensionTree.tree.children,\n [],\n this.rowDimensionTree.totalLevel,\n this._getRowHeaderTreeExpandedMaxLevelCount(),\n true,\n this.rowsDefine,\n this.rowHeaderObjs,\n true\n // this.columnDimensionTree.totalLevel,\n // this.indicatorKeys\n );\n\n this.cornerHeaderObjs = this._addCornerHeaders(\n this.colDimensionKeys,\n this.rowDimensionKeys,\n this.columnsDefine.concat(...this.rowsDefine)\n );\n }\n\n if (this.rowHeaderTitle) {\n const id = ++this.sharedVar.seqId;\n const firstColIds = Array(this.rowCount - this.columnHeaderLevelCount).fill(id);\n this._rowHeaderCellFullPathIds_FULL.unshift(firstColIds);\n const cell: HeaderData = {\n id,\n title:\n typeof this.rowHeaderTitle.title === 'string'\n ? this.rowHeaderTitle.title\n : (this.rowsDefine.reduce((title: string, value) => {\n if (typeof value === 'string') {\n return title;\n }\n return title + (title ? `/${value.title}` : `${value.title}`);\n }, '') as string),\n field: undefined,\n headerType: this.rowHeaderTitle?.headerType ?? 'text',\n style: this.rowHeaderTitle?.headerStyle,\n define: {\n field: '',\n headerType: 'text',\n cellType: 'text',\n disableHeaderHover: !!this.rowHeaderTitle?.disableHeaderHover,\n disableHeaderSelect: !!this.rowHeaderTitle?.disableHeaderSelect\n }\n };\n this.rowHeaderObjs.push(cell);\n this._headerObjects[id] = cell;\n }\n this._rowHeaderCellFullPathIds_FULL = transpose(this._rowHeaderCellFullPathIds_FULL);\n if (this.rowHierarchyType === 'tree' && this.extensionRows?.length >= 1) {\n this.generateExtensionRowTree();\n }\n this.colIndex = 0;\n this._headerObjectMap = this._headerObjects.reduce((o, e) => {\n o[e.id as number] = e;\n return o;\n }, {} as { [key: LayoutObjectId]: HeaderData });\n this._CellHeaderPathMap = new Map();\n // this._cellRangeMap = new Map();\n this._largeCellRangeCache.length = 0;\n\n let diffCell: {\n addCellPositionsRowDirection?: CellAddress[];\n removeCellPositionsRowDirection?: CellAddress[];\n updateCellPositionsRowDirection?: CellAddress[];\n addCellPositionsColumnDirection?: CellAddress[];\n removeCellPositionsColumnDirection?: CellAddress[];\n updateCellPositionsColumnDirection?: CellAddress[];\n };\n if (this.rowHierarchyType === 'tree') {\n diffCell = diffCellAddress(\n col,\n row,\n oldRowHeaderCellIds.map(oldCellId => oldCellId[col - this.leftRowSeriesNumberColumnCount]),\n this._rowHeaderCellFullPathIds_FULL.map(newCellId => newCellId[col - this.leftRowSeriesNumberColumnCount]),\n oldRowHeaderCellPositons,\n this\n );\n } else {\n const new_lastLevelIndex =\n (this.indicatorsAsCol ? this.rowHeaderLevelCount - 1 : this.rowHeaderLevelCount - 2) -\n this.leftRowSeriesNumberColumnCount;\n diffCell = diffCellAddressForGridTree(\n col,\n row,\n oldRowHeaderCellIds.map(oldCellId => oldCellId[lastLevelIndex]),\n this._rowHeaderCellFullPathIds_FULL.map(newCellId => newCellId[new_lastLevelIndex]),\n oldRowHeaderCellPositons,\n\n this\n );\n }\n\n // this._rowHeaderCellIds = this._rowHeaderCellIds_FULL.slice();\n this.generateCellIdsConsiderHideHeader();\n this.setPagination(this.pagination);\n if (this.rowHierarchyType === 'grid-tree') {\n // 处理列宽配置\n this.setColumnWidths();\n }\n return diffCell;\n }\n /**\n * 点击某个单元格的展开折叠按钮 改变该节点的状态 维度树重置\n * @param col\n * @param row\n */\n toggleHierarchyStateForColumnTree(col: number, row: number) {\n this.colIndex = 0;\n const lastLevelIndex = //这个变量赋值必须要写到前面 resetRowHeaderLevelCount会更新\n !this.indicatorsAsCol ? this.columnHeaderLevelCount - 1 : this.columnHeaderLevelCount - 2;\n const oldColumnHeaderCellIds = this._columnHeaderCellFullPathIds.slice(0);\n const oldColumnHeaderCellPositons = oldColumnHeaderCellIds[this.columnHeaderLevelCount - 1].map((id, col) => {\n return { col: col + this.rowHeaderLevelCount, row };\n });\n const hd = this.getHeader(col, row);\n (<any>hd.define).hierarchyState =\n (<any>hd.define).hierarchyState === HierarchyState.collapse ? HierarchyState.expand : HierarchyState.collapse;\n //过程类似构造函数处理过程\n this.columnDimensionTree.reset(this.columnDimensionTree.tree.children);\n this.resetColumnHeaderLevelCount();\n this._columnHeaderCellFullPathIds = [];\n this.colDimensionKeys = this.columnDimensionTree.dimensionKeysIncludeVirtual.valueArr();\n // this.fullRowDimensionKeys = [];\n // this.fullRowDimensionKeys = this.fullRowDimensionKeys.concat(this.rowDimensionKeys);\n if (this.columnHierarchyType === 'grid-tree') {\n const startRow = 0;\n this._addHeadersForGridTreeMode(\n this._columnHeaderCellFullPathIds,\n startRow,\n this.columnDimensionTree.tree.children,\n [],\n this.columnDimensionTree.totalLevel,\n this._getColumnHeaderTreeExpandedMaxLevelCount(),\n true,\n this.columnsDefine,\n this.columnHeaderObjs,\n false\n // this.columnDimensionTree.totalLevel,\n // this.indicatorKeys\n );\n this.cornerHeaderObjs = this._addCornerHeaders(\n this.colDimensionKeys,\n this.rowDimensionKeys,\n this.columnsDefine.concat(...this.rowsDefine)\n );\n }\n\n if (this.columnHeaderTitle) {\n const id = ++this.sharedVar.seqId;\n const firstRowIds = Array(this.colCount - this.rowHeaderLevelCount - this.rightFrozenColCount).fill(id);\n this._columnHeaderCellFullPathIds.unshift(firstRowIds);\n const cell: HeaderData = {\n id,\n title:\n typeof this.columnHeaderTitle.title === 'string'\n ? this.columnHeaderTitle.title\n : (this.columnsDefine.reduce((title: string, value) => {\n if (typeof value === 'string') {\n return title;\n }\n return title + (title ? `/${value.title}` : `${value.title}`);\n }, '') as string),\n field: undefined,\n headerType: this.columnHeaderTitle?.headerType ?? 'text',\n style: this.columnHeaderTitle?.headerStyle,\n define: <any>{\n id,\n disableHeaderHover: !!this.columnHeaderTitle?.disableHeaderHover,\n disableHeaderSelect: !!this.columnHeaderTitle?.disableHeaderSelect\n }\n };\n this.columnHeaderObjs.push(cell);\n this._headerObjects[id] = cell;\n }\n\n this.colIndex = 0;\n this._headerObjectMap = this._headerObjects.reduce((o, e) => {\n o[e.id as number] = e;\n return o;\n }, {} as { [key: LayoutObjectId]: HeaderData });\n this._CellHeaderPathMap = new Map();\n // this._cellRangeMap = new Map();\n this._largeCellRangeCache.length = 0;\n\n const new_lastLevelIndex = !this.indicatorsAsCol\n ? this.columnHeaderLevelCount - 1\n : this.columnHeaderLevelCount - 2;\n const diffCell = diffCellAddressForGridTreeOnColumn(\n col,\n row,\n oldColumnHeaderCellIds[lastLevelIndex],\n this._columnHeaderCellFullPathIds[new_lastLevelIndex],\n oldColumnHeaderCellPositons,\n this\n );\n\n // this._rowHeaderCellIds = this._rowHeaderCellIds_FULL.slice();\n this.generateCellIdsConsiderHideHeader();\n if (this.columnHierarchyType === 'grid-tree') {\n // 处理列宽配置\n this.setColumnWidths();\n }\n // this.setColumnWidths();\n return diffCell;\n }\n // 为列宽计算专用,兼容列表\n isHeaderForColWidth(col: number, row: number): boolean {\n return this.isHeader(col, row);\n }\n getHeaderForColWidth(col: number, row: number): HeaderData | SeriesNumberColumnData {\n return this.getHeader(col, row);\n }\n /**\n * 通过dimensionPath获取到对应的表头地址col row\n * TODO 这个函数在有extensionRows的时候会有问题 数的startIndex等已经不对应了\n * @param dimensions\n * @returns\n */\n getPivotCellAdress(dimensions: IDimensionInfo[]): CellAddress | undefined {\n if (!Array.isArray(dimensions)) {\n return undefined;\n }\n let rowArr = this.rowTree;\n let rowDimension;\n let colArr = this.columnTree;\n let colDimension;\n for (let i = 0; i < dimensions.length; i++) {\n const highlightDimension = dimensions[i];\n if (\n (highlightDimension.isPivotCorner || !isValid(highlightDimension.value)) && //判断角头: isPivotCorner或者 没有维度值\n i === dimensions.length - 1\n ) {\n // 判断角表头位置\n if (this?.cornerSetting?.titleOnDimension === 'row') {\n let col = 0; //树形展示的情况下 肯定是在第0列\n if (this.rowHierarchyType === 'grid') {\n col = (this.rowDimensionKeys as Array<string | number>).indexOf(highlightDimension.dimensionKey);\n }\n return col === -1\n ? undefined\n : { col: (this.rowHeaderTitle ? col + 1 : col) + this.leftRowSeriesNumberColumnCount, row: 0 };\n }\n\n const row = (this.colDimensionKeys as Array<string | number>).indexOf(highlightDimension.dimensionKey);\n return row === -1\n ? undefined\n : { col: 0 + this.leftRowSeriesNumberColumnCount, row: this.columnHeaderTitle ? row + 1 : row };\n }\n // 判断级别,找到distDimension\n let isCol = false;\n for (let j = 0; j < colArr.length; j++) {\n const dimension = colArr[j];\n if (\n ((isValid(highlightDimension.dimensionKey) && dimension.dimensionKey === highlightDimension.dimensionKey) ||\n (isValid(highlightDimension.indicatorKey) && dimension.indicatorKey === highlightDimension.indicatorKey)) &&\n dimension.value === highlightDimension.value\n ) {\n colArr = dimension.children as IHeaderTreeDefine[];\n colDimension = dimension;\n isCol = true;\n break;\n }\n }\n if (isCol) {\n continue;\n }\n for (let k = 0; k < rowArr.length; k++) {\n const dimension = rowArr[k];\n if (\n ((isValid(highlightDimension.dimensionKey) && dimension.dimensionKey === highlightDimension.dimensionKey) ||\n (isValid(highlightDimension.indicatorKey) && dimension.indicatorKey === highlightDimension.indicatorKey)) &&\n dimension.value === highlightDimension.value\n ) {\n rowArr = dimension.children as IHeaderTreeDefine[];\n rowDimension = dimension;\n break;\n }\n }\n }\n\n // 通过dimension获取col和row\n let col = 0;\n let row = 0;\n if (rowDimension) {\n row = this.columnHeaderLevelCount;\n const { startInTotal, afterSpanLevel } = rowDimension as ITreeLayoutHeadNode;\n row += startInTotal;\n if (this.rowHierarchyType === 'grid') {\n col = (this.rowHeaderTitle ? afterSpanLevel + 1 : afterSpanLevel) + this.leftRowSeriesNumberColumnCount;\n } else {\n col = 0 + this.leftRowSeriesNumberColumnCount;\n } //树形展示的情况下 肯定是在第0列\n return { col, row };\n } else if (colDimension) {\n col = this.rowHeaderLevelCount + this.leftRowSeriesNumberColumnCount;\n const { startInTotal, afterSpanLevel } = colDimension as ITreeLayoutHeadNode;\n col += startInTotal;\n row = this.columnHeaderTitle ? afterSpanLevel + 1 : afterSpanLevel;\n return { col, row };\n }\n return undefined;\n }\n getPivotDimensionInfo(col: number, row: number): IDimensionInfo[] {\n const { colHeaderPaths, rowHeaderPaths } = this.getCellHeaderPaths(col, row);\n const pivotInfo: IDimensionInfo[] = [];\n if (colHeaderPaths.length) {\n // 列表头\n colHeaderPaths.forEach((path, i) => {\n pivotInfo.push({\n dimensionKey: path.dimensionKey,\n value: path.value,\n isPivotCorner: false,\n indicatorKey: path.indicatorKey\n // i === colHeaderPaths.length - 1 ? this.getIndicatorKey(col, row) : undefined,\n });\n });\n } else if (rowHeaderPaths.length) {\n // 行表头\n rowHeaderPaths.forEach((path, i) => {\n pivotInfo.push({\n dimensionKey: path.dimensionKey,\n value: path.value,\n isPivotCorner: false,\n indicatorKey: path.indicatorKey\n // i === rowHeaderPaths.length - 1 ? this.getIndicatorKey(col, row) : undefined,\n });\n });\n } else if (this.isCornerHeader(col, row)) {\n // 角表头\n if (this?.cornerSetting?.titleOnDimension === 'row') {\n // for (let i = 0; i <= col; i++) {\n pivotInfo.push({\n dimensionKey:\n this.rowDimensionKeys[(this.rowHeaderTitle ? col - 1 : col) - this.leftRowSeriesNumberColumnCount],\n isPivotCorner: true\n });\n // }\n } else {\n // for (let i = 0; i <= row; i++) {\n pivotInfo.push({\n dimensionKey: this.colDimensionKeys[this.columnHeaderTitle ? row - 1 : row],\n isPivotCorner: true\n });\n // }\n }\n }\n\n return pivotInfo;\n }\n\n getIndicatorKey(col: number, row: number) {\n // let indicator;\n // if (this._indicators?.length === 1) indicator = this._indicators[0];\n // else if (this.indicatorsAsCol) {\n // const bodyCol = col - this.rowHeaderLevelCount;\n // indicator = this._indicators[bodyCol % this._indicators?.length];\n // } else {\n // const bodyRow = row - this.columnHeaderLevelCount;\n // indicator = this._indicators[bodyRow % this._indicators?.length];\n // }\n\n // return indicator?.indicatorKey;\n return (this.getBody(col, row) as IndicatorData)?.indicatorKey;\n }\n getParentCellId(col: number, row: number) {\n if (row === 0) {\n return undefined;\n }\n if (this.isColumnHeader(col, row)) {\n return this.getCellId(col, row - 1);\n } else if (this.isRowHeader(col, row)) {\n return this.getCellId(col - 1, row);\n }\n return undefined;\n }\n getRowHeaderCellAddressByCellId(cellId: LayoutObjectId) {\n let col;\n let row;\n this._rowHeaderCellIds.find((cellIds, rowIndex) => {\n const finded = cellIds.find((id, colIndex) => {\n if (id === cellId) {\n col = colIndex;\n return true;\n }\n return false;\n });\n if (finded) {\n row = rowIndex;\n return true;\n }\n return false;\n });\n if (isValid(col) && isValid(row)) {\n return { col, row: (row as number) + this.columnHeaderLevelCount };\n }\n return undefined;\n }\n /**\n * 判断从source地址是否可以移动到target地址\n * @param source\n * @param target\n * @returns boolean 是否可以移动\n */\n canMoveHeaderPosition(source: CellAddress, target: CellAddress): boolean {\n if (this.isSeriesNumberInHeader(target.col, target.row) || this.isSeriesNumberInHeader(source.col, source.row)) {\n return false;\n }\n if (this.isCornerHeader(target.col, target.row)) {\n return false;\n }\n if (source.col < 0 || source.row < 0 || target.col < 0 || target.row < 0) {\n return false;\n }\n if (this.isSeriesNumberInBody(target.col, target.row) && this.isSeriesNumberInBody(source.col, source.row)) {\n // 如果是子节点之间相互换位置 则匹配表头最后一级\n // if (\n // this.getColumnDefine(source.col + this.leftRowSeriesNumberColumnCount, source.row).isChildNode &&\n // this.getColumnDefine(target.col + this.leftRowSeriesNumberColumnCount, target.row).isChildNode\n // ) {\n source.col = source.col + this.leftRowSeriesNumberColumnCount + this.rowHeaderLevelCount - 1;\n target.col = target.col + this.leftRowSeriesNumberColumnCount + this.rowHeaderLevelCount - 1;\n // } else {\n // // 为适应下面的判断逻辑 将col加至表格第一级\n // source.col = source.col + this.leftRowSeriesNumberColumnCount;\n // target.col = target.col + this.leftRowSeriesNumberColumnCount;\n // }\n }\n // 获取操作单元格的range范围\n const sourceCellRange = this.getCellRange(source.col, source.row);\n // 获取source和target对应sourceCellRange.start.row的headerId\n if (this.isColumnHeader(source.col, source.row)) {\n const sourceTopId = this.getParentCellId(source.col, sourceCellRange.start.row);\n const targetTopId = this.getParentCellId(target.col, sourceCellRange.start.row);\n return sourceTopId === targetTopId;\n } else if (this.isRowHeader(source.col, source.row)) {\n if (this.rowHierarchyType === 'tree') {\n const sourceRowHeaderPaths = cloneDeep(\n this.getCellHeaderPathsWithTreeNode(source.col, source.row).rowHeaderPaths\n );\n const targetRowHeaderPaths = cloneDeep(\n this.getCellHeaderPathsWithTreeNode(target.col, target.row).rowHeaderPaths\n );\n sourceRowHeaderPaths.pop(); // 如果用了缓存_CellHeaderPathMap的话 这里pop会影响缓存的值 所以上面使用clone\n targetRowHeaderPaths.pop();\n\n if (sourceRowHeaderPaths.length <= targetRowHeaderPaths.length) {\n if (sourceRowHeaderPaths.length === targetRowHeaderPaths.length) {\n return !sourceRowHeaderPaths.find(\n (item: any, i: number) =>\n item.dimensionKey !== targetRowHeaderPaths[i].dimensionKey ||\n item.value !== targetRowHeaderPaths[i].value\n );\n }\n\n if (sourceRowHeaderPaths.length > 0) {\n //处理如层级a.b节点移动到c.d.e节点的情况 这个时候要返回false\n for (let i = 0; i < sourceRowHeaderPaths.length; i++) {\n if (sourceRowHeaderPaths[i].startInTotal !== targetRowHeaderPaths[i].startInTotal) {\n return false;\n }\n }\n }\n return true;\n }\n } else {\n const sourceTopId = this.getParentCellId(sourceCellRange.start.col, source.row);\n const targetTopId = this.getParentCellId(sourceCellRange.start.col, target.row);\n return sourceTopId === targetTopId;\n }\n }\n return false;\n }\n /**\n * 拖拽换位置 从source地址换到target地址\n * @param source\n * @param target\n * @returns\n */\n moveHeaderPosition(\n source: CellAddress,\n target: CellAddress\n ): {\n sourceIndex: number;\n targetIndex: any;\n sourceSize: any;\n targetSize: any;\n moveType: 'column' | 'row';\n } {\n // 判断从source地址是否可以移动到target地址\n if (\n (!this._table.options.dragOrder?.validateDragOrderOnEnd ||\n this._table.options.dragOrder?.validateDragOrderOnEnd(source, target)) &&\n this.canMoveHeaderPosition(source, target) &&\n !this.isCellRangeEqual(source.col, source.row, target.col, target.row)\n ) {\n const sourceCellRange = this.getCellRange(source.col, source.row);\n // 对移动列表头 行表头 分别处理\n if (this.isColumnHeader(source.col, source.row)) {\n // source单元格包含的列数\n const sourceSize = sourceCellRange.end.col - sourceCellRange.start.col + 1;\n // 插入目标地址的列index\n let targetIndex;\n const targetCellRange = this.getCellRange(target.col, sourceCellRange.start.row);\n if (target.col >= source.col) {\n targetIndex = targetCellRange.end.col - sourceSize + 1;\n } else {\n targetIndex = targetCellRange.start.col;\n }\n //如果操作列和目标地址col一样 则不执行其他逻辑\n if (targetIndex === sourceCellRange.start.col) {\n return null;\n }\n // // _columnHeaderCellIds 逐行将每一行的source id 移动到目标地址targetCol处\n // for (let row = 0; row < this._columnHeaderCellIds.length; row++) {\n // // 从header id的二维数组中取出需要操作的source ids\n // const sourceIds = this._columnHeaderCellIds[row].splice(\n // sourceCellRange.start.col - this.rowHeaderLevelCount - this.leftRowSeriesNumberColumnCount,\n // sourceSize\n // );\n // // 将source ids插入到目标地址targetCol处\n // // 把sourceIds变成一个适合splice的数组(包含splice前2个参数的数组) 以通过splice来插入sourceIds数组\n // sourceIds.unshift(targetIndex - this.rowHeaderLevelCount - this.leftRowSeriesNumberColumnCount, 0);\n // Array.prototype.splice.apply(this._columnHeaderCellIds[row], sourceIds);\n // }\n // _columnHeaderCellFullPathIds 调整了 _columnHeaderCellIds就不需要调整了 因为他们的第二层数组对象是引用关系\n // _columnHeaderCellFullPathIds 逐行将每一行的source id 移动到目标地址targetCol处\n for (let row = 0; row < this._columnHeaderCellFullPathIds.length; row++) {\n // 从header id的二维数组中取出需要操作的source ids\n const sourceIds = this._columnHeaderCellFullPathIds[row].splice(\n sourceCellRange.start.col - this.rowHeaderLevelCount - this.leftRowSeriesNumberColumnCount,\n sourceSize\n );\n // 将source ids插入到目标地址targetCol处\n // 把sourceIds变成一个适合splice的数组(包含splice前2个参数的数组) 以通过splice来插入sourceIds数组\n sourceIds.unshift(targetIndex - this.rowHeaderLevelCount - this.leftRowSeriesNumberColumnCount, 0);\n Array.prototype.splice.apply(this._columnHeaderCellFullPathIds[row], sourceIds);\n }\n\n //将_columns的列定义调整位置 同调整_headerCellIds逻辑\n const sourceColumns = this._columnWidths.splice(\n sourceCellRange.start.col - this.leftRowSeriesNumberColumnCount,\n sourceSize\n );\n sourceColumns.unshift((targetIndex - this.leftRowSeriesNumberColumnCount) as any, 0 as any);\n Array.prototype.splice.apply(this._columnWidths, sourceColumns);\n\n // 对维度树结构调整节点位置\n this.columnDimensionTree.movePosition(\n this.getCellHeaderPathsWithTreeNode(source.col, source.row).colHeaderPaths.length - 1,\n sourceCellRange.start.col - this.rowHeaderLevelCount - this.leftRowSeriesNumberColumnCount,\n targetCellRange.start.col - this.rowHeaderLevelCount - this.leftRowSeriesNumberColumnCount\n );\n this.columnDimensionTree.reset(this.columnDimensionTree.tree.children);\n this._CellHeaderPathMap = new Map();\n // this._cellRangeMap = new Map();\n this._largeCellRangeCache.length = 0;\n return {\n sourceIndex: sourceCellRange.start.col,\n targetIndex,\n sourceSize,\n targetSize: targetCellRange.end.col - targetCellRange.start.col + 1,\n moveType: 'column'\n };\n } else if (this.isRowHeader(source.col, source.row)) {\n // 插入目标地址的列index\n let targetIndex;\n const sourceRowHeaderPaths = this.getCellHeaderPathsWithTreeNode(source.col, source.row).rowHeaderPaths as any;\n const targetRowHeaderPaths = this.getCellHeaderPathsWithTreeNode(target.col, target.row).rowHeaderPaths as any;\n const sourceRowHeaderNode = sourceRowHeaderPaths[sourceRowHeaderPaths.length - 1];\n const targetRowHeaderNode = targetRowHeaderPaths[sourceRowHeaderPaths.length - 1];\n //整体移动的列数\n // const moveSize = sourceRowHeaderNode.size;\n const sourceSize = sourceRowHeaderNode.size;\n if (target.row >= source.row) {\n targetIndex = targetRowHeaderNode.startInTotal + targetRowHeaderNode.size - sourceSize;\n } else {\n targetIndex = targetRowHeaderNode.startInTotal;\n }\n\n //如果操作列和目标地址col一样 则不执行其他逻辑\n if (\n // targetIndex === source.row - this.columnHeaderLevelCount ||\n // targetIndex === sourceCellRange.end.row - this.columnHeaderLevelCount\n targetIndex ===\n sourceCellRange.start.row - this.columnHeaderLevelCount\n ) {\n return null;\n }\n\n // 表头id _rowHeaderCellIds进行调整\n // 从header id的二维数组中取出需要操作的source ids\n const sourceIds = this._rowHeaderCellIds.splice(\n sourceCellRange.start.row - this.columnHeaderLevelCount,\n sourceSize\n );\n sourceIds.unshift((targetIndex - this.currentPageStartIndex) as any, 0 as any);\n Array.prototype.splice.apply(this._rowHeaderCellIds, sourceIds);\n\n // 表头id _rowHeaderCellFullPathIds\n const sourceIds0 = this._rowHeaderCellFullPathIds.splice(\n sourceCellRange.start.row - this.columnHeaderLevelCount,\n sourceSize\n );\n sourceIds0.unshift((targetIndex - this.currentPageStartIndex) as any, 0 as any);\n Array.prototype.splice.apply(this._rowHeaderCellFullPathIds, sourceIds0);\n // 表头id _rowHeaderCellIds_FULL进行调整\n // 从header id的二维数组中取出需要操作的source ids\n const sourceIds_FULL = this._rowHeaderCellIds_FULL.splice(\n sourceCellRange.start.row - this.columnHeaderLevelCount + this.currentPageStartIndex,\n sourceSize\n );\n sourceIds_FULL.unshift(targetIndex as any, 0 as any);\n Array.prototype.splice.apply(this._rowHeaderCellIds_FULL, sourceIds_FULL);\n // 表头id _rowHeaderCellFullPathIds_FULL进行调整\n const sourceIds_FULL0 = this._rowHeaderCellFullPathIds_FULL.splice(\n sourceCellRange.start.row - this.columnHeaderLevelCount + this.currentPageStartIndex,\n sourceSize\n );\n sourceIds_FULL0.unshift(targetIndex as any, 0 as any);\n Array.prototype.splice.apply(this._rowHeaderCellFullPathIds_FULL, sourceIds_FULL0);\n // 对维度树结构调整节点位置\n this.rowDimensionTree.movePosition(\n sourceRowHeaderPaths.length - 1,\n sourceCellRange.start.row - this.columnHeaderLevelCount,\n // targetCellRange.start.row - this.columnHeaderLevelCount\n targetIndex + (target.row > source.row ? sourceRowHeaderNode.size - 1 : 0)\n );\n this.rowDimensionTree.reset(this.rowDimensionTree.tree.children);\n this._CellHeaderPathMap = new Map();\n // this._cellRangeMap = new Map();\n this._largeCellRangeCache.length = 0;\n return {\n sourceIndex: sourceCellRange.start.row,\n targetIndex: targetIndex + this.columnHeaderLevelCount,\n sourceSize,\n targetSize: targetRowHeaderNode.size,\n moveType: 'row'\n };\n }\n }\n return null;\n }\n\n /**\n * 递归回溯匹配维度路径\n * @param paths 要匹配的路径数组\n * @param treeNodes 当前层级的树节点数组\n * @param needLowestLevel 是否需要匹配到最底层\n * @param checkAxisNode 是否检查axis节点(用于rowHeaderPaths的特殊处理)\n * @param pathIndex 当前匹配的路径索引\n * @returns 匹配到的维度节点,如果未找到则返回undefined\n */\n matchDimensionPath = (\n paths: IDimensionInfo[],\n treeNodes: IHeaderTreeDefine[],\n needLowestLevel: boolean,\n checkAxisNode: boolean = false,\n pathIndex: number = 0\n ): ITreeLayoutHeadNode | undefined => {\n if (pathIndex >= paths.length) {\n return undefined;\n }\n\n const currentPath = paths[pathIndex];\n\n // 遍历当前层级的所有节点,寻找匹配的节点\n for (let j = 0; j < treeNodes.length; j++) {\n const dimension = treeNodes[j];\n\n // 检查是否匹配当前路径节点\n const isMatch =\n (!isValid(currentPath.indicatorKey) &&\n dimension.dimensionKey === currentPath.dimensionKey &&\n dimension.value === currentPath.value) ||\n (isValid(currentPath.indicatorKey) &&\n dimension.indicatorKey === currentPath.indicatorKey &&\n ((isValid(dimension.value) && isValid(currentPath.value) && currentPath.value === dimension.value) ||\n !isValid(dimension.value) ||\n !isValid(currentPath.value)));\n\n if (isMatch) {\n const children = dimension.children as IHeaderTreeDefine[];\n\n // 如果是最后一级路径\n if (pathIndex === paths.length - 1) {\n if (needLowestLevel) {\n // 需要最底层:如果没有子节点,或者子节点中有axis节点,则返回当前节点\n const hasAxisNode =\n checkAxisNode && children && children.some((row: IHeaderTreeDefine) => row.dimensionKey === 'axis');\n if (!children?.length || hasAxisNode) {\n return dimension as ITreeLayoutHeadNode;\n }\n // 如果有子节点且没有axis节点,说明这不是最底层,需要递归查找叶子节点\n // 查找第一个满足条件的叶子节点(没有子节点或子节点中有axis的节点)\n const findLeafNode = (nodes: IHeaderTreeDefine[]): ITreeLayoutHeadNode | undefined => {\n for (const node of nodes) {\n const nodeChildren = node.children as IHeaderTreeDefine[];\n const nodeHasAxis =\n checkAxisNode &&\n nodeChildren &&\n nodeChildren.some((row: IHeaderTreeDefine) => row.dimensionKey === 'axis');\n if (!nodeChildren?.length || nodeHasAxis) {\n return node as ITreeLayoutHeadNode;\n }\n const leaf = findLeafNode(nodeChildren);\n if (leaf) {\n return leaf;\n }\n }\n return undefined;\n };\n const leafNode = findLeafNode(children);\n if (leafNode) {\n return leafNode;\n }\n } else {\n // 不需要最底层,直接返回当前节点\n return dimension as ITreeLayoutHeadNode;\n }\n }\n\n // 如果还有子节点,继续向下匹配\n if (children?.length) {\n const result = this.matchDimensionPath(paths, children, needLowestLevel, checkAxisNode, pathIndex + 1);\n if (result) {\n return result;\n }\n // 如果向下匹配失败,继续尝试当前层级的其他节点(回溯)\n } else if (pathIndex === paths.length - 1) {\n // 是最后一级但没有子节点,返回当前节点\n return dimension as ITreeLayoutHeadNode;\n }\n }\n }\n\n return undefined;\n };\n\n /**\n * 通过dimensionPath获取到对应的表头地址col row, dimensionPath不要求必须按照表头层级顺序传递\n * @param dimensions\n * @returns\n */\n getCellAdressByHeaderPath(\n dimensionPaths: // | {\n // colHeaderPaths: IDimensionInfo[];\n // rowHeaderPaths: IDimensionInfo[];\n // }\n IPivotTableCellHeaderPaths | IDimensionInfo[]\n ): CellAddress | undefined {\n let colHeaderPaths: IDimensionInfo[];\n let rowHeaderPaths: IDimensionInfo[];\n let isCornerCell = false;\n // forceBody 的逻辑TODO去除,逻辑处理不当,去除时需要考虑历史包袱:https://github.com/VisActor/VTable/issues/544\n let forceBody = false;\n if (Array.isArray(dimensionPaths)) {\n if (dimensionPaths.length > this.rowDimensionKeys.length + this.colDimensionKeys.length) {\n //如果传入的path长度比行列维度层级多的话 无法匹配\n return undefined;\n }\n // 如果传入的是整体的path 按照行列维度区分开\n colHeaderPaths = dimensionPaths.filter(\n (path: IDimensionInfo) =>\n this.colDimensionKeys.indexOf(path.dimensionKey) >= 0 ||\n (this.colDimensionKeys.indexOf(this.indicatorDimensionKey) >= 0 && path.indicatorKey)\n );\n rowHeaderPaths = dimensionPaths.filter(\n (path: IDimensionInfo) =>\n this.rowDimensionKeys.indexOf(path.dimensionKey) >= 0 ||\n (this.rowDimensionKeys.indexOf(this.indicatorDimensionKey) >= 0 && path.indicatorKey)\n );\n } else {\n colHeaderPaths = dimensionPaths.colHeaderPaths;\n rowHeaderPaths = dimensionPaths.rowHeaderPaths;\n if (dimensionPaths?.cellLocation === 'body' && this._table.isPivotTable()) {\n forceBody = true;\n }\n }\n\n if (!Array.isArray(colHeaderPaths) && !Array.isArray(rowHeaderPaths)) {\n return undefined;\n }\n // 行列维度path根据key排序\n colHeaderPaths?.sort((a, b) => {\n return (\n this.colDimensionKeys.indexOf(a.dimensionKey ?? this.indicatorDimensionKey) -\n this.colDimensionKeys.indexOf(b.dimensionKey ?? this.indicatorDimensionKey)\n );\n });\n rowHeaderPaths?.sort((a, b) => {\n return (\n this.fullRowDimensionKeys.indexOf(a.dimensionKey ?? this.indicatorDimensionKey) -\n this.fullRowDimensionKeys.indexOf(b.dimensionKey ?? this.indicatorDimensionKey)\n );\n });\n\n colHeaderPaths?.forEach(a => {\n if (a.isPivotCorner) {\n isCornerCell = true;\n }\n });\n rowHeaderPaths?.forEach(a => {\n if (a.isPivotCorner) {\n isCornerCell = true;\n }\n });\n if (isCornerCell) {\n if (this.cornerSetting.titleOnDimension === 'all' && this.indicatorsAsCol && colHeaderPaths.length === 0) {\n for (let i = 0; i < this.rowDimensionKeys.length; i++) {\n if (rowHeaderPaths[0]?.dimensionKey === this.rowDimensionKeys[i]) {\n return { col: i + this.leftRowSeriesNumberColumnCount, row: this.columnHeaderLevelCount - 1 };\n }\n }\n } else if (\n this.cornerSetting.titleOnDimension === 'all' &&\n !this.indicatorsAsCol &&\n rowHeaderPaths.length === 0\n ) {\n for (let i = 0; i < this.colDimensionKeys.length; i++) {\n if (colHeaderPaths[0]?.dimensionKey === this.colDimensionKeys[i]) {\n return { col: this.rowHeaderLevelCount - 1, row: i };\n }\n }\n } else if (\n this.cornerSetting.titleOnDimension === 'row' ||\n (this.cornerSetting.titleOnDimension === 'all' && !this.indicatorsAsCol)\n ) {\n for (let i = 0; i < this.rowDimensionKeys.length; i++) {\n if (rowHeaderPaths[0]?.dimensionKey === this.rowDimensionKeys[i]) {\n return { col: i + this.leftRowSeriesNumberColumnCount, row: 0 };\n }\n }\n } else {\n for (let i = 0; i < this.colDimensionKeys.length; i++) {\n if (colHeaderPaths[0]?.dimensionKey === this.colDimensionKeys[i]) {\n return { col: 0, row: i };\n }\n }\n }\n }\n let needLowestLevel_colPaths = false; // needLowestLevel来标记是否需要 提供到最底层的维度层级信息\n let needLowestLevel_rowPaths = false; // needLowestLevel来标记是否需要 提供到最底层的维度层级信息\n // 如果行列维度都有值 说明是匹配body单元格 那这个时候 维度层级应该是满的\n if (colHeaderPaths?.length >= 1 && rowHeaderPaths?.length >= 1) {\n needLowestLevel_colPaths = true;\n needLowestLevel_rowPaths = true;\n }\n if ((colHeaderPaths?.length ?? 0) && colHeaderPaths.length >= this._getColumnHeaderTreeExpandedMaxLevelCount()) {\n needLowestLevel_colPaths = true;\n }\n if ((rowHeaderPaths?.length ?? 0) && rowHeaderPaths.length >= this._getRowHeaderTreeExpandedMaxLevelCount()) {\n needLowestLevel_rowPaths = true;\n }\n let col;\n let row;\n let defaultCol;\n let defaultRow;\n let rowDimensionFinded;\n let colDimensionFinded;\n\n // 按照colHeaderPaths维度层级寻找到底层维度值节点\n if (colHeaderPaths) {\n colDimensionFinded = this.matchDimensionPath(colHeaderPaths, this.columnTree, needLowestLevel_colPaths) as\n | ITreeLayoutHeadNode\n | undefined;\n }\n // 按照rowHeaderPaths维度层级寻找到底层维度值节点\n if (rowHeaderPaths?.length >= 1) {\n if (this.rowHierarchyType === 'tree') {\n // 先根据最后一个path获取到所有匹配该维度的pathCellIds\n const rowDimension = rowHeaderPaths[rowHeaderPaths.length - 1];\n const cellIDs: LayoutObjectId[] = this.headerObjects\n .filter((hd: HeaderData) => {\n return (\n (hd?.field === rowDimension.dimensionKey || hd?.field === rowDimension.indicatorKey) &&\n hd?.title === rowDimension.value\n );\n })\n .map((hd: HeaderData) => {\n return hd.id;\n });\n\n const findedCellIdPaths = this._rowHeaderCellIds.filter(rowHdCellIDs => {\n return cellIDs.indexOf(rowHdCellIDs[rowHdCellIDs.length - 1]) >= 0;\n });\n // 从上述过程中找到的pathCellIds中找到正确匹配完整路径rowHeaderPaths的一个 然后计算row行号\n const findedCellIdPath = findedCellIdPaths.find(pathIds => {\n const fullCellIds = this.findFullCellIds(pathIds);\n return (\n fullCellIds.length === rowHeaderPaths.length &&\n fullCellIds.every(id => {\n const curHd = this._headerObjectMap[id];\n return rowHeaderPaths.find(rowDimensionPath => {\n return rowDimensionPath.dimensionKey === curHd.field && rowDimensionPath.value === curHd.title;\n });\n })\n );\n });\n row = this._rowHeaderCellIds.indexOf(findedCellIdPath) + this.columnHeaderLevelCount;\n } else {\n rowDimensionFinded = this.matchDimensionPath(rowHeaderPaths, this.rowTree, needLowestLevel_rowPaths, true) as\n | ITreeLayoutHeadNode\n | undefined;\n }\n }\n\n // 如果是body单元格 需要找到行列对应的维度值节点\n if (!forceBody && needLowestLevel_colPaths && needLowestLevel_rowPaths) {\n if ((!rowDimensionFinded && !isValid(row)) || !colDimensionFinded) {\n return undefined;\n }\n }\n // 通过dimension获取col和row\n if (rowDimensionFinded || forceBody) {\n row = this.columnHeaderLevelCount;\n const { startInTotal, afterSpanLevel } = (rowDimensionFinded as ITreeLayoutHeadNode) ?? defaultDimension;\n row += startInTotal ?? 0;\n if (this.rowHierarchyType === 'grid') {\n // defaultCol = (this.rowHeaderTitle ? afterSpanLevel + 1 : afterSpanLevel) + this.leftRowSeriesNumberColumnCount;\n // 传入rowHeaderPaths是合并单元格如行总计的path数据的情况,上面defaultCol总是返回0 所以需要修改如下:\n //检查rowHeaderPaths 和this.rowDimensionKeys数组中的维度key是否匹配\n const isMatch = rowHeaderPaths.every((path: IDimensionInfo, index: number) => {\n return this.rowDimensionKeys[index] === path.dimensionKey;\n });\n if (isMatch) {\n const col = rowHeaderPaths.length - 1;\n defaultCol = (this.rowHeaderTitle ? col + 1 : col) + this.leftRowSeriesNumberColumnCount;\n } else {\n defaultCol =\n (this.rowHeaderTitle ? afterSpanLevel + 1 : afterSpanLevel) + this.leftRowSeriesNumberColumnCount;\n }\n } else {\n defaultCol = 0;\n } //树形展示的情况下 肯定是在第0列\n }\n if (colDimensionFinded || forceBody) {\n col = this.rowHeaderLevelCount + this.leftRowSeriesNumberColumnCount;\n const { startInTotal, afterSpanLevel } = (colDimensionFinded as ITreeLayoutHeadNode) ?? defaultDimension;\n col += startInTotal ?? 0;\n defaultRow = this.columnHeaderTitle ? afterSpanLevel + 1 : afterSpanLevel;\n }\n if (isValid(col) || isValid(row)) {\n return { col: col ?? defaultCol, row: row ?? defaultRow };\n }\n // 上述通过rowHeaderPaths colHeaderPaths和rowTree colTree匹配不到行列号,需要特殊处理\n if (rowHeaderPaths.length > 0) {\n //表示寻找的是行表头的某个列号\n //匹配和this.rowDimensionKeys数组中的维度key,找到对应的列号\n //检查rowHeaderPaths 和this.rowDimensionKeys数组中的维度key是否匹配\n const isMatch = rowHeaderPaths.every((path: IDimensionInfo, index: number) => {\n return this.rowDimensionKeys[index] === path.dimensionKey;\n });\n if (isMatch) {\n const col = rowHeaderPaths.length - 1;\n return { col: (this.rowHeaderTitle ? col + 1 : col) + this.leftRowSeriesNumberColumnCount, row: undefined };\n }\n // const col = rowHeaderPaths.reduce((acc, path) => {\n // const index = this.rowDimensionKeys.indexOf(path.dimensionKey);\n // if (index >= 0) {\n // acc += 1;\n // }\n // return acc;\n // }, -1);\n // return { col: (this.rowHeaderTitle ? col + 1 : col) + this.leftRowSeriesNumberColumnCount, row: undefined };\n }\n return undefined;\n }\n\n setChartInstance(_col: number, _row: number, chartInstance: any) {\n const paths = this.getCellHeaderPaths(_col, _row);\n let indicatorObj;\n if (this.indicatorsAsCol) {\n const indicatorKey = paths.colHeaderPaths.find(colPath => colPath.indicatorKey)?.indicatorKey;\n indicatorObj = this._indicators?.find(indicator => indicator.indicatorKey === indicatorKey);\n } else {\n const indicatorKey = paths.rowHeaderPaths.find(rowPath => rowPath.indicatorKey)?.indicatorKey;\n indicatorObj = this._indicators?.find(indicator => indicator.indicatorKey === indicatorKey);\n }\n if (typeof indicatorObj?.chartSpec === 'function') {\n return;\n }\n indicatorObj && (indicatorObj.chartInstance = chartInstance);\n }\n\n getChartInstance(_col: number, _row: number) {\n const paths = this.getCellHeaderPaths(_col, _row);\n let indicatorObj;\n if (this.indicatorsAsCol) {\n const indicatorKey = paths.colHeaderPaths.find(colPath => colPath.indicatorKey)?.indicatorKey;\n indicatorObj = this._indicators?.find(indicator => indicator.indicatorKey === indicatorKey);\n } else {\n const indicatorKey = paths.rowHeaderPaths.find(rowPath => rowPath.indicatorKey)?.indicatorKey;\n indicatorObj = this._indicators?.find(indicator => indicator.indicatorKey === indicatorKey);\n }\n return indicatorObj?.chartInstance;\n }\n checkHasChart() {\n return checkHasChart(this);\n }\n\n getDimension(dimensionKey: string, type: 'column' | 'row'): any {\n if (type === 'column') {\n return this.columnsDefine?.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === dimensionKey\n );\n } else if (type === 'row') {\n return this.rowsDefine?.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === dimensionKey\n );\n }\n }\n\n getAxisConfigInPivotChart(col: number, row: number): any {\n if (\n ((this.isFrozenColumn(col, row) || this.isRightFrozenColumn(col, row)) &&\n isHasCartesianChartInline(col, row, 'row', this)) ||\n ((this.isFrozenRow(col, row) || this.isBottomFrozenRow(col, row)) &&\n isHasCartesianChartInline(col, row, 'col', this))\n ) {\n const getAxisConfigInPivotChart = Factory.getFunction('getAxisConfigInPivotChart') as GetAxisConfigInPivotChart;\n const config = getAxisConfigInPivotChart(col, row, this);\n if (config?.visible === false) {\n return undefined;\n }\n return config;\n }\n return undefined;\n }\n isEmpty(col: number, row: number) {\n if (!this._table.isPivotChart()) {\n return false;\n }\n if (this.isLeftBottomCorner(col, row)) {\n return true;\n }\n if (this.isRightBottomCorner(col, row)) {\n return true;\n }\n if (this.isRightTopCorner(col, row)) {\n return true;\n }\n return false;\n }\n isAxisCell(col: number, row: number) {\n if (!this._table.isPivotChart()) {\n return false;\n }\n if (this.indicatorKeys.length >= 1 && checkHasCartesianChart(this.indicatorsDefine)) {\n if (\n (this.isBottomFrozenRow(col, row) && isHasCartesianChartInline(col, row, 'col', this)) ||\n (this.isRightFrozenColumn(col, row) && isHasCartesianChartInline(col, row, 'row', this))\n ) {\n return true;\n }\n if (\n this.isRowHeader(col, row) &&\n col === this.rowHeaderLevelCount - 1 &&\n isHasCartesianChartInline(col, row, 'row', this)\n ) {\n return true;\n }\n if (\n this.hasTopIndicatorAxis &&\n this.indicatorsAsCol &&\n row === this.columnHeaderLevelCount - 1 &&\n isHasCartesianChartInline(col, row, 'col', this)\n ) {\n return true;\n }\n }\n return false;\n }\n getChartAxes(col: number, row: number): any[] {\n if (isCartesianChart(col, row, this) || this.isAxisCell(col, row)) {\n return getChartAxes(col, row, this);\n }\n return undefined;\n }\n getRawChartSpec(col: number, row: number): any {\n return getRawChartSpec(col, row, this);\n }\n\n getChartSpec(col: number, row: number): any {\n return getChartSpec(col, row, this);\n }\n isShareChartSpec(col: number, row: number): any {\n return isShareChartSpec(col, row, this);\n }\n getChartDataId(col: number, row: number): any {\n return getChartDataId(col, row, this);\n }\n /** 是否当chart没有数据时 图表单元格不绘制chart的任何内容 如网格线 */\n isNoChartDataRenderNothing(col: number, row: number): boolean {\n return isNoChartDataRenderNothing(col, row, this);\n }\n setPagination(pagination: IPagination): void {\n this.clearCellRangeMap();\n this._table.internalProps.useOneRowHeightFillAll = false;\n this.pagination = pagination;\n\n if (\n this.rowHierarchyType === 'grid' &&\n isValid(this.pagination?.perPageCount) &&\n isValid(this.pagination?.currentPage)\n ) {\n //调整perPageCount的数量 需要是indicatorKeys.length的整数倍\n if (this.indicatorsAsCol === false) {\n this.pagination.perPageCount =\n Math.ceil(this.pagination.perPageCount / this.indicatorKeys.length) * this.indicatorKeys.length;\n }\n const { perPageCount, currentPage } = this.pagination;\n // const startIndex = Math.ceil((perPageCount * (currentPage || 0)) / this.indicatorKeys.length);\n // const endIndex = startIndex + Math.ceil(perPageCount / this.indicatorKeys.length);\n this.currentPageStartIndex = perPageCount * (currentPage || 0);\n this.currentPageEndIndex = this.currentPageStartIndex + perPageCount;\n this._rowHeaderCellIds = this._rowHeaderCellIds_FULL?.slice(this.currentPageStartIndex, this.currentPageEndIndex);\n this._rowHeaderCellFullPathIds = this._rowHeaderCellFullPathIds_FULL?.slice(\n this.currentPageStartIndex,\n this.currentPageEndIndex\n );\n } else {\n this.currentPageStartIndex = 0;\n this.currentPageEndIndex = this._rowHeaderCellIds_FULL.length;\n this._rowHeaderCellIds = this._rowHeaderCellIds_FULL?.slice(this.currentPageStartIndex, this.currentPageEndIndex);\n this._rowHeaderCellFullPathIds = this._rowHeaderCellFullPathIds_FULL?.slice(\n this.currentPageStartIndex,\n this.currentPageEndIndex\n );\n }\n this.pagination && (this.pagination.totalCount = this._rowHeaderCellIds_FULL?.length);\n }\n release() {\n const activeChartInstance = (this._table as PivotTable)._getActiveChartInstance();\n activeChartInstance?.release();\n this._indicators?.forEach(indicatorObject => {\n indicatorObject.chartInstance?.release();\n });\n }\n\n getHeadNode(col: number, row: number) {\n let dimensions: IDimensionInfo[];\n const headerPaths = this.getCellHeaderPaths(col, row);\n if (headerPaths.rowHeaderPaths && (headerPaths.rowHeaderPaths?.length ?? 0) > 0) {\n dimensions = headerPaths.rowHeaderPaths?.slice(0, headerPaths.rowHeaderPaths.length);\n } else if (headerPaths.colHeaderPaths && headerPaths.colHeaderPaths.length > 0) {\n dimensions = headerPaths.colHeaderPaths.slice(0, headerPaths.colHeaderPaths.length);\n }\n return this.getHeadNodeByRowOrColDimensions(dimensions, col, row);\n }\n getHeadNodeByRowOrColDimensions(dimensions: IDimensionInfo[], col?: number, row?: number) {\n if (!Array.isArray(dimensions)) {\n return undefined;\n }\n let rowArr = this.rowTree;\n let rowDimension;\n let colArr = this.columnTree;\n let colDimension;\n\n // 处理带有扩展row时 获取node错误问题 rowArr需要变更为有相应扩展后的tree\n if (\n isValid(row) &&\n isValid(col) &&\n this.rowHierarchyType === 'tree' &&\n this.extensionRows &&\n col >= 1 + this.leftRowSeriesNumberColumnCount\n ) {\n const hdId = this.getCellId(col - 1, row);\n rowArr = this._rowHeaderExtensionTree[hdId].tree.children;\n }\n for (let i = 0; i < dimensions.length; i++) {\n const highlightDimension = dimensions[i];\n if (\n (highlightDimension.isPivotCorner || !isValid(highlightDimension.value)) && //判断角头: isPivotCorner或者 没有维度值\n i === dimensions.length - 1\n ) {\n // 判断角表头位置\n return undefined;\n }\n // 判断级别,找到distDimension\n let isCol = false;\n for (let j = 0; j < colArr.length; j++) {\n const dimension = colArr[j];\n if (\n (isValid(highlightDimension.dimensionKey) &&\n dimension.dimensionKey === highlightDimension.dimensionKey &&\n dimension.value === highlightDimension.value) ||\n (isValid(highlightDimension.indicatorKey) &&\n dimension.indicatorKey === highlightDimension.indicatorKey &&\n (dimension.value === highlightDimension.value ||\n !isValid(highlightDimension.value) ||\n !isValid(dimension.value)))\n ) {\n colArr = dimension.children as IHeaderTreeDefine[];\n colDimension = dimension;\n isCol = true;\n break;\n }\n }\n if (isCol) {\n continue;\n }\n for (let k = 0; k < (rowArr?.length ?? 0); k++) {\n const dimension = rowArr[k];\n if (\n (isValid(highlightDimension.dimensionKey) &&\n dimension.dimensionKey === highlightDimension.dimensionKey &&\n dimension.value === highlightDimension.value) ||\n (isValid(highlightDimension.indicatorKey) &&\n dimension.indicatorKey === highlightDimension.indicatorKey &&\n (dimension.value === highlightDimension.value ||\n !isValid(highlightDimension.value) ||\n !isValid(dimension.value)))\n ) {\n rowArr = dimension.children as IHeaderTreeDefine[];\n rowDimension = dimension;\n break;\n }\n }\n }\n\n // 通过dimension获取col和row\n if (rowDimension) {\n return rowDimension;\n } else if (colDimension) {\n return colDimension;\n }\n return undefined;\n }\n clearCellRangeMap() {\n // this._cellRangeMap.clear();\n this._largeCellRangeCache.length = 0;\n this._CellHeaderPathMap = new Map();\n }\n\n /**\n * 获取图表对应的维度key非指标\n * */\n getDimensionKeyInChartSpec(_col: number, _row: number, type?: 'xField' | 'yField') {\n let dimensionKey: string;\n if (this.indicatorsAsCol === false) {\n const chartSpec = this.getRawChartSpec(_col, _row);\n if (chartSpec) {\n dimensionKey =\n type === 'yField'\n ? chartSpec.yField ?? chartSpec?.series?.[0]?.yField\n : chartSpec.type === 'histogram' //特殊处理histogram直方图xField和x2Field\n ? chartSpec.x2Field\n : chartSpec.xField ?? chartSpec?.series?.[0]?.xField;\n\n if (dimensionKey) {\n return dimensionKey;\n }\n }\n //考虑pie和bar 同时配置的情况 , 只有上面的判断逻辑是不足的,例如https://bugserver.cn.goofy.app/case?product=VTable&fileid=65a66c5c518457638fa485bf\n for (let i = 0; i < this.indicatorsDefine.length; i++) {\n const chartSpec = (this.indicatorsDefine[i] as IChartIndicator).chartSpec;\n if (chartSpec) {\n dimensionKey =\n type === 'yField'\n ? chartSpec.yField ?? chartSpec?.series?.[0]?.yField\n : chartSpec.type === 'histogram' //特殊处理histogram直方图xField和x2Field\n ? chartSpec.x2Field\n : chartSpec.xField ?? chartSpec?.series?.[0]?.xField;\n\n if (dimensionKey) {\n return dimensionKey;\n }\n }\n }\n } else {\n const chartSpec = this.getRawChartSpec(_col, _row);\n if (chartSpec) {\n dimensionKey =\n type === 'xField'\n ? chartSpec.type === 'histogram' //特殊处理histogram直方图xField和x2Field\n ? chartSpec.x2Field\n : chartSpec.xField ?? chartSpec?.series?.[0]?.xField\n : chartSpec.type === 'histogram' //特殊处理histogram直方图xField和x2Field\n ? chartSpec.y2Field\n : chartSpec.yField ?? chartSpec?.series?.[0]?.yField;\n if (dimensionKey) {\n return dimensionKey;\n }\n }\n //考虑pie和bar 同时配置的情况 , 只有上面的判断逻辑是不足的,例如https://bugserver.cn.goofy.app/case?product=VTable&fileid=65a66c5c518457638fa485bf\n for (let i = 0; i < this.indicatorsDefine.length; i++) {\n const chartSpec = (this.indicatorsDefine[i] as IChartIndicator).chartSpec;\n if (chartSpec) {\n dimensionKey =\n type === 'xField'\n ? chartSpec.type === 'histogram' //特殊处理histogram直方图xField和x2Field\n ? chartSpec.x2Field\n : chartSpec.xField ?? chartSpec?.series?.[0]?.xField\n : chartSpec.yField ?? chartSpec?.series?.[0]?.yField;\n if (dimensionKey) {\n return dimensionKey;\n }\n }\n }\n }\n return null;\n }\n\n /** 将_selectedDataItemsInChart保存的数据状态同步到各个图表实例中 */\n _generateChartState() {\n const select_filter = (datum: any) => {\n if ((this._table as PivotChart)._selectedDataItemsInChart.length >= 1) {\n const match = (this._table as PivotChart)._selectedDataItemsInChart.find(item => {\n for (const itemKey in item) {\n if (typeof item[itemKey] !== 'object' && item[itemKey] !== datum[itemKey]) {\n return false;\n }\n }\n return true;\n });\n return !!match;\n } else if ((this._table as PivotChart)._selectedDimensionInChart?.length) {\n // 判断维度点击\n const match = (this._table as PivotChart)._selectedDimensionInChart.every(item => {\n if (typeof item.value !== 'object' && datum[item.key] !== item.value) {\n return false;\n }\n return true;\n });\n return !!match;\n }\n return false;\n };\n const selected_reverse = (datum: any) => {\n if ((this._table as PivotChart)._selectedDataItemsInChart.length >= 1) {\n const match = (this._table as PivotChart)._selectedDataItemsInChart.find(item => {\n for (const itemKey in item) {\n if (typeof item[itemKey] !== 'object' && item[itemKey] !== datum[itemKey]) {\n return false;\n }\n }\n return true;\n });\n return !match;\n } else if ((this._table as PivotChart)._selectedDimensionInChart?.length) {\n // 判断维度点击\n const match = (this._table as PivotChart)._selectedDimensionInChart.every(item => {\n if (typeof item.value !== 'object' && datum[item.key] !== item.value) {\n return false;\n }\n return true;\n });\n return !match;\n }\n return false;\n };\n const state = {\n vtable_selected: {\n filter: (datum: any) => {\n if ((this._table as PivotChart).options.chartDimensionLinkage?.selectedStateFilter) {\n return (this._table as PivotChart).options.chartDimensionLinkage.selectedStateFilter(datum);\n }\n if ((this._table as PivotChart)._selectedDataMode === 'click') {\n return select_filter(datum);\n }\n return false;\n }\n },\n vtable_selected_reverse: {\n filter: (datum: any) => {\n if ((this._table as PivotChart).options.chartDimensionLinkage?.selectedReverseStateFilter) {\n return (this._table as PivotChart).options.chartDimensionLinkage.selectedReverseStateFilter(datum);\n }\n if ((this._table as PivotChart)._selectedDataMode === 'click') {\n return selected_reverse(datum);\n }\n return false;\n }\n },\n\n inBrush: {\n filter: (datum: any) => {\n if ((this._table as PivotChart).options.chartDimensionLinkage?.inBrushStateFilter) {\n return (this._table as PivotChart).options.chartDimensionLinkage.inBrushStateFilter(datum);\n }\n if ((this._table as PivotChart)._selectedDataMode === 'brush') {\n return select_filter(datum);\n }\n return false;\n }\n },\n outOfBrush: {\n filter: (datum: any) => {\n if ((this._table as PivotChart).options.chartDimensionLinkage?.outOfBrushStateFilter) {\n return (this._table as PivotChart).options.chartDimensionLinkage.outOfBrushStateFilter(datum);\n }\n if ((this._table as PivotChart)._selectedDataMode === 'brush') {\n return selected_reverse(datum);\n }\n return false;\n }\n }\n };\n return state;\n }\n updateDataStateToChartInstance(activeChartInstance?: any): void {\n if (activeChartInstance?.getSpec().select?.enable !== false) {\n if (!activeChartInstance) {\n activeChartInstance = (this._table as PivotChart)._getActiveChartInstance();\n }\n const state = this._generateChartState();\n this._indicators.forEach((_indicatorObject: IndicatorData) => {\n const chartInstance = _indicatorObject.chartInstance;\n if (_indicatorObject.chartSpec.select?.enable !== false) {\n chartInstance.updateState(state);\n }\n });\n activeChartInstance?.updateState(state);\n }\n }\n updateDataStateToActiveChartInstance(activeChartInstance?: any): void {\n if (activeChartInstance?.getSpec().select?.enable !== false) {\n if (!activeChartInstance) {\n activeChartInstance = (this._table as PivotChart)._getActiveChartInstance();\n }\n const state = this._generateChartState();\n activeChartInstance?.updateState(state);\n }\n }\n\n /**\n * 获取图表对应的指标值\n * */\n getIndicatorKeyInChartSpec(_col: number, _row: number) {\n // const paths = this.getCellHeaderPaths(_col, _row);\n // let indicatorObj;\n // if (this.indicatorsAsCol) {\n // const indicatorKey = paths.colHeaderPaths.find(colPath => colPath.indicatorKey)?.indicatorKey;\n // indicatorObj = this._indicatorObjects.find(indicator => indicator.indicatorKey === indicatorKey);\n // } else {\n // const indicatorKey = paths.rowHeaderPaths.find(rowPath => rowPath.indicatorKey)?.indicatorKey;\n // indicatorObj = this._indicatorObjects.find(indicator => indicator.indicatorKey === indicatorKey);\n // }\n // const chartSpec = indicatorObj?.chartSpec;\n const chartSpec = this.getRawChartSpec(_col, _row);\n const indicatorKeys: string[] = [];\n if (chartSpec) {\n if (chartSpec.type === 'boxPlot') {\n return [chartSpec.maxField];\n }\n if (chartSpec.series || chartSpec.xField || chartSpec.yField) {\n if (this.indicatorsAsCol === false) {\n if (chartSpec.series) {\n chartSpec.series.forEach((chartSeries: any) => {\n const yField = chartSeries.yField;\n indicatorKeys.push(yField);\n });\n } else {\n indicatorKeys.push(chartSpec.yField);\n }\n } else {\n if (chartSpec.series) {\n chartSpec.series.forEach((chartSeries: any) => {\n const xField = chartSeries.xField;\n indicatorKeys.push(xField);\n });\n } else {\n indicatorKeys.push(chartSpec.xField);\n }\n }\n return indicatorKeys;\n } else if (chartSpec.valueField) {\n indicatorKeys.push(chartSpec.valueField);\n }\n if (indicatorKeys.length >= 1) {\n return indicatorKeys;\n }\n }\n return null;\n }\n /** 获取某一图表列的最优高度,计算逻辑是根据图表的yField的维度值个数 * barWidth */\n getOptimunHeightForChart(row: number, isHeatmap: boolean) {\n const path = this.getCellHeaderPaths(this.rowHeaderLevelCount, row).rowHeaderPaths;\n if (isHeatmap) {\n //如果是热力图,最后一层指标不能参与路径匹配\n if (path[path.length - 1].indicatorKey) {\n path.pop();\n }\n }\n let collectedValues: any;\n for (const key in this.dataset.collectValuesBy) {\n if (this.dataset.collectValuesBy[key].type === 'yField' && !this.dataset.collectValuesBy[key].range) {\n collectedValues =\n this.dataset.collectedValues[key]?.[\n path\n .map(pathObj => {\n return pathObj.value;\n })\n .join(this.dataset.stringJoinChar)\n ];\n break;\n }\n }\n let height;\n if (this._chartItemBandSize) {\n // height = (collectedValues?.length ?? 0) * this._chartItemBandSize;\n height = scaleWholeRangeSize(\n collectedValues?.length ?? 0,\n this._chartItemBandSize,\n this._chartPaddingInner,\n this._chartPaddingOuter\n );\n } else {\n const barWidth = this._chartItemSpanSize || 25;\n height = (collectedValues?.length ?? 0) * (barWidth + (isHeatmap ? 0 : barWidth / 3));\n }\n const padding = getQuadProps(this._chartPadding ?? (this._table.theme.bodyStyle.padding as number) ?? 0);\n return height + padding[0] + padding[2];\n }\n /** 获取某一图表列的最优宽度,计算逻辑是根据图表的xField的维度值个数 * barWidth */\n getOptimunWidthForChart(col: number, isHeatmap: boolean) {\n const path = this.getCellHeaderPaths(col, this.columnHeaderLevelCount).colHeaderPaths;\n let collectedValues: any;\n for (const key in this.dataset.collectValuesBy) {\n if (this.dataset.collectValuesBy[key].type === 'xField' && !this.dataset.collectValuesBy[key].range) {\n collectedValues =\n this.dataset.collectedValues[key]?.[\n path\n .map(pathObj => {\n return pathObj.value;\n })\n .join(this.dataset.stringJoinChar)\n ];\n break;\n }\n }\n let width;\n if (this._chartItemBandSize) {\n // width = (collectedValues?.length ?? 0) * this._chartItemBandSize;\n width = scaleWholeRangeSize(\n collectedValues?.length ?? 0,\n this._chartItemBandSize,\n this._chartPaddingInner,\n this._chartPaddingOuter\n );\n } else {\n const barWidth = this._chartItemSpanSize || 25;\n width = (collectedValues?.length ?? 0) * (barWidth + (isHeatmap ? 0 : barWidth / 3));\n }\n\n const padding = getQuadProps(this._chartPadding ?? (this._table.theme.bodyStyle.padding as number) ?? 0);\n return width + padding[1] + padding[3];\n }\n\n get leftAxesCount(): number {\n if (!this._table.isPivotChart()) {\n return 0;\n }\n const axisOption = ((this._table as PivotChart).pivotChartAxes as ITableAxisOption[]).find(axisOption => {\n return axisOption.orient === 'left';\n });\n if (axisOption?.visible === false) {\n return 0;\n }\n if (this.indicatorsAsCol) {\n return 1; // 左侧维度轴\n }\n return 1; // 左侧主指标轴\n }\n get topAxesCount(): number {\n if (!this._table.isPivotChart()) {\n return 0;\n }\n const axisOption = ((this._table as PivotChart).pivotChartAxes as ITableAxisOption[]).find(axisOption => {\n return axisOption.orient === 'top';\n });\n if (axisOption?.visible === false) {\n return 0;\n }\n if (this.indicatorsAsCol && this.hasTopIndicatorAxis) {\n return 1; // 顶部副指标\n }\n return 0; // 顶部无轴\n }\n get rightAxesCount(): number {\n return this.rightFrozenColCount;\n }\n get bottomAxesCount(): number {\n return this.bottomFrozenRowCount;\n }\n getColKeysPath(col: number, row: number) {\n // const index = !this.indicatorsAsCol\n // ? col - this.rowHeaderLevelCount\n // : Math.floor((col - this.rowHeaderLevelCount) / this.indicatorKeys.length);\n // const colKey = this.dataset.colKeys[index];\n const path = this.getCellHeaderPaths(col, row);\n const colKey: string[] = [];\n if (path.colHeaderPaths.length) {\n path.colHeaderPaths.forEach(path => {\n if (path.dimensionKey) {\n colKey.push(path.value);\n }\n });\n }\n return colKey?.join(this.dataset.stringJoinChar);\n }\n getRowKeysPath(col: number, row: number) {\n // const index = this.indicatorsAsCol\n // ? row - this.columnHeaderLevelCount\n // : Math.floor((row - this.columnHeaderLevelCount) / this.indicatorKeys.length);\n // const rowKey = this.dataset.rowKeys[index];\n const path = this.getCellHeaderPaths(col, row);\n const rowKey: string[] = [];\n if (path.rowHeaderPaths.length) {\n path.rowHeaderPaths.forEach(path => {\n if (path.dimensionKey) {\n rowKey.push(path.value);\n }\n });\n }\n return rowKey?.join(this.dataset.stringJoinChar);\n }\n\n getIndicatorInfo(indicatorKey: string, indicatorValue = '') {\n const indicatorInfo = this.indicatorsDefine?.find(indicator => {\n if (typeof indicator === 'string') {\n return false;\n }\n if (indicatorKey) {\n return indicator.indicatorKey === indicatorKey;\n }\n if (indicatorValue) {\n return indicator.title === indicatorValue;\n }\n return false;\n }) as IIndicator;\n return indicatorInfo;\n }\n /** 获取行头树结构 */\n getLayoutColumnTree() {\n const tree: LayouTreeNode[] = [];\n const children = this.columnDimensionTree.tree.children;\n generateLayoutTree(tree, children);\n return tree;\n }\n /** 获取行头树结构 */\n getLayoutRowTree() {\n const tree: LayouTreeNode[] = [];\n const children = this.rowDimensionTree.tree.children;\n generateLayoutTree(tree, children);\n return tree;\n }\n /** 获取列头总共的行数(全部展开情况下) */\n getLayoutColumnTreeCount() {\n const children = this.columnDimensionTree.tree.children;\n const mainTreeCount = countLayoutTree(children, this.rowHierarchyType === 'tree');\n return mainTreeCount;\n }\n /** 获取行头总共的行数(全部展开情况下) */\n getLayoutRowTreeCount() {\n const children = this.rowDimensionTree.tree.children;\n const mainTreeCount = countLayoutTree(children, this.rowHierarchyType === 'tree');\n let totalCount = mainTreeCount;\n this.extensionRows?.forEach(extensionRow => {\n if (typeof extensionRow.rowTree !== 'function') {\n //如果是自定义函数的扩展树结构 忽略这个计算 因为太复杂 需要将每个函数需要的参数都构造好才行\n const thisTreeCount = countLayoutTree(extensionRow.rowTree as { children: any }[], true);\n totalCount *= thisTreeCount;\n }\n });\n return totalCount;\n }\n resetHeaderTree() {\n this.colIndex = 0;\n //和初始化代码逻辑一致 但未考虑透视图类型\n this._rowHeaderCellFullPathIds_FULL = [];\n this._columnHeaderCellFullPathIds = [];\n this._columnHeaderCellIds = [];\n const dataset = this.dataset;\n // if (dataset) {\n this.rowTree = dataset.rowHeaderTree;\n this.columnTree = dataset.colHeaderTree;\n\n const beforeRowDimensions = this.rowDimensionTree.tree.children;\n this.rowTree?.forEach((node: IHeaderTreeDefine, index: number) => {\n const beforeRowDimension = beforeRowDimensions.find(\n item => item.dimensionKey === node.dimensionKey && item.value === node.value\n );\n if (beforeRowDimension) {\n (this._table as PivotTable)._syncHierarchyState(beforeRowDimension, node);\n }\n });\n\n this.columnDimensionTree = new DimensionTree(\n (this.columnTree as ITreeLayoutHeadNode[]) ?? [],\n this.sharedVar,\n this.columnHierarchyType,\n this.columnHierarchyType !== 'grid' ? this.columnExpandLevel : undefined\n );\n this.rowDimensionTree = new DimensionTree(\n (this.rowTree as ITreeLayoutHeadNode[]) ?? [],\n this.sharedVar,\n this.rowHierarchyType,\n this.rowHierarchyType !== 'grid' ? this.rowExpandLevel : undefined\n );\n\n this.resetColumnHeaderLevelCount();\n\n //生成列表头单元格\n this._generateColHeaderIds();\n\n this.colIndex = 0;\n //生成行表头单元格\n this._generateRowHeaderIds();\n this._rowHeaderCellFullPathIds_FULL = transpose(this._rowHeaderCellFullPathIds_FULL);\n\n this._headerObjectMap = this._headerObjects.reduce((o, e) => {\n o[e.id as number] = e;\n return o;\n }, {} as { [key: LayoutObjectId]: HeaderData });\n\n this._CellHeaderPathMap = new Map();\n this._largeCellRangeCache.length = 0;\n this.generateCellIdsConsiderHideHeader();\n this.setPagination(this.pagination);\n }\n isSeriesNumberInHeader(col: number, row: number): boolean {\n if (this.leftRowSeriesNumberColumnCount > 0 && col >= 0 && row >= 0 && col < this.leftRowSeriesNumberColumnCount) {\n if (row < this.headerLevelCount) {\n return true;\n }\n }\n if (\n this.rightRowSeriesNumberColumnCount > 0 &&\n row >= 0 &&\n col >= this.colCount - this.rightRowSeriesNumberColumnCount\n ) {\n if (row < this.headerLevelCount) {\n return true;\n }\n }\n return false;\n }\n isSeriesNumberInBody(col: number, row: number): boolean {\n if (this.leftRowSeriesNumberColumnCount > 0 && col >= 0 && col < this.leftRowSeriesNumberColumnCount) {\n if (row >= this.headerLevelCount) {\n return true;\n }\n }\n if (this.rightRowSeriesNumberColumnCount > 0 && col >= this.colCount - this.rightRowSeriesNumberColumnCount) {\n if (row >= this.headerLevelCount) {\n return true;\n }\n }\n return false;\n }\n isSeriesNumber(col: number, row: number): boolean {\n if (isValid(col) && isValid(row)) {\n if (\n this.leftRowSeriesNumberColumnCount > 0 &&\n col >= 0 &&\n row >= 0 &&\n col < this.leftRowSeriesNumberColumnCount\n ) {\n return true;\n }\n if (\n this.rightRowSeriesNumberColumnCount > 0 &&\n row >= 0 &&\n col >= this.colCount - this.rightRowSeriesNumberColumnCount\n ) {\n return true;\n }\n }\n return false;\n }\n getSeriesNumberHeader(col: number, row: number) {\n if (this.leftRowSeriesNumberColumnCount > 0 && col >= 0 && col < this.leftRowSeriesNumberColumnCount) {\n if (row < this.headerLevelCount) {\n // return this.leftRowSeriesNumberColumn[col];\n return Object.assign({}, this.leftRowSeriesNumberColumn[col], {\n style: Object.assign(\n {},\n this._table.internalProps.theme.cornerHeaderStyle,\n this._table.internalProps.rowSeriesNumber.headerStyle\n )\n });\n }\n }\n if (\n this.rightRowSeriesNumberColumnCount > 0 &&\n col >= this.colCount - this.rightRowSeriesNumberColumnCount &&\n row < this.headerLevelCount\n ) {\n if (row < this.headerLevelCount) {\n return this.rightRowSeriesNumberColumn[col - (this.colCount - this.rightRowSeriesNumberColumnCount)];\n }\n }\n return undefined;\n }\n getSeriesNumberBody(col: number, row: number) {\n if (this.leftRowSeriesNumberColumnCount > 0 && col >= 0 && col < this.leftRowSeriesNumberColumnCount) {\n if (row >= this.headerLevelCount) {\n return this.leftRowSeriesNumberColumn[col];\n }\n }\n if (this.rightRowSeriesNumberColumnCount > 0 && col >= this.colCount - this.rightRowSeriesNumberColumnCount) {\n if (row >= this.headerLevelCount) {\n return this.rightRowSeriesNumberColumn[col - (this.colCount - this.rightRowSeriesNumberColumnCount)];\n }\n }\n return undefined;\n }\n\n /** 修改表头值 */\n changeTreeNodeTitle(col: number, row: number, value: string) {\n // const headerPaths = this.getCellHeaderPaths(col, row);\n // if (headerPaths.rowHeaderPaths.length > 0) {\n // const headerTreeNode = this.getHeadNode(headerPaths.rowHeaderPaths.slice(0, headerPaths.rowHeaderPaths.length));\n // headerTreeNode.value = value;\n // } else if (headerPaths.colHeaderPaths.length > 0) {\n // const headerTreeNode = this.getHeadNode(headerPaths.colHeaderPaths.slice(0, headerPaths.colHeaderPaths.length));\n // headerTreeNode.value = value;\n // }\n const headerTreeNode = this.getHeadNode(col, row);\n headerTreeNode.value = value;\n const id = this.getCellId(col, row);\n this._headerObjectMap[id as number].title = value;\n }\n changeCornerTitle(col: number, row: number, value: string) {\n if (this.isCornerHeader(col, row)) {\n const id = this.getCellId(col, row);\n this._headerObjectMap[id as number].title = value;\n }\n }\n generateCellIdsConsiderHideHeader() {\n // deal with hide header\n // 创建原数组的副本\n this._columnHeaderCellIds = this._columnHeaderCellFullPathIds.slice();\n if (!this.showColumnHeader) {\n if (this.indicatorsAsCol && !this.hideIndicatorName) {\n const indicatorIndex = this.colDimensionKeys.indexOf(IndicatorDimensionKeyPlaceholder);\n const indicatorIds: number[][] = this._columnHeaderCellIds.splice(indicatorIndex, 1);\n this._columnHeaderCellIds.splice(0, this._columnHeaderCellIds.length);\n this._columnHeaderCellIds.push(indicatorIds[0]);\n } else {\n this._columnHeaderCellIds.splice(0, this._columnHeaderCellIds.length);\n }\n }\n // else if (this.indicatorsAsCol) {\n // const indicatorsIds = this._columnHeaderCellIds[this._columnHeaderCellIds.length - 1];\n // for (let i = indicatorsIds.length - 1; i >= 0; i--) {\n // const id = indicatorsIds[i];\n // const define: IIndicator = this.headerObjects[id]?.define as any as IIndicator;\n // if ((define as any).indicatorKey && define.hide) {\n // let isHide = false;\n // if (typeof define.hide === 'function') {\n // isHide = define.hide({\n // dimensionPaths: this.getCellHeaderPaths(this.rowHeaderLevelCount + i, this.columnHeaderLevelCount - 1)\n // .colHeaderPaths as IDimensionInfo[],\n // table: this._table\n // });\n // } else {\n // isHide = define.hide;\n // }\n // //判断指标是否设置了hide\n // if (isHide) {\n // for (let j = 0; j < this._columnHeaderCellIds.length; j++) {\n // const _cellIds = this._columnHeaderCellIds[j];\n // _cellIds.splice(i, 1);\n // }\n // }\n // }\n // }\n // }\n // 创建原数组的副本\n this._rowHeaderCellIds_FULL = this._rowHeaderCellFullPathIds_FULL.slice();\n if (!this.showRowHeader) {\n if (!this.indicatorsAsCol && !this.hideIndicatorName) {\n const indicatorIndex = this.rowDimensionKeys.indexOf(IndicatorDimensionKeyPlaceholder);\n this._rowHeaderCellIds_FULL.forEach((cellIds: number[], index: number) => {\n const _cellIds = cellIds.slice();\n const indicator = _cellIds.splice(indicatorIndex, 1);\n _cellIds.splice(0, _cellIds.length);\n _cellIds.push(indicator[0]);\n this._rowHeaderCellIds_FULL[index] = _cellIds;\n });\n } else {\n this._rowHeaderCellIds_FULL.forEach((cellIds: number[], index: number) => {\n const _cellIds = cellIds.slice();\n _cellIds.splice(0, _cellIds.length);\n this._rowHeaderCellIds_FULL[index] = _cellIds;\n });\n }\n }\n // else if (!this.indicatorsAsCol) {\n // this._rowHeaderCellIds_FULL = this._rowHeaderCellFullPathIds_FULL;\n // const _rowIds = this._rowHeaderCellIds_FULL;\n // for (let i = _rowIds.length - 1; i >= 0; i--) {\n // const id = _rowIds[i][_rowIds[i].length - 1];\n // const define = this.headerObjects[id]?.define;\n // if ((define as any).indicatorKey && define.hide) {\n // this._rowHeaderCellIds_FULL.splice(i, 1);\n // }\n // }\n // }\n this._rowHeaderCellIds = this._rowHeaderCellIds_FULL.slice();\n // 创建原数组的副本\n this._cornerHeaderCellIds = this._cornerHeaderCellFullPathIds.slice();\n if (this.rowHeaderLevelCount === 0 || this.columnHeaderLevelCount === 0) {\n this._cornerHeaderCellIds = [];\n } else if (this.cornerSetting.titleOnDimension === 'row' && !this.showRowHeader) {\n if (!this.indicatorsAsCol && !this.hideIndicatorName) {\n const indicatorIndex = this.rowDimensionKeys.indexOf(IndicatorDimensionKeyPlaceholder);\n this._cornerHeaderCellIds.forEach((cellIds: number[], index: number) => {\n const _cellIds = cellIds.slice();\n const indicator = _cellIds.splice(indicatorIndex, 1);\n _cellIds.splice(0, _cellIds.length);\n _cellIds.push(indicator[0]);\n this._cornerHeaderCellIds[index] = _cellIds;\n });\n } else {\n this._cornerHeaderCellIds.forEach((cellIds: number[], index: number) => {\n const _cellIds = cellIds.slice();\n _cellIds.splice(0, _cellIds.length);\n this._cornerHeaderCellIds[index] = _cellIds;\n });\n }\n } else if (this.cornerSetting.titleOnDimension === 'column' && !this.showColumnHeader) {\n if (this.indicatorsAsCol && !this.hideIndicatorName) {\n const indicatorIndex = this.colDimensionKeys.indexOf(IndicatorDimensionKeyPlaceholder);\n const indicatorIds: number[][] = this._cornerHeaderCellIds.splice(indicatorIndex, 1);\n this._cornerHeaderCellIds.splice(0, this._cornerHeaderCellIds.length);\n this._cornerHeaderCellIds.push(indicatorIds[0]);\n } else {\n this._cornerHeaderCellIds.splice(0, this._cornerHeaderCellIds.length);\n }\n }\n //#region 纠正角头 处理角头和行头或者列头长度不一致的情况(grid-tree模式下会有这种情况发生)\n if (this.rowHierarchyType === 'grid-tree' && this.cornerSetting.titleOnDimension === 'column') {\n if (this._cornerHeaderCellIds[0].length < this._rowHeaderCellIds[0].length) {\n this._cornerHeaderCellIds.forEach((cellIds: number[], index: number) => {\n const oldLength = cellIds.length;\n cellIds.length = this._rowHeaderCellIds[0].length;\n cellIds.fill(cellIds[0], oldLength);\n });\n } else if (this._cornerHeaderCellIds[0].length > this._rowHeaderCellIds[0].length) {\n this._cornerHeaderCellIds.forEach((cellIds: number[], index: number) => {\n cellIds.length = this._rowHeaderCellIds[0].length;\n });\n }\n } else if (this.columnHierarchyType === 'grid-tree' && this.cornerSetting.titleOnDimension === 'row') {\n if (this._cornerHeaderCellIds?.length < this._columnHeaderCellIds?.length) {\n const oldLength = this._cornerHeaderCellIds.length;\n this._cornerHeaderCellIds.length = this._columnHeaderCellIds.length;\n this._cornerHeaderCellIds.fill(this._cornerHeaderCellIds[0], oldLength);\n } else if (this._cornerHeaderCellIds?.length > this._columnHeaderCellIds?.length) {\n this._cornerHeaderCellIds.length = this._columnHeaderCellIds.length;\n }\n }\n //#endregion\n }\n enableUseGetBodyCache() {\n this._useGetBodyCache = true;\n this._getBodyCache.clear();\n }\n disableUseGetBodyCache() {\n this._useGetBodyCache = false;\n this._getBodyCache.clear();\n }\n enableUseHeaderPathCache() {\n if (this._table.options?.customConfig?.enablePivotPathCache) {\n this._useHeaderPathCache = true;\n } else {\n this._useHeaderPathCache = true;\n this._colHeaderPathCache.clear();\n this._rowHeaderPathCache.clear();\n }\n }\n disableUseHeaderPathCache() {\n if (this._table.options?.customConfig?.enablePivotPathCache) {\n this._useHeaderPathCache = true;\n } else {\n this._useHeaderPathCache = false;\n this._colHeaderPathCache.clear();\n this._rowHeaderPathCache.clear();\n }\n }\n getBodyWidthCache(col: number, row: number) {\n if (!this._useGetBodyCache || this.isHeader(col, row) || this.isSeriesNumber(col, row)) {\n return undefined;\n }\n if (this.indicatorsAsCol && this._getBodyCache.has(col)) {\n return this._getBodyCache.get(col);\n } else if (!this.indicatorsAsCol && this._getBodyCache.has(row)) {\n return this._getBodyCache.get(row);\n }\n return undefined;\n }\n setBodyWidthCache(col: number, row: number, cache: IndicatorData | SeriesNumberColumnData) {\n if (!this._useGetBodyCache || this.isHeader(col, row) || this.isSeriesNumber(col, row)) {\n return;\n }\n if (this.indicatorsAsCol) {\n this._getBodyCache.set(col, cache);\n } else {\n this._getBodyCache.set(row, cache);\n }\n }\n\n getColHeaderPathCache(col: number, row: number) {\n if (\n this._useHeaderPathCache &&\n !this.isHeader(col, row) &&\n !this.isSeriesNumber(col, row) &&\n this._colHeaderPathCache.has(col)\n ) {\n return this._colHeaderPathCache.get(col);\n }\n return undefined;\n }\n\n setColHeaderPathCache(col: number, row: number, cache: ITreeLayoutHeadNode[]) {\n if (this._useHeaderPathCache && !this.isHeader(col, row) && !this.isSeriesNumber(col, row)) {\n this._colHeaderPathCache.set(col, cache);\n }\n }\n\n getRowHeaderPathCache(col: number, row: number) {\n if (\n this._useHeaderPathCache &&\n !this.isHeader(col, row) &&\n !this.isSeriesNumber(col, row) &&\n this._rowHeaderPathCache.has(row)\n ) {\n return this._rowHeaderPathCache.get(row);\n }\n return undefined;\n }\n\n setRowHeaderPathCache(col: number, row: number, cache: ITreeLayoutHeadNode[]) {\n if (this._useHeaderPathCache && !this.isHeader(col, row) && !this.isSeriesNumber(col, row)) {\n this._rowHeaderPathCache.set(row, cache);\n }\n }\n\n clearHeaderPathCache() {\n this._colHeaderPathCache.clear();\n this._rowHeaderPathCache.clear();\n }\n\n /**\n * 判断单元格是否为聚合值单元格(小计或总计)\n * @param col 列索引\n * @param row 行索引\n * @returns 是否为聚合值单元格\n */\n isAggregation(col: number, row: number): boolean {\n if (this.isHeader(col, row)) {\n return false; // 表头单元格不是聚合值单元格\n }\n\n // 获取单元格的路径信息\n const cellHeaderPaths = this.getCellHeaderPaths(col, row);\n\n // 检查行和列路径中是否有小计或总计角色\n\n for (const path of cellHeaderPaths.colHeaderPaths) {\n if (path.role === 'sub-total' || path.role === 'grand-total') {\n return true;\n }\n }\n\n for (const path of cellHeaderPaths.rowHeaderPaths) {\n if (path.role === 'sub-total' || path.role === 'grand-total') {\n return true;\n }\n }\n\n return false;\n }\n\n expandAllForRowDimensionTree() {\n if (this.rowDimensionTree) {\n this.rowDimensionTree.setAllNodesState(HierarchyState.expand);\n this._rebuildRowLayout(); // 后续可以优化\n }\n }\n\n collapseAllForRowDimensionTree() {\n if (this.rowDimensionTree) {\n this.rowDimensionTree.setAllNodesState(HierarchyState.collapse);\n this._rebuildRowLayout(); // 后续可以优化\n }\n }\n\n expandAllForColumnDimensionTree() {\n if (this.columnDimensionTree) {\n this.columnDimensionTree.setAllNodesState(HierarchyState.expand);\n this._rebuildColumnLayout(); // 后续可以优化\n }\n }\n\n collapseAllForColumnDimensionTree() {\n if (this.columnDimensionTree) {\n this.columnDimensionTree.setAllNodesState(HierarchyState.collapse);\n this._rebuildColumnLayout(); // 后续可以优化\n }\n }\n}\n/** 计算 scale 的实际 range 长度 */\nfunction scaleWholeRangeSize(count: number, bandwidth: number, paddingInner: number, paddingOuter: number) {\n if (paddingInner === 1) {\n paddingInner = 0; // 保护\n // FIXME: vscale 同样需要加保护,目前这里加了保护以后,在 paddingInner为 1 的情况还是会崩溃\n }\n const space = bandSpace(count, paddingInner, paddingOuter);\n const step = bandwidth / (1 - paddingInner);\n const wholeSize = Math.ceil(space * step);\n return wholeSize;\n}\n\nfunction bandSpace(count: number, paddingInner: number, paddingOuter: number): number {\n let space;\n // count 等于 1 时需要特殊处理,否则 step 会超出 range 范围\n // 计算公式: step = paddingOuter * step * 2 + paddingInner * step + bandwidth\n if (count === 1) {\n space = count + paddingOuter * 2;\n } else {\n space = count - paddingInner + paddingOuter * 2;\n }\n return count ? (space > 0 ? space : 1) : 0;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/layout/pivot-header-layout.ts"],"names":[],"mappings":"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","file":"pivot-header-layout.js","sourcesContent":["/* eslint-disable sort-imports */\nimport { transpose } from '../tools/util';\nimport type {\n CellAddress,\n CellRange,\n IPivotTableCellHeaderPaths,\n LayoutObjectId,\n ShowColumnRowType,\n CellLocation,\n IHeaderTreeDefine,\n IDimension,\n IIndicator,\n ITitleDefine,\n ICornerDefine,\n IDimensionInfo,\n IExtensionRowDefine,\n IPagination,\n IColumnDimension,\n IRowDimension,\n IChartIndicator,\n IRowSeriesNumber,\n CellPivotRole\n} from '../ts-types';\nimport { HierarchyState } from '../ts-types';\nimport type {\n HeaderData,\n IndicatorData,\n LayoutMapAPI,\n SeriesNumberColumnData,\n // PivotTableLayoutDefine,\n WidthData\n} from '../ts-types/list-table/layout-map/api';\n// import { EmptyDataCache } from './utils';\nimport type { PivotTable } from '../PivotTable';\nimport type { PivotChart } from '../PivotChart';\nimport { IndicatorDimensionKeyPlaceholder } from '../tools/global';\nimport { diffCellAddress, diffCellAddressForGridTree, diffCellAddressForGridTreeOnColumn } from '../tools/diff-cell';\nimport {\n checkHasCartesianChart,\n checkHasChart,\n getChartAxes,\n getChartDataId,\n getChartSpec,\n getRawChartSpec,\n isCartesianChart,\n isHasCartesianChartInline,\n isNoChartDataRenderNothing,\n isShareChartSpec\n} from './chart-helper/get-chart-spec';\nimport type { ITreeLayoutHeadNode, LayouTreeNode } from './tree-helper';\nimport {\n DimensionTree,\n countLayoutTree,\n dealHeader,\n dealHeaderForGridTreeMode,\n dealHeaderForTreeMode,\n generateLayoutTree\n} from './tree-helper';\nimport type { Dataset } from '../dataset/dataset';\nimport { cloneDeep, isArray, isValid } from '@visactor/vutils';\nimport type { TextStyle } from '../body-helper/style';\nimport type { ITableAxisOption } from '../ts-types/component/axis';\nimport { getQuadProps } from '../scenegraph/utils/padding';\nimport type { GetAxisConfigInPivotChart } from './chart-helper/get-axis-config';\nimport { Factory } from '../core/factory';\nimport {\n clearAllChartInstanceList,\n clearAndReleaseBrushingChartInstance\n} from '../scenegraph/graphic/active-cell-chart-list';\n\n// export const sharedVar = { seqId: 0 };\n// let colIndex = 0;\n\nconst defaultDimension = { startInTotal: 0, afterSpanLevel: 0 };\nexport class PivotHeaderLayoutMap implements LayoutMapAPI {\n sharedVar: { seqId: number };\n colIndex = 0;\n _showHeader = true;\n rowDimensionTree: DimensionTree;\n columnDimensionTree: DimensionTree;\n rowTree: IHeaderTreeDefine[];\n columnTree: IHeaderTreeDefine[];\n cornerHeaderObjs: HeaderData[];\n columnHeaderObjs: HeaderData[] = [];\n rowHeaderObjs: HeaderData[] = [];\n\n private _cornerHeaderCellFullPathIds: number[][] = [];\n private _columnHeaderCellFullPathIds: number[][] = [];\n private _rowHeaderCellFullPathIds: number[][] = [];\n private _rowHeaderCellFullPathIds_FULL: number[][] = []; //分页需求新增 为了保存全量的id 当页的是_rowHeaderCellFullPathIds\n\n /**下面四份代表实际展示的 如果隐藏了某部分表头 那这里就会相比上面的数组少了隐藏掉的id 例如收hideIndicatorName影响*/\n _cornerHeaderCellIds: number[][] = [];\n private _columnHeaderCellIds: number[][] = [];\n private _rowHeaderCellIds: number[][] = [];\n private _rowHeaderCellIds_FULL: number[][] = []; //分页需求新增 为了保存全量的id 当页的是_rowHeaderCellIds\n\n private _columnWidths: WidthData[] = [];\n private _columnHeaderLevelCount: number;\n private _rowHeaderLevelCount: number;\n rowsDefine: (IRowDimension | string)[];\n columnsDefine: (IColumnDimension | string)[];\n indicatorsDefine: (IIndicator | IChartIndicator | string)[];\n columnPaths: number[][] = [];\n _headerObjects: HeaderData[] = [];\n private _headerObjectMap: { [key: LayoutObjectId]: HeaderData } = {};\n // private _emptyDataCache = new EmptyDataCache();\n _indicators: IndicatorData[] = [];\n indicatorTitle: string;\n indicatorsAsCol = true;\n hideIndicatorName = false;\n _showRowHeader = true;\n _showColumnHeader = true;\n _rowHeaderTitle: ITitleDefine;\n _columnHeaderTitle: ITitleDefine;\n cornerSetting: ICornerDefine;\n private _indicatorShowType: ShowColumnRowType = 'column';\n /**层级维度结构显示形式 */\n rowHierarchyType?: 'grid' | 'tree' | 'grid-tree';\n columnHierarchyType?: 'grid' | 'grid-tree';\n\n rowExpandLevel?: number;\n columnExpandLevel?: number;\n rowHierarchyIndent?: number;\n rowHierarchyTextStartAlignment?: boolean = false;\n /**\n * 行表头对应的维度key集合\n */\n rowDimensionKeys: string[] = [];\n /**\n * 列表头对应的维度key集合\n */\n colDimensionKeys: string[] = [];\n indicatorKeys: string[] = [];\n indicatorDimensionKey: string = IndicatorDimensionKeyPlaceholder;\n // 缓存行号列号对应的cellRange 需要注意当表头位置拖拽后 这个缓存的行列号已不准确 进行重置\n // private _cellRangeMap: Map<string, CellRange>; //存储单元格的行列号范围 针对解决是否为合并单元格情况\n private _largeCellRangeCache: CellRange[];\n // 缓存行号列号对应的headerPath,注意树形结构展开需要清除! 需要注意当表头位置拖拽后 这个缓存的行列号已不准确 进行重置\n private _CellHeaderPathMap: Map<string, IPivotTableCellHeaderPaths>;\n _table: PivotTable | PivotChart;\n extensionRows: IExtensionRowDefine[];\n _rowHeaderExtensionTree: any = {};\n\n /**\n * 扩展行表头对应的维度key集合\n */\n _extensionRowDimensionKeys: string[][] = [];\n fullRowDimensionKeys: string[] = [];\n\n dataset: Dataset;\n /**\n * 分页配置\n */\n pagination: IPagination;\n currentPageStartIndex: number;\n currentPageEndIndex: number;\n // _extensionRowHeaderCellIds\n //#region pivotChart专有\n /** 指标轴是否存在(按方位区分,用于更精确布局) */\n hasLeftIndicatorAxis: boolean = false;\n hasRightIndicatorAxis: boolean = false;\n hasTopIndicatorAxis: boolean = false;\n hasBottomIndicatorAxis: boolean = false;\n /** 图表spec中barWidth的收集 */\n _chartItemSpanSize: number;\n _chartPaddingInner: number;\n _chartPaddingOuter: number;\n _chartItemBandSize: number;\n _chartPadding?: number | number[];\n\n rowSeriesNumberColumn: SeriesNumberColumnData[];\n leftRowSeriesNumberColumn: SeriesNumberColumnData[];\n leftRowSeriesNumberColumnCount: number = 0;\n rightRowSeriesNumberColumn: SeriesNumberColumnData[];\n rightRowSeriesNumberColumnCount: number = 0;\n //#endregion\n\n _useGetBodyCache: boolean = false;\n _getBodyCache: Map<number, IndicatorData | SeriesNumberColumnData> = new Map();\n\n _useHeaderPathCache: boolean = false;\n _colHeaderPathCache: Map<number, ITreeLayoutHeadNode[]> = new Map();\n _rowHeaderPathCache: Map<number, ITreeLayoutHeadNode[]> = new Map();\n constructor(\n table: PivotTable | PivotChart,\n dataset: Dataset,\n columnDimensionTree: DimensionTree,\n rowDimensionTree: DimensionTree\n ) {\n this.sharedVar = table.layoutNodeId;\n this._table = table;\n if ((table as PivotTable).options.rowHierarchyType === 'tree') {\n this.extensionRows = (table as PivotTable).options.extensionRows;\n }\n this.dataset = dataset;\n // this._cellRangeMap = new Map();\n this._largeCellRangeCache = [];\n this._CellHeaderPathMap = new Map();\n // this.showHeader = showHeader;\n // this.pivotLayout = pivotLayoutObj;\n this.rowTree = table.internalProps.rowTree;\n this.columnTree = table.internalProps.columnTree;\n this.rowsDefine = table.internalProps.rows ?? [];\n this.columnsDefine = table.internalProps.columns ?? [];\n this.indicatorsDefine = table.internalProps.indicators ?? [];\n this.indicatorTitle = table.options.indicatorTitle;\n this.indicatorsAsCol = table.options.indicatorsAsCol ?? true;\n this.hideIndicatorName = table.options.hideIndicatorName ?? false;\n this.showRowHeader = table.options.showRowHeader ?? true;\n this.showColumnHeader = table.options.showColumnHeader ?? true;\n this.rowHeaderTitle = table.options.rowHeaderTitle;\n this.columnHeaderTitle = table.options.columnHeaderTitle;\n this.rowHierarchyType = (table as PivotTable).options.rowHierarchyType ?? 'grid';\n this.columnHierarchyType = (table as PivotTable).options.columnHierarchyType ?? 'grid';\n this.rowExpandLevel = (table as PivotTable).options.rowExpandLevel ?? 1;\n this.columnExpandLevel = (table as PivotTable).options.columnExpandLevel ?? 1;\n this.rowHierarchyIndent = (table as PivotTable).options.rowHierarchyIndent ?? 20;\n this.rowHierarchyTextStartAlignment = (table as PivotTable).options.rowHierarchyTextStartAlignment;\n this.cornerSetting = Object.assign({ titleOnDimension: 'column', forceShowHeader: false }, table.options.corner);\n\n if (this._table.options?.customConfig?.enablePivotPathCache) {\n this._useHeaderPathCache = true;\n this._colHeaderPathCache.clear();\n this._rowHeaderPathCache.clear();\n }\n\n if (dataset) {\n this.rowTree = dataset.rowHeaderTree;\n this.columnTree = dataset.colHeaderTree;\n }\n // 收集指标所有key\n this.indicatorsDefine?.forEach(indicator => {\n // this.indicatorKeys[indicator.indicatorKey] = indicator.value;\n if (typeof indicator === 'string') {\n this.indicatorKeys.push(indicator);\n } else {\n this.indicatorKeys.push(indicator.indicatorKey);\n }\n });\n this.columnDimensionTree = columnDimensionTree; // new DimensionTree((this.columnTree as ITreeLayoutHeadNode[]) ?? [], this.sharedVar);\n this.rowDimensionTree = rowDimensionTree;\n // new DimensionTree(\n // (this.rowTree as ITreeLayoutHeadNode[]) ?? [],\n // this.sharedVar,\n // this.rowHierarchyType,\n // this.rowHierarchyType === 'tree' ? this.rowExpandLevel : undefined\n // );\n this.colDimensionKeys = this.columnDimensionTree.dimensionKeysIncludeVirtual.valueArr();\n this.rowDimensionKeys = this.rowDimensionTree.dimensionKeysIncludeVirtual.valueArr();\n this.fullRowDimensionKeys = this.fullRowDimensionKeys.concat(this.rowDimensionKeys);\n\n if (this._table.isPivotChart()) {\n this.hasLeftIndicatorAxis = false;\n this.hasRightIndicatorAxis = false;\n this.hasTopIndicatorAxis = false;\n this.hasBottomIndicatorAxis = false;\n\n // 根据 chartSpec.axes / pivotChartAxes 推断“指标轴”的分布(按方位),并写回到 indicator define 上供后续轴配置/布局使用\n this.indicatorsDefine.forEach((indicatorObject: any) => {\n // 默认全部置为 false,避免复用旧对象时残留脏数据\n indicatorObject.hasLeftIndicatorAxis = false;\n indicatorObject.hasRightIndicatorAxis = false;\n indicatorObject.hasTopIndicatorAxis = false;\n indicatorObject.hasBottomIndicatorAxis = false;\n\n if (!indicatorObject?.chartSpec) {\n return;\n }\n\n const axes = indicatorObject.chartSpec.axes ?? (this._table as PivotChart).pivotChartAxes ?? [];\n const visibleOrients = new Set<string>();\n (axes ?? []).forEach((axis: any) => {\n if (axis?.orient && axis.visible !== false) {\n visibleOrients.add(axis.orient);\n }\n });\n\n const isMultiSeries = indicatorObject.chartSpec?.series?.length > 1;\n\n if (this.indicatorsAsCol) {\n // 指标在列:指标轴位于 top/bottom\n let hasTop = visibleOrients.has('top');\n let hasBottom = visibleOrients.has('bottom');\n\n // 未配置 axes 时,默认存在 bottom 指标轴(与现有 bottomFrozenRowCount 逻辑保持一致)\n if (!axes.length) {\n hasBottom = true;\n }\n\n // 多系列场景:若未显式隐藏 top 轴,则认为存在 top 副指标轴(并同时认为 bottom 主指标轴存在)\n if (isMultiSeries) {\n const topHiddenExplicitly = axes.some((axis: any) => axis?.orient === 'top' && axis.visible === false);\n if (!axes.length || !topHiddenExplicitly) {\n hasTop = true;\n const bottomHiddenExplicitly = axes.some(\n (axis: any) => axis?.orient === 'bottom' && axis.visible === false\n );\n if (!bottomHiddenExplicitly) {\n hasBottom = true;\n }\n }\n }\n\n indicatorObject.hasTopIndicatorAxis = hasTop;\n indicatorObject.hasBottomIndicatorAxis = hasBottom;\n // 指标在列时 left/right 不是“指标轴”\n indicatorObject.hasLeftIndicatorAxis = false;\n indicatorObject.hasRightIndicatorAxis = false;\n } else {\n // 指标在行:指标轴位于 left/right\n let hasLeft = visibleOrients.has('left');\n let hasRight = visibleOrients.has('right');\n\n // 未配置 axes 时,默认存在 left 指标轴(与现有 leftAxesCount/布局逻辑保持一致)\n if (!axes.length) {\n hasLeft = true;\n }\n\n // 多系列场景:若未显式隐藏 right 轴,则认为存在 right 副指标轴(并同时认为 left 主指标轴存在)\n if (isMultiSeries) {\n const rightHiddenExplicitly = axes.some((axis: any) => axis?.orient === 'right' && axis.visible === false);\n if (!axes.length || !rightHiddenExplicitly) {\n hasRight = true;\n const leftHiddenExplicitly = axes.some((axis: any) => axis?.orient === 'left' && axis.visible === false);\n if (!leftHiddenExplicitly) {\n hasLeft = true;\n }\n }\n }\n\n indicatorObject.hasLeftIndicatorAxis = hasLeft;\n indicatorObject.hasRightIndicatorAxis = hasRight;\n // 指标在行时 top/bottom 不是“指标轴”\n indicatorObject.hasTopIndicatorAxis = false;\n indicatorObject.hasBottomIndicatorAxis = false;\n }\n\n // 汇总到 layout 级别(任意指标存在对应方位轴,则 layout 认为存在)\n this.hasLeftIndicatorAxis ||= !!indicatorObject.hasLeftIndicatorAxis;\n this.hasRightIndicatorAxis ||= !!indicatorObject.hasRightIndicatorAxis;\n this.hasTopIndicatorAxis ||= !!indicatorObject.hasTopIndicatorAxis;\n this.hasBottomIndicatorAxis ||= !!indicatorObject.hasBottomIndicatorAxis;\n });\n }\n this.resetRowHeaderLevelCount();\n this.resetColumnHeaderLevelCount();\n\n // this.indicatorsAsCol = !isValid(this.rowDimensionKeys.find(key => key === this.indicatorDimensionKey));\n // this.colAttrs[this.colAttrs.length-1]===this.indicatorDimensionKey&&this.colAttrs.pop();\n // this.rowAttrs[this.rowAttrs.length-1]===this.indicatorDimensionKey&&this.rowAttrs.pop();\n //生成列表头单元格\n this._generateColHeaderIds();\n\n this.colIndex = 0;\n //生成行表头单元格\n this._generateRowHeaderIds();\n\n this._rowHeaderCellFullPathIds_FULL = transpose(this._rowHeaderCellFullPathIds_FULL);\n if ((table as PivotTable).options.rowHierarchyType === 'tree' && this.extensionRows?.length >= 1) {\n this.generateExtensionRowTree();\n\n this.extensionRows.forEach(extensionRow => {\n const rowKeys: string[] = [];\n extensionRow.rows.forEach(row => {\n if (typeof row === 'string') {\n rowKeys.push(row);\n } else {\n rowKeys.push(row.dimensionKey);\n }\n });\n this._extensionRowDimensionKeys.push(rowKeys);\n this.fullRowDimensionKeys = this.fullRowDimensionKeys.concat(rowKeys);\n });\n }\n\n this.sharedVar.seqId = Math.max(this.sharedVar.seqId, this._headerObjects.length);\n //#region 生成cornerHeaderObjs及_cornerHeaderCellIds\n // if (this.cornerSetting.titleOnDimension === 'all') {\n let colDimensionKeys = this.columnDimensionTree.dimensionKeysIncludeVirtual.valueArr();\n //#region 处理需求 当没有数据时仍然显示角头维度名称\n if (\n this.dataset &&\n !this._table.isPivotChart() &&\n (this.dataset.records?.length ?? 0) === 0 &&\n !this.dataset.customColTree\n // &&\n // !this.dataset.customRowTree\n ) {\n colDimensionKeys = this.columnsDefine.map(define => {\n if (typeof define === 'string') {\n return define;\n }\n return define.dimensionKey;\n });\n if (this.indicatorsAsCol) {\n colDimensionKeys.push(this.indicatorDimensionKey);\n }\n }\n //#endregion\n\n colDimensionKeys = this.columnHeaderTitle ? [''].concat(colDimensionKeys) : colDimensionKeys;\n\n let rowDimensionKeys: string[];\n let extensionRowDimensions = [];\n if (this.rowHierarchyType === 'tree' && this.extensionRows?.length >= 1) {\n // 如果是有扩展行维度\n const rowTreeFirstKey = [];\n rowTreeFirstKey.push(this.rowDimensionKeys[0]);\n this._extensionRowDimensionKeys.forEach(extensionRowKeys => {\n rowTreeFirstKey.push(extensionRowKeys[0]);\n });\n extensionRowDimensions = this.extensionRows.reduce((dimensions, cur) => {\n return dimensions.concat(cur.rows);\n }, []);\n\n rowDimensionKeys = this.rowHeaderTitle ? [''].concat(rowTreeFirstKey as any) : rowTreeFirstKey;\n } else {\n //#region 处理需求 当没有数据时仍然显示角头维度名称\n rowDimensionKeys = this.rowDimensionTree.dimensionKeysIncludeVirtual.valueArr();\n if (\n this.dataset &&\n !this._table.isPivotChart() &&\n (this.dataset.records?.length ?? 0) === 0 &&\n // !this.dataset.customColTree &&\n !this.dataset.customRowTree\n ) {\n rowDimensionKeys = this.rowsDefine.map(define => {\n if (typeof define === 'string') {\n return define;\n }\n return define.dimensionKey;\n });\n if (!this.indicatorsAsCol) {\n rowDimensionKeys.push(this.indicatorDimensionKey);\n }\n }\n //#endregion\n rowDimensionKeys = this.rowHeaderTitle ? [''].concat(rowDimensionKeys) : rowDimensionKeys;\n }\n\n this.cornerHeaderObjs = this._addCornerHeaders(\n colDimensionKeys,\n rowDimensionKeys,\n this.columnsDefine.concat(...this.rowsDefine, ...extensionRowDimensions)\n );\n //#endregion\n this.colIndex = 0;\n this._headerObjectMap = this._headerObjects.reduce((o, e) => {\n o[e.id as number] = e;\n return o;\n }, {} as { [key: LayoutObjectId]: HeaderData });\n\n if (this.indicatorsAsCol && !this.hideIndicatorName) {\n this._indicatorShowType = 'column';\n } else if (!this.indicatorsAsCol && !this.hideIndicatorName) {\n this._indicatorShowType = 'row';\n } else {\n this._indicatorShowType = 'none';\n }\n\n this.generateCellIdsConsiderHideHeader();\n this.setPagination((table as PivotTable).options.pagination);\n\n if (this._table.isPivotChart()) {\n this._chartItemSpanSize = 0;\n this._chartItemBandSize = 0;\n // this._chartPadding ;\n this._indicators.find(indicatorObject => {\n if ((indicatorObject?.style as TextStyle)?.padding) {\n this._chartPadding = (indicatorObject.style as TextStyle).padding as number;\n }\n if (indicatorObject.chartSpec?.barWidth && typeof indicatorObject.chartSpec.barWidth === 'number') {\n this._chartItemSpanSize = indicatorObject.chartSpec?.barWidth;\n }\n const bandAxisConfig = indicatorObject.chartSpec?.axes?.find((axis: any) => {\n return axis.type === 'band';\n });\n if (bandAxisConfig?.bandSize) {\n this._chartItemBandSize = bandAxisConfig?.bandSize;\n this._chartPaddingInner =\n (isArray(bandAxisConfig.paddingInner) ? bandAxisConfig.paddingInner[0] : bandAxisConfig.paddingInner) ?? 0;\n this._chartPaddingOuter =\n (isArray(bandAxisConfig.paddingOuter) ? bandAxisConfig.paddingOuter[0] : bandAxisConfig.paddingOuter) ?? 0;\n }\n if (this._chartItemSpanSize > 0) {\n return true;\n }\n indicatorObject.chartSpec.series?.find((seriesObject: any) => {\n if (seriesObject.barWidth && typeof seriesObject.barWidth === 'number') {\n this._chartItemSpanSize = seriesObject.barWidth;\n }\n if (this._chartItemSpanSize > 0) {\n return true;\n }\n return false;\n });\n // if (this._chartItemSpanSize > 0) {\n // return true;\n // }\n return false;\n });\n }\n this.handleRowSeriesNumber(table.internalProps.rowSeriesNumber);\n\n this.setColumnWidths();\n }\n handleRowSeriesNumber(rowSeriesNumber: IRowSeriesNumber) {\n if (rowSeriesNumber) {\n if (Array.isArray(rowSeriesNumber)) {\n this.rowSeriesNumberColumn = rowSeriesNumber.map((seriesNumber: IRowSeriesNumber) => {\n return {\n id: '',\n title: seriesNumber.title,\n define: seriesNumber,\n cellType: seriesNumber.cellType ?? 'text',\n headerType: seriesNumber.cellType && seriesNumber.cellType !== 'radio' ? seriesNumber.cellType : 'text',\n width: seriesNumber.width,\n style: seriesNumber.style,\n format: seriesNumber.format,\n field: (seriesNumber as any).field,\n icon: seriesNumber.icon,\n headerIcon: seriesNumber.headerIcon,\n isChildNode: false\n };\n });\n } else {\n this.rowSeriesNumberColumn = [\n {\n id: '',\n title: rowSeriesNumber.title,\n define: rowSeriesNumber,\n cellType: rowSeriesNumber.cellType ?? 'text',\n headerType:\n rowSeriesNumber.cellType && rowSeriesNumber.cellType !== 'radio' ? rowSeriesNumber.cellType : 'text',\n style: rowSeriesNumber.style,\n width: rowSeriesNumber.width,\n format: rowSeriesNumber.format,\n field: '', // rowSeriesNumber.field,\n icon: rowSeriesNumber.icon,\n headerIcon: rowSeriesNumber.headerIcon,\n isChildNode: false\n }\n ];\n }\n this.leftRowSeriesNumberColumn = this.rowSeriesNumberColumn.filter(rowSeriesNumberItem => {\n // if (rowSeriesNumberItem.define.align === 'left' || !isValid(rowSeriesNumberItem.define.align)) {\n // return true;\n // }\n return true;\n });\n this.rightRowSeriesNumberColumn = this.rowSeriesNumberColumn.filter(rowSeriesNumberItem => {\n // if (rowSeriesNumberItem.define.align === 'right') {\n // return true;\n // }\n return false;\n });\n this.leftRowSeriesNumberColumnCount = this.leftRowSeriesNumberColumn.length;\n this.rightRowSeriesNumberColumnCount = this.rightRowSeriesNumberColumn.length;\n }\n }\n _generateColHeaderIds() {\n if (this.columnDimensionTree.tree.children?.length >= 1) {\n if (this.columnHierarchyType === 'grid-tree') {\n const startCol = 0;\n this._addHeadersForGridTreeMode(\n this._columnHeaderCellFullPathIds,\n startCol,\n this.columnDimensionTree.tree.children,\n [],\n this.columnDimensionTree.totalLevel,\n this._getColumnHeaderTreeExpandedMaxLevelCount(),\n true,\n this.columnsDefine,\n this.columnHeaderObjs,\n false\n );\n } else {\n //#region 处理需求 当没有数据时仍然显示角头维度名称\n let startRow = 0;\n if (\n this.dataset &&\n !this._table.isPivotChart() &&\n (this.dataset.records?.length ?? 0) === 0 &&\n !this.dataset.customColTree &&\n !this.dataset.customRowTree &&\n this.indicatorsAsCol &&\n this._getColumnHeaderTreeExpandedMaxLevelCount() < this.columnHeaderLevelCount\n ) {\n startRow = this.columnHeaderLevelCount - this._getColumnHeaderTreeExpandedMaxLevelCount();\n for (let i = 0; i < startRow; i++) {\n this._columnHeaderCellFullPathIds.unshift([]);\n }\n }\n //#endregion\n this._addHeaders(\n this._columnHeaderCellFullPathIds,\n startRow,\n this.columnDimensionTree.tree.children,\n [],\n this.columnHeaderObjs\n // this.columnDimensionTree.totalLevel,\n // this.indicatorKeys\n );\n }\n }\n // if (typeof this.showColumnHeader !== 'boolean') {\n if (this.columnHeaderTitle) {\n this.sharedVar.seqId = Math.max(this.sharedVar.seqId, this._headerObjects.length);\n const id = ++this.sharedVar.seqId;\n const firstRowIds = Array(this.colCount - this.rowHeaderLevelCount - this.rightFrozenColCount).fill(id);\n this._columnHeaderCellFullPathIds.unshift(firstRowIds);\n const cell: HeaderData = {\n id,\n title:\n typeof this.columnHeaderTitle.title === 'string'\n ? this.columnHeaderTitle.title\n : (this.columnsDefine.reduce((title: string, value) => {\n if (typeof value === 'string') {\n return title;\n }\n return title + (title ? `/${value.title}` : `${value.title}`);\n }, '') as string),\n field: undefined,\n headerType: this.columnHeaderTitle?.headerType ?? 'text',\n style: this.columnHeaderTitle?.headerStyle,\n define: <any>{\n id,\n disableHeaderHover: !!this.columnHeaderTitle?.disableHeaderHover,\n disableHeaderSelect: !!this.columnHeaderTitle?.disableHeaderSelect\n }\n };\n this.columnHeaderObjs.push(cell);\n this._headerObjects[id] = cell;\n }\n }\n _generateRowHeaderIds() {\n if (this.rowDimensionTree.tree.children?.length >= 1) {\n if (this.rowHierarchyType === 'tree') {\n this._addHeadersForTreeMode(\n this._rowHeaderCellFullPathIds_FULL,\n 0,\n this.rowDimensionTree.tree.children,\n [],\n this.rowDimensionTree.totalLevel,\n true,\n this.rowsDefine,\n this.rowHeaderObjs\n );\n } else if (this.rowHierarchyType === 'grid-tree') {\n const startRow = 0;\n this._addHeadersForGridTreeMode(\n this._rowHeaderCellFullPathIds_FULL,\n startRow,\n this.rowDimensionTree.tree.children,\n [],\n this.rowDimensionTree.totalLevel,\n this._getRowHeaderTreeExpandedMaxLevelCount(),\n true,\n this.rowsDefine,\n this.rowHeaderObjs,\n true\n // this.columnDimensionTree.totalLevel,\n // this.indicatorKeys\n );\n } else {\n //#region 处理需求 当没有数据时仍然显示角头维度名称\n let startRow = 0;\n if (\n this.dataset &&\n !this._table.isPivotChart() &&\n (this.dataset.records?.length ?? 0) === 0 &&\n !this.dataset.customColTree &&\n !this.dataset.customRowTree &&\n !this.indicatorsAsCol &&\n this._getRowHeaderTreeExpandedMaxLevelCount() < this.rowHeaderLevelCount\n ) {\n startRow = this.rowHeaderLevelCount - this._getRowHeaderTreeExpandedMaxLevelCount();\n for (let i = 0; i < startRow; i++) {\n this._rowHeaderCellFullPathIds_FULL.unshift([]);\n }\n }\n //#endregion\n this._addHeaders(\n this._rowHeaderCellFullPathIds_FULL,\n startRow,\n this.rowDimensionTree.tree.children,\n [],\n this.rowHeaderObjs\n // this.columnDimensionTree.totalLevel,\n // this.indicatorKeys\n );\n }\n }\n // if (typeof this.showRowHeader !== 'boolean') {\n if (this.rowHeaderTitle) {\n this.sharedVar.seqId = Math.max(this.sharedVar.seqId, this._headerObjects.length);\n const id = ++this.sharedVar.seqId;\n const firstColIds = Array(this._rowHeaderCellFullPathIds_FULL[0]?.length ?? this.rowDimensionTree.tree.size).fill(\n id\n );\n this._rowHeaderCellFullPathIds_FULL.unshift(firstColIds);\n const cell: HeaderData = {\n id,\n title:\n typeof this.rowHeaderTitle.title === 'string'\n ? this.rowHeaderTitle.title\n : (this.rowsDefine.reduce((title: string, value) => {\n if (typeof value === 'string') {\n return title;\n }\n return title + (title ? `/${value.title}` : `${value.title}`);\n }, '') as string),\n field: undefined,\n headerType: this.rowHeaderTitle?.headerType ?? 'text',\n style: this.rowHeaderTitle?.headerStyle,\n define: <any>{\n id,\n disableHeaderHover: !!this.rowHeaderTitle?.disableHeaderHover,\n disableHeaderSelect: !!this.rowHeaderTitle?.disableHeaderSelect\n }\n };\n this.rowHeaderObjs.push(cell);\n this._headerObjects[id] = cell;\n }\n }\n _getRowHeaderTreeExpandedMaxLevelCount() {\n if (this.rowHierarchyType === 'tree') {\n return 1;\n } else if (this.rowHierarchyType === 'grid-tree') {\n return this.cornerSetting.titleOnDimension === 'row'\n ? this.rowDimensionTree.totalLevel\n : this.indicatorsAsCol\n ? this.rowDimensionTree.expandedMaxLevel\n : this.rowDimensionTree.expandedMaxLevel + 1;\n }\n return this.rowDimensionTree.totalLevel;\n }\n _getColumnHeaderTreeExpandedMaxLevelCount() {\n if (this.columnHierarchyType === 'grid-tree') {\n return this.cornerSetting.titleOnDimension === 'column'\n ? this.columnDimensionTree.totalLevel\n : this.indicatorsAsCol === false\n ? this.columnDimensionTree.expandedMaxLevel\n : this.columnDimensionTree.expandedMaxLevel + 1;\n }\n return this.columnDimensionTree.totalLevel;\n }\n /** 行表头和列表头的组织都是走这个函数,这个函数的行列命名是按照列头的逻辑来写的,所以组织行头的时候需要思维做下转换 */\n _addHeaders(\n _headerCellIds: number[][],\n row: number,\n header: ITreeLayoutHeadNode[],\n roots: number[],\n results: HeaderData[]\n // totalLevel: number,\n // indicatorKeys: string[]\n ) {\n const _this = this;\n function _newRow(row: number): number[] {\n const newRow: number[] = (_headerCellIds[row] = []);\n if (_this.colIndex === 0) {\n return newRow;\n }\n const prev = _headerCellIds[row - 1];\n for (let col = 0; col < prev?.length; col++) {\n newRow[col] = prev[col];\n }\n return newRow;\n }\n if (!_headerCellIds[row]) {\n _newRow(row);\n }\n\n for (let i = 0; i < header.length; i++) {\n const hd = header[i];\n dealHeader(\n hd,\n _headerCellIds,\n results,\n roots,\n row,\n this\n // totalLevel, indicatorKeys\n );\n }\n }\n /** 行表头和列表头的组织都是走这个函数,这个函数的行列命名是按照列头的逻辑来写的,所以组织行头的时候需要思维做下转换 */\n _addHeadersForTreeMode(\n _headerCellIds: number[][],\n row: number,\n header: ITreeLayoutHeadNode[],\n roots: number[],\n totalLevel: number,\n show: boolean,\n dimensions: (IDimension | string)[],\n results: HeaderData[]\n ) {\n const _this = this;\n function _newRow(row: number): number[] {\n const newRow: number[] = (_headerCellIds[row] = []);\n if (_this.colIndex === 0) {\n return newRow;\n }\n const prev = _headerCellIds[row - 1];\n for (let col = 0; col < prev?.length; col++) {\n newRow[col] = prev[col];\n }\n return newRow;\n }\n if (!_headerCellIds[row]) {\n _newRow(row);\n }\n\n for (let i = 0; i < header.length; i++) {\n const hd = header[i];\n dealHeaderForTreeMode(hd, _headerCellIds, results, roots, row, totalLevel, show, dimensions, this);\n }\n }\n _addHeadersForGridTreeMode(\n _headerCellIds: number[][],\n row: number,\n header: ITreeLayoutHeadNode[],\n roots: number[],\n totalLevel: number,\n expandedMaxLevel: number,\n show: boolean,\n dimensions: (IDimension | string)[],\n results: HeaderData[],\n isRowTree: boolean\n ) {\n const _this = this;\n function _newRow(row: number): number[] {\n const newRow: number[] = (_headerCellIds[row] = []);\n if (_this.colIndex === 0) {\n return newRow;\n }\n const prev = _headerCellIds[row - 1];\n for (let col = 0; col < prev?.length; col++) {\n newRow[col] = prev[col];\n }\n return newRow;\n }\n if (!_headerCellIds[row]) {\n _newRow(row);\n }\n\n for (let i = 0; i < header.length; i++) {\n const hd = header[i];\n dealHeaderForGridTreeMode(\n hd,\n _headerCellIds,\n results,\n roots,\n row,\n totalLevel,\n expandedMaxLevel,\n show,\n dimensions,\n isRowTree,\n this.indicatorsAsCol,\n this\n );\n }\n }\n private _addCornerHeaders(\n colDimensionKeys: string[] | null,\n rowDimensionKeys: string[] | null,\n dimensions: (string | IDimension)[]\n ) {\n this._cornerHeaderCellFullPathIds = [];\n const results: HeaderData[] = [];\n const colLevelCount =\n this.columnHierarchyType === 'grid-tree'\n ? this._getColumnHeaderTreeExpandedMaxLevelCount() || this.columnHeaderLevelCount\n : this.columnHeaderLevelCount;\n const rowLevelCount =\n this.rowHierarchyType === 'grid-tree'\n ? this._getRowHeaderTreeExpandedMaxLevelCount() || this.rowHeaderLevelCount\n : this.rowHeaderLevelCount;\n if (colLevelCount === 0 || rowLevelCount === 0) {\n return results;\n }\n if (this.cornerSetting.titleOnDimension === 'all') {\n if (this.indicatorsAsCol) {\n if (colDimensionKeys) {\n for (let i = 0; i < colLevelCount; i++) {\n const dimensionKey = colDimensionKeys[i];\n const id = ++this.sharedVar.seqId;\n const dimensionInfo: IDimension = dimensions.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === dimensionKey\n ) as IDimension;\n const cell: HeaderData = {\n id,\n title:\n dimensionKey === this.indicatorDimensionKey\n ? this.indicatorTitle\n : dimensionInfo\n ? dimensionInfo.title\n : dimensionKey === 'axis'\n ? ''\n : (dimensionKey as string),\n field: dimensionKey, //'维度名称',\n style: this.cornerSetting.headerStyle,\n headerType: this.cornerSetting.headerType ?? 'text',\n showSort: dimensionInfo?.showSortInCorner,\n sort: dimensionInfo?.sort,\n define: <any>{\n showSort: dimensionInfo?.showSortInCorner,\n sort: dimensionInfo?.sort,\n dimensionKey: dimensionKey, // '维度名称',\n id,\n value: dimensionKey,\n headerEditor: this.cornerSetting.headerEditor,\n disableHeaderHover: !!this.cornerSetting.disableHeaderHover,\n disableHeaderSelect: !!this.cornerSetting.disableHeaderSelect\n },\n dropDownMenu: dimensionInfo?.cornerDropDownMenu,\n headerIcon: dimensionInfo?.cornerHeaderIcon,\n pivotInfo: {\n value: dimensionInfo?.title ?? '',\n dimensionKey,\n isPivotCorner: true\n // customInfo: dimensionInfo?.customInfo\n },\n description: dimensionInfo?.cornerDescription\n };\n results[id] = cell;\n this._headerObjects[id] = cell;\n\n if (!this._cornerHeaderCellFullPathIds[i]) {\n this._cornerHeaderCellFullPathIds[i] = [];\n }\n for (let r = 0; r < rowLevelCount; r++) {\n this._cornerHeaderCellFullPathIds[i][r] = id;\n }\n }\n }\n if (rowDimensionKeys) {\n for (let i = 0; i < rowLevelCount; i++) {\n const dimensionKey = rowDimensionKeys[i];\n const id = ++this.sharedVar.seqId;\n const dimensionInfo: IDimension = dimensions.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === dimensionKey\n ) as IDimension;\n const cell: HeaderData = {\n id,\n title:\n dimensionKey === this.indicatorDimensionKey\n ? this.indicatorTitle\n : dimensionInfo\n ? dimensionInfo.title\n : dimensionKey === 'axis'\n ? ''\n : (dimensionKey as string),\n field: dimensionKey, //'维度名称',\n style: this.cornerSetting.headerStyle,\n headerType: this.cornerSetting.headerType ?? 'text',\n showSort: dimensionInfo?.showSortInCorner,\n sort: dimensionInfo?.sort,\n define: <any>{\n showSort: dimensionInfo?.showSortInCorner,\n sort: dimensionInfo?.sort,\n dimensionKey: dimensionKey, // '维度名称',\n id,\n value: dimensionKey,\n headerEditor: this.cornerSetting.headerEditor,\n disableHeaderHover: !!this.cornerSetting.disableHeaderHover,\n disableHeaderSelect: !!this.cornerSetting.disableHeaderSelect\n },\n dropDownMenu: dimensionInfo?.cornerDropDownMenu,\n headerIcon: dimensionInfo?.cornerHeaderIcon,\n pivotInfo: {\n value: dimensionInfo?.title ?? '',\n dimensionKey,\n isPivotCorner: true\n // customInfo: dimensionInfo?.customInfo\n },\n description: dimensionInfo?.cornerDescription\n };\n results[id] = cell;\n this._headerObjects[id] = cell;\n if (!this._cornerHeaderCellFullPathIds[this._cornerHeaderCellFullPathIds.length - 1]) {\n this._cornerHeaderCellFullPathIds[this._cornerHeaderCellFullPathIds.length - 1] = [];\n }\n this._cornerHeaderCellFullPathIds[this._cornerHeaderCellFullPathIds.length - 1][i] = id;\n }\n }\n } else {\n if (rowDimensionKeys) {\n for (let i = 0; i < rowLevelCount; i++) {\n const dimensionKey = rowDimensionKeys[i];\n const id = ++this.sharedVar.seqId;\n const dimensionInfo: IDimension = dimensions.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === dimensionKey\n ) as IDimension;\n const cell: HeaderData = {\n id,\n title:\n dimensionKey === this.indicatorDimensionKey\n ? this.indicatorTitle\n : dimensionInfo\n ? dimensionInfo.title\n : dimensionKey === 'axis'\n ? ''\n : (dimensionKey as string),\n field: dimensionKey, //'维度名称',\n style: this.cornerSetting.headerStyle,\n headerType: this.cornerSetting.headerType ?? 'text',\n showSort: dimensionInfo?.showSortInCorner,\n sort: dimensionInfo?.sort,\n define: <any>{\n showSort: dimensionInfo?.showSortInCorner,\n sort: dimensionInfo?.sort,\n dimensionKey: dimensionKey, // '维度名称',\n id,\n value: dimensionKey,\n headerEditor: this.cornerSetting.headerEditor,\n disableHeaderHover: !!this.cornerSetting.disableHeaderHover,\n disableHeaderSelect: !!this.cornerSetting.disableHeaderSelect\n },\n dropDownMenu: dimensionInfo?.cornerDropDownMenu,\n headerIcon: dimensionInfo?.cornerHeaderIcon,\n pivotInfo: {\n value: dimensionInfo?.title ?? '',\n dimensionKey,\n isPivotCorner: true\n // customInfo: dimensionInfo?.customInfo\n },\n description: dimensionInfo?.cornerDescription\n };\n results[id] = cell;\n this._headerObjects[id] = cell;\n\n for (let r = 0; r < colLevelCount; r++) {\n if (!this._cornerHeaderCellFullPathIds[r]) {\n this._cornerHeaderCellFullPathIds[r] = [];\n }\n this._cornerHeaderCellFullPathIds[r][i] = id;\n }\n }\n }\n if (colDimensionKeys) {\n for (let c = 0; c < colLevelCount; c++) {\n const dimensionKey = colDimensionKeys[c];\n const id = ++this.sharedVar.seqId;\n const dimensionInfo: IDimension = dimensions.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === dimensionKey\n ) as IDimension;\n const cell: HeaderData = {\n id,\n title:\n dimensionKey === this.indicatorDimensionKey\n ? this.indicatorTitle\n : dimensionInfo\n ? dimensionInfo.title\n : dimensionKey === 'axis'\n ? ''\n : (dimensionKey as string),\n field: dimensionKey, //'维度名称',\n style: this.cornerSetting.headerStyle,\n headerType: this.cornerSetting.headerType ?? 'text',\n showSort: dimensionInfo?.showSortInCorner,\n sort: dimensionInfo?.sort,\n define: <any>{\n showSort: dimensionInfo?.showSortInCorner,\n sort: dimensionInfo?.sort,\n dimensionKey: dimensionKey, // '维度名称',\n id,\n value: dimensionKey,\n headerEditor: this.cornerSetting.headerEditor,\n disableHeaderHover: !!this.cornerSetting.disableHeaderHover,\n disableHeaderSelect: !!this.cornerSetting.disableHeaderSelect\n },\n dropDownMenu: dimensionInfo?.cornerDropDownMenu,\n headerIcon: dimensionInfo?.cornerHeaderIcon,\n pivotInfo: {\n value: dimensionInfo?.title ?? '',\n dimensionKey,\n isPivotCorner: true\n // customInfo: dimensionInfo?.customInfo\n },\n description: dimensionInfo?.cornerDescription\n };\n results[id] = cell;\n this._headerObjects[id] = cell;\n // if (!this._cornerHeaderCellFullPathIds[indicatorAtIndex]) {\n // this._cornerHeaderCellFullPathIds[indicatorAtIndex] = [];\n // }\n this._cornerHeaderCellFullPathIds[c][this._cornerHeaderCellFullPathIds[c].length - 1] = id;\n }\n }\n }\n } else if (this.cornerSetting.titleOnDimension === 'row' || this.cornerSetting.titleOnDimension === 'column') {\n const dimensionKeys = this.cornerSetting?.titleOnDimension === 'row' ? rowDimensionKeys : colDimensionKeys;\n if (dimensionKeys) {\n dimensionKeys.forEach((dimensionKey: string, key: number) => {\n const id = ++this.sharedVar.seqId;\n // const dimensionInfo: IDimension =\n // (this.rowsDefine?.find(dimension =>\n // typeof dimension === 'string' ? false : dimension.dimensionKey === dimensionKey\n // ) as IDimension) ??\n // (this.columnsDefine?.find(dimension =>\n // typeof dimension === 'string' ? false : dimension.dimensionKey === dimensionKey\n // ) as IDimension);\n const dimensionInfo: IDimension = dimensions.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === dimensionKey\n ) as IDimension;\n const cell: HeaderData = {\n id,\n title:\n dimensionKey === this.indicatorDimensionKey\n ? this.indicatorTitle\n : dimensionInfo\n ? dimensionInfo.title\n : dimensionKey === 'axis'\n ? ''\n : (dimensionKey as string),\n field: dimensionKey, //'维度名称',\n style: this.cornerSetting.headerStyle,\n headerType: this.cornerSetting.headerType ?? 'text',\n showSort: dimensionInfo?.showSortInCorner,\n sort: dimensionInfo?.sort,\n define: <any>{\n showSort: dimensionInfo?.showSortInCorner,\n sort: dimensionInfo?.sort,\n dimensionKey: dimensionKey, // '维度名称',\n id,\n value: dimensionKey,\n headerCustomRender: this.cornerSetting.customRender,\n headerCustomLayout: this.cornerSetting.customLayout,\n headerEditor: this.cornerSetting.headerEditor,\n disableHeaderHover: !!this.cornerSetting.disableHeaderHover,\n disableHeaderSelect: !!this.cornerSetting.disableHeaderSelect\n },\n dropDownMenu: dimensionInfo?.cornerDropDownMenu,\n headerIcon: dimensionInfo?.cornerHeaderIcon,\n pivotInfo: {\n value: dimensionInfo?.title ?? '',\n dimensionKey,\n isPivotCorner: true\n // customInfo: dimensionInfo?.customInfo\n },\n description: dimensionInfo?.cornerDescription\n };\n results[id] = cell;\n this._headerObjects[id] = cell;\n if (this.cornerSetting.titleOnDimension === 'column') {\n if (!this._cornerHeaderCellFullPathIds[key]) {\n this._cornerHeaderCellFullPathIds[key] = [];\n }\n for (let r = 0; r < this.rowHeaderLevelCount; r++) {\n this._cornerHeaderCellFullPathIds[key][r] = id;\n }\n } else if (this.cornerSetting.titleOnDimension === 'row') {\n for (let r = 0; r < this.columnHeaderLevelCount; r++) {\n if (!this._cornerHeaderCellFullPathIds[r]) {\n this._cornerHeaderCellFullPathIds[r] = [];\n }\n this._cornerHeaderCellFullPathIds[r][key] = id;\n }\n }\n });\n }\n } else {\n const id = ++this.sharedVar.seqId;\n const cell: HeaderData = {\n id,\n title: '',\n field: '维度名称',\n style: this.cornerSetting.headerStyle,\n headerType: this.cornerSetting.headerType ?? 'text',\n define: <any>{\n dimensionKey: '维度名称',\n id,\n headerCustomRender: this.cornerSetting.customRender,\n headerCustomLayout: this.cornerSetting.customLayout,\n disableHeaderHover: !!this.cornerSetting.disableHeaderHover,\n disableHeaderSelect: !!this.cornerSetting.disableHeaderSelect\n }\n };\n results[id] = cell;\n this._headerObjects[id] = cell;\n for (let r = 0; r < this.columnHeaderLevelCount; r++) {\n for (let j = 0; j < this.rowHeaderLevelCount; j++) {\n if (!this._cornerHeaderCellFullPathIds[r]) {\n this._cornerHeaderCellFullPathIds[r] = [];\n }\n this._cornerHeaderCellFullPathIds[r][j] = id;\n }\n }\n }\n\n return results;\n }\n private generateExtensionRowTree() {\n this.extensionRows.forEach((extensionRow, indexP) => {\n const old_rowHeaderCellIds = this._rowHeaderCellFullPathIds_FULL;\n this._rowHeaderCellFullPathIds_FULL = [];\n old_rowHeaderCellIds.forEach((row_ids: number[], index) => {\n const key = row_ids[row_ids.length - 1];\n this.colIndex = 0;\n let tree;\n if (typeof extensionRow.rowTree === 'function') {\n const fullCellIds = this.findFullCellIds(row_ids);\n tree = (extensionRow.rowTree as Function)(\n fullCellIds.map((id: number) => {\n return { dimensionKey: this._headerObjects[id].field, value: this._headerObjects[id].title };\n })\n );\n } else {\n // 需要clone一份 否则跟DimensionTree有引用关系\n tree = cloneDeep(extensionRow.rowTree);\n }\n let rowExtensionDimensionTree;\n if (this._rowHeaderExtensionTree[key]) {\n this._rowHeaderExtensionTree[key].reset(this._rowHeaderExtensionTree[key].tree.children);\n rowExtensionDimensionTree = this._rowHeaderExtensionTree[key];\n } else {\n rowExtensionDimensionTree = new DimensionTree(tree ?? [], this.sharedVar, this.rowHierarchyType, undefined);\n this._rowHeaderExtensionTree[key] = rowExtensionDimensionTree;\n }\n\n const extensionRowTreeHeaderIds: number[][] = [];\n this._addHeadersForTreeMode(\n extensionRowTreeHeaderIds,\n 0,\n rowExtensionDimensionTree.tree.children,\n [],\n rowExtensionDimensionTree.totalLevel,\n true,\n extensionRow.rows,\n this.rowHeaderObjs\n );\n for (let i = 0; i < extensionRowTreeHeaderIds[0].length; i++) {\n this._rowHeaderCellFullPathIds_FULL.push(row_ids.concat(extensionRowTreeHeaderIds[0][i]));\n }\n });\n });\n }\n private setColumnWidths() {\n const returnWidths: WidthData[] = new Array(this.colCount).fill(undefined);\n if (this.leftRowSeriesNumberColumnCount) {\n returnWidths[0] = this.leftRowSeriesNumberColumn[0];\n }\n if (this.showHeader && this.showRowHeader) {\n if (this.rowHeaderTitle) {\n returnWidths[0 + this.leftRowSeriesNumberColumnCount] = {};\n }\n if (this.rowHierarchyType === 'tree') {\n const mainDimensionFirstRowKey = this.rowDimensionKeys[0];\n if (mainDimensionFirstRowKey) {\n const dimension = this.rowsDefine?.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === mainDimensionFirstRowKey\n ) as IRowDimension;\n dimension &&\n (returnWidths[0 + (this.rowHeaderTitle ? 1 : 0) + this.leftRowSeriesNumberColumnCount] = {\n width: dimension.width,\n minWidth: dimension.minWidth,\n maxWidth: dimension.maxWidth\n });\n }\n this._extensionRowDimensionKeys?.forEach((extensionRowDimensionKeys, index) => {\n const curDimensionFirstRowKey = extensionRowDimensionKeys[0];\n if (curDimensionFirstRowKey) {\n const dimension = this.extensionRows[index].rows?.find((dimension: string | IRowDimension) =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === curDimensionFirstRowKey\n ) as IRowDimension;\n dimension &&\n (returnWidths[index + 1 + (this.rowHeaderTitle ? 1 : 0) + this.leftRowSeriesNumberColumnCount] = {\n width: dimension.width,\n minWidth: dimension.minWidth,\n maxWidth: dimension.maxWidth\n });\n }\n });\n // const _headerCellIds = this._rowHeaderCellIds[0];\n // _headerCellIds.forEach((cellId, index) => {\n // const headerDefine = this._headerObjectMap[cellId];\n // headerDefine &&\n // (returnWidths[index + (this.rowHeaderTitle ? 1 : 0)] = {\n // width: headerDefine.width,\n // minWidth: headerDefine.minWidth,\n // maxWidth: headerDefine.maxWidth\n // });\n // });\n } else {\n const rowDimensionKeys =\n this.rowDimensionTree.totalLevel > 0\n ? this.rowDimensionTree.dimensionKeysIncludeVirtual.valueArr()\n : this.rowsDefine.map(dimension => {\n if (typeof dimension === 'string') {\n return dimension;\n }\n return dimension.dimensionKey;\n });\n rowDimensionKeys.forEach((objKey, index) => {\n const dimension = this.rowsDefine?.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === objKey\n ) as IRowDimension;\n dimension &&\n (returnWidths[index + (this.rowHeaderTitle ? 1 : 0) + this.leftRowSeriesNumberColumnCount] = {\n width: dimension.width,\n minWidth: dimension.minWidth,\n maxWidth: dimension.maxWidth\n });\n });\n }\n }\n if (this.indicatorsAsCol) {\n for (let i = this.rowHeaderLevelCount + this.leftRowSeriesNumberColumnCount; i < this.colCount; i++) {\n const cellDefine = this.getBody(i, this.columnHeaderLevelCount);\n returnWidths[i] = {\n width: cellDefine?.width,\n minWidth: cellDefine?.minWidth,\n maxWidth: cellDefine?.maxWidth\n };\n }\n } else {\n let width: string | number | undefined = 0;\n let maxWidth: string | number | undefined;\n let minWidth: string | number | undefined;\n let isAuto;\n this._indicators?.forEach((obj, index) => {\n if (typeof obj.width === 'number') {\n width = Math.max(obj.width, <number>width);\n } else if (obj.width === 'auto') {\n isAuto = true;\n }\n if (typeof obj.minWidth === 'number') {\n minWidth = Math.max(obj.minWidth, <number>minWidth ?? 0);\n }\n if (typeof obj.maxWidth === 'number') {\n maxWidth = Math.min(obj.maxWidth, <number>maxWidth ?? Number.MAX_VALUE);\n }\n });\n width = width > 0 ? width : isAuto ? 'auto' : undefined;\n returnWidths.fill(\n { width, minWidth, maxWidth },\n this.rowHeaderLevelCount + this.leftRowSeriesNumberColumnCount,\n this.colCount - this.rightFrozenColCount\n );\n }\n this._columnWidths = returnWidths;\n }\n\n get columnWidths(): WidthData[] {\n return this._columnWidths;\n }\n getColumnWidthDefined(col: number): WidthData {\n return this._columnWidths[col];\n }\n get showHeader(): boolean {\n return this._showHeader;\n }\n set showHeader(_showHeader: boolean) {\n this._showHeader = _showHeader;\n }\n get showColumnHeader(): boolean {\n return this._showColumnHeader;\n }\n set showColumnHeader(_showColumnHeader: boolean) {\n this._showColumnHeader = _showColumnHeader;\n }\n get showRowHeader(): boolean {\n return this._showRowHeader;\n }\n set showRowHeader(_showRowHeader: boolean) {\n this._showRowHeader = _showRowHeader;\n }\n get columnHeaderTitle(): ITitleDefine {\n return this._columnHeaderTitle;\n }\n set columnHeaderTitle(_columnHeaderTitle: ITitleDefine) {\n this._columnHeaderTitle = _columnHeaderTitle;\n }\n get rowHeaderTitle(): ITitleDefine {\n return this._rowHeaderTitle;\n }\n set rowHeaderTitle(_rowHeaderTitle: ITitleDefine) {\n this._rowHeaderTitle = _rowHeaderTitle;\n }\n getHeaderFieldKey(col: number, row: number): undefined {\n return undefined;\n }\n getCellLocation(col: number, row: number): CellLocation {\n if (this.isCornerHeader(col, row)) {\n return 'cornerHeader';\n } else if (this.isColumnHeader(col, row)) {\n return 'columnHeader';\n } else if (this.isRowHeader(col, row)) {\n return 'rowHeader';\n }\n return 'body';\n }\n // isHeaderNode(col: number, row: number): boolean {\n // const header = this.getHeader(col, row);\n // if (\n // header &&\n // header.define &&\n // (!(<any>header.define).columns || (<any>header.define).hideColumnsSubHeader)\n // )\n // return true;\n // return false;\n // }\n\n isHeader(col: number, row: number): boolean {\n if (\n col >= this.leftRowSeriesNumberColumnCount &&\n col < this.rowHeaderLevelCount + this.leftRowSeriesNumberColumnCount\n ) {\n return true;\n }\n if (row >= 0 && row < this.columnHeaderLevelCount) {\n return true;\n }\n if (col >= this.colCount - this.rightHeaderColCount) {\n return true;\n }\n if (row >= this.rowCount - this.bottomHeaderRowCount) {\n return true;\n }\n return false;\n }\n isCornerHeader(col: number, row: number): boolean {\n if (\n col >= 0 &&\n col < this.rowHeaderLevelCount + this.leftRowSeriesNumberColumnCount &&\n row >= 0 &&\n row < this.columnHeaderLevelCount\n ) {\n return true;\n }\n return false;\n }\n isColumnHeader(col: number, row: number): boolean {\n if (\n col >= this.rowHeaderLevelCount + this.leftRowSeriesNumberColumnCount &&\n row >= 0 &&\n row < this.columnHeaderLevelCount\n ) {\n return true;\n }\n return false;\n }\n isRowHeader(col: number, row: number): boolean {\n if (\n col >= this.leftRowSeriesNumberColumnCount &&\n col < this.rowHeaderLevelCount + this.leftRowSeriesNumberColumnCount &&\n row >= this.columnHeaderLevelCount\n ) {\n return true;\n }\n return false;\n }\n\n isFrozen(col: number, row: number): boolean {\n return (\n this.isFrozenColumn(col) ||\n this.isRightFrozenColumn(col) ||\n this.isBottomFrozenRow(row) ||\n this.isFrozenRow(row) ||\n this.isSeriesNumberInBody(col, row) ||\n this.isSeriesNumberInHeader(col, row)\n );\n }\n /**\n * 是否属于冻结左侧列\n * @param col\n * @param row 不传的话 只需要判断col,传入row的话非冻结角头部分的才返回true\n * @returns\n */\n isFrozenColumn(col: number, row?: number): boolean {\n if (isValid(row)) {\n if (\n col >= 0 &&\n col < this.frozenColCount &&\n row >= this.frozenRowCount &&\n row < this.rowCount - this.bottomFrozenRowCount\n ) {\n return true;\n }\n } else {\n if (this.frozenColCount > 0 && col >= 0 && col < this.frozenColCount) {\n return true;\n }\n }\n return false;\n }\n /**\n * 是否属于右侧冻结列\n * @param col\n * @param row 不传的话 只需要判断col,传入row的话非冻结角头部分的才返回true\n * @returns\n */\n isRightFrozenColumn(col: number, row?: number): boolean {\n if (isValid(row)) {\n if (\n col >= this.colCount - this.rightFrozenColCount &&\n row >= this.frozenRowCount &&\n row < this.rowCount - this.bottomFrozenRowCount\n ) {\n return true;\n }\n } else {\n if (this.rightFrozenColCount > 0 && col >= this.colCount - this.rightFrozenColCount) {\n return true;\n }\n }\n return false;\n }\n /**\n * 是否属于冻结顶部行\n * @param col 只传入col一个值的话 会被当做row\n * @param row 不传的话只需要判断col(其实会当做row);传入两个值的话非冻结角头部分的才返回true\n * @returns\n */\n isFrozenRow(col: number, row?: number): boolean {\n if (isValid(row)) {\n if (\n row >= 0 &&\n row < this.frozenRowCount &&\n col >= this.frozenColCount &&\n col < this.colCount - this.rightFrozenColCount\n ) {\n return true;\n }\n } else {\n row = col;\n if (this.frozenRowCount > 0 && row >= 0 && row < this.frozenRowCount) {\n return true;\n }\n }\n return false;\n }\n /**\n * 是否属于冻结底部行\n * @param col 只传入col一个值的话 会被当做row\n * @param row 不传的话只需要判断col(其实会当做row);传入两个值的话非冻结角头部分的才返回true\n * @returns\n */\n isBottomFrozenRow(col: number, row?: number): boolean {\n if (isValid(row)) {\n if (\n row >= this.rowCount - this.bottomFrozenRowCount &&\n col >= this.frozenColCount &&\n col < this.colCount - this.rightFrozenColCount\n ) {\n return true;\n }\n } else {\n row = col;\n if (this.bottomFrozenRowCount > 0 && row >= this.rowCount - this.bottomFrozenRowCount) {\n return true;\n }\n }\n return false;\n }\n isLeftTopCorner(col: number, row: number): boolean {\n if (col >= 0 && col < this.frozenColCount && row >= 0 && row < this.frozenRowCount) {\n return true;\n }\n return false;\n }\n isLeftBottomCorner(col: number, row: number): boolean {\n if (col >= 0 && col < this.frozenColCount && row >= this.rowCount - this.bottomFrozenRowCount) {\n return true;\n }\n return false;\n }\n isRightTopCorner(col: number, row: number): boolean {\n if (col >= this.colCount - this.rightFrozenColCount && row >= 0 && row < this.frozenRowCount) {\n return true;\n }\n return false;\n }\n isRightBottomCorner(col: number, row: number): boolean {\n if (col >= this.colCount - this.rightFrozenColCount && row >= this.rowCount - this.bottomFrozenRowCount) {\n return true;\n }\n return false;\n }\n\n getColumnHeaderRange(): CellRange {\n return {\n start: { col: this.rowHeaderLevelCount, row: 0 },\n end: { col: this.colCount - 1, row: this.columnHeaderLevelCount - 1 }\n };\n }\n getRowHeaderRange(): CellRange {\n return {\n start: { col: 0, row: this.columnHeaderLevelCount },\n end: { col: this.rowHeaderLevelCount - 1, row: this.rowCount - 1 }\n };\n }\n getCornerHeaderRange(): CellRange {\n return {\n start: { col: 0, row: 0 },\n end: { col: this.rowHeaderLevelCount - 1, row: this.columnHeaderLevelCount - 1 }\n };\n }\n getBodyRange(): CellRange {\n return {\n start: { col: this.rowHeaderLevelCount, row: this.columnHeaderLevelCount },\n end: { col: this.colCount - 1, row: this.rowCount - 1 }\n };\n }\n resetCellIds() {\n // for (let row = 0; row < this.columnHeaderLevelCount; row++) {}\n }\n get frozenColCount(): number {\n if (this._table.internalProps.frozenColCount) {\n if (this.colCount > this._table.internalProps.frozenColCount) {\n return this._table.internalProps.frozenColCount;\n }\n return this.colCount;\n }\n return 0;\n }\n get frozenRowCount(): number {\n if (this._table.internalProps.frozenRowCount) {\n if (this.rowCount >= this._table.internalProps.frozenRowCount) {\n return this._table.internalProps.frozenRowCount;\n }\n return this.rowCount;\n }\n return 0;\n }\n get headerLevelCount(): number {\n return this.columnHeaderLevelCount;\n }\n resetColumnHeaderLevelCount() {\n if (this.showHeader && this.showColumnHeader) {\n if (\n this._table.isPivotChart() &&\n this.indicatorsAsCol &&\n !this.dataset?.colKeys?.length &&\n this.columnDimensionTree?.tree?.level === 0 &&\n !this.hasTopIndicatorAxis\n ) {\n this.columnHeaderLevelCount = 0;\n return;\n }\n // let count = this.indicatorsAsCol\n // ? this.hideIndicatorName //设置隐藏表头,且表头最下面一级就是指标维度 则-1\n // ? this.colDimensionKeys[this.colDimensionKeys.length - 1] === this.indicatorDimensionKey\n // ? this.columnDimensionTree.totalLevel - 1\n // : this.columnDimensionTree.totalLevel\n // : this.columnDimensionTree.totalLevel\n // : this.columnDimensionTree.totalLevel;\n let count = this._getColumnHeaderTreeExpandedMaxLevelCount();\n if (\n this.indicatorsAsCol &&\n this.hideIndicatorName &&\n this.colDimensionKeys[this.colDimensionKeys.length - 1] === this.indicatorDimensionKey\n ) {\n count--;\n }\n\n //#region 处理需求 当没有数据时仍然显示角头维度名称\n if (\n count === 0 &&\n this.dataset &&\n !this.dataset.customColTree?.length //根据情况来加的判断条件 之前是只兼容没有设置两个自定义树的情况 现在对有自定义树的情况也处理出现角头\n // && !this.dataset.customRowTree?.length\n ) {\n if (\n (this.cornerSetting.titleOnDimension === 'row' || this.cornerSetting.titleOnDimension === 'all') &&\n this.cornerSetting.forceShowHeader\n ) {\n count = 1;\n } else if (\n !this._table.isPivotChart() &&\n (this.dataset.records?.length ?? 0) === 0 &&\n (this.cornerSetting.titleOnDimension === 'column' || this.cornerSetting.titleOnDimension === 'all')\n ) {\n count = this.columnsDefine.length ?? 0;\n }\n } else if (\n this.dataset &&\n !this._table.isPivotChart() &&\n (this.dataset.records?.length ?? 0) === 0 &&\n !this.dataset.customColTree // 这里不能改为 !this.dataset.customColTree?.length 否则透视图会出错 透视图case很多rowTree columnTree rows columns都是[]\n // &&\n // !this.dataset.customRowTree\n ) {\n if (this.cornerSetting.titleOnDimension === 'column' || this.cornerSetting.titleOnDimension === 'all') {\n count = this.columnsDefine.length ?? 0;\n if (!this.hideIndicatorName && this.indicatorsAsCol) {\n count++;\n }\n }\n }\n //#endregion\n if (this.columnHeaderTitle) {\n count += 1;\n }\n if (\n this._table.isPivotChart() &&\n this.indicatorsAsCol &&\n !this.hasTopIndicatorAxis &&\n checkHasCartesianChart(this.indicatorsDefine)\n ) {\n count -= 1;\n }\n\n this.columnHeaderLevelCount = count;\n return;\n }\n // this.columnHeaderLevelCount = 0;\n this.columnHeaderLevelCount = !this.indicatorsAsCol ? 0 : this.hideIndicatorName ? 0 : 1;\n return;\n }\n resetRowHeaderLevelCount() {\n if (this.showHeader && this.showRowHeader) {\n if (this.rowHierarchyType === 'tree') {\n const extensionRowCount = this.extensionRows?.length ?? 0;\n if (this.rowHeaderTitle) {\n this.rowHeaderLevelCount = 1 + (this.rowDimensionTree.totalLevel ? 1 : 0) + extensionRowCount;\n return;\n }\n this.rowHeaderLevelCount = (this.rowDimensionTree.totalLevel ? 1 : 0) + extensionRowCount;\n return;\n }\n const rowLevelCount = this._getRowHeaderTreeExpandedMaxLevelCount();\n // const rowLevelCount = this.rowDimensionTree.totalLevel;\n // // let count = this.indicatorsAsCol\n // // ? rowLevelCount\n // // : this.hideIndicatorName //设置隐藏表头,且表头最下面一级就是指标维度 则-1\n // // ? this.rowDimensionKeys[this.rowDimensionKeys.length - 1] === this.indicatorDimensionKey\n // // ? rowLevelCount - 1\n // // : rowLevelCount\n // // : rowLevelCount;\n\n let count = rowLevelCount;\n\n // if (this._table.isPivotChart()&&this.indicatorsAsCol) {\n // count+=1;\n // }\n //#region 处理需求 当没有数据时仍然显示角头维度名称\n if (\n count === 0 &&\n this.dataset &&\n // && !this.dataset.customColTree\n !this.dataset.customRowTree?.length //根据情况来加的判断条件 之前是只兼容没有设置两个自定义树的情况 现在对有自定义树的情况也处理出现角头\n ) {\n if (\n (this.cornerSetting.titleOnDimension === 'column' || this.cornerSetting.titleOnDimension === 'all') &&\n this.cornerSetting.forceShowHeader\n ) {\n count = 1;\n } else if (\n !this._table.isPivotChart() &&\n (this.dataset.records?.length ?? 0) === 0 &&\n (this.cornerSetting.titleOnDimension === 'row' || this.cornerSetting.titleOnDimension === 'all')\n ) {\n count = this.rowsDefine.length ?? 0;\n }\n } else if (\n this.dataset &&\n !this._table.isPivotChart() &&\n (this.dataset.records?.length ?? 0) === 0 &&\n // !this.dataset.customColTree &&\n !this.dataset.customRowTree // 这里不能改为 !this.dataset.customRowTree?.length 否则透视图会出错 透视图case很多rowTree columnTree rows columns都是[]\n ) {\n if (this.cornerSetting.titleOnDimension === 'row' || this.cornerSetting.titleOnDimension === 'all') {\n count = this.rowsDefine.length;\n if (!this.hideIndicatorName && !this.indicatorsAsCol) {\n count++;\n }\n }\n }\n //#endregion\n if (\n !this.indicatorsAsCol &&\n (this.hideIndicatorName ||\n (!this.hasLeftIndicatorAxis &&\n this._table.isPivotChart() &&\n checkHasCartesianChart(this.indicatorsDefine))) &&\n this.rowDimensionKeys[this.rowDimensionKeys.length - 1] === this.indicatorDimensionKey\n ) {\n count = rowLevelCount - 1;\n }\n\n if (this.rowHeaderTitle) {\n count += 1;\n }\n\n this.rowHeaderLevelCount = count;\n return;\n }\n // return 0;\n this.rowHeaderLevelCount = this.indicatorsAsCol ? 0 : this.hideIndicatorName ? 0 : 1;\n return;\n }\n get columnHeaderLevelCount(): number {\n return this._columnHeaderLevelCount;\n }\n set columnHeaderLevelCount(count: number) {\n this._columnHeaderLevelCount = count;\n }\n get rowHeaderLevelCount(): number {\n return this._rowHeaderLevelCount;\n }\n set rowHeaderLevelCount(count: number) {\n this._rowHeaderLevelCount = count;\n }\n get colCount(): number {\n let bodyColCount;\n if (\n this._getColumnHeaderTreeExpandedMaxLevelCount() > 0 ||\n this._table.isPivotChart() ||\n (this.dataset.records as Array<any>)?.length > 0 ||\n (this.dataset.records && !Array.isArray(this.dataset.records))\n ) {\n bodyColCount =\n (this._columnHeaderCellIds[0]?.length ?? this.columnDimensionTree.tree.size) ||\n (this._indicators?.length > 0 ? 1 : 0);\n } else {\n bodyColCount = 0;\n }\n return bodyColCount + this.rowHeaderLevelCount + this.rightHeaderColCount + this.leftRowSeriesNumberColumnCount; // 小心rightFrozenColCount和colCount的循环引用 造成调用栈溢出\n }\n get rowCount(): number {\n return (\n ((this._table.records || this.dataset.records\n ? Array.isArray(this._table.records)\n ? this._table.records.length > 0\n : true\n : false) &&\n this._indicators?.length > 0 && // 前两个判断条件来判断 有展示的body值的情况 需要展示body row\n !this._rowHeaderCellIds?.length // 需要展示body值 但 _rowHeaderCellIds的长度维度为0 无rows 行表头为空\n ? 1 //兼容bugserver: https://bugserver.cn.goofy.app/case?product=VTable&fileid=65364a57173c354c242a7c4f\n : this._rowHeaderCellIds?.length ?? 0) + //兼容 bugserver:https://bugserver.cn.goofy.app/case?product=VTable&fileid=6527ac0695c0cdbd788cf17d\n this.columnHeaderLevelCount +\n this.bottomHeaderRowCount // 小心bottomFrozenRowCount和rowCount的循环引用 造成调用栈溢出\n );\n }\n get bodyRowSpanCount() {\n return this.rowDimensionTree.tree.size;\n }\n get bottomFrozenRowCount(): number {\n //下面是pivot-layout中逻辑\n if (!this._table.isPivotChart()) {\n if (this._table.internalProps.bottomFrozenRowCount) {\n if (this.rowCount - this.headerLevelCount >= this._table.internalProps.bottomFrozenRowCount) {\n return this._table.internalProps.bottomFrozenRowCount;\n }\n return this.rowCount - this.headerLevelCount;\n }\n return 0;\n }\n if (this.indicatorKeys.length >= 1 && checkHasCartesianChart(this.indicatorsDefine)) {\n const axisOption = ((this._table as PivotChart).pivotChartAxes as ITableAxisOption[]).find(axisOption => {\n return axisOption.orient === 'bottom';\n });\n if (axisOption?.visible === false) {\n return 0;\n }\n if (this.indicatorsAsCol) {\n // 指标在列上,指标及其对应坐标轴显示在底部,下侧冻结行数为1\n return 1;\n }\n return 1; // 指标在行上,维度对应坐标轴显示在底部,下侧冻结行数为1\n }\n return 0;\n }\n get rightFrozenColCount(): number {\n //下面是pivot-layout中逻辑\n if (!this._table.isPivotChart()) {\n if (this._table.internalProps.rightFrozenColCount) {\n if (this.colCount - this.rowHeaderLevelCount >= this._table.internalProps.rightFrozenColCount) {\n return this._table.internalProps.rightFrozenColCount;\n }\n return this.colCount - this.rowHeaderLevelCount;\n }\n return 0;\n }\n const axisOption = ((this._table as PivotChart).pivotChartAxes as ITableAxisOption[]).find(axisOption => {\n return axisOption.orient === 'right';\n });\n if (axisOption?.visible === false) {\n return 0;\n }\n\n if (this.indicatorsAsCol) {\n return 0; // 指标在列上,没有图表需要显示右轴\n } else if (this.hasRightIndicatorAxis) {\n // 查找指标,判断是否有双轴情况,如果有,则右侧冻结列数为1\n return 1;\n }\n return 0;\n }\n\n /** 不包括冻结的行 还是不确定应不应该包括*/\n get bodyRowCount(): number | undefined {\n return this.rowCount - this.bottomFrozenRowCount - this.headerLevelCount;\n }\n /** 不包括冻结的列 */\n get bodyColCount(): number | undefined {\n return this.colCount - this.rightFrozenColCount - this.rowHeaderLevelCount;\n }\n get headerObjects(): HeaderData[] {\n return this._headerObjects;\n }\n get columnObjects(): IndicatorData[] {\n return this._indicators;\n }\n getCellId(col: number, row: number): LayoutObjectId {\n if (row >= 0 && col >= 0) {\n if (this.isSeriesNumber(col, row)) {\n return '';\n } else if (this.isCornerHeader(col, row)) {\n return this._cornerHeaderCellIds[row]?.[col - this.leftRowSeriesNumberColumnCount];\n } else if (this.isColumnHeader(col, row)) {\n return this._columnHeaderCellIds[row]?.[col - this.rowHeaderLevelCount - this.leftRowSeriesNumberColumnCount];\n } else if (this.isRowHeader(col, row)) {\n return this._rowHeaderCellIds[row - this.columnHeaderLevelCount]?.[col - this.leftRowSeriesNumberColumnCount];\n } else if (this.isRightFrozenColumn(col, row)) {\n return this._rowHeaderCellIds[row - this.columnHeaderLevelCount]?.[this.rowHeaderLevelCount - 1];\n } else if (this.isBottomFrozenRow(col, row)) {\n return this._columnHeaderCellIds[this.columnHeaderLevelCount - 1]?.[\n col - this.rowHeaderLevelCount - this.leftRowSeriesNumberColumnCount\n ];\n }\n }\n return undefined;\n }\n // getCellIdOnHeader(col: number, row: number): LayoutObjectId {\n // if (row >= 0 && col >= 0) {\n // if (this.isCornerHeader(col, row)) return this._cornerHeaderCellIds[row][col];\n // else if (this.isColumnHeader(col, row))\n // return this._columnHeaderCellIds[row][col - this.rowHeaderLevelCount];\n // else if (this.isRowHeader(col, row))\n // return this._rowHeaderCellIds[row - this.columnHeaderLevelCount]?.[col];\n // return this.getCellIdOnHeader(\n // col >= this.rowHeaderLevelCount ? this.rowHeaderLevelCount - 1 : col,\n // row >= this.columnHeaderLevelCount ? this.columnHeaderLevelCount - 1 : row\n // );\n // }\n // return 0;\n // }\n getHeader(col: number, row: number): HeaderData | SeriesNumberColumnData {\n if (this.isSeriesNumberInHeader(col, row)) {\n return this.getSeriesNumberHeader(col, row);\n }\n const id = this.getCellId(col, row);\n return this._headerObjectMap[id as number] ?? { id: undefined, field: '', headerType: 'text', define: undefined };\n }\n getHeaderField(col: number, row: number) {\n const id = this.getCellId(col, row);\n return this._headerObjectMap[id as number]?.field || this.getBody(col, row)?.field;\n }\n getHeaderCellAdressById(id: number): CellAddress | undefined {\n for (let i = 0; i < this._columnHeaderCellIds.length; i++) {\n const row = this._columnHeaderCellIds[i];\n for (let j = 0; j < row.length; j++) {\n if (row[j] === id) {\n return { col: j + this._table.frozenColCount, row: i };\n }\n }\n }\n for (let i = 0; i < this._rowHeaderCellIds.length; i++) {\n const row = this._rowHeaderCellIds[i];\n for (let j = 0; j < row.length; j++) {\n if (row[j] === id) {\n return { col: j, row: i + this._table.frozenRowCount };\n }\n }\n }\n for (let i = 0; i < this._cornerHeaderCellIds.length; i++) {\n const row = this._cornerHeaderCellIds[i];\n for (let j = 0; j < row.length; j++) {\n if (row[j] === id) {\n return { col: j, row: i };\n }\n }\n }\n return undefined;\n }\n /** 透视表中此函数有问题 应该传入paths */\n getHeaderCellAddressByField(field: string) {\n const hd = this.headerObjects.find((col: any) => col && col.field === field);\n return hd && this.getHeaderCellAdressById(hd.id as number);\n }\n //TODO 这里的indicators是否可以改为和真正指标值一样数量 但目前也不会造成太多内存浪费 对象较简单 引用对象\n getBody(_col: number, _row: number): IndicatorData | SeriesNumberColumnData {\n const cache = this.getBodyWidthCache(_col, _row);\n if (cache) {\n return cache;\n }\n if (this.isSeriesNumber(_col, _row)) {\n const body = this.getSeriesNumberBody(_col, _row);\n this.setBodyWidthCache(_col, _row, body);\n return body;\n }\n // let indicatorData;\n //正常情况下 通过行号或者列号可以取到Indicator的配置信息 但如果指标在前维度在后的情况下(如风神:列配置【指标名称,地区】) indicators中的数量是和真正指标值一样数量\n // if (this.indicatorsAsCol) indicatorData = this.indicators[_col - this.rowHeaderLevelCount];\n // else indicatorData = this.indicators[_row - this.columnHeaderLevelCount];\n // if (indicatorData) return indicatorData;\n const paths = this.getCellHeaderPaths(_col, _row);\n if (this.indicatorsAsCol) {\n const indicatorKey = paths.colHeaderPaths?.find(colPath => colPath.indicatorKey)?.indicatorKey;\n const body = isValid(indicatorKey)\n ? this._indicators?.find(indicator => indicator.indicatorKey === indicatorKey) ??\n this._indicators[0] ?? {\n id: '',\n field: undefined,\n indicatorKey: undefined,\n cellType: 'text',\n define: undefined\n }\n : ({\n id: '',\n field: undefined,\n indicatorKey: undefined,\n cellType: 'text',\n define: undefined\n } as IndicatorData);\n this.setBodyWidthCache(_col, _row, body);\n return body;\n }\n const indicatorKey = paths.rowHeaderPaths?.find(rowPath => rowPath.indicatorKey)?.indicatorKey;\n const body = isValid(indicatorKey)\n ? this._indicators?.find(indicator => indicator.indicatorKey === indicatorKey) ??\n this._indicators[0] ?? {\n id: '',\n field: undefined,\n indicatorKey: undefined,\n cellType: 'text',\n define: undefined\n }\n : ({\n id: '',\n field: undefined,\n indicatorKey: undefined,\n cellType: 'text',\n define: undefined\n } as IndicatorData);\n this.setBodyWidthCache(_col, _row, body);\n return body;\n }\n // getBodyLayoutRangeById(id: LayoutObjectId): CellRange {\n // for (let col = 0; col < (this.colCount ?? 0); col++) {\n // if (id === this.columnObjects[col].id) {\n // return {\n // start: { col, row: 0 },\n // end: { col, row: 0 }\n // };\n // }\n // }\n\n // throw new Error(`can not found body layout @id=${id as number}`);\n // }\n getCellRange(col: number, row: number): CellRange {\n const result: CellRange = { start: { col, row }, end: { col, row } };\n if (!this.isHeader(col, row) || col === -1 || row === -1) {\n // || this.isIndicatorHeader(col, row)// 为什么加想不想来了 但是如果加上指标属于合并单元格的情况就会有问题了\n return result;\n }\n\n if (this.isRightFrozenColumn(col, row) || this.isBottomFrozenRow(col, row)) {\n return result;\n }\n\n if (this._table.isPivotChart()) {\n if (this.isLeftBottomCorner(col, row)) {\n return {\n start: {\n col: 0,\n row: this.rowCount - this.bottomFrozenRowCount\n },\n end: {\n col: this.frozenColCount - 1,\n row: this.rowCount - 1\n }\n };\n } else if (this.isRightTopCorner(col, row)) {\n return {\n start: {\n col: this.colCount - this.rightFrozenColCount,\n row: 0\n },\n end: {\n col: this.colCount - 1,\n row: this.frozenRowCount - 1\n }\n };\n } else if (this.isRightBottomCorner(col, row)) {\n return {\n start: {\n col: this.colCount - this.rightFrozenColCount,\n row: this.rowCount - this.bottomFrozenRowCount\n },\n end: {\n col: this.colCount - 1,\n row: this.rowCount - 1\n }\n };\n }\n }\n\n // if (this._cellRangeMap.has(`$${col}$${row}`)) {\n // return this._cellRangeMap.get(`$${col}$${row}`);\n // }\n for (let i = 0; i < this._largeCellRangeCache.length; i++) {\n const range = this._largeCellRangeCache[i];\n if (col >= range.start.col && col <= range.end.col && row >= range.start.row && row <= range.end.row) {\n return range;\n }\n }\n if (this.isHeader(col, row) && col !== -1 && row !== -1) {\n //in header\n const id = this.getCellId(col, row);\n for (let c = col - 1; c >= 0; c--) {\n if (id !== this.getCellId(c, row)) {\n break;\n }\n result.start.col = c;\n }\n for (let c = col + 1; c < (this.colCount ?? 0); c++) {\n if (id !== this.getCellId(c, row)) {\n break;\n }\n result.end.col = c;\n }\n for (let r = row - 1; r >= 0; r--) {\n if (\n id !== this.getCellId(col, r)\n // ||\n // (col >= 1 && this.getCellId(col - 1, row) !== this.getCellId(col - 1, r))\n ) {\n break;\n }\n result.start.row = r;\n }\n for (let r = row + 1; r < (this.rowCount ?? 0); r++) {\n if (\n id !== this.getCellId(col, r) ||\n (this.isSeriesNumberInHeader(col, row) && r >= this.columnHeaderLevelCount)\n // ||\n // (col >= 1 && this.getCellId(col - 1, row) !== this.getCellId(col - 1, r))\n ) {\n break;\n }\n result.end.row = r;\n }\n }\n // this._cellRangeMap.set(`${col}-${row}`, result);\n if (result.end.col - result.start.col > 100 || result.end.row - result.start.row > 100) {\n // only cache large range to avoid long col&row search\n this._largeCellRangeCache.push(result);\n }\n return result;\n }\n isCellRangeEqual(col: number, row: number, targetCol: number, targetRow: number): boolean {\n const range1 = this.getCellRange(col, row);\n const range2 = this.getCellRange(targetCol, targetRow);\n return (\n range1.start.col === range2.start.col &&\n range1.end.col === range2.end.col &&\n range1.start.row === range2.start.row &&\n range1.end.row === range2.end.row\n );\n }\n\n getBodyIndexByRow(row: number): number {\n if (row < this.columnHeaderLevelCount) {\n return -1;\n } else if (row >= this.rowCount - this.bottomHeaderRowCount) {\n return -1;\n }\n return row - this.columnHeaderLevelCount;\n // return this.indicatorsAsCol\n // ? row - this.columnHeaderLevelCount\n // : Math.floor((row - this.columnHeaderLevelCount) / this.indicatorKeys.length);\n }\n get bottomHeaderRowCount() {\n if (this._table.isPivotChart()) {\n return this.bottomFrozenRowCount;\n }\n return 0;\n }\n\n get rightHeaderColCount() {\n if (this._table.isPivotChart()) {\n return this.rightFrozenColCount;\n }\n return 0;\n }\n getBodyIndexByCol(col: number): number {\n if (col < this.rowHeaderLevelCount + this.leftRowSeriesNumberColumnCount) {\n return -1;\n } else if (col >= this.colCount - this.rightHeaderColCount) {\n return -1;\n }\n return col - this.rowHeaderLevelCount - this.leftRowSeriesNumberColumnCount;\n }\n getRecordStartRowByRecordIndex(index: number): number {\n return this.columnHeaderLevelCount + index;\n }\n getRecordShowIndexByCell(col: number, row: number): number {\n return undefined;\n }\n // getCellRangeTranspose(): CellRange {\n // return { start: { col: 0, row: 0 }, end: { col: 0, row: 0 } };\n // }\n\n getCellHeaderPathsWithTreeNode(col: number, row: number): IPivotTableCellHeaderPaths {\n // if (this._CellHeaderPathMap.has(`$${col}$${row}`))\n // if (this._CellHeaderPathMap.has(`${col}-${row}`)) {\n // return this._CellHeaderPathMap.get(`${col}-${row}`);\n // }\n // if (col === this._lastCellCol && row === this._lastCellRow) {\n // return this._lastCellHeaderPath;\n // }\n\n let _largeCellRangeCacheIndex = -1;\n for (let i = 0; i < this._largeCellRangeCache.length; i++) {\n const range = this._largeCellRangeCache[i];\n if (col >= range.start.col && col <= range.end.col && row >= range.start.row && row <= range.end.row) {\n _largeCellRangeCacheIndex = i;\n break;\n }\n }\n\n let colPath: ITreeLayoutHeadNode[] = this.getColHeaderPathCache(col, row);\n let rowPath: ITreeLayoutHeadNode[] = this.getRowHeaderPathCache(col, row);\n\n // if (_largeCellRangeCacheIndex !== -1) {\n // const range = this._largeCellRangeCache[_largeCellRangeCacheIndex];\n // if (this._CellHeaderPathMap.has(`${range.start.col}-${range.start.row}`)) {\n // return this._CellHeaderPathMap.get(`${range.start.col}-${range.start.row}`);\n // }\n // }\n // console.log(`${col}-${row}`);\n const recordCol = this.getBodyIndexByCol(col);\n const recordRow = this.getBodyIndexByRow(row) + this.currentPageStartIndex;\n\n // column\n if (!colPath && row >= 0 && recordCol >= 0) {\n colPath = [];\n if (this.columnHierarchyType === 'grid-tree') {\n const col_pathIds: number[] = [];\n this._columnHeaderCellFullPathIds.map(arr => {\n col_pathIds.push(arr[recordCol]);\n }); //获取当前行的cellId 但这个cellId不是各级维度都有的 下面逻辑就是找全路径然后再去各个树找path的过程\n\n const findedRowPath = this.getTreePathByCellIds(col_pathIds);\n // rowPath = rowPath.concat(findedRowPath);\n colPath.push(...findedRowPath);\n } else {\n colPath = this.columnDimensionTree.getTreePath(\n recordCol,\n this.showHeader && this.showColumnHeader\n ? row - (this.columnHeaderTitle ? 1 : 0)\n : this.columnDimensionTree.totalLevel\n );\n }\n // this._colHeaderPathCache.set(col, colPath);\n this.setColHeaderPathCache(col, row, colPath);\n }\n\n // row\n if (!rowPath && col >= 0 && recordRow >= 0) {\n rowPath = [];\n if (this.rowHierarchyType === 'tree') {\n // 注释了原有逻辑\n // if (col >= this.rowHeaderLevelCount) {\n // //body单元格 col代表寻找的深度 这里需要加上行表头的整体深度\n // rowPath = this.rowDimensionTree.getTreePath(recordRow, col + this.rowDimensionTree.totalLevel);\n // } else {\n // //header单元格 col代表寻找的深度 这里需要加上当前单元格行表头的深度\n // const hd = this.getHeader(col, row);\n // rowPath = this.rowDimensionTree.getTreePath(recordRow, col + hd.hierarchyLevel);\n // }\n // 考虑多层级的ExtensionRowTree\n const row_pathIds = this._rowHeaderCellFullPathIds[recordRow]; //获取当前行的cellId 但这个cellId不是各级维度都有的 下面逻辑就是找全路径然后再去各个树找path的过程\n let findTree = this.rowDimensionTree; //第一棵寻找的树是第一列的维度树 主树\n let level = 0; //level和col对应,代表一层层树找的过程\n while (findTree && row_pathIds) {\n const pathIds: (number | string)[] = []; // pathIds记录寻找当前树需要匹配的cellId\n let cellId: LayoutObjectId = row_pathIds[level]; //row_pathIds中每个值对应了pathIds的一个节点cellId\n pathIds.push(cellId);\n while (true) {\n const hd: HeaderData = this._headerObjectMap[cellId];\n if (hd?.parentCellId) {\n // 将parentCellId加入pathIds\n pathIds.unshift(hd.parentCellId);\n cellId = hd.parentCellId;\n } else {\n break;\n }\n }\n // 组装好pathIds后从树中找出具体路径paths\n const findedRowPath = this.getTreePathByCellIds(pathIds);\n // rowPath = rowPath.concat(findedRowPath);\n rowPath.push(...findedRowPath);\n findTree = this._rowHeaderExtensionTree[row_pathIds[level]];\n level++;\n }\n } else if (this.rowHierarchyType === 'grid-tree') {\n const row_pathIds = this._rowHeaderCellFullPathIds[recordRow]; //获取当前行的cellId 但这个cellId不是各级维度都有的 下面逻辑就是找全路径然后再去各个树找path的过程\n\n const findedRowPath = this.getTreePathByCellIds(row_pathIds);\n // rowPath = rowPath.concat(findedRowPath);\n rowPath.push(...findedRowPath);\n } else {\n rowPath = this.rowDimensionTree.getTreePath(\n recordRow,\n this.showHeader && this.showRowHeader\n ? col - (this.rowHeaderTitle ? 1 : 0) - this.leftRowSeriesNumberColumnCount\n : this.rowDimensionTree.totalLevel\n );\n }\n // this._rowHeaderPathCache.set(row, rowPath);\n this.setRowHeaderPathCache(col, row, rowPath);\n }\n const p = { colHeaderPaths: colPath, rowHeaderPaths: rowPath, cellLocation: this.getCellLocation(col, row) };\n // this._CellHeaderPathMap.set(`${col}-${row}`, p);\n return p;\n }\n\n getTreePathByCellIds(row_pathIds: LayoutObjectId[]) {\n const paths: ITreeLayoutHeadNode[] = [];\n for (let i = 0; i < row_pathIds.length; i++) {\n const id = row_pathIds[i];\n if (i > 0 && id === row_pathIds[i - 1]) {\n continue;\n }\n const hd: HeaderData = this._headerObjects[id as number];\n if (hd?.define) {\n paths.push(hd.define as any as ITreeLayoutHeadNode); // tree 或者 grid-tree 的define 就是node节点复制上的\n }\n }\n return paths;\n }\n getCellHeaderPaths(col: number, row: number): IPivotTableCellHeaderPaths {\n const headerPathsWidthNode = this.getCellHeaderPathsWithTreeNode(col, row);\n const headerPaths: IPivotTableCellHeaderPaths = {\n colHeaderPaths: [],\n rowHeaderPaths: [],\n cellLocation: headerPathsWidthNode.cellLocation\n };\n headerPathsWidthNode.colHeaderPaths?.forEach((colHeader: any) => {\n const colHeaderPath: {\n dimensionKey?: string;\n indicatorKey?: string;\n value?: string;\n virtual?: boolean;\n role?: CellPivotRole;\n } = {};\n colHeaderPath.dimensionKey = colHeader.dimensionKey;\n colHeaderPath.indicatorKey = colHeader.indicatorKey;\n colHeaderPath.value = colHeader.value ?? this.getIndicatorInfoByIndicatorKey(colHeader.indicatorKey)?.title ?? '';\n colHeaderPath.virtual = colHeader.virtual;\n colHeaderPath.role = colHeader.role;\n headerPaths.colHeaderPaths!.push(colHeaderPath);\n });\n\n headerPathsWidthNode.rowHeaderPaths?.forEach((rowHeader: any) => {\n if (rowHeader.dimensionKey !== 'axis') {\n const rowHeaderPath: {\n dimensionKey?: string;\n indicatorKey?: string;\n value?: string;\n virtual?: boolean;\n role?: CellPivotRole;\n } = {};\n rowHeaderPath.dimensionKey = rowHeader.dimensionKey;\n rowHeaderPath.indicatorKey = rowHeader.indicatorKey;\n // 如果value为null且没有indicatorKey时保持value为null(区分null和空字符串,防止单元格数据匹配不对)\n rowHeaderPath.value =\n rowHeader.value ??\n (rowHeader.indicatorKey\n ? this.getIndicatorInfoByIndicatorKey(rowHeader.indicatorKey)?.title ?? ''\n : rowHeader.value);\n rowHeaderPath.virtual = rowHeader.virtual;\n rowHeaderPath.role = rowHeader.role;\n headerPaths.rowHeaderPaths!.push(rowHeaderPath);\n }\n });\n return headerPaths;\n }\n getCellRowHeaderFullPaths(col: number): IDimensionInfo[] {\n const headerPaths: IDimensionInfo[] = [];\n //根据rows和indicatorAsCol来获取行表头路径,只需要考虑rowHierarchyType为grid的情况\n if (this.rowHierarchyType === 'grid') {\n for (let i = 0; i <= Math.min(this.rowsDefine.length - 1, col); i++) {\n const rowDefine = this.rowsDefine[i];\n if (typeof rowDefine === 'string') {\n headerPaths.push({\n dimensionKey: rowDefine\n });\n } else {\n headerPaths.push({\n dimensionKey: rowDefine.dimensionKey\n });\n }\n }\n if (col >= this.rowsDefine.length && this.indicatorsAsCol === false && this.indicatorsDefine.length > 0) {\n if (typeof this.indicatorsDefine[0] === 'string') {\n headerPaths.push({\n indicatorKey: this.indicatorsDefine[0]\n });\n } else {\n headerPaths.push({\n indicatorKey: this.indicatorsDefine[0].indicatorKey\n });\n }\n }\n }\n return headerPaths;\n }\n private getIndicatorInfoByIndicatorKey(indicatorKey: string) {\n const indicatorInfo = this.indicatorsDefine?.find(indicator => {\n if (typeof indicator === 'string') {\n return false;\n }\n if (indicatorKey) {\n return indicator.indicatorKey === indicatorKey;\n }\n return false;\n }) as IIndicator;\n return indicatorInfo;\n }\n /**\n *\n * @param row_pathIds 当前_rowHeaderCellIds 可能只存储了一列id如:\n * [\n * [47],\n * [50]\n * ]\n * 但实际可能是有两三层或更多,所以全路径dimensionPath的话应该对应更多\n * [\n * [47, 48, 49]\n * [50, 51, 52]\n * ]\n * @returns 返回对应每一层维度对应的headerId, [47]为参数的话 返回 [47, 48, 49]\n */\n private findFullCellIds(row_pathIds: LayoutObjectId[]) {\n const pathIds = []; // pathIds记录寻找当前树需要匹配的cellId\n for (let level = 0; level < row_pathIds.length; level++) {\n let cellId: LayoutObjectId = row_pathIds[level]; //row_pathIds中每个值对应了pathIds的一个节点cellId\n pathIds.push(cellId);\n while (true) {\n const hd: HeaderData = this._headerObjectMap[cellId];\n if (hd?.parentCellId) {\n // 将parentCellId加入pathIds\n pathIds.unshift(hd.parentCellId);\n cellId = hd.parentCellId;\n } else {\n break;\n }\n }\n }\n return pathIds;\n }\n getHeaderDimension(col: number, row: number): IDimension | undefined {\n if (this.isHeader(col, row)) {\n const header = this.getHeader(col, row);\n const dimension =\n this.rowsDefine?.find(dimension => typeof dimension !== 'string' && dimension.dimensionKey === header.field) ??\n this.columnsDefine?.find(dimension => typeof dimension !== 'string' && dimension.dimensionKey === header.field);\n return dimension as IDimension;\n }\n return undefined;\n }\n /**\n * 判读是否为指标名称单元格。非角头部分,行表头或者列表头显示的指标名\n * @param col\n * @param row\n * @returns\n */\n isColumnIndicatorHeader(col: number, row: number): boolean {\n if (\n this._indicatorShowType === 'column' &&\n row === this.columnHeaderLevelCount - 1 &&\n col >= this.rowHeaderLevelCount\n ) {\n return true;\n }\n return false;\n }\n /**\n * 判读是否为指标名称单元格。非角头部分,行表头或者列表头显示的指标名\n * @param col\n * @param row\n * @returns\n */\n isRowIndicatorHeader(col: number, row: number): boolean {\n if (\n this._indicatorShowType === 'row' &&\n col === this.rowHeaderLevelCount - 1 &&\n row >= this.columnHeaderLevelCount\n ) {\n return true;\n }\n return false;\n }\n /**\n * 判读是否为指标名称单元格。非角头部分,行表头或者列表头显示的指标名\n * @param col\n * @param row\n * @returns\n */\n isIndicatorHeader(col: number, row: number): boolean {\n return this.isColumnIndicatorHeader(col, row) || this.isRowIndicatorHeader(col, row);\n }\n\n /**\n * 统一的行布局重建方法。\n * 在行维度树的节点状态全部发生改变后,调用此方法来完整地重新计算和生成布局。\n */\n private _rebuildRowLayout() {\n // 1. 基于节点最新的状态,重置并重新计算整个维度树的布局信息\n this.rowDimensionTree.reset(this.rowDimensionTree.tree.children);\n\n // 2. 重置行头相关的计数和缓存\n this.resetRowHeaderLevelCount();\n this._rowHeaderCellFullPathIds_FULL = [];\n this.rowDimensionKeys = this.rowDimensionTree.dimensionKeysIncludeVirtual.valueArr();\n this.fullRowDimensionKeys = [...this.rowDimensionKeys];\n\n // 3. 根据模式重新生成行头单元格ID\n if (this.rowHierarchyType === 'tree') {\n this._addHeadersForTreeMode(\n this._rowHeaderCellFullPathIds_FULL,\n 0,\n this.rowDimensionTree.tree.children,\n [],\n this.rowDimensionTree.totalLevel,\n true,\n this.rowsDefine,\n this.rowHeaderObjs\n );\n } else if (this.rowHierarchyType === 'grid-tree') {\n this._addHeadersForGridTreeMode(\n this._rowHeaderCellFullPathIds_FULL,\n 0,\n this.rowDimensionTree.tree.children,\n [],\n this.rowDimensionTree.totalLevel,\n this._getRowHeaderTreeExpandedMaxLevelCount(),\n true,\n this.rowsDefine,\n this.rowHeaderObjs,\n true\n );\n // 重新生成角头\n this.cornerHeaderObjs = this._addCornerHeaders(\n this.colDimensionKeys,\n this.rowDimensionKeys,\n this.columnsDefine.concat(...this.rowsDefine)\n );\n }\n\n // 4. 处理行标题\n if (this.rowHeaderTitle) {\n const id = ++this.sharedVar.seqId;\n const firstColIds = Array(this.rowCount - this.columnHeaderLevelCount).fill(id);\n this._rowHeaderCellFullPathIds_FULL.unshift(firstColIds);\n const cell: HeaderData = {\n id,\n title:\n typeof this.rowHeaderTitle.title === 'string'\n ? this.rowHeaderTitle.title\n : (this.rowsDefine.reduce((title: string, value) => {\n if (typeof value === 'string') {\n return title;\n }\n return title + (title ? `/${value.title}` : `${value.title}`);\n }, '') as string),\n field: undefined,\n headerType: this.rowHeaderTitle?.headerType ?? 'text',\n style: this.rowHeaderTitle?.headerStyle,\n define: {\n field: '',\n headerType: 'text',\n cellType: 'text',\n disableHeaderHover: !!this.rowHeaderTitle?.disableHeaderHover,\n disableHeaderSelect: !!this.rowHeaderTitle?.disableHeaderSelect\n }\n };\n this.rowHeaderObjs.push(cell);\n this._headerObjects[id] = cell;\n }\n\n // 5. 转置并完成后续处理\n this._rowHeaderCellFullPathIds_FULL = transpose(this._rowHeaderCellFullPathIds_FULL);\n if (this.rowHierarchyType === 'tree' && this.extensionRows?.length >= 1) {\n this.generateExtensionRowTree();\n }\n\n // 6. 重置所有对象映射和缓存\n this.colIndex = 0;\n this._headerObjectMap = this._headerObjects.reduce((o, e) => {\n o[e.id as number] = e;\n return o;\n }, {} as { [key: LayoutObjectId]: HeaderData });\n this._CellHeaderPathMap = new Map();\n this._largeCellRangeCache.length = 0;\n\n // 7. 应用隐藏和分页逻辑,并设置列宽\n this.generateCellIdsConsiderHideHeader();\n this.setPagination(this.pagination);\n if (this.rowHierarchyType === 'grid-tree') {\n this.setColumnWidths();\n }\n }\n\n /**\n * 统一的列布局重建方法。\n * 在列维度树的节点状态全部发生改变后,调用此方法来完整地重新计算和生成布局。\n */\n private _rebuildColumnLayout() {\n // 1. 基于节点最新的状态,重置并重新计算整个维度树的布局信息\n this.columnDimensionTree.reset(this.columnDimensionTree.tree.children);\n\n // 2. 重置列头相关的计数和缓存\n this.resetColumnHeaderLevelCount();\n this._columnHeaderCellFullPathIds = []; // 使用源文件中的变量名\n this.colDimensionKeys = this.columnDimensionTree.dimensionKeysIncludeVirtual.valueArr();\n\n // 3. 根据模式重新生成列头单元格ID\n if (this.columnHierarchyType === 'grid-tree') {\n this._addHeadersForGridTreeMode(\n this._columnHeaderCellFullPathIds,\n 0,\n this.columnDimensionTree.tree.children,\n [],\n this.columnDimensionTree.totalLevel,\n this._getColumnHeaderTreeExpandedMaxLevelCount(),\n true,\n this.columnsDefine,\n this.columnHeaderObjs,\n false\n );\n // 重新生成角头\n this.cornerHeaderObjs = this._addCornerHeaders(\n this.colDimensionKeys,\n this.rowDimensionKeys,\n this.columnsDefine.concat(...this.rowsDefine)\n );\n }\n\n // 4. 处理列标题\n if (this.columnHeaderTitle) {\n const id = ++this.sharedVar.seqId;\n const firstRowIds = Array(this.colCount - this.rowHeaderLevelCount - this.rightFrozenColCount).fill(id);\n this._columnHeaderCellFullPathIds.unshift(firstRowIds);\n const cell: HeaderData = {\n id,\n title:\n typeof this.columnHeaderTitle.title === 'string'\n ? this.columnHeaderTitle.title\n : (this.columnsDefine.reduce((title: string, value) => {\n if (typeof value === 'string') {\n return title;\n }\n return title + (title ? `/${value.title}` : `${value.title}`);\n }, '') as string),\n field: undefined,\n headerType: this.columnHeaderTitle?.headerType ?? 'text',\n style: this.columnHeaderTitle?.headerStyle,\n define: <any>{\n id,\n disableHeaderHover: !!this.columnHeaderTitle?.disableHeaderHover,\n disableHeaderSelect: !!this.columnHeaderTitle?.disableHeaderSelect\n }\n };\n this.columnHeaderObjs.push(cell);\n this._headerObjects[id] = cell;\n }\n\n // 5. 重置所有对象映射和缓存\n this.colIndex = 0;\n this._headerObjectMap = this._headerObjects.reduce((o, e) => {\n o[e.id as number] = e;\n return o;\n }, {} as { [key: LayoutObjectId]: HeaderData });\n this._CellHeaderPathMap = new Map();\n this._largeCellRangeCache.length = 0;\n\n // 6. 应用隐藏和分页逻辑,并设置列宽\n this.generateCellIdsConsiderHideHeader();\n if (this.columnHierarchyType === 'grid-tree') {\n this.setColumnWidths();\n }\n }\n\n /**\n * 点击某个单元格的展开折叠按钮 改变该节点的状态 维度树重置\n * @param col\n * @param row\n */\n toggleHierarchyState(col: number, row: number) {\n this.colIndex = 0;\n const lastLevelIndex = //这个变量赋值必须要写到前面 resetRowHeaderLevelCount会更新\n (this.indicatorsAsCol ? this.rowHeaderLevelCount - 1 : this.rowHeaderLevelCount - 2) -\n this.leftRowSeriesNumberColumnCount;\n const oldRowHeaderCellIds = this._rowHeaderCellFullPathIds_FULL.slice(0);\n const oldRowHeaderCellPositons = oldRowHeaderCellIds.map((id, row) => {\n return { col, row: row + this.columnHeaderLevelCount };\n });\n const hd = this.getHeader(col, row);\n (<any>hd.define).hierarchyState =\n (<any>hd.define).hierarchyState === HierarchyState.collapse ? HierarchyState.expand : HierarchyState.collapse;\n //过程类似构造函数处理过程\n this.rowDimensionTree.reset(this.rowDimensionTree.tree.children);\n this.resetRowHeaderLevelCount();\n this._rowHeaderCellFullPathIds_FULL = [];\n this.rowDimensionKeys = this.rowDimensionTree.dimensionKeysIncludeVirtual.valueArr();\n this.fullRowDimensionKeys = [];\n this.fullRowDimensionKeys = this.fullRowDimensionKeys.concat(this.rowDimensionKeys);\n\n if (this.rowHierarchyType === 'tree') {\n // 确保extensionRows的维度键也被包含在fullRowDimensionKeys中\n if (this.extensionRows?.length > 0) {\n this.extensionRows.forEach(extensionRow => {\n const extensionRowDimensionKeys =\n extensionRow.rows?.map(row => (typeof row === 'string' ? row : row.dimensionKey)) || [];\n this.fullRowDimensionKeys = this.fullRowDimensionKeys.concat(extensionRowDimensionKeys);\n });\n }\n\n this._addHeadersForTreeMode(\n this._rowHeaderCellFullPathIds_FULL,\n 0,\n this.rowDimensionTree.tree.children,\n [],\n this.rowDimensionTree.totalLevel,\n true,\n this.rowsDefine,\n this.rowHeaderObjs\n );\n } else if (this.rowHierarchyType === 'grid-tree') {\n const startRow = 0;\n this._addHeadersForGridTreeMode(\n this._rowHeaderCellFullPathIds_FULL,\n startRow,\n this.rowDimensionTree.tree.children,\n [],\n this.rowDimensionTree.totalLevel,\n this._getRowHeaderTreeExpandedMaxLevelCount(),\n true,\n this.rowsDefine,\n this.rowHeaderObjs,\n true\n // this.columnDimensionTree.totalLevel,\n // this.indicatorKeys\n );\n\n this.cornerHeaderObjs = this._addCornerHeaders(\n this.colDimensionKeys,\n this.rowDimensionKeys,\n this.columnsDefine.concat(...this.rowsDefine)\n );\n }\n\n if (this.rowHeaderTitle) {\n const id = ++this.sharedVar.seqId;\n const firstColIds = Array(this.rowCount - this.columnHeaderLevelCount).fill(id);\n this._rowHeaderCellFullPathIds_FULL.unshift(firstColIds);\n const cell: HeaderData = {\n id,\n title:\n typeof this.rowHeaderTitle.title === 'string'\n ? this.rowHeaderTitle.title\n : (this.rowsDefine.reduce((title: string, value) => {\n if (typeof value === 'string') {\n return title;\n }\n return title + (title ? `/${value.title}` : `${value.title}`);\n }, '') as string),\n field: undefined,\n headerType: this.rowHeaderTitle?.headerType ?? 'text',\n style: this.rowHeaderTitle?.headerStyle,\n define: {\n field: '',\n headerType: 'text',\n cellType: 'text',\n disableHeaderHover: !!this.rowHeaderTitle?.disableHeaderHover,\n disableHeaderSelect: !!this.rowHeaderTitle?.disableHeaderSelect\n }\n };\n this.rowHeaderObjs.push(cell);\n this._headerObjects[id] = cell;\n }\n this._rowHeaderCellFullPathIds_FULL = transpose(this._rowHeaderCellFullPathIds_FULL);\n if (this.rowHierarchyType === 'tree' && this.extensionRows?.length >= 1) {\n this.generateExtensionRowTree();\n }\n this.colIndex = 0;\n this._headerObjectMap = this._headerObjects.reduce((o, e) => {\n o[e.id as number] = e;\n return o;\n }, {} as { [key: LayoutObjectId]: HeaderData });\n this._CellHeaderPathMap = new Map();\n // this._cellRangeMap = new Map();\n this._largeCellRangeCache.length = 0;\n\n let diffCell: {\n addCellPositionsRowDirection?: CellAddress[];\n removeCellPositionsRowDirection?: CellAddress[];\n updateCellPositionsRowDirection?: CellAddress[];\n addCellPositionsColumnDirection?: CellAddress[];\n removeCellPositionsColumnDirection?: CellAddress[];\n updateCellPositionsColumnDirection?: CellAddress[];\n };\n if (this.rowHierarchyType === 'tree') {\n diffCell = diffCellAddress(\n col,\n row,\n oldRowHeaderCellIds.map(oldCellId => oldCellId[col - this.leftRowSeriesNumberColumnCount]),\n this._rowHeaderCellFullPathIds_FULL.map(newCellId => newCellId[col - this.leftRowSeriesNumberColumnCount]),\n oldRowHeaderCellPositons,\n this\n );\n } else {\n const new_lastLevelIndex =\n (this.indicatorsAsCol ? this.rowHeaderLevelCount - 1 : this.rowHeaderLevelCount - 2) -\n this.leftRowSeriesNumberColumnCount;\n diffCell = diffCellAddressForGridTree(\n col,\n row,\n oldRowHeaderCellIds.map(oldCellId => oldCellId[lastLevelIndex]),\n this._rowHeaderCellFullPathIds_FULL.map(newCellId => newCellId[new_lastLevelIndex]),\n oldRowHeaderCellPositons,\n\n this\n );\n }\n\n // this._rowHeaderCellIds = this._rowHeaderCellIds_FULL.slice();\n this.generateCellIdsConsiderHideHeader();\n this.setPagination(this.pagination);\n if (this.rowHierarchyType === 'grid-tree') {\n // 处理列宽配置\n this.setColumnWidths();\n }\n return diffCell;\n }\n /**\n * 点击某个单元格的展开折叠按钮 改变该节点的状态 维度树重置\n * @param col\n * @param row\n */\n toggleHierarchyStateForColumnTree(col: number, row: number) {\n this.colIndex = 0;\n const lastLevelIndex = //这个变量赋值必须要写到前面 resetRowHeaderLevelCount会更新\n !this.indicatorsAsCol ? this.columnHeaderLevelCount - 1 : this.columnHeaderLevelCount - 2;\n const oldColumnHeaderCellIds = this._columnHeaderCellFullPathIds.slice(0);\n const oldColumnHeaderCellPositons = oldColumnHeaderCellIds[this.columnHeaderLevelCount - 1].map((id, col) => {\n return { col: col + this.rowHeaderLevelCount, row };\n });\n const hd = this.getHeader(col, row);\n (<any>hd.define).hierarchyState =\n (<any>hd.define).hierarchyState === HierarchyState.collapse ? HierarchyState.expand : HierarchyState.collapse;\n //过程类似构造函数处理过程\n this.columnDimensionTree.reset(this.columnDimensionTree.tree.children);\n this.resetColumnHeaderLevelCount();\n this._columnHeaderCellFullPathIds = [];\n this.colDimensionKeys = this.columnDimensionTree.dimensionKeysIncludeVirtual.valueArr();\n // this.fullRowDimensionKeys = [];\n // this.fullRowDimensionKeys = this.fullRowDimensionKeys.concat(this.rowDimensionKeys);\n if (this.columnHierarchyType === 'grid-tree') {\n const startRow = 0;\n this._addHeadersForGridTreeMode(\n this._columnHeaderCellFullPathIds,\n startRow,\n this.columnDimensionTree.tree.children,\n [],\n this.columnDimensionTree.totalLevel,\n this._getColumnHeaderTreeExpandedMaxLevelCount(),\n true,\n this.columnsDefine,\n this.columnHeaderObjs,\n false\n // this.columnDimensionTree.totalLevel,\n // this.indicatorKeys\n );\n this.cornerHeaderObjs = this._addCornerHeaders(\n this.colDimensionKeys,\n this.rowDimensionKeys,\n this.columnsDefine.concat(...this.rowsDefine)\n );\n }\n\n if (this.columnHeaderTitle) {\n const id = ++this.sharedVar.seqId;\n const firstRowIds = Array(this.colCount - this.rowHeaderLevelCount - this.rightFrozenColCount).fill(id);\n this._columnHeaderCellFullPathIds.unshift(firstRowIds);\n const cell: HeaderData = {\n id,\n title:\n typeof this.columnHeaderTitle.title === 'string'\n ? this.columnHeaderTitle.title\n : (this.columnsDefine.reduce((title: string, value) => {\n if (typeof value === 'string') {\n return title;\n }\n return title + (title ? `/${value.title}` : `${value.title}`);\n }, '') as string),\n field: undefined,\n headerType: this.columnHeaderTitle?.headerType ?? 'text',\n style: this.columnHeaderTitle?.headerStyle,\n define: <any>{\n id,\n disableHeaderHover: !!this.columnHeaderTitle?.disableHeaderHover,\n disableHeaderSelect: !!this.columnHeaderTitle?.disableHeaderSelect\n }\n };\n this.columnHeaderObjs.push(cell);\n this._headerObjects[id] = cell;\n }\n\n this.colIndex = 0;\n this._headerObjectMap = this._headerObjects.reduce((o, e) => {\n o[e.id as number] = e;\n return o;\n }, {} as { [key: LayoutObjectId]: HeaderData });\n this._CellHeaderPathMap = new Map();\n // this._cellRangeMap = new Map();\n this._largeCellRangeCache.length = 0;\n\n const new_lastLevelIndex = !this.indicatorsAsCol\n ? this.columnHeaderLevelCount - 1\n : this.columnHeaderLevelCount - 2;\n const diffCell = diffCellAddressForGridTreeOnColumn(\n col,\n row,\n oldColumnHeaderCellIds[lastLevelIndex],\n this._columnHeaderCellFullPathIds[new_lastLevelIndex],\n oldColumnHeaderCellPositons,\n this\n );\n\n // this._rowHeaderCellIds = this._rowHeaderCellIds_FULL.slice();\n this.generateCellIdsConsiderHideHeader();\n if (this.columnHierarchyType === 'grid-tree') {\n // 处理列宽配置\n this.setColumnWidths();\n }\n // this.setColumnWidths();\n return diffCell;\n }\n // 为列宽计算专用,兼容列表\n isHeaderForColWidth(col: number, row: number): boolean {\n return this.isHeader(col, row);\n }\n getHeaderForColWidth(col: number, row: number): HeaderData | SeriesNumberColumnData {\n return this.getHeader(col, row);\n }\n /**\n * 通过dimensionPath获取到对应的表头地址col row\n * TODO 这个函数在有extensionRows的时候会有问题 数的startIndex等已经不对应了\n * @param dimensions\n * @returns\n */\n getPivotCellAdress(dimensions: IDimensionInfo[]): CellAddress | undefined {\n if (!Array.isArray(dimensions)) {\n return undefined;\n }\n let rowArr = this.rowTree;\n let rowDimension;\n let colArr = this.columnTree;\n let colDimension;\n for (let i = 0; i < dimensions.length; i++) {\n const highlightDimension = dimensions[i];\n if (\n (highlightDimension.isPivotCorner || !isValid(highlightDimension.value)) && //判断角头: isPivotCorner或者 没有维度值\n i === dimensions.length - 1\n ) {\n // 判断角表头位置\n if (this?.cornerSetting?.titleOnDimension === 'row') {\n let col = 0; //树形展示的情况下 肯定是在第0列\n if (this.rowHierarchyType === 'grid') {\n col = (this.rowDimensionKeys as Array<string | number>).indexOf(highlightDimension.dimensionKey);\n }\n return col === -1\n ? undefined\n : { col: (this.rowHeaderTitle ? col + 1 : col) + this.leftRowSeriesNumberColumnCount, row: 0 };\n }\n\n const row = (this.colDimensionKeys as Array<string | number>).indexOf(highlightDimension.dimensionKey);\n return row === -1\n ? undefined\n : { col: 0 + this.leftRowSeriesNumberColumnCount, row: this.columnHeaderTitle ? row + 1 : row };\n }\n // 判断级别,找到distDimension\n let isCol = false;\n for (let j = 0; j < colArr.length; j++) {\n const dimension = colArr[j];\n if (\n ((isValid(highlightDimension.dimensionKey) && dimension.dimensionKey === highlightDimension.dimensionKey) ||\n (isValid(highlightDimension.indicatorKey) && dimension.indicatorKey === highlightDimension.indicatorKey)) &&\n dimension.value === highlightDimension.value\n ) {\n colArr = dimension.children as IHeaderTreeDefine[];\n colDimension = dimension;\n isCol = true;\n break;\n }\n }\n if (isCol) {\n continue;\n }\n for (let k = 0; k < rowArr.length; k++) {\n const dimension = rowArr[k];\n if (\n ((isValid(highlightDimension.dimensionKey) && dimension.dimensionKey === highlightDimension.dimensionKey) ||\n (isValid(highlightDimension.indicatorKey) && dimension.indicatorKey === highlightDimension.indicatorKey)) &&\n dimension.value === highlightDimension.value\n ) {\n rowArr = dimension.children as IHeaderTreeDefine[];\n rowDimension = dimension;\n break;\n }\n }\n }\n\n // 通过dimension获取col和row\n let col = 0;\n let row = 0;\n if (rowDimension) {\n row = this.columnHeaderLevelCount;\n const { startInTotal, afterSpanLevel } = rowDimension as ITreeLayoutHeadNode;\n row += startInTotal;\n if (this.rowHierarchyType === 'grid') {\n col = (this.rowHeaderTitle ? afterSpanLevel + 1 : afterSpanLevel) + this.leftRowSeriesNumberColumnCount;\n } else {\n col = 0 + this.leftRowSeriesNumberColumnCount;\n } //树形展示的情况下 肯定是在第0列\n return { col, row };\n } else if (colDimension) {\n col = this.rowHeaderLevelCount + this.leftRowSeriesNumberColumnCount;\n const { startInTotal, afterSpanLevel } = colDimension as ITreeLayoutHeadNode;\n col += startInTotal;\n row = this.columnHeaderTitle ? afterSpanLevel + 1 : afterSpanLevel;\n return { col, row };\n }\n return undefined;\n }\n getPivotDimensionInfo(col: number, row: number): IDimensionInfo[] {\n const { colHeaderPaths, rowHeaderPaths } = this.getCellHeaderPaths(col, row);\n const pivotInfo: IDimensionInfo[] = [];\n if (colHeaderPaths.length) {\n // 列表头\n colHeaderPaths.forEach((path, i) => {\n pivotInfo.push({\n dimensionKey: path.dimensionKey,\n value: path.value,\n isPivotCorner: false,\n indicatorKey: path.indicatorKey\n // i === colHeaderPaths.length - 1 ? this.getIndicatorKey(col, row) : undefined,\n });\n });\n } else if (rowHeaderPaths.length) {\n // 行表头\n rowHeaderPaths.forEach((path, i) => {\n pivotInfo.push({\n dimensionKey: path.dimensionKey,\n value: path.value,\n isPivotCorner: false,\n indicatorKey: path.indicatorKey\n // i === rowHeaderPaths.length - 1 ? this.getIndicatorKey(col, row) : undefined,\n });\n });\n } else if (this.isCornerHeader(col, row)) {\n // 角表头\n if (this?.cornerSetting?.titleOnDimension === 'row') {\n // for (let i = 0; i <= col; i++) {\n pivotInfo.push({\n dimensionKey:\n this.rowDimensionKeys[(this.rowHeaderTitle ? col - 1 : col) - this.leftRowSeriesNumberColumnCount],\n isPivotCorner: true\n });\n // }\n } else {\n // for (let i = 0; i <= row; i++) {\n pivotInfo.push({\n dimensionKey: this.colDimensionKeys[this.columnHeaderTitle ? row - 1 : row],\n isPivotCorner: true\n });\n // }\n }\n }\n\n return pivotInfo;\n }\n\n getIndicatorKey(col: number, row: number) {\n // let indicator;\n // if (this._indicators?.length === 1) indicator = this._indicators[0];\n // else if (this.indicatorsAsCol) {\n // const bodyCol = col - this.rowHeaderLevelCount;\n // indicator = this._indicators[bodyCol % this._indicators?.length];\n // } else {\n // const bodyRow = row - this.columnHeaderLevelCount;\n // indicator = this._indicators[bodyRow % this._indicators?.length];\n // }\n\n // return indicator?.indicatorKey;\n return (this.getBody(col, row) as IndicatorData)?.indicatorKey;\n }\n getParentCellId(col: number, row: number) {\n if (row === 0) {\n return undefined;\n }\n if (this.isColumnHeader(col, row)) {\n return this.getCellId(col, row - 1);\n } else if (this.isRowHeader(col, row)) {\n return this.getCellId(col - 1, row);\n }\n return undefined;\n }\n getRowHeaderCellAddressByCellId(cellId: LayoutObjectId) {\n let col;\n let row;\n this._rowHeaderCellIds.find((cellIds, rowIndex) => {\n const finded = cellIds.find((id, colIndex) => {\n if (id === cellId) {\n col = colIndex;\n return true;\n }\n return false;\n });\n if (finded) {\n row = rowIndex;\n return true;\n }\n return false;\n });\n if (isValid(col) && isValid(row)) {\n return { col, row: (row as number) + this.columnHeaderLevelCount };\n }\n return undefined;\n }\n /**\n * 判断从source地址是否可以移动到target地址\n * @param source\n * @param target\n * @returns boolean 是否可以移动\n */\n canMoveHeaderPosition(source: CellAddress, target: CellAddress): boolean {\n if (this.isSeriesNumberInHeader(target.col, target.row) || this.isSeriesNumberInHeader(source.col, source.row)) {\n return false;\n }\n if (this.isCornerHeader(target.col, target.row)) {\n return false;\n }\n if (source.col < 0 || source.row < 0 || target.col < 0 || target.row < 0) {\n return false;\n }\n if (this.isSeriesNumberInBody(target.col, target.row) && this.isSeriesNumberInBody(source.col, source.row)) {\n // 如果是子节点之间相互换位置 则匹配表头最后一级\n // if (\n // this.getColumnDefine(source.col + this.leftRowSeriesNumberColumnCount, source.row).isChildNode &&\n // this.getColumnDefine(target.col + this.leftRowSeriesNumberColumnCount, target.row).isChildNode\n // ) {\n source.col = source.col + this.leftRowSeriesNumberColumnCount + this.rowHeaderLevelCount - 1;\n target.col = target.col + this.leftRowSeriesNumberColumnCount + this.rowHeaderLevelCount - 1;\n // } else {\n // // 为适应下面的判断逻辑 将col加至表格第一级\n // source.col = source.col + this.leftRowSeriesNumberColumnCount;\n // target.col = target.col + this.leftRowSeriesNumberColumnCount;\n // }\n }\n // 获取操作单元格的range范围\n const sourceCellRange = this.getCellRange(source.col, source.row);\n // 获取source和target对应sourceCellRange.start.row的headerId\n if (this.isColumnHeader(source.col, source.row)) {\n const sourceTopId = this.getParentCellId(source.col, sourceCellRange.start.row);\n const targetTopId = this.getParentCellId(target.col, sourceCellRange.start.row);\n return sourceTopId === targetTopId;\n } else if (this.isRowHeader(source.col, source.row)) {\n if (this.rowHierarchyType === 'tree') {\n const sourceRowHeaderPaths = cloneDeep(\n this.getCellHeaderPathsWithTreeNode(source.col, source.row).rowHeaderPaths\n );\n const targetRowHeaderPaths = cloneDeep(\n this.getCellHeaderPathsWithTreeNode(target.col, target.row).rowHeaderPaths\n );\n sourceRowHeaderPaths.pop(); // 如果用了缓存_CellHeaderPathMap的话 这里pop会影响缓存的值 所以上面使用clone\n targetRowHeaderPaths.pop();\n\n if (sourceRowHeaderPaths.length <= targetRowHeaderPaths.length) {\n if (sourceRowHeaderPaths.length === targetRowHeaderPaths.length) {\n return !sourceRowHeaderPaths.find(\n (item: any, i: number) =>\n item.dimensionKey !== targetRowHeaderPaths[i].dimensionKey ||\n item.value !== targetRowHeaderPaths[i].value\n );\n }\n\n if (sourceRowHeaderPaths.length > 0) {\n //处理如层级a.b节点移动到c.d.e节点的情况 这个时候要返回false\n for (let i = 0; i < sourceRowHeaderPaths.length; i++) {\n if (sourceRowHeaderPaths[i].startInTotal !== targetRowHeaderPaths[i].startInTotal) {\n return false;\n }\n }\n }\n return true;\n }\n } else {\n const sourceTopId = this.getParentCellId(sourceCellRange.start.col, source.row);\n const targetTopId = this.getParentCellId(sourceCellRange.start.col, target.row);\n return sourceTopId === targetTopId;\n }\n }\n return false;\n }\n /**\n * 拖拽换位置 从source地址换到target地址\n * @param source\n * @param target\n * @returns\n */\n moveHeaderPosition(\n source: CellAddress,\n target: CellAddress\n ): {\n sourceIndex: number;\n targetIndex: any;\n sourceSize: any;\n targetSize: any;\n moveType: 'column' | 'row';\n } {\n // 判断从source地址是否可以移动到target地址\n if (\n (!this._table.options.dragOrder?.validateDragOrderOnEnd ||\n this._table.options.dragOrder?.validateDragOrderOnEnd(source, target)) &&\n this.canMoveHeaderPosition(source, target) &&\n !this.isCellRangeEqual(source.col, source.row, target.col, target.row)\n ) {\n const sourceCellRange = this.getCellRange(source.col, source.row);\n // 对移动列表头 行表头 分别处理\n if (this.isColumnHeader(source.col, source.row)) {\n // source单元格包含的列数\n const sourceSize = sourceCellRange.end.col - sourceCellRange.start.col + 1;\n // 插入目标地址的列index\n let targetIndex;\n const targetCellRange = this.getCellRange(target.col, sourceCellRange.start.row);\n if (target.col >= source.col) {\n targetIndex = targetCellRange.end.col - sourceSize + 1;\n } else {\n targetIndex = targetCellRange.start.col;\n }\n //如果操作列和目标地址col一样 则不执行其他逻辑\n if (targetIndex === sourceCellRange.start.col) {\n return null;\n }\n // // _columnHeaderCellIds 逐行将每一行的source id 移动到目标地址targetCol处\n // for (let row = 0; row < this._columnHeaderCellIds.length; row++) {\n // // 从header id的二维数组中取出需要操作的source ids\n // const sourceIds = this._columnHeaderCellIds[row].splice(\n // sourceCellRange.start.col - this.rowHeaderLevelCount - this.leftRowSeriesNumberColumnCount,\n // sourceSize\n // );\n // // 将source ids插入到目标地址targetCol处\n // // 把sourceIds变成一个适合splice的数组(包含splice前2个参数的数组) 以通过splice来插入sourceIds数组\n // sourceIds.unshift(targetIndex - this.rowHeaderLevelCount - this.leftRowSeriesNumberColumnCount, 0);\n // Array.prototype.splice.apply(this._columnHeaderCellIds[row], sourceIds);\n // }\n // _columnHeaderCellFullPathIds 调整了 _columnHeaderCellIds就不需要调整了 因为他们的第二层数组对象是引用关系\n // _columnHeaderCellFullPathIds 逐行将每一行的source id 移动到目标地址targetCol处\n for (let row = 0; row < this._columnHeaderCellFullPathIds.length; row++) {\n // 从header id的二维数组中取出需要操作的source ids\n const sourceIds = this._columnHeaderCellFullPathIds[row].splice(\n sourceCellRange.start.col - this.rowHeaderLevelCount - this.leftRowSeriesNumberColumnCount,\n sourceSize\n );\n // 将source ids插入到目标地址targetCol处\n // 把sourceIds变成一个适合splice的数组(包含splice前2个参数的数组) 以通过splice来插入sourceIds数组\n sourceIds.unshift(targetIndex - this.rowHeaderLevelCount - this.leftRowSeriesNumberColumnCount, 0);\n Array.prototype.splice.apply(this._columnHeaderCellFullPathIds[row], sourceIds);\n }\n\n //将_columns的列定义调整位置 同调整_headerCellIds逻辑\n const sourceColumns = this._columnWidths.splice(\n sourceCellRange.start.col - this.leftRowSeriesNumberColumnCount,\n sourceSize\n );\n sourceColumns.unshift((targetIndex - this.leftRowSeriesNumberColumnCount) as any, 0 as any);\n Array.prototype.splice.apply(this._columnWidths, sourceColumns);\n\n // 对维度树结构调整节点位置\n this.columnDimensionTree.movePosition(\n this.getCellHeaderPathsWithTreeNode(source.col, source.row).colHeaderPaths.length - 1,\n sourceCellRange.start.col - this.rowHeaderLevelCount - this.leftRowSeriesNumberColumnCount,\n targetCellRange.start.col - this.rowHeaderLevelCount - this.leftRowSeriesNumberColumnCount\n );\n this.columnDimensionTree.reset(this.columnDimensionTree.tree.children);\n this._CellHeaderPathMap = new Map();\n // this._cellRangeMap = new Map();\n this._largeCellRangeCache.length = 0;\n return {\n sourceIndex: sourceCellRange.start.col,\n targetIndex,\n sourceSize,\n targetSize: targetCellRange.end.col - targetCellRange.start.col + 1,\n moveType: 'column'\n };\n } else if (this.isRowHeader(source.col, source.row)) {\n // 插入目标地址的列index\n let targetIndex;\n const sourceRowHeaderPaths = this.getCellHeaderPathsWithTreeNode(source.col, source.row).rowHeaderPaths as any;\n const targetRowHeaderPaths = this.getCellHeaderPathsWithTreeNode(target.col, target.row).rowHeaderPaths as any;\n const sourceRowHeaderNode = sourceRowHeaderPaths[sourceRowHeaderPaths.length - 1];\n const targetRowHeaderNode = targetRowHeaderPaths[sourceRowHeaderPaths.length - 1];\n //整体移动的列数\n // const moveSize = sourceRowHeaderNode.size;\n const sourceSize = sourceRowHeaderNode.size;\n if (target.row >= source.row) {\n targetIndex = targetRowHeaderNode.startInTotal + targetRowHeaderNode.size - sourceSize;\n } else {\n targetIndex = targetRowHeaderNode.startInTotal;\n }\n\n //如果操作列和目标地址col一样 则不执行其他逻辑\n if (\n // targetIndex === source.row - this.columnHeaderLevelCount ||\n // targetIndex === sourceCellRange.end.row - this.columnHeaderLevelCount\n targetIndex ===\n sourceCellRange.start.row - this.columnHeaderLevelCount\n ) {\n return null;\n }\n\n // 表头id _rowHeaderCellIds进行调整\n // 从header id的二维数组中取出需要操作的source ids\n const sourceIds = this._rowHeaderCellIds.splice(\n sourceCellRange.start.row - this.columnHeaderLevelCount,\n sourceSize\n );\n sourceIds.unshift((targetIndex - this.currentPageStartIndex) as any, 0 as any);\n Array.prototype.splice.apply(this._rowHeaderCellIds, sourceIds);\n\n // 表头id _rowHeaderCellFullPathIds\n const sourceIds0 = this._rowHeaderCellFullPathIds.splice(\n sourceCellRange.start.row - this.columnHeaderLevelCount,\n sourceSize\n );\n sourceIds0.unshift((targetIndex - this.currentPageStartIndex) as any, 0 as any);\n Array.prototype.splice.apply(this._rowHeaderCellFullPathIds, sourceIds0);\n // 表头id _rowHeaderCellIds_FULL进行调整\n // 从header id的二维数组中取出需要操作的source ids\n const sourceIds_FULL = this._rowHeaderCellIds_FULL.splice(\n sourceCellRange.start.row - this.columnHeaderLevelCount + this.currentPageStartIndex,\n sourceSize\n );\n sourceIds_FULL.unshift(targetIndex as any, 0 as any);\n Array.prototype.splice.apply(this._rowHeaderCellIds_FULL, sourceIds_FULL);\n // 表头id _rowHeaderCellFullPathIds_FULL进行调整\n const sourceIds_FULL0 = this._rowHeaderCellFullPathIds_FULL.splice(\n sourceCellRange.start.row - this.columnHeaderLevelCount + this.currentPageStartIndex,\n sourceSize\n );\n sourceIds_FULL0.unshift(targetIndex as any, 0 as any);\n Array.prototype.splice.apply(this._rowHeaderCellFullPathIds_FULL, sourceIds_FULL0);\n // 对维度树结构调整节点位置\n this.rowDimensionTree.movePosition(\n sourceRowHeaderPaths.length - 1,\n sourceCellRange.start.row - this.columnHeaderLevelCount,\n // targetCellRange.start.row - this.columnHeaderLevelCount\n targetIndex + (target.row > source.row ? sourceRowHeaderNode.size - 1 : 0)\n );\n this.rowDimensionTree.reset(this.rowDimensionTree.tree.children);\n this._CellHeaderPathMap = new Map();\n // this._cellRangeMap = new Map();\n this._largeCellRangeCache.length = 0;\n return {\n sourceIndex: sourceCellRange.start.row,\n targetIndex: targetIndex + this.columnHeaderLevelCount,\n sourceSize,\n targetSize: targetRowHeaderNode.size,\n moveType: 'row'\n };\n }\n }\n return null;\n }\n\n /**\n * 递归回溯匹配维度路径\n * @param paths 要匹配的路径数组\n * @param treeNodes 当前层级的树节点数组\n * @param needLowestLevel 是否需要匹配到最底层\n * @param checkAxisNode 是否检查axis节点(用于rowHeaderPaths的特殊处理)\n * @param pathIndex 当前匹配的路径索引\n * @returns 匹配到的维度节点,如果未找到则返回undefined\n */\n matchDimensionPath = (\n paths: IDimensionInfo[],\n treeNodes: IHeaderTreeDefine[],\n needLowestLevel: boolean,\n checkAxisNode: boolean = false,\n pathIndex: number = 0\n ): ITreeLayoutHeadNode | undefined => {\n if (pathIndex >= paths.length) {\n return undefined;\n }\n\n const currentPath = paths[pathIndex];\n\n // 遍历当前层级的所有节点,寻找匹配的节点\n for (let j = 0; j < treeNodes.length; j++) {\n const dimension = treeNodes[j];\n\n // 检查是否匹配当前路径节点\n const isMatch =\n (!isValid(currentPath.indicatorKey) &&\n dimension.dimensionKey === currentPath.dimensionKey &&\n dimension.value === currentPath.value) ||\n (isValid(currentPath.indicatorKey) &&\n dimension.indicatorKey === currentPath.indicatorKey &&\n ((isValid(dimension.value) && isValid(currentPath.value) && currentPath.value === dimension.value) ||\n !isValid(dimension.value) ||\n !isValid(currentPath.value)));\n\n if (isMatch) {\n const children = dimension.children as IHeaderTreeDefine[];\n\n // 如果是最后一级路径\n if (pathIndex === paths.length - 1) {\n if (needLowestLevel) {\n // 需要最底层:如果没有子节点,或者子节点中有axis节点,则返回当前节点\n const hasAxisNode =\n checkAxisNode && children && children.some((row: IHeaderTreeDefine) => row.dimensionKey === 'axis');\n if (!children?.length || hasAxisNode) {\n return dimension as ITreeLayoutHeadNode;\n }\n // 如果有子节点且没有axis节点,说明这不是最底层,需要递归查找叶子节点\n // 查找第一个满足条件的叶子节点(没有子节点或子节点中有axis的节点)\n const findLeafNode = (nodes: IHeaderTreeDefine[]): ITreeLayoutHeadNode | undefined => {\n for (const node of nodes) {\n const nodeChildren = node.children as IHeaderTreeDefine[];\n const nodeHasAxis =\n checkAxisNode &&\n nodeChildren &&\n nodeChildren.some((row: IHeaderTreeDefine) => row.dimensionKey === 'axis');\n if (!nodeChildren?.length || nodeHasAxis) {\n return node as ITreeLayoutHeadNode;\n }\n const leaf = findLeafNode(nodeChildren);\n if (leaf) {\n return leaf;\n }\n }\n return undefined;\n };\n const leafNode = findLeafNode(children);\n if (leafNode) {\n return leafNode;\n }\n } else {\n // 不需要最底层,直接返回当前节点\n return dimension as ITreeLayoutHeadNode;\n }\n }\n\n // 如果还有子节点,继续向下匹配\n if (children?.length) {\n const result = this.matchDimensionPath(paths, children, needLowestLevel, checkAxisNode, pathIndex + 1);\n if (result) {\n return result;\n }\n // 如果向下匹配失败,继续尝试当前层级的其他节点(回溯)\n } else if (pathIndex === paths.length - 1) {\n // 是最后一级但没有子节点,返回当前节点\n return dimension as ITreeLayoutHeadNode;\n }\n }\n }\n\n return undefined;\n };\n\n /**\n * 通过dimensionPath获取到对应的表头地址col row, dimensionPath不要求必须按照表头层级顺序传递\n * @param dimensions\n * @returns\n */\n getCellAdressByHeaderPath(\n dimensionPaths: // | {\n // colHeaderPaths: IDimensionInfo[];\n // rowHeaderPaths: IDimensionInfo[];\n // }\n IPivotTableCellHeaderPaths | IDimensionInfo[]\n ): CellAddress | undefined {\n let colHeaderPaths: IDimensionInfo[];\n let rowHeaderPaths: IDimensionInfo[];\n let isCornerCell = false;\n // forceBody 的逻辑TODO去除,逻辑处理不当,去除时需要考虑历史包袱:https://github.com/VisActor/VTable/issues/544\n let forceBody = false;\n if (Array.isArray(dimensionPaths)) {\n if (dimensionPaths.length > this.rowDimensionKeys.length + this.colDimensionKeys.length) {\n //如果传入的path长度比行列维度层级多的话 无法匹配\n return undefined;\n }\n // 如果传入的是整体的path 按照行列维度区分开\n colHeaderPaths = dimensionPaths.filter(\n (path: IDimensionInfo) =>\n this.colDimensionKeys.indexOf(path.dimensionKey) >= 0 ||\n (this.colDimensionKeys.indexOf(this.indicatorDimensionKey) >= 0 && path.indicatorKey)\n );\n rowHeaderPaths = dimensionPaths.filter(\n (path: IDimensionInfo) =>\n this.rowDimensionKeys.indexOf(path.dimensionKey) >= 0 ||\n (this.rowDimensionKeys.indexOf(this.indicatorDimensionKey) >= 0 && path.indicatorKey)\n );\n } else {\n colHeaderPaths = dimensionPaths.colHeaderPaths;\n rowHeaderPaths = dimensionPaths.rowHeaderPaths;\n if (dimensionPaths?.cellLocation === 'body' && this._table.isPivotTable()) {\n forceBody = true;\n }\n }\n\n if (!Array.isArray(colHeaderPaths) && !Array.isArray(rowHeaderPaths)) {\n return undefined;\n }\n // 行列维度path根据key排序\n colHeaderPaths?.sort((a, b) => {\n return (\n this.colDimensionKeys.indexOf(a.dimensionKey ?? this.indicatorDimensionKey) -\n this.colDimensionKeys.indexOf(b.dimensionKey ?? this.indicatorDimensionKey)\n );\n });\n rowHeaderPaths?.sort((a, b) => {\n return (\n this.fullRowDimensionKeys.indexOf(a.dimensionKey ?? this.indicatorDimensionKey) -\n this.fullRowDimensionKeys.indexOf(b.dimensionKey ?? this.indicatorDimensionKey)\n );\n });\n\n colHeaderPaths?.forEach(a => {\n if (a.isPivotCorner) {\n isCornerCell = true;\n }\n });\n rowHeaderPaths?.forEach(a => {\n if (a.isPivotCorner) {\n isCornerCell = true;\n }\n });\n if (isCornerCell) {\n if (this.cornerSetting.titleOnDimension === 'all' && this.indicatorsAsCol && colHeaderPaths.length === 0) {\n for (let i = 0; i < this.rowDimensionKeys.length; i++) {\n if (rowHeaderPaths[0]?.dimensionKey === this.rowDimensionKeys[i]) {\n return { col: i + this.leftRowSeriesNumberColumnCount, row: this.columnHeaderLevelCount - 1 };\n }\n }\n } else if (\n this.cornerSetting.titleOnDimension === 'all' &&\n !this.indicatorsAsCol &&\n rowHeaderPaths.length === 0\n ) {\n for (let i = 0; i < this.colDimensionKeys.length; i++) {\n if (colHeaderPaths[0]?.dimensionKey === this.colDimensionKeys[i]) {\n return { col: this.rowHeaderLevelCount - 1, row: i };\n }\n }\n } else if (\n this.cornerSetting.titleOnDimension === 'row' ||\n (this.cornerSetting.titleOnDimension === 'all' && !this.indicatorsAsCol)\n ) {\n for (let i = 0; i < this.rowDimensionKeys.length; i++) {\n if (rowHeaderPaths[0]?.dimensionKey === this.rowDimensionKeys[i]) {\n return { col: i + this.leftRowSeriesNumberColumnCount, row: 0 };\n }\n }\n } else {\n for (let i = 0; i < this.colDimensionKeys.length; i++) {\n if (colHeaderPaths[0]?.dimensionKey === this.colDimensionKeys[i]) {\n return { col: 0, row: i };\n }\n }\n }\n }\n let needLowestLevel_colPaths = false; // needLowestLevel来标记是否需要 提供到最底层的维度层级信息\n let needLowestLevel_rowPaths = false; // needLowestLevel来标记是否需要 提供到最底层的维度层级信息\n // 如果行列维度都有值 说明是匹配body单元格 那这个时候 维度层级应该是满的\n if (colHeaderPaths?.length >= 1 && rowHeaderPaths?.length >= 1) {\n needLowestLevel_colPaths = true;\n needLowestLevel_rowPaths = true;\n }\n if ((colHeaderPaths?.length ?? 0) && colHeaderPaths.length >= this._getColumnHeaderTreeExpandedMaxLevelCount()) {\n needLowestLevel_colPaths = true;\n }\n if ((rowHeaderPaths?.length ?? 0) && rowHeaderPaths.length >= this._getRowHeaderTreeExpandedMaxLevelCount()) {\n needLowestLevel_rowPaths = true;\n }\n let col;\n let row;\n let defaultCol;\n let defaultRow;\n let rowDimensionFinded;\n let colDimensionFinded;\n\n // 按照colHeaderPaths维度层级寻找到底层维度值节点\n if (colHeaderPaths) {\n colDimensionFinded = this.matchDimensionPath(colHeaderPaths, this.columnTree, needLowestLevel_colPaths) as\n | ITreeLayoutHeadNode\n | undefined;\n }\n // 按照rowHeaderPaths维度层级寻找到底层维度值节点\n if (rowHeaderPaths?.length >= 1) {\n if (this.rowHierarchyType === 'tree') {\n // 先根据最后一个path获取到所有匹配该维度的pathCellIds\n const rowDimension = rowHeaderPaths[rowHeaderPaths.length - 1];\n const cellIDs: LayoutObjectId[] = this.headerObjects\n .filter((hd: HeaderData) => {\n return (\n (hd?.field === rowDimension.dimensionKey || hd?.field === rowDimension.indicatorKey) &&\n hd?.title === rowDimension.value\n );\n })\n .map((hd: HeaderData) => {\n return hd.id;\n });\n\n const findedCellIdPaths = this._rowHeaderCellIds.filter(rowHdCellIDs => {\n return cellIDs.indexOf(rowHdCellIDs[rowHdCellIDs.length - 1]) >= 0;\n });\n // 从上述过程中找到的pathCellIds中找到正确匹配完整路径rowHeaderPaths的一个 然后计算row行号\n const findedCellIdPath = findedCellIdPaths.find(pathIds => {\n const fullCellIds = this.findFullCellIds(pathIds);\n return (\n fullCellIds.length === rowHeaderPaths.length &&\n fullCellIds.every(id => {\n const curHd = this._headerObjectMap[id];\n return rowHeaderPaths.find(rowDimensionPath => {\n return rowDimensionPath.dimensionKey === curHd.field && rowDimensionPath.value === curHd.title;\n });\n })\n );\n });\n row = this._rowHeaderCellIds.indexOf(findedCellIdPath) + this.columnHeaderLevelCount;\n } else {\n rowDimensionFinded = this.matchDimensionPath(rowHeaderPaths, this.rowTree, needLowestLevel_rowPaths, true) as\n | ITreeLayoutHeadNode\n | undefined;\n }\n }\n\n // 如果是body单元格 需要找到行列对应的维度值节点\n if (!forceBody && needLowestLevel_colPaths && needLowestLevel_rowPaths) {\n if ((!rowDimensionFinded && !isValid(row)) || !colDimensionFinded) {\n return undefined;\n }\n }\n // 通过dimension获取col和row\n if (rowDimensionFinded || forceBody) {\n row = this.columnHeaderLevelCount;\n const { startInTotal, afterSpanLevel } = (rowDimensionFinded as ITreeLayoutHeadNode) ?? defaultDimension;\n row += startInTotal ?? 0;\n if (this.rowHierarchyType === 'grid') {\n // defaultCol = (this.rowHeaderTitle ? afterSpanLevel + 1 : afterSpanLevel) + this.leftRowSeriesNumberColumnCount;\n // 传入rowHeaderPaths是合并单元格如行总计的path数据的情况,上面defaultCol总是返回0 所以需要修改如下:\n //检查rowHeaderPaths 和this.rowDimensionKeys数组中的维度key是否匹配\n const isMatch = rowHeaderPaths.every((path: IDimensionInfo, index: number) => {\n return this.rowDimensionKeys[index] === path.dimensionKey;\n });\n if (isMatch) {\n const col = rowHeaderPaths.length - 1;\n defaultCol = (this.rowHeaderTitle ? col + 1 : col) + this.leftRowSeriesNumberColumnCount;\n } else {\n defaultCol =\n (this.rowHeaderTitle ? afterSpanLevel + 1 : afterSpanLevel) + this.leftRowSeriesNumberColumnCount;\n }\n } else {\n defaultCol = 0;\n } //树形展示的情况下 肯定是在第0列\n }\n if (colDimensionFinded || forceBody) {\n col = this.rowHeaderLevelCount + this.leftRowSeriesNumberColumnCount;\n const { startInTotal, afterSpanLevel } = (colDimensionFinded as ITreeLayoutHeadNode) ?? defaultDimension;\n col += startInTotal ?? 0;\n defaultRow = this.columnHeaderTitle ? afterSpanLevel + 1 : afterSpanLevel;\n }\n if (isValid(col) || isValid(row)) {\n return { col: col ?? defaultCol, row: row ?? defaultRow };\n }\n // 上述通过rowHeaderPaths colHeaderPaths和rowTree colTree匹配不到行列号,需要特殊处理\n if (rowHeaderPaths.length > 0) {\n //表示寻找的是行表头的某个列号\n //匹配和this.rowDimensionKeys数组中的维度key,找到对应的列号\n //检查rowHeaderPaths 和this.rowDimensionKeys数组中的维度key是否匹配\n const isMatch = rowHeaderPaths.every((path: IDimensionInfo, index: number) => {\n return this.rowDimensionKeys[index] === path.dimensionKey;\n });\n if (isMatch) {\n const col = rowHeaderPaths.length - 1;\n return { col: (this.rowHeaderTitle ? col + 1 : col) + this.leftRowSeriesNumberColumnCount, row: undefined };\n }\n // const col = rowHeaderPaths.reduce((acc, path) => {\n // const index = this.rowDimensionKeys.indexOf(path.dimensionKey);\n // if (index >= 0) {\n // acc += 1;\n // }\n // return acc;\n // }, -1);\n // return { col: (this.rowHeaderTitle ? col + 1 : col) + this.leftRowSeriesNumberColumnCount, row: undefined };\n }\n return undefined;\n }\n\n setChartInstance(_col: number, _row: number, chartInstance: any) {\n const paths = this.getCellHeaderPaths(_col, _row);\n let indicatorObj;\n if (this.indicatorsAsCol) {\n const indicatorKey = paths.colHeaderPaths.find(colPath => colPath.indicatorKey)?.indicatorKey;\n indicatorObj = this._indicators?.find(indicator => indicator.indicatorKey === indicatorKey);\n } else {\n const indicatorKey = paths.rowHeaderPaths.find(rowPath => rowPath.indicatorKey)?.indicatorKey;\n indicatorObj = this._indicators?.find(indicator => indicator.indicatorKey === indicatorKey);\n }\n if (typeof indicatorObj?.chartSpec === 'function') {\n return;\n }\n indicatorObj && (indicatorObj.chartInstance = chartInstance);\n }\n\n getChartInstance(_col: number, _row: number) {\n const paths = this.getCellHeaderPaths(_col, _row);\n let indicatorObj;\n if (this.indicatorsAsCol) {\n const indicatorKey = paths.colHeaderPaths.find(colPath => colPath.indicatorKey)?.indicatorKey;\n indicatorObj = this._indicators?.find(indicator => indicator.indicatorKey === indicatorKey);\n } else {\n const indicatorKey = paths.rowHeaderPaths.find(rowPath => rowPath.indicatorKey)?.indicatorKey;\n indicatorObj = this._indicators?.find(indicator => indicator.indicatorKey === indicatorKey);\n }\n return indicatorObj?.chartInstance;\n }\n checkHasChart() {\n return checkHasChart(this);\n }\n\n getDimension(dimensionKey: string, type: 'column' | 'row'): any {\n if (type === 'column') {\n return this.columnsDefine?.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === dimensionKey\n );\n } else if (type === 'row') {\n return this.rowsDefine?.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === dimensionKey\n );\n }\n }\n\n getAxisConfigInPivotChart(col: number, row: number): any {\n if (\n ((this.isFrozenColumn(col, row) || this.isRightFrozenColumn(col, row)) &&\n isHasCartesianChartInline(col, row, 'row', this)) ||\n ((this.isFrozenRow(col, row) || this.isBottomFrozenRow(col, row)) &&\n isHasCartesianChartInline(col, row, 'col', this))\n ) {\n const getAxisConfigInPivotChart = Factory.getFunction('getAxisConfigInPivotChart') as GetAxisConfigInPivotChart;\n const config = getAxisConfigInPivotChart(col, row, this);\n if (config?.visible === false) {\n return undefined;\n }\n return config;\n }\n return undefined;\n }\n isEmpty(col: number, row: number) {\n if (!this._table.isPivotChart()) {\n return false;\n }\n if (this.isLeftBottomCorner(col, row)) {\n return true;\n }\n if (this.isRightBottomCorner(col, row)) {\n return true;\n }\n if (this.isRightTopCorner(col, row)) {\n return true;\n }\n return false;\n }\n isAxisCell(col: number, row: number) {\n if (!this._table.isPivotChart()) {\n return false;\n }\n if (this.indicatorKeys.length >= 1 && checkHasCartesianChart(this.indicatorsDefine)) {\n if (\n (this.isBottomFrozenRow(col, row) && isHasCartesianChartInline(col, row, 'col', this)) ||\n (this.isRightFrozenColumn(col, row) && isHasCartesianChartInline(col, row, 'row', this))\n ) {\n return true;\n }\n if (\n this.isRowHeader(col, row) &&\n col === this.rowHeaderLevelCount - 1 &&\n isHasCartesianChartInline(col, row, 'row', this)\n ) {\n return true;\n }\n if (\n this.hasTopIndicatorAxis &&\n this.indicatorsAsCol &&\n row === this.columnHeaderLevelCount - 1 &&\n isHasCartesianChartInline(col, row, 'col', this)\n ) {\n return true;\n }\n }\n return false;\n }\n getChartAxes(col: number, row: number): any[] {\n if (isCartesianChart(col, row, this) || this.isAxisCell(col, row)) {\n return getChartAxes(col, row, this);\n }\n return undefined;\n }\n getRawChartSpec(col: number, row: number): any {\n return getRawChartSpec(col, row, this);\n }\n\n getChartSpec(col: number, row: number): any {\n return getChartSpec(col, row, this);\n }\n isShareChartSpec(col: number, row: number): any {\n return isShareChartSpec(col, row, this);\n }\n getChartDataId(col: number, row: number): any {\n return getChartDataId(col, row, this);\n }\n /** 是否当chart没有数据时 图表单元格不绘制chart的任何内容 如网格线 */\n isNoChartDataRenderNothing(col: number, row: number): boolean {\n return isNoChartDataRenderNothing(col, row, this);\n }\n setPagination(pagination: IPagination): void {\n this.clearCellRangeMap();\n this._table.internalProps.useOneRowHeightFillAll = false;\n this.pagination = pagination;\n\n if (\n this.rowHierarchyType === 'grid' &&\n isValid(this.pagination?.perPageCount) &&\n isValid(this.pagination?.currentPage)\n ) {\n //调整perPageCount的数量 需要是indicatorKeys.length的整数倍\n if (this.indicatorsAsCol === false) {\n this.pagination.perPageCount =\n Math.ceil(this.pagination.perPageCount / this.indicatorKeys.length) * this.indicatorKeys.length;\n }\n const { perPageCount, currentPage } = this.pagination;\n // const startIndex = Math.ceil((perPageCount * (currentPage || 0)) / this.indicatorKeys.length);\n // const endIndex = startIndex + Math.ceil(perPageCount / this.indicatorKeys.length);\n this.currentPageStartIndex = perPageCount * (currentPage || 0);\n this.currentPageEndIndex = this.currentPageStartIndex + perPageCount;\n this._rowHeaderCellIds = this._rowHeaderCellIds_FULL?.slice(this.currentPageStartIndex, this.currentPageEndIndex);\n this._rowHeaderCellFullPathIds = this._rowHeaderCellFullPathIds_FULL?.slice(\n this.currentPageStartIndex,\n this.currentPageEndIndex\n );\n } else {\n this.currentPageStartIndex = 0;\n this.currentPageEndIndex = this._rowHeaderCellIds_FULL.length;\n this._rowHeaderCellIds = this._rowHeaderCellIds_FULL?.slice(this.currentPageStartIndex, this.currentPageEndIndex);\n this._rowHeaderCellFullPathIds = this._rowHeaderCellFullPathIds_FULL?.slice(\n this.currentPageStartIndex,\n this.currentPageEndIndex\n );\n }\n this.pagination && (this.pagination.totalCount = this._rowHeaderCellIds_FULL?.length);\n }\n release() {\n const activeChartInstance = (this._table as PivotTable)._getActiveChartInstance();\n activeChartInstance?.release();\n this._indicators?.forEach(indicatorObject => {\n indicatorObject.chartInstance?.release();\n });\n clearAllChartInstanceList(this._table, true);\n clearAndReleaseBrushingChartInstance(this._table.scenegraph);\n }\n\n getHeadNode(col: number, row: number) {\n let dimensions: IDimensionInfo[];\n const headerPaths = this.getCellHeaderPaths(col, row);\n if (headerPaths.rowHeaderPaths && (headerPaths.rowHeaderPaths?.length ?? 0) > 0) {\n dimensions = headerPaths.rowHeaderPaths?.slice(0, headerPaths.rowHeaderPaths.length);\n } else if (headerPaths.colHeaderPaths && headerPaths.colHeaderPaths.length > 0) {\n dimensions = headerPaths.colHeaderPaths.slice(0, headerPaths.colHeaderPaths.length);\n }\n return this.getHeadNodeByRowOrColDimensions(dimensions, col, row);\n }\n getHeadNodeByRowOrColDimensions(dimensions: IDimensionInfo[], col?: number, row?: number) {\n if (!Array.isArray(dimensions)) {\n return undefined;\n }\n let rowArr = this.rowTree;\n let rowDimension;\n let colArr = this.columnTree;\n let colDimension;\n\n // 处理带有扩展row时 获取node错误问题 rowArr需要变更为有相应扩展后的tree\n if (\n isValid(row) &&\n isValid(col) &&\n this.rowHierarchyType === 'tree' &&\n this.extensionRows &&\n col >= 1 + this.leftRowSeriesNumberColumnCount\n ) {\n const hdId = this.getCellId(col - 1, row);\n rowArr = this._rowHeaderExtensionTree[hdId].tree.children;\n }\n for (let i = 0; i < dimensions.length; i++) {\n const highlightDimension = dimensions[i];\n if (\n (highlightDimension.isPivotCorner || !isValid(highlightDimension.value)) && //判断角头: isPivotCorner或者 没有维度值\n i === dimensions.length - 1\n ) {\n // 判断角表头位置\n return undefined;\n }\n // 判断级别,找到distDimension\n let isCol = false;\n for (let j = 0; j < colArr.length; j++) {\n const dimension = colArr[j];\n if (\n (isValid(highlightDimension.dimensionKey) &&\n dimension.dimensionKey === highlightDimension.dimensionKey &&\n dimension.value === highlightDimension.value) ||\n (isValid(highlightDimension.indicatorKey) &&\n dimension.indicatorKey === highlightDimension.indicatorKey &&\n (dimension.value === highlightDimension.value ||\n !isValid(highlightDimension.value) ||\n !isValid(dimension.value)))\n ) {\n colArr = dimension.children as IHeaderTreeDefine[];\n colDimension = dimension;\n isCol = true;\n break;\n }\n }\n if (isCol) {\n continue;\n }\n for (let k = 0; k < (rowArr?.length ?? 0); k++) {\n const dimension = rowArr[k];\n if (\n (isValid(highlightDimension.dimensionKey) &&\n dimension.dimensionKey === highlightDimension.dimensionKey &&\n dimension.value === highlightDimension.value) ||\n (isValid(highlightDimension.indicatorKey) &&\n dimension.indicatorKey === highlightDimension.indicatorKey &&\n (dimension.value === highlightDimension.value ||\n !isValid(highlightDimension.value) ||\n !isValid(dimension.value)))\n ) {\n rowArr = dimension.children as IHeaderTreeDefine[];\n rowDimension = dimension;\n break;\n }\n }\n }\n\n // 通过dimension获取col和row\n if (rowDimension) {\n return rowDimension;\n } else if (colDimension) {\n return colDimension;\n }\n return undefined;\n }\n clearCellRangeMap() {\n // this._cellRangeMap.clear();\n this._largeCellRangeCache.length = 0;\n this._CellHeaderPathMap = new Map();\n }\n\n /**\n * 获取图表对应的维度key非指标\n * */\n getDimensionKeyInChartSpec(_col: number, _row: number, type?: 'xField' | 'yField') {\n let dimensionKey: string;\n if (this.indicatorsAsCol === false) {\n const chartSpec = this.getRawChartSpec(_col, _row);\n if (chartSpec) {\n dimensionKey =\n type === 'yField'\n ? chartSpec.yField ?? chartSpec?.series?.[0]?.yField\n : chartSpec.type === 'histogram' //特殊处理histogram直方图xField和x2Field\n ? chartSpec.x2Field\n : chartSpec.xField ?? chartSpec?.series?.[0]?.xField;\n\n if (dimensionKey) {\n return dimensionKey;\n }\n }\n //考虑pie和bar 同时配置的情况 , 只有上面的判断逻辑是不足的,例如https://bugserver.cn.goofy.app/case?product=VTable&fileid=65a66c5c518457638fa485bf\n for (let i = 0; i < this.indicatorsDefine.length; i++) {\n const chartSpec = (this.indicatorsDefine[i] as IChartIndicator).chartSpec;\n if (chartSpec) {\n dimensionKey =\n type === 'yField'\n ? chartSpec.yField ?? chartSpec?.series?.[0]?.yField\n : chartSpec.type === 'histogram' //特殊处理histogram直方图xField和x2Field\n ? chartSpec.x2Field\n : chartSpec.xField ?? chartSpec?.series?.[0]?.xField;\n\n if (dimensionKey) {\n return dimensionKey;\n }\n }\n }\n } else {\n const chartSpec = this.getRawChartSpec(_col, _row);\n if (chartSpec) {\n dimensionKey =\n type === 'xField'\n ? chartSpec.type === 'histogram' //特殊处理histogram直方图xField和x2Field\n ? chartSpec.x2Field\n : chartSpec.xField ?? chartSpec?.series?.[0]?.xField\n : chartSpec.type === 'histogram' //特殊处理histogram直方图xField和x2Field\n ? chartSpec.y2Field\n : chartSpec.yField ?? chartSpec?.series?.[0]?.yField;\n if (dimensionKey) {\n return dimensionKey;\n }\n }\n //考虑pie和bar 同时配置的情况 , 只有上面的判断逻辑是不足的,例如https://bugserver.cn.goofy.app/case?product=VTable&fileid=65a66c5c518457638fa485bf\n for (let i = 0; i < this.indicatorsDefine.length; i++) {\n const chartSpec = (this.indicatorsDefine[i] as IChartIndicator).chartSpec;\n if (chartSpec) {\n dimensionKey =\n type === 'xField'\n ? chartSpec.type === 'histogram' //特殊处理histogram直方图xField和x2Field\n ? chartSpec.x2Field\n : chartSpec.xField ?? chartSpec?.series?.[0]?.xField\n : chartSpec.yField ?? chartSpec?.series?.[0]?.yField;\n if (dimensionKey) {\n return dimensionKey;\n }\n }\n }\n }\n return null;\n }\n\n /** 将_selectedDataItemsInChart保存的数据状态同步到各个图表实例中 */\n _generateChartState() {\n const select_filter = (datum: any) => {\n if ((this._table as PivotChart)._selectedDataItemsInChart.length >= 1) {\n const match = (this._table as PivotChart)._selectedDataItemsInChart.find(item => {\n for (const itemKey in item) {\n if (typeof item[itemKey] !== 'object' && item[itemKey] !== datum[itemKey]) {\n return false;\n }\n }\n return true;\n });\n return !!match;\n } else if ((this._table as PivotChart)._selectedDimensionInChart?.length) {\n // 判断维度点击\n const match = (this._table as PivotChart)._selectedDimensionInChart.every(item => {\n if (typeof item.value !== 'object' && datum[item.key] !== item.value) {\n return false;\n }\n return true;\n });\n return !!match;\n }\n return false;\n };\n const selected_reverse = (datum: any) => {\n if ((this._table as PivotChart)._selectedDataItemsInChart.length >= 1) {\n const match = (this._table as PivotChart)._selectedDataItemsInChart.find(item => {\n for (const itemKey in item) {\n if (typeof item[itemKey] !== 'object' && item[itemKey] !== datum[itemKey]) {\n return false;\n }\n }\n return true;\n });\n return !match;\n } else if ((this._table as PivotChart)._selectedDimensionInChart?.length) {\n // 判断维度点击\n const match = (this._table as PivotChart)._selectedDimensionInChart.every(item => {\n if (typeof item.value !== 'object' && datum[item.key] !== item.value) {\n return false;\n }\n return true;\n });\n return !match;\n }\n return false;\n };\n const state = {\n vtable_selected: {\n filter: (datum: any) => {\n if ((this._table as PivotChart).options.chartDimensionLinkage?.selectedStateFilter) {\n return (this._table as PivotChart).options.chartDimensionLinkage.selectedStateFilter(datum);\n }\n if ((this._table as PivotChart)._selectedDataMode === 'click') {\n return select_filter(datum);\n }\n return false;\n }\n },\n vtable_selected_reverse: {\n filter: (datum: any) => {\n if ((this._table as PivotChart).options.chartDimensionLinkage?.selectedReverseStateFilter) {\n return (this._table as PivotChart).options.chartDimensionLinkage.selectedReverseStateFilter(datum);\n }\n if ((this._table as PivotChart)._selectedDataMode === 'click') {\n return selected_reverse(datum);\n }\n return false;\n }\n },\n\n inBrush: {\n filter: (datum: any) => {\n if ((this._table as PivotChart).options.chartDimensionLinkage?.inBrushStateFilter) {\n return (this._table as PivotChart).options.chartDimensionLinkage.inBrushStateFilter(datum);\n }\n if ((this._table as PivotChart)._selectedDataMode === 'brush') {\n return select_filter(datum);\n }\n return false;\n }\n },\n outOfBrush: {\n filter: (datum: any) => {\n if ((this._table as PivotChart).options.chartDimensionLinkage?.outOfBrushStateFilter) {\n return (this._table as PivotChart).options.chartDimensionLinkage.outOfBrushStateFilter(datum);\n }\n if ((this._table as PivotChart)._selectedDataMode === 'brush') {\n return selected_reverse(datum);\n }\n return false;\n }\n }\n };\n return state;\n }\n updateDataStateToChartInstance(activeChartInstance?: any): void {\n if (activeChartInstance?.getSpec().select?.enable !== false) {\n if (!activeChartInstance) {\n activeChartInstance = (this._table as PivotChart)._getActiveChartInstance();\n }\n const state = this._generateChartState();\n this._indicators.forEach((_indicatorObject: IndicatorData) => {\n const chartInstance = _indicatorObject.chartInstance;\n if (_indicatorObject.chartSpec.select?.enable !== false) {\n chartInstance.updateState(state);\n }\n });\n activeChartInstance?.updateState(state);\n }\n }\n updateDataStateToActiveChartInstance(activeChartInstance?: any): void {\n if (activeChartInstance?.getSpec().select?.enable !== false) {\n if (!activeChartInstance) {\n activeChartInstance = (this._table as PivotChart)._getActiveChartInstance();\n }\n const state = this._generateChartState();\n activeChartInstance?.updateState(state);\n }\n }\n\n /**\n * 获取图表对应的指标值\n * */\n getIndicatorKeyInChartSpec(_col: number, _row: number) {\n // const paths = this.getCellHeaderPaths(_col, _row);\n // let indicatorObj;\n // if (this.indicatorsAsCol) {\n // const indicatorKey = paths.colHeaderPaths.find(colPath => colPath.indicatorKey)?.indicatorKey;\n // indicatorObj = this._indicatorObjects.find(indicator => indicator.indicatorKey === indicatorKey);\n // } else {\n // const indicatorKey = paths.rowHeaderPaths.find(rowPath => rowPath.indicatorKey)?.indicatorKey;\n // indicatorObj = this._indicatorObjects.find(indicator => indicator.indicatorKey === indicatorKey);\n // }\n // const chartSpec = indicatorObj?.chartSpec;\n const chartSpec = this.getRawChartSpec(_col, _row);\n const indicatorKeys: string[] = [];\n if (chartSpec) {\n if (chartSpec.type === 'boxPlot') {\n return [chartSpec.maxField];\n }\n if (chartSpec.series || chartSpec.xField || chartSpec.yField) {\n if (this.indicatorsAsCol === false) {\n if (chartSpec.series) {\n chartSpec.series.forEach((chartSeries: any) => {\n const yField = chartSeries.yField;\n indicatorKeys.push(yField);\n });\n } else {\n indicatorKeys.push(chartSpec.yField);\n }\n } else {\n if (chartSpec.series) {\n chartSpec.series.forEach((chartSeries: any) => {\n const xField = chartSeries.xField;\n indicatorKeys.push(xField);\n });\n } else {\n indicatorKeys.push(chartSpec.xField);\n }\n }\n return indicatorKeys;\n } else if (chartSpec.valueField) {\n indicatorKeys.push(chartSpec.valueField);\n }\n if (indicatorKeys.length >= 1) {\n return indicatorKeys;\n }\n }\n return null;\n }\n /** 获取某一图表列的最优高度,计算逻辑是根据图表的yField的维度值个数 * barWidth */\n getOptimunHeightForChart(row: number, isHeatmap: boolean) {\n const path = this.getCellHeaderPaths(this.rowHeaderLevelCount, row).rowHeaderPaths;\n if (isHeatmap) {\n //如果是热力图,最后一层指标不能参与路径匹配\n if (path[path.length - 1].indicatorKey) {\n path.pop();\n }\n }\n let collectedValues: any;\n for (const key in this.dataset.collectValuesBy) {\n if (this.dataset.collectValuesBy[key].type === 'yField' && !this.dataset.collectValuesBy[key].range) {\n collectedValues =\n this.dataset.collectedValues[key]?.[\n path\n .map(pathObj => {\n return pathObj.value;\n })\n .join(this.dataset.stringJoinChar)\n ];\n break;\n }\n }\n let height;\n if (this._chartItemBandSize) {\n // height = (collectedValues?.length ?? 0) * this._chartItemBandSize;\n height = scaleWholeRangeSize(\n collectedValues?.length ?? 0,\n this._chartItemBandSize,\n this._chartPaddingInner,\n this._chartPaddingOuter\n );\n } else {\n const barWidth = this._chartItemSpanSize || 25;\n height = (collectedValues?.length ?? 0) * (barWidth + (isHeatmap ? 0 : barWidth / 3));\n }\n const padding = getQuadProps(this._chartPadding ?? (this._table.theme.bodyStyle.padding as number) ?? 0);\n return height + padding[0] + padding[2];\n }\n /** 获取某一图表列的最优宽度,计算逻辑是根据图表的xField的维度值个数 * barWidth */\n getOptimunWidthForChart(col: number, isHeatmap: boolean) {\n const path = this.getCellHeaderPaths(col, this.columnHeaderLevelCount).colHeaderPaths;\n let collectedValues: any;\n for (const key in this.dataset.collectValuesBy) {\n if (this.dataset.collectValuesBy[key].type === 'xField' && !this.dataset.collectValuesBy[key].range) {\n collectedValues =\n this.dataset.collectedValues[key]?.[\n path\n .map(pathObj => {\n return pathObj.value;\n })\n .join(this.dataset.stringJoinChar)\n ];\n break;\n }\n }\n let width;\n if (this._chartItemBandSize) {\n // width = (collectedValues?.length ?? 0) * this._chartItemBandSize;\n width = scaleWholeRangeSize(\n collectedValues?.length ?? 0,\n this._chartItemBandSize,\n this._chartPaddingInner,\n this._chartPaddingOuter\n );\n } else {\n const barWidth = this._chartItemSpanSize || 25;\n width = (collectedValues?.length ?? 0) * (barWidth + (isHeatmap ? 0 : barWidth / 3));\n }\n\n const padding = getQuadProps(this._chartPadding ?? (this._table.theme.bodyStyle.padding as number) ?? 0);\n return width + padding[1] + padding[3];\n }\n\n get leftAxesCount(): number {\n if (!this._table.isPivotChart()) {\n return 0;\n }\n const axisOption = ((this._table as PivotChart).pivotChartAxes as ITableAxisOption[]).find(axisOption => {\n return axisOption.orient === 'left';\n });\n if (axisOption?.visible === false) {\n return 0;\n }\n if (this.indicatorsAsCol) {\n return 1; // 左侧维度轴\n }\n return 1; // 左侧主指标轴\n }\n get topAxesCount(): number {\n if (!this._table.isPivotChart()) {\n return 0;\n }\n const axisOption = ((this._table as PivotChart).pivotChartAxes as ITableAxisOption[]).find(axisOption => {\n return axisOption.orient === 'top';\n });\n if (axisOption?.visible === false) {\n return 0;\n }\n if (this.indicatorsAsCol && this.hasTopIndicatorAxis) {\n return 1; // 顶部副指标\n }\n return 0; // 顶部无轴\n }\n get rightAxesCount(): number {\n return this.rightFrozenColCount;\n }\n get bottomAxesCount(): number {\n return this.bottomFrozenRowCount;\n }\n getColKeysPath(col: number, row: number) {\n // const index = !this.indicatorsAsCol\n // ? col - this.rowHeaderLevelCount\n // : Math.floor((col - this.rowHeaderLevelCount) / this.indicatorKeys.length);\n // const colKey = this.dataset.colKeys[index];\n const path = this.getCellHeaderPaths(col, row);\n const colKey: string[] = [];\n if (path.colHeaderPaths.length) {\n path.colHeaderPaths.forEach(path => {\n if (path.dimensionKey) {\n colKey.push(path.value);\n }\n });\n }\n return colKey?.join(this.dataset.stringJoinChar);\n }\n getRowKeysPath(col: number, row: number) {\n // const index = this.indicatorsAsCol\n // ? row - this.columnHeaderLevelCount\n // : Math.floor((row - this.columnHeaderLevelCount) / this.indicatorKeys.length);\n // const rowKey = this.dataset.rowKeys[index];\n const path = this.getCellHeaderPaths(col, row);\n const rowKey: string[] = [];\n if (path.rowHeaderPaths.length) {\n path.rowHeaderPaths.forEach(path => {\n if (path.dimensionKey) {\n rowKey.push(path.value);\n }\n });\n }\n return rowKey?.join(this.dataset.stringJoinChar);\n }\n\n getIndicatorInfo(indicatorKey: string, indicatorValue = '') {\n const indicatorInfo = this.indicatorsDefine?.find(indicator => {\n if (typeof indicator === 'string') {\n return false;\n }\n if (indicatorKey) {\n return indicator.indicatorKey === indicatorKey;\n }\n if (indicatorValue) {\n return indicator.title === indicatorValue;\n }\n return false;\n }) as IIndicator;\n return indicatorInfo;\n }\n /** 获取行头树结构 */\n getLayoutColumnTree() {\n const tree: LayouTreeNode[] = [];\n const children = this.columnDimensionTree.tree.children;\n generateLayoutTree(tree, children);\n return tree;\n }\n /** 获取行头树结构 */\n getLayoutRowTree() {\n const tree: LayouTreeNode[] = [];\n const children = this.rowDimensionTree.tree.children;\n generateLayoutTree(tree, children);\n return tree;\n }\n /** 获取列头总共的行数(全部展开情况下) */\n getLayoutColumnTreeCount() {\n const children = this.columnDimensionTree.tree.children;\n const mainTreeCount = countLayoutTree(children, this.rowHierarchyType === 'tree');\n return mainTreeCount;\n }\n /** 获取行头总共的行数(全部展开情况下) */\n getLayoutRowTreeCount() {\n const children = this.rowDimensionTree.tree.children;\n const mainTreeCount = countLayoutTree(children, this.rowHierarchyType === 'tree');\n let totalCount = mainTreeCount;\n this.extensionRows?.forEach(extensionRow => {\n if (typeof extensionRow.rowTree !== 'function') {\n //如果是自定义函数的扩展树结构 忽略这个计算 因为太复杂 需要将每个函数需要的参数都构造好才行\n const thisTreeCount = countLayoutTree(extensionRow.rowTree as { children: any }[], true);\n totalCount *= thisTreeCount;\n }\n });\n return totalCount;\n }\n resetHeaderTree() {\n this.colIndex = 0;\n //和初始化代码逻辑一致 但未考虑透视图类型\n this._rowHeaderCellFullPathIds_FULL = [];\n this._columnHeaderCellFullPathIds = [];\n this._columnHeaderCellIds = [];\n const dataset = this.dataset;\n // if (dataset) {\n this.rowTree = dataset.rowHeaderTree;\n this.columnTree = dataset.colHeaderTree;\n\n const beforeRowDimensions = this.rowDimensionTree.tree.children;\n this.rowTree?.forEach((node: IHeaderTreeDefine, index: number) => {\n const beforeRowDimension = beforeRowDimensions.find(\n item => item.dimensionKey === node.dimensionKey && item.value === node.value\n );\n if (beforeRowDimension) {\n (this._table as PivotTable)._syncHierarchyState(beforeRowDimension, node);\n }\n });\n\n this.columnDimensionTree = new DimensionTree(\n (this.columnTree as ITreeLayoutHeadNode[]) ?? [],\n this.sharedVar,\n this.columnHierarchyType,\n this.columnHierarchyType !== 'grid' ? this.columnExpandLevel : undefined\n );\n this.rowDimensionTree = new DimensionTree(\n (this.rowTree as ITreeLayoutHeadNode[]) ?? [],\n this.sharedVar,\n this.rowHierarchyType,\n this.rowHierarchyType !== 'grid' ? this.rowExpandLevel : undefined\n );\n\n this.resetColumnHeaderLevelCount();\n\n //生成列表头单元格\n this._generateColHeaderIds();\n\n this.colIndex = 0;\n //生成行表头单元格\n this._generateRowHeaderIds();\n this._rowHeaderCellFullPathIds_FULL = transpose(this._rowHeaderCellFullPathIds_FULL);\n\n this._headerObjectMap = this._headerObjects.reduce((o, e) => {\n o[e.id as number] = e;\n return o;\n }, {} as { [key: LayoutObjectId]: HeaderData });\n\n this._CellHeaderPathMap = new Map();\n this._largeCellRangeCache.length = 0;\n this.generateCellIdsConsiderHideHeader();\n this.setPagination(this.pagination);\n }\n isSeriesNumberInHeader(col: number, row: number): boolean {\n if (this.leftRowSeriesNumberColumnCount > 0 && col >= 0 && row >= 0 && col < this.leftRowSeriesNumberColumnCount) {\n if (row < this.headerLevelCount) {\n return true;\n }\n }\n if (\n this.rightRowSeriesNumberColumnCount > 0 &&\n row >= 0 &&\n col >= this.colCount - this.rightRowSeriesNumberColumnCount\n ) {\n if (row < this.headerLevelCount) {\n return true;\n }\n }\n return false;\n }\n isSeriesNumberInBody(col: number, row: number): boolean {\n if (this.leftRowSeriesNumberColumnCount > 0 && col >= 0 && col < this.leftRowSeriesNumberColumnCount) {\n if (row >= this.headerLevelCount) {\n return true;\n }\n }\n if (this.rightRowSeriesNumberColumnCount > 0 && col >= this.colCount - this.rightRowSeriesNumberColumnCount) {\n if (row >= this.headerLevelCount) {\n return true;\n }\n }\n return false;\n }\n isSeriesNumber(col: number, row: number): boolean {\n if (isValid(col) && isValid(row)) {\n if (\n this.leftRowSeriesNumberColumnCount > 0 &&\n col >= 0 &&\n row >= 0 &&\n col < this.leftRowSeriesNumberColumnCount\n ) {\n return true;\n }\n if (\n this.rightRowSeriesNumberColumnCount > 0 &&\n row >= 0 &&\n col >= this.colCount - this.rightRowSeriesNumberColumnCount\n ) {\n return true;\n }\n }\n return false;\n }\n getSeriesNumberHeader(col: number, row: number) {\n if (this.leftRowSeriesNumberColumnCount > 0 && col >= 0 && col < this.leftRowSeriesNumberColumnCount) {\n if (row < this.headerLevelCount) {\n // return this.leftRowSeriesNumberColumn[col];\n return Object.assign({}, this.leftRowSeriesNumberColumn[col], {\n style: Object.assign(\n {},\n this._table.internalProps.theme.cornerHeaderStyle,\n this._table.internalProps.rowSeriesNumber.headerStyle\n )\n });\n }\n }\n if (\n this.rightRowSeriesNumberColumnCount > 0 &&\n col >= this.colCount - this.rightRowSeriesNumberColumnCount &&\n row < this.headerLevelCount\n ) {\n if (row < this.headerLevelCount) {\n return this.rightRowSeriesNumberColumn[col - (this.colCount - this.rightRowSeriesNumberColumnCount)];\n }\n }\n return undefined;\n }\n getSeriesNumberBody(col: number, row: number) {\n if (this.leftRowSeriesNumberColumnCount > 0 && col >= 0 && col < this.leftRowSeriesNumberColumnCount) {\n if (row >= this.headerLevelCount) {\n return this.leftRowSeriesNumberColumn[col];\n }\n }\n if (this.rightRowSeriesNumberColumnCount > 0 && col >= this.colCount - this.rightRowSeriesNumberColumnCount) {\n if (row >= this.headerLevelCount) {\n return this.rightRowSeriesNumberColumn[col - (this.colCount - this.rightRowSeriesNumberColumnCount)];\n }\n }\n return undefined;\n }\n\n /** 修改表头值 */\n changeTreeNodeTitle(col: number, row: number, value: string) {\n // const headerPaths = this.getCellHeaderPaths(col, row);\n // if (headerPaths.rowHeaderPaths.length > 0) {\n // const headerTreeNode = this.getHeadNode(headerPaths.rowHeaderPaths.slice(0, headerPaths.rowHeaderPaths.length));\n // headerTreeNode.value = value;\n // } else if (headerPaths.colHeaderPaths.length > 0) {\n // const headerTreeNode = this.getHeadNode(headerPaths.colHeaderPaths.slice(0, headerPaths.colHeaderPaths.length));\n // headerTreeNode.value = value;\n // }\n const headerTreeNode = this.getHeadNode(col, row);\n headerTreeNode.value = value;\n const id = this.getCellId(col, row);\n this._headerObjectMap[id as number].title = value;\n }\n changeCornerTitle(col: number, row: number, value: string) {\n if (this.isCornerHeader(col, row)) {\n const id = this.getCellId(col, row);\n this._headerObjectMap[id as number].title = value;\n }\n }\n generateCellIdsConsiderHideHeader() {\n // deal with hide header\n // 创建原数组的副本\n this._columnHeaderCellIds = this._columnHeaderCellFullPathIds.slice();\n if (!this.showColumnHeader) {\n if (this.indicatorsAsCol && !this.hideIndicatorName) {\n const indicatorIndex = this.colDimensionKeys.indexOf(IndicatorDimensionKeyPlaceholder);\n const indicatorIds: number[][] = this._columnHeaderCellIds.splice(indicatorIndex, 1);\n this._columnHeaderCellIds.splice(0, this._columnHeaderCellIds.length);\n this._columnHeaderCellIds.push(indicatorIds[0]);\n } else {\n this._columnHeaderCellIds.splice(0, this._columnHeaderCellIds.length);\n }\n }\n // else if (this.indicatorsAsCol) {\n // const indicatorsIds = this._columnHeaderCellIds[this._columnHeaderCellIds.length - 1];\n // for (let i = indicatorsIds.length - 1; i >= 0; i--) {\n // const id = indicatorsIds[i];\n // const define: IIndicator = this.headerObjects[id]?.define as any as IIndicator;\n // if ((define as any).indicatorKey && define.hide) {\n // let isHide = false;\n // if (typeof define.hide === 'function') {\n // isHide = define.hide({\n // dimensionPaths: this.getCellHeaderPaths(this.rowHeaderLevelCount + i, this.columnHeaderLevelCount - 1)\n // .colHeaderPaths as IDimensionInfo[],\n // table: this._table\n // });\n // } else {\n // isHide = define.hide;\n // }\n // //判断指标是否设置了hide\n // if (isHide) {\n // for (let j = 0; j < this._columnHeaderCellIds.length; j++) {\n // const _cellIds = this._columnHeaderCellIds[j];\n // _cellIds.splice(i, 1);\n // }\n // }\n // }\n // }\n // }\n // 创建原数组的副本\n this._rowHeaderCellIds_FULL = this._rowHeaderCellFullPathIds_FULL.slice();\n if (!this.showRowHeader) {\n if (!this.indicatorsAsCol && !this.hideIndicatorName) {\n const indicatorIndex = this.rowDimensionKeys.indexOf(IndicatorDimensionKeyPlaceholder);\n this._rowHeaderCellIds_FULL.forEach((cellIds: number[], index: number) => {\n const _cellIds = cellIds.slice();\n const indicator = _cellIds.splice(indicatorIndex, 1);\n _cellIds.splice(0, _cellIds.length);\n _cellIds.push(indicator[0]);\n this._rowHeaderCellIds_FULL[index] = _cellIds;\n });\n } else {\n this._rowHeaderCellIds_FULL.forEach((cellIds: number[], index: number) => {\n const _cellIds = cellIds.slice();\n _cellIds.splice(0, _cellIds.length);\n this._rowHeaderCellIds_FULL[index] = _cellIds;\n });\n }\n }\n // else if (!this.indicatorsAsCol) {\n // this._rowHeaderCellIds_FULL = this._rowHeaderCellFullPathIds_FULL;\n // const _rowIds = this._rowHeaderCellIds_FULL;\n // for (let i = _rowIds.length - 1; i >= 0; i--) {\n // const id = _rowIds[i][_rowIds[i].length - 1];\n // const define = this.headerObjects[id]?.define;\n // if ((define as any).indicatorKey && define.hide) {\n // this._rowHeaderCellIds_FULL.splice(i, 1);\n // }\n // }\n // }\n this._rowHeaderCellIds = this._rowHeaderCellIds_FULL.slice();\n // 创建原数组的副本\n this._cornerHeaderCellIds = this._cornerHeaderCellFullPathIds.slice();\n if (this.rowHeaderLevelCount === 0 || this.columnHeaderLevelCount === 0) {\n this._cornerHeaderCellIds = [];\n } else if (this.cornerSetting.titleOnDimension === 'row' && !this.showRowHeader) {\n if (!this.indicatorsAsCol && !this.hideIndicatorName) {\n const indicatorIndex = this.rowDimensionKeys.indexOf(IndicatorDimensionKeyPlaceholder);\n this._cornerHeaderCellIds.forEach((cellIds: number[], index: number) => {\n const _cellIds = cellIds.slice();\n const indicator = _cellIds.splice(indicatorIndex, 1);\n _cellIds.splice(0, _cellIds.length);\n _cellIds.push(indicator[0]);\n this._cornerHeaderCellIds[index] = _cellIds;\n });\n } else {\n this._cornerHeaderCellIds.forEach((cellIds: number[], index: number) => {\n const _cellIds = cellIds.slice();\n _cellIds.splice(0, _cellIds.length);\n this._cornerHeaderCellIds[index] = _cellIds;\n });\n }\n } else if (this.cornerSetting.titleOnDimension === 'column' && !this.showColumnHeader) {\n if (this.indicatorsAsCol && !this.hideIndicatorName) {\n const indicatorIndex = this.colDimensionKeys.indexOf(IndicatorDimensionKeyPlaceholder);\n const indicatorIds: number[][] = this._cornerHeaderCellIds.splice(indicatorIndex, 1);\n this._cornerHeaderCellIds.splice(0, this._cornerHeaderCellIds.length);\n this._cornerHeaderCellIds.push(indicatorIds[0]);\n } else {\n this._cornerHeaderCellIds.splice(0, this._cornerHeaderCellIds.length);\n }\n }\n //#region 纠正角头 处理角头和行头或者列头长度不一致的情况(grid-tree模式下会有这种情况发生)\n if (this.rowHierarchyType === 'grid-tree' && this.cornerSetting.titleOnDimension === 'column') {\n if (this._cornerHeaderCellIds[0].length < this._rowHeaderCellIds[0].length) {\n this._cornerHeaderCellIds.forEach((cellIds: number[], index: number) => {\n const oldLength = cellIds.length;\n cellIds.length = this._rowHeaderCellIds[0].length;\n cellIds.fill(cellIds[0], oldLength);\n });\n } else if (this._cornerHeaderCellIds[0].length > this._rowHeaderCellIds[0].length) {\n this._cornerHeaderCellIds.forEach((cellIds: number[], index: number) => {\n cellIds.length = this._rowHeaderCellIds[0].length;\n });\n }\n } else if (this.columnHierarchyType === 'grid-tree' && this.cornerSetting.titleOnDimension === 'row') {\n if (this._cornerHeaderCellIds?.length < this._columnHeaderCellIds?.length) {\n const oldLength = this._cornerHeaderCellIds.length;\n this._cornerHeaderCellIds.length = this._columnHeaderCellIds.length;\n this._cornerHeaderCellIds.fill(this._cornerHeaderCellIds[0], oldLength);\n } else if (this._cornerHeaderCellIds?.length > this._columnHeaderCellIds?.length) {\n this._cornerHeaderCellIds.length = this._columnHeaderCellIds.length;\n }\n }\n //#endregion\n }\n enableUseGetBodyCache() {\n this._useGetBodyCache = true;\n this._getBodyCache.clear();\n }\n disableUseGetBodyCache() {\n this._useGetBodyCache = false;\n this._getBodyCache.clear();\n }\n enableUseHeaderPathCache() {\n if (this._table.options?.customConfig?.enablePivotPathCache) {\n this._useHeaderPathCache = true;\n } else {\n this._useHeaderPathCache = true;\n this._colHeaderPathCache.clear();\n this._rowHeaderPathCache.clear();\n }\n }\n disableUseHeaderPathCache() {\n if (this._table.options?.customConfig?.enablePivotPathCache) {\n this._useHeaderPathCache = true;\n } else {\n this._useHeaderPathCache = false;\n this._colHeaderPathCache.clear();\n this._rowHeaderPathCache.clear();\n }\n }\n getBodyWidthCache(col: number, row: number) {\n if (!this._useGetBodyCache || this.isHeader(col, row) || this.isSeriesNumber(col, row)) {\n return undefined;\n }\n if (this.indicatorsAsCol && this._getBodyCache.has(col)) {\n return this._getBodyCache.get(col);\n } else if (!this.indicatorsAsCol && this._getBodyCache.has(row)) {\n return this._getBodyCache.get(row);\n }\n return undefined;\n }\n setBodyWidthCache(col: number, row: number, cache: IndicatorData | SeriesNumberColumnData) {\n if (!this._useGetBodyCache || this.isHeader(col, row) || this.isSeriesNumber(col, row)) {\n return;\n }\n if (this.indicatorsAsCol) {\n this._getBodyCache.set(col, cache);\n } else {\n this._getBodyCache.set(row, cache);\n }\n }\n\n getColHeaderPathCache(col: number, row: number) {\n if (\n this._useHeaderPathCache &&\n !this.isHeader(col, row) &&\n !this.isSeriesNumber(col, row) &&\n this._colHeaderPathCache.has(col)\n ) {\n return this._colHeaderPathCache.get(col);\n }\n return undefined;\n }\n\n setColHeaderPathCache(col: number, row: number, cache: ITreeLayoutHeadNode[]) {\n if (this._useHeaderPathCache && !this.isHeader(col, row) && !this.isSeriesNumber(col, row)) {\n this._colHeaderPathCache.set(col, cache);\n }\n }\n\n getRowHeaderPathCache(col: number, row: number) {\n if (\n this._useHeaderPathCache &&\n !this.isHeader(col, row) &&\n !this.isSeriesNumber(col, row) &&\n this._rowHeaderPathCache.has(row)\n ) {\n return this._rowHeaderPathCache.get(row);\n }\n return undefined;\n }\n\n setRowHeaderPathCache(col: number, row: number, cache: ITreeLayoutHeadNode[]) {\n if (this._useHeaderPathCache && !this.isHeader(col, row) && !this.isSeriesNumber(col, row)) {\n this._rowHeaderPathCache.set(row, cache);\n }\n }\n\n clearHeaderPathCache() {\n this._colHeaderPathCache.clear();\n this._rowHeaderPathCache.clear();\n }\n\n /**\n * 判断单元格是否为聚合值单元格(小计或总计)\n * @param col 列索引\n * @param row 行索引\n * @returns 是否为聚合值单元格\n */\n isAggregation(col: number, row: number): boolean {\n if (this.isHeader(col, row)) {\n return false; // 表头单元格不是聚合值单元格\n }\n\n // 获取单元格的路径信息\n const cellHeaderPaths = this.getCellHeaderPaths(col, row);\n\n // 检查行和列路径中是否有小计或总计角色\n\n for (const path of cellHeaderPaths.colHeaderPaths) {\n if (path.role === 'sub-total' || path.role === 'grand-total') {\n return true;\n }\n }\n\n for (const path of cellHeaderPaths.rowHeaderPaths) {\n if (path.role === 'sub-total' || path.role === 'grand-total') {\n return true;\n }\n }\n\n return false;\n }\n\n expandAllForRowDimensionTree() {\n if (this.rowDimensionTree) {\n this.rowDimensionTree.setAllNodesState(HierarchyState.expand);\n this._rebuildRowLayout(); // 后续可以优化\n }\n }\n\n collapseAllForRowDimensionTree() {\n if (this.rowDimensionTree) {\n this.rowDimensionTree.setAllNodesState(HierarchyState.collapse);\n this._rebuildRowLayout(); // 后续可以优化\n }\n }\n\n expandAllForColumnDimensionTree() {\n if (this.columnDimensionTree) {\n this.columnDimensionTree.setAllNodesState(HierarchyState.expand);\n this._rebuildColumnLayout(); // 后续可以优化\n }\n }\n\n collapseAllForColumnDimensionTree() {\n if (this.columnDimensionTree) {\n this.columnDimensionTree.setAllNodesState(HierarchyState.collapse);\n this._rebuildColumnLayout(); // 后续可以优化\n }\n }\n}\n/** 计算 scale 的实际 range 长度 */\nfunction scaleWholeRangeSize(count: number, bandwidth: number, paddingInner: number, paddingOuter: number) {\n if (paddingInner === 1) {\n paddingInner = 0; // 保护\n // FIXME: vscale 同样需要加保护,目前这里加了保护以后,在 paddingInner为 1 的情况还是会崩溃\n }\n const space = bandSpace(count, paddingInner, paddingOuter);\n const step = bandwidth / (1 - paddingInner);\n const wholeSize = Math.ceil(space * step);\n return wholeSize;\n}\n\nfunction bandSpace(count: number, paddingInner: number, paddingOuter: number): number {\n let space;\n // count 等于 1 时需要特殊处理,否则 step 会超出 range 范围\n // 计算公式: step = paddingOuter * step * 2 + paddingInner * step + bandwidth\n if (count === 1) {\n space = count + paddingOuter * 2;\n } else {\n space = count - paddingInner + paddingOuter * 2;\n }\n return count ? (space > 0 ? space : 1) : 0;\n}\n"]}
|