@visactor/vtable 0.10.2 → 0.10.3-alpha.0
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 +26 -25
- package/cjs/PivotChart.js.map +1 -1
- package/cjs/PivotTable.js +8 -8
- package/cjs/PivotTable.js.map +1 -1
- package/cjs/core/BaseTable.js +1 -1
- package/cjs/core/BaseTable.js.map +1 -1
- package/cjs/dataset/dataset-pivot-table.js.map +1 -1
- package/cjs/dataset/dataset.js +4 -5
- package/cjs/dataset/dataset.js.map +1 -1
- package/cjs/dataset/flatDataToObject.js +2 -1
- package/cjs/dataset/flatDataToObject.js.map +1 -1
- package/cjs/header-helper/header-helper.js +1 -0
- package/cjs/header-helper/header-helper.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/chart-helper/get-axis-config.js +7 -7
- package/cjs/layout/chart-helper/get-axis-config.js.map +1 -1
- package/cjs/layout/chart-helper/get-chart-spec.js +4 -4
- package/cjs/layout/chart-helper/get-chart-spec.js.map +1 -1
- package/cjs/layout/pivot-header-layout.js +21 -19
- package/cjs/layout/pivot-header-layout.js.map +1 -1
- package/cjs/layout/pivot-layout.js +4 -3
- package/cjs/layout/pivot-layout.js.map +1 -1
- package/cjs/scenegraph/layout/frozen.js +18 -4
- package/cjs/scenegraph/layout/frozen.js.map +1 -1
- package/cjs/state/spark-line/index.js +3 -2
- package/cjs/state/spark-line/index.js.map +1 -1
- package/dist/vtable.js +103 -71
- package/dist/vtable.min.js +1 -1
- package/es/PivotChart.js +26 -25
- package/es/PivotChart.js.map +1 -1
- package/es/PivotTable.js +8 -8
- package/es/PivotTable.js.map +1 -1
- package/es/core/BaseTable.js +1 -1
- package/es/core/BaseTable.js.map +1 -1
- package/es/dataset/dataset-pivot-table.js.map +1 -1
- package/es/dataset/dataset.js +4 -4
- package/es/dataset/dataset.js.map +1 -1
- package/es/dataset/flatDataToObject.js +2 -1
- package/es/dataset/flatDataToObject.js.map +1 -1
- package/es/header-helper/header-helper.js +1 -0
- package/es/header-helper/header-helper.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/chart-helper/get-axis-config.js +7 -7
- package/es/layout/chart-helper/get-axis-config.js.map +1 -1
- package/es/layout/chart-helper/get-chart-spec.js +4 -4
- package/es/layout/chart-helper/get-chart-spec.js.map +1 -1
- package/es/layout/pivot-header-layout.js +21 -19
- package/es/layout/pivot-header-layout.js.map +1 -1
- package/es/layout/pivot-layout.js +4 -3
- package/es/layout/pivot-layout.js.map +1 -1
- package/es/scenegraph/layout/frozen.js +18 -4
- package/es/scenegraph/layout/frozen.js.map +1 -1
- package/es/state/spark-line/index.js +3 -2
- package/es/state/spark-line/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["layout/pivot-header-layout.ts"],"names":[],"mappings":"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","file":"pivot-header-layout.js","sourcesContent":["/* eslint-disable sort-imports */\nimport { cloneDeep, isValid, transpose } from '../tools/util';\nimport type {\n CellAddress,\n CellRange,\n ICustomRender,\n IPivotTableCellHeaderPaths,\n LayoutObjectId,\n ShowColumnRowType,\n ColumnIconOption,\n CellInfo,\n CellLocation,\n IHeaderTreeDefine,\n IDimension,\n IIndicator,\n ITitleDefine,\n ICornerDefine,\n IDimensionInfo\n} from '../ts-types';\nimport { HierarchyState } from '../ts-types';\nimport type {\n HeaderData,\n IndicatorData,\n LayoutMapAPI,\n // PivotTableLayoutDefine,\n WidthData\n} from '../ts-types/list-table/layout-map/api';\n// import { EmptyDataCache } from './utils';\nimport type { PivotTable } from '../PivotTable';\nimport { NumberMap } from '../tools/NumberMap';\nimport type { Either } from '../tools/helper';\nimport { IndicatorDimensionKeyPlaceholder } from '../tools/global';\nimport { diffCellAddress } from '../tools/diff-cell';\nimport type { ILinkDimension } from '../ts-types/pivot-table/dimension/link-dimension';\nimport type { IImageDimension } from '../ts-types/pivot-table/dimension/image-dimension';\nimport { getChartDataId, getRawChartSpec } from './chart-helper/get-chart-spec';\ninterface IPivotLayoutBaseHeadNode {\n id: number;\n // dimensionKey: string;\n // // title: string;\n // indicatorKey?: string;\n value: string;\n children: IPivotLayoutHeadNode[] | undefined;\n level: number;\n startIndex: number;\n size: number; //对应到colSpan或者rowSpan\n // parsing?: 'img' | 'link' | 'video' | 'templateLink';\n startInTotal: number;\n // headerStyle:HeaderStyleOption| null;\n customRender?: ICustomRender;\n\n hierarchyState: HierarchyState;\n headerIcon?: (string | ColumnIconOption)[] | ((args: CellInfo) => (string | ColumnIconOption)[]);\n}\ninterface IPivotLayoutDimensionHeadNode extends IPivotLayoutBaseHeadNode {\n dimensionKey: string;\n}\ninterface IPivotLayoutIndicatorHeadNode extends IPivotLayoutBaseHeadNode {\n indicatorKey: string;\n}\ntype IPivotLayoutHeadNode = Either<IPivotLayoutDimensionHeadNode, IPivotLayoutIndicatorHeadNode>;\nclass DimensionTree {\n // 每一个值对应的序号 结果缓存\n // cache: {\n // [propName: string]: any;\n // };\n //树形展示 会将非叶子节点单独展示一行 所以size会增加非叶子节点的个数\n sizeIncludeParent = false;\n rowExpandLevel: number;\n hierarchyType: 'grid' | 'tree';\n tree: IPivotLayoutHeadNode = {\n id: 0,\n dimensionKey: '',\n // title: '',\n value: '',\n children: [],\n level: -1,\n startIndex: 0,\n size: 0,\n startInTotal: 0,\n hierarchyState: undefined\n };\n\n totalLevel = 0;\n\n // blockLevel: number = 0;\n\n // blockStartIndexMap: Map<number, boolean> = new Map();\n // blockEndIndexMap: Map<number, boolean> = new Map();\n dimensionKeys: NumberMap<string> = new NumberMap<string>();\n // dimensions: IDimension[] | undefined;//目前用不到这个\n constructor(\n tree: IPivotLayoutHeadNode[],\n hierarchyType: 'grid' | 'tree' = 'grid',\n rowExpandLevel: number = undefined\n ) {\n this.sizeIncludeParent = rowExpandLevel !== null && rowExpandLevel !== undefined;\n this.rowExpandLevel = rowExpandLevel;\n this.hierarchyType = hierarchyType;\n this.reset(tree);\n }\n\n reset(tree: IPivotLayoutHeadNode[], updateTreeNode = false) {\n // 清空缓存的计算\n // this.cache = {};\n // this.dimensions = dimensions;\n this.dimensionKeys = new NumberMap<string>();\n this.tree.children = tree as IPivotLayoutHeadNode[];\n // const re = { totalLevel: 0 };\n // if (updateTreeNode) this.updateTreeNode(this.tree, 0, re, this.tree);\n // else\n this.setTreeNode(this.tree, 0, this.tree);\n this.totalLevel = this.dimensionKeys.count();\n }\n setTreeNode(node: IPivotLayoutHeadNode, startIndex: number, parent: IPivotLayoutHeadNode): number {\n node.startIndex = startIndex;\n node.startInTotal = (parent.startInTotal ?? 0) + node.startIndex;\n // if (node.dimensionKey) {\n // !this.dimensionKeys.contain(node.dimensionKey) &&\n // this.dimensionKeys.put(node.level, node.dimensionKey);\n // if (!node.id) node.id = ++seqId;\n // }\n if (node.dimensionKey ?? node.indicatorKey) {\n !this.dimensionKeys.contain(node.indicatorKey ? IndicatorDimensionKeyPlaceholder : node.dimensionKey) &&\n this.dimensionKeys.put(node.level, node.indicatorKey ? IndicatorDimensionKeyPlaceholder : node.dimensionKey);\n if (!node.id) {\n node.id = ++seqId;\n }\n }\n let size = node.dimensionKey ? (this.sizeIncludeParent ? 1 : 0) : 0;\n //平铺展示 分析所有层级\n if (this.hierarchyType === 'grid') {\n if (node.children) {\n node.children.forEach(n => {\n n.level = (node.level ?? 0) + 1;\n size += this.setTreeNode(n, size, node);\n });\n } else {\n size = 1;\n // re.totalLevel = Math.max(re.totalLevel, (node.level ?? -1) + 1);\n }\n } else if (node.hierarchyState === HierarchyState.expand && node.children) {\n //树形展示 有子节点 且下一层需要展开\n node.children.forEach(n => {\n n.level = (node.level ?? 0) + 1;\n size += this.setTreeNode(n, size, node);\n });\n } else if (node.hierarchyState === HierarchyState.collapse && node.children) {\n //树形展示 有子节点 且下一层不需要展开\n node.children.forEach(n => {\n n.level = (node.level ?? 0) + 1;\n this.setTreeNode(n, size, node);\n });\n } else if (!node.hierarchyState && node.level + 1 < this.rowExpandLevel && node.children) {\n //树形展示 有子节点 且下一层需要展开\n node.hierarchyState = HierarchyState.expand;\n node.children.forEach(n => {\n n.level = (node.level ?? 0) + 1;\n size += this.setTreeNode(n, size, node);\n });\n } else if (node.children) {\n //树形展示 有子节点 且下一层不需要展开\n node.hierarchyState = HierarchyState.collapse;\n node.children.forEach(n => {\n n.level = (node.level ?? 0) + 1;\n this.setTreeNode(n, size, node);\n });\n } else {\n //树形展示 无children子节点。但不能确定是最后一层的叶子节点 totalLevel还不能确定是计算完整棵树的整体深度\n node.hierarchyState = HierarchyState.none;\n size = 1;\n // re.totalLevel = Math.max(re.totalLevel, (node.level ?? -1) + 1);\n }\n\n node.size = size;\n // startInTotal = parent.startIndex + prevStartIndex\n return size;\n }\n getTreePath(index: number, maxDeep = 30): Array<IPivotLayoutHeadNode> {\n const path: any[] = [];\n this.searchPath(index, this.tree, path, maxDeep);\n path.shift();\n return path;\n }\n\n searchPath(index: number, node: IPivotLayoutHeadNode, path: Array<IPivotLayoutHeadNode>, maxDeep: number) {\n if (!node) {\n return false;\n }\n if (index < node.startIndex || index >= node.startIndex + node.size) {\n return false;\n }\n path.push(node);\n if (!node.children || node.children.length === 0) {\n return true;\n }\n if (node.level >= maxDeep) {\n return true;\n }\n // 这里按照 数据填充时,序号时同级序号 还是全局序号\n const cIndex = index - node.startIndex;\n node.children.some(n => this.searchPath(cIndex, n, path, maxDeep));\n return true;\n }\n /**\n * 将该树中 层级为level 的sourceIndex处的节点移动到targetIndex位置\n * @param level\n * @param sourceIndex\n * @param targetIndex\n */\n movePosition(level: number, sourceIndex: number, targetIndex: number) {\n // let sourceNode: IPivotLayoutHeadNode;\n let parNode: IPivotLayoutHeadNode;\n let sourceSubIndex: number;\n let targetSubIndex: number;\n /**\n * 对parNode的子节点第subIndex处的node节点 进行判断是否为sourceIndex或者targetIndex\n * 如果是 则记录下subIndex 以对parNode中个节点位置进行移位\n * @param node\n * @param subIndex\n * @returns\n */\n const findTargetNode = (node: IPivotLayoutHeadNode, subIndex: number) => {\n if (sourceSubIndex !== undefined && targetSubIndex !== undefined) {\n return;\n }\n if (node.level === level) {\n if (node.startInTotal === sourceIndex) {\n // sourceNode = node;\n sourceSubIndex = subIndex;\n }\n // if (node.startInTotal === targetIndex) targetSubIndex = subIndex;\n // 判断targetIndex是否在node的范围内 将当前node的subIndex记为targetSubIndex\n if (node.startInTotal <= targetIndex && targetIndex <= node.startInTotal + node.size - 1) {\n targetSubIndex = subIndex;\n }\n }\n\n if (node.children && node.level < level) {\n parNode = node;\n for (let i = 0; i < node.children.length; i++) {\n if (\n (sourceIndex >= node.children[i].startInTotal &&\n sourceIndex <= node.children[i].startInTotal + node.children[i].size) ||\n (targetIndex >= node.children[i].startInTotal &&\n targetIndex <= node.children[i].startInTotal + node.children[i].size)\n ) {\n findTargetNode(node.children[i], i);\n }\n }\n }\n };\n findTargetNode(this.tree, 0);\n\n //对parNode子节点位置进行移位【根据sourceSubIndex和targetSubIndex】\n const sourceColumns = parNode.children.splice(sourceSubIndex, 1);\n sourceColumns.unshift(targetSubIndex as any, 0 as any);\n Array.prototype.splice.apply(parNode.children, sourceColumns);\n }\n}\n\nlet seqId = 0;\nlet colIndex = 0;\n\nexport class PivotHeaderLayoutMap implements LayoutMapAPI {\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 private _cornerHeaderCellIds: number[][] = [];\n private _columnHeaderCellIds: number[][] = [];\n private _rowHeaderCellIds: number[][] = [];\n private _columnWidths: WidthData[] = [];\n rowsDefine: (IDimension | string)[];\n columnsDefine: (IDimension | string)[];\n indicatorsDefine: (IIndicator | string)[];\n columnPaths: number[][] = [];\n private _headerObjects: HeaderData[] = [];\n private _headerObjectMap: { [key: LayoutObjectId]: HeaderData } = {};\n // private _emptyDataCache = new EmptyDataCache();\n private _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';\n rowExpandLevel?: number;\n rowHierarchyIndent?: number;\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 // 缓存行号列号对应的headerPath,注意树形结构展开需要清除! 需要注意当表头位置拖拽后 这个缓存的行列号已不准确 进行重置\n private _CellHeaderPathMap: Map<string, IPivotTableCellHeaderPaths>;\n _table: PivotTable;\n constructor(table: PivotTable) {\n this._table = table;\n this._cellRangeMap = new Map();\n this._CellHeaderPathMap = new Map();\n // this.showHeader = showHeader;\n // this.pivotLayout = pivotLayoutObj;\n this.rowTree = table.options.rowTree;\n this.columnTree = table.options.columnTree;\n this.rowsDefine = table.options.rows ?? [];\n this.columnsDefine = table.options.columns ?? [];\n this.indicatorsDefine = table.options.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.options.rowHierarchyType ?? 'grid';\n this.rowExpandLevel = table.options.rowExpandLevel ?? 1;\n this.rowHierarchyIndent = table.options.rowHierarchyIndent ?? 20;\n this.cornerSetting = table.options.corner ?? { titleOnDimension: 'column' };\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 = new DimensionTree((this.columnTree as IPivotLayoutHeadNode[]) ?? []);\n this.rowDimensionTree = new DimensionTree(\n (this.rowTree as IPivotLayoutHeadNode[]) ?? [],\n this.rowHierarchyType,\n this.rowHierarchyType === 'tree' ? this.rowExpandLevel : undefined\n );\n this.colDimensionKeys = this.columnDimensionTree.dimensionKeys.valueArr();\n this.rowDimensionKeys = this.rowDimensionTree.dimensionKeys.valueArr();\n\n this.cornerHeaderObjs =\n this.cornerSetting.titleOnDimension === 'column'\n ? this._addCornerHeaders(\n this.columnHeaderTitle ? [''].concat(this.colDimensionKeys as any) : this.colDimensionKeys\n )\n : this.cornerSetting.titleOnDimension === 'row'\n ? this._addCornerHeaders(\n this.rowHeaderTitle ? [''].concat(this.rowDimensionKeys as any) : this.rowDimensionKeys\n )\n : this._addCornerHeaders(null);\n //生成列表头单元格\n if (this.columnDimensionTree.tree.children) {\n this.columnHeaderObjs = this._addHeaders(\n this._columnHeaderCellIds,\n 0,\n this.columnDimensionTree.tree.children,\n []\n );\n // if (typeof this.showColumnHeader !== 'boolean') {\n if (this.columnHeaderTitle) {\n const id = ++seqId;\n const firstRowIds = Array(this.colCount - this.rowHeaderLevelCount).fill(id);\n this._columnHeaderCellIds.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 }\n };\n this.columnHeaderObjs.push(cell);\n this._headerObjects[id] = cell;\n }\n // }\n }\n colIndex = 0;\n //生成行表头单元格\n if (this.rowDimensionTree.tree.children) {\n this.rowHeaderObjs =\n this.rowHierarchyType === 'tree'\n ? this._addHeadersForTreeMode(\n this._rowHeaderCellIds,\n 0,\n this.rowDimensionTree.tree.children,\n [],\n this.rowDimensionTree.totalLevel,\n true\n )\n : this._addHeaders(this._rowHeaderCellIds, 0, this.rowDimensionTree.tree.children, []);\n }\n // if (typeof this.showRowHeader !== 'boolean') {\n if (this.rowHeaderTitle) {\n const id = ++seqId;\n const firstColIds = Array(this.rowCount - this.columnHeaderLevelCount).fill(id);\n this._rowHeaderCellIds.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 }\n };\n this.rowHeaderObjs.push(cell);\n this._headerObjects[id] = cell;\n }\n // }\n colIndex = 0;\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._rowHeaderCellIds = transpose(this._rowHeaderCellIds);\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.setColumnWidths();\n }\n\n private _addHeaders(\n _headerCellIds: number[][],\n row: number,\n header: IPivotLayoutHeadNode[],\n roots: number[]\n ): HeaderData[] {\n function _newRow(row: number): number[] {\n const newRow: number[] = (_headerCellIds[row] = []);\n if (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 const results: HeaderData[] = [];\n if (!_headerCellIds[row]) {\n _newRow(row);\n }\n header.forEach(hd => {\n // const col = this._columns.length;\n const id = hd.id;\n const dimensionInfo: IDimension =\n (this.rowsDefine?.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === hd.dimensionKey\n ) as IDimension) ??\n (this.columnsDefine?.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === hd.dimensionKey\n ) as IDimension);\n const indicatorInfo = this.indicatorsDefine?.find(indicator => {\n if (typeof indicator === 'string') {\n return false;\n }\n if (hd.indicatorKey) {\n return indicator.indicatorKey === hd.indicatorKey;\n }\n return indicator.title === hd.value;\n }) as IIndicator;\n const cell: HeaderData = {\n id,\n title: hd.value ?? indicatorInfo.title,\n field: hd.dimensionKey,\n style:\n typeof (indicatorInfo ?? dimensionInfo)?.headerStyle === 'function'\n ? (indicatorInfo ?? dimensionInfo)?.headerStyle\n : Object.assign({}, (indicatorInfo ?? dimensionInfo)?.headerStyle),\n headerType: indicatorInfo?.headerType ?? dimensionInfo?.headerType ?? 'text',\n headerIcon: indicatorInfo?.headerIcon ?? dimensionInfo?.headerIcon,\n // define: <any>hd,\n define: Object.assign({}, <any>hd, indicatorInfo ?? dimensionInfo),\n fieldFormat: indicatorInfo?.headerFormat ?? dimensionInfo?.headerFormat,\n // iconPositionList:[]\n dropDownMenu: indicatorInfo?.dropDownMenu ?? dimensionInfo?.dropDownMenu,\n pivotInfo: {\n value: hd.value,\n dimensionKey: hd.dimensionKey,\n isPivotCorner: false\n // customInfo: dimensionInfo?.customInfo\n },\n width: dimensionInfo?.width,\n minWidth: dimensionInfo?.minWidth,\n maxWidth: dimensionInfo?.maxWidth,\n showSort: indicatorInfo?.showSort ?? dimensionInfo?.showSort,\n description: dimensionInfo?.description\n };\n\n if (indicatorInfo) {\n //收集indicatorDimensionKey 提到了构造函数中\n // this.indicatorDimensionKey = dimensionInfo.dimensionKey;\n if (indicatorInfo.customRender) {\n hd.customRender = indicatorInfo.customRender;\n }\n if (!isValid(this._indicators.find(indicator => indicator.indicatorKey === indicatorInfo.indicatorKey))) {\n this._indicators.push({\n id: ++seqId,\n indicatorKey: indicatorInfo.indicatorKey,\n field: indicatorInfo.indicatorKey,\n fieldFormat: indicatorInfo?.format,\n cellType: indicatorInfo?.cellType ?? (indicatorInfo as any)?.columnType ?? 'text',\n chartModule: 'chartModule' in indicatorInfo ? indicatorInfo.chartModule : null,\n chartSpec: 'chartSpec' in indicatorInfo ? indicatorInfo.chartSpec : null,\n sparklineSpec: 'sparklineSpec' in indicatorInfo ? indicatorInfo.sparklineSpec : null,\n style: indicatorInfo?.style,\n icon: indicatorInfo?.icon,\n define: Object.assign({}, <any>hd, indicatorInfo, {\n dragHeader: dimensionInfo?.dragHeader\n }),\n width: indicatorInfo?.width,\n minWidth: indicatorInfo?.minWidth,\n maxWidth: indicatorInfo?.maxWidth,\n disableColumnResize: indicatorInfo?.disableColumnResize\n });\n }\n } else if (hd.indicatorKey) {\n //兼容当某个指标没有设置在dimension.indicators中\n if (!isValid(this._indicators.find(indicator => indicator.indicatorKey === hd.indicatorKey))) {\n this._indicators.push({\n id: ++seqId,\n indicatorKey: hd.indicatorKey,\n field: hd.indicatorKey,\n cellType: 'text',\n define: Object.assign({}, <any>hd)\n });\n }\n }\n // if (dimensionInfo.indicators) {\n // this.hideIndicatorName = dimensionInfo.hideIndicatorName ?? false;\n // this.indicatorsAsCol = dimensionInfo.indicatorsAsCol ?? true;\n // }\n results[id] = cell;\n this._headerObjects[id] = cell;\n _headerCellIds[row][colIndex] = id;\n for (let r = row - 1; r >= 0; r--) {\n _headerCellIds[r][colIndex] = roots[r];\n }\n if ((hd as IPivotLayoutHeadNode).children) {\n this._addHeaders(_headerCellIds, row + 1, (hd as IPivotLayoutHeadNode).children ?? [], [...roots, id]).forEach(\n c => results.push(c)\n );\n } else {\n // columns.push([\"\"])//代码一个路径\n for (let r = row + 1; r < _headerCellIds.length; r++) {\n _headerCellIds[r][colIndex] = id;\n }\n colIndex++;\n }\n });\n return results;\n }\n private _addHeadersForTreeMode(\n _headerCellIds: number[][],\n row: number,\n header: IPivotLayoutHeadNode[],\n roots: number[],\n totalLevel: number,\n show: boolean\n ): HeaderData[] {\n function _newRow(row: number): number[] {\n const newRow: number[] = (_headerCellIds[row] = []);\n if (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 const results: HeaderData[] = [];\n if (!_headerCellIds[row]) {\n _newRow(row);\n }\n header.forEach(hd => {\n // const col = this._columns.length;\n const id = hd.id;\n const dimensionInfo: IDimension =\n (this.rowsDefine?.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === hd.dimensionKey\n ) as IDimension) ??\n (this.columnsDefine?.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === hd.dimensionKey\n ) as IDimension);\n\n const cell: HeaderData = {\n id,\n title: hd.value,\n field: hd.dimensionKey,\n //如果不是整棵树的叶子节点,都靠左显示\n style:\n hd.level + 1 === totalLevel || typeof dimensionInfo?.headerStyle === 'function'\n ? dimensionInfo?.headerStyle\n : Object.assign({}, dimensionInfo?.headerStyle, { textAlign: 'left' }),\n headerType: dimensionInfo?.headerType ?? 'text',\n headerIcon: dimensionInfo?.headerIcon,\n define: Object.assign(<any>hd, {\n linkJump: (dimensionInfo as ILinkDimension)?.linkJump,\n linkDetect: (dimensionInfo as ILinkDimension)?.linkDetect,\n templateLink: (dimensionInfo as ILinkDimension)?.templateLink,\n\n // image相关 to be fixed\n keepAspectRatio: (dimensionInfo as IImageDimension)?.keepAspectRatio ?? false,\n imageAutoSizing: (dimensionInfo as IImageDimension)?.imageAutoSizing,\n\n headerCustomRender: dimensionInfo?.headerCustomRender,\n headerCustomLayout: dimensionInfo?.headerCustomLayout,\n dragHeader: dimensionInfo?.dragHeader\n }), //这里不能新建对象,要用hd保持引用关系\n fieldFormat: dimensionInfo?.headerFormat,\n // iconPositionList:[]\n dropDownMenu: dimensionInfo?.dropDownMenu,\n pivotInfo: {\n value: hd.value,\n dimensionKey: hd.dimensionKey,\n isPivotCorner: false\n // customInfo: dimensionInfo?.customInfo\n },\n hierarchyLevel: hd.level,\n dimensionTotalLevel: totalLevel,\n hierarchyState: hd.level + 1 === totalLevel ? undefined : hd.hierarchyState,\n width: dimensionInfo?.width,\n minWidth: dimensionInfo?.minWidth,\n maxWidth: dimensionInfo?.maxWidth\n };\n\n results[id] = cell;\n this._headerObjects[id] = cell;\n _headerCellIds[row][colIndex] = id;\n for (let r = row - 1; r >= 0; r--) {\n _headerCellIds[r][colIndex] = roots[r];\n }\n if (hd.hierarchyState === HierarchyState.expand && (hd as IPivotLayoutHeadNode).children) {\n //row传值 colIndex++和_addHeaders有区别\n show && colIndex++;\n this._addHeadersForTreeMode(\n _headerCellIds,\n row,\n (hd as IPivotLayoutHeadNode).children ?? [],\n [...roots, id],\n totalLevel,\n show && hd.hierarchyState === HierarchyState.expand //当前节点show 且当前节点状态为展开 则传给子节点为show:true\n ).forEach(c => results.push(c));\n } else {\n // columns.push([\"\"])//代码一个路径\n show && colIndex++;\n for (let r = row + 1; r < _headerCellIds.length; r++) {\n _headerCellIds[r][colIndex] = id;\n }\n }\n });\n return results;\n }\n _addCornerHeaders(dimensionKeys: (string | number)[] | null) {\n const results: HeaderData[] = [];\n if (dimensionKeys) {\n dimensionKeys.forEach((dimensionKey: string, key: number) => {\n const id = ++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\n const cell: HeaderData = {\n id,\n title: dimensionKey === this.indicatorDimensionKey ? this.indicatorTitle : dimensionInfo?.title ?? '',\n field: '维度名称',\n style: this.cornerSetting.headerStyle,\n headerType: this.cornerSetting.headerType ?? 'text',\n define: <any>{\n dimensionKey: '维度名称',\n id,\n value: dimensionKey\n },\n dropDownMenu: dimensionInfo?.cornerDropDownMenu,\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._cornerHeaderCellIds[key]) {\n this._cornerHeaderCellIds[key] = [];\n }\n for (let r = 0; r < this.rowHeaderLevelCount; r++) {\n this._cornerHeaderCellIds[key][r] = id;\n }\n } else if (this.cornerSetting.titleOnDimension === 'row') {\n for (let r = 0; r < this.columnHeaderLevelCount; r++) {\n if (!this._cornerHeaderCellIds[r]) {\n this._cornerHeaderCellIds[r] = [];\n }\n this._cornerHeaderCellIds[r][key] = id;\n }\n }\n });\n } else {\n const id = ++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 value: ''\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._cornerHeaderCellIds[r]) {\n this._cornerHeaderCellIds[r] = [];\n }\n this._cornerHeaderCellIds[r][j] = id;\n }\n }\n }\n return results;\n }\n\n private setColumnWidths() {\n const returnWidths: WidthData[] = new Array(this.colCount).fill(undefined);\n if (this.showHeader && this.showRowHeader) {\n if (this.rowHeaderTitle) {\n returnWidths[0] = {};\n }\n this.rowDimensionKeys.forEach((objKey, index) => {\n const dimension = this.rowsDefine?.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === objKey\n ) as IDimension;\n dimension &&\n (returnWidths[index + (this.rowHeaderTitle ? 1 : 0)] = {\n width: dimension.width,\n minWidth: dimension.minWidth,\n maxWidth: dimension.maxWidth\n });\n });\n }\n if (this.indicatorsAsCol) {\n for (let i = this.rowHeaderLevelCount; 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 = 0;\n let maxWidth: string | number;\n let minWidth: string | number;\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);\n }\n if (typeof obj.maxWidth === 'number') {\n maxWidth = Math.max(obj.maxWidth, <number>maxWidth);\n }\n });\n width = width > 0 ? width : isAuto ? 'auto' : undefined;\n returnWidths.fill({ width, minWidth, maxWidth }, this.rowHeaderLevelCount, this.colCount);\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 (col < this.rowHeaderLevelCount) {\n return true;\n }\n if (row < this.columnHeaderLevelCount) {\n return true;\n }\n if (col >= this.colCount - this.rightFrozenColCount) {\n return true;\n }\n if (row >= this.rowCount - this.bottomFrozenRowCount) {\n return true;\n }\n return false;\n }\n isCornerHeader(col: number, row: number): boolean {\n if (col < this.rowHeaderLevelCount && row < this.columnHeaderLevelCount) {\n return true;\n }\n return false;\n }\n isColumnHeader(col: number, row: number): boolean {\n if (col >= this.rowHeaderLevelCount && row < this.columnHeaderLevelCount) {\n return true;\n }\n return false;\n }\n isRowHeader(col: number, row: number): boolean {\n if (col < this.rowHeaderLevelCount && row >= this.columnHeaderLevelCount) {\n return true;\n }\n return false;\n }\n isRightFrozenColumn(col: number, row: number): boolean {\n if (\n col >= this.colCount - this.rightFrozenColCount &&\n row >= this.columnHeaderLevelCount &&\n row < this.rowCount - this.bottomFrozenRowCount\n ) {\n return true;\n }\n return false;\n }\n isBottomFrozenRow(col: number, row: number): boolean {\n if (\n col >= this.rowHeaderLevelCount &&\n row >= this.rowCount - this.bottomFrozenRowCount &&\n col < this.colCount - this.rightFrozenColCount\n ) {\n return true;\n }\n return false;\n }\n isLeftBottomCorner(col: number, row: number): boolean {\n if (col < this.rowHeaderLevelCount && 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 < this.columnHeaderLevelCount) {\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 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 headerLevelCount(): number {\n return this.columnHeaderLevelCount;\n }\n get columnHeaderLevelCount(): number {\n if (this.showHeader && this.showColumnHeader) {\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 if (this.columnHeaderTitle) {\n count += 1;\n }\n return count;\n }\n return 0;\n }\n get rowHeaderLevelCount(): number {\n if (this.showHeader && this.showRowHeader) {\n if (this.rowHierarchyType === 'tree') {\n if (this.rowHeaderTitle) {\n return 2;\n }\n return 1;\n }\n let count = this.indicatorsAsCol\n ? this.rowDimensionTree.totalLevel\n : this.hideIndicatorName //设置隐藏表头,且表头最下面一级就是指标维度 则-1\n ? this.rowDimensionKeys[this.rowDimensionKeys.length - 1] === this.indicatorDimensionKey\n ? this.rowDimensionTree.totalLevel - 1\n : this.rowDimensionTree.totalLevel\n : this.rowDimensionTree.totalLevel;\n if (this.rowHeaderTitle) {\n count += 1;\n }\n return count;\n }\n return 0;\n }\n get colCount(): number {\n return this.columnDimensionTree.tree.size + this.rowHeaderLevelCount + this.rightFrozenColCount;\n }\n get rowCount(): number {\n return this.rowDimensionTree.tree.size + this.columnHeaderLevelCount + this.bottomFrozenRowCount;\n }\n get bodyRowCount() {\n return this.rowDimensionTree.tree.size;\n }\n get bottomFrozenRowCount(): number {\n // return 0;\n if (this.showHeader && this.showColumnHeader) {\n if (this.indicatorsAsCol && !this.hideIndicatorName) {\n // 查询指标是否有multiIndicator\n return this.indicatorsDefine.find(indicator => {\n return (indicator as any)?.multiIndicator;\n })\n ? 1\n : 0;\n }\n }\n return 0;\n }\n get rightFrozenColCount(): number {\n // return 0;\n if (this.showHeader && this.showColumnHeader) {\n if (!this.indicatorsAsCol && !this.hideIndicatorName) {\n // 查询指标是否有multiIndicator\n return this.indicatorsDefine.find(indicator => {\n return (indicator as any)?.multiIndicator;\n })\n ? 1\n : 0;\n }\n }\n return 0;\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.isCornerHeader(col, row)) {\n 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 } 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]?.[col - this.rowHeaderLevelCount];\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 {\n const id = this.getCellId(col, row);\n return this._headerObjectMap[id as number]!;\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 getHeaderCellAdress(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 this.getHeaderCellAdress(hd.id as number);\n }\n //TODO 这里的indicators是否可以改为和真正指标值一样数量 但目前也不会造成太多内存浪费 对象较简单 引用对象\n getBody(_col: number, _row: number): IndicatorData {\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 return (\n this._indicators.find(indicator => indicator.indicatorKey === indicatorKey) ??\n this._indicators[0] ?? {\n id: '',\n field: undefined,\n indicatorKey: undefined,\n cellType: undefined,\n define: undefined\n }\n );\n }\n const indicatorKey = paths.rowHeaderPaths.find(rowPath => rowPath.indicatorKey)?.indicatorKey;\n return (\n this._indicators.find(indicator => indicator.indicatorKey === indicatorKey) ??\n this._indicators[0] ?? {\n id: '',\n field: undefined,\n indicatorKey: undefined,\n cellType: undefined,\n define: undefined\n }\n );\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 if (col === -1 || row === -1) {\n return {\n start: { col, row },\n end: { col, row }\n };\n }\n // if (this._cellRangeMap.has(`$${col}$${row}`)) return this._cellRangeMap.get(`$${col}$${row}`);\n if (this._cellRangeMap.has(`${col}-${row}`)) {\n return this._cellRangeMap.get(`${col}-${row}`);\n }\n const result: CellRange = { start: { col, row }, end: { col, row } };\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 (id !== this.getCellId(col, r)) {\n break;\n }\n result.start.row = r;\n }\n for (let r = row + 1; r < (this.rowCount ?? 0); r++) {\n if (id !== this.getCellId(col, r)) {\n break;\n }\n result.end.row = r;\n }\n }\n this._cellRangeMap.set(`${col}-${row}`, result);\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 getRecordIndexByRow(row: number): number {\n if (row < this.columnHeaderLevelCount) {\n return -1;\n } else if (row >= this.rowCount - this.bottomFrozenRowCount) {\n return -1;\n }\n return row - this.columnHeaderLevelCount;\n }\n getRecordIndexByCol(col: number): number {\n if (col < this.rowHeaderLevelCount) {\n return -1;\n } else if (col >= this.colCount - this.rightFrozenColCount) {\n return -1;\n }\n return col - this.rowHeaderLevelCount;\n }\n getRecordStartRowByRecordIndex(index: number): number {\n return this.columnHeaderLevelCount + index;\n }\n\n // getCellRangeTranspose(): CellRange {\n // return { start: { col: 0, row: 0 }, end: { col: 0, row: 0 } };\n // }\n\n getCellHeaderPathsWidthTreeNode(\n col: number,\n row: number\n ): {\n /** 列表头各级path表头信息 */\n readonly colHeaderPaths?: any[];\n /** 行表头各级path表头信息 */\n readonly rowHeaderPaths?: any[];\n } {\n // if (this._CellHeaderPathMap.has(`$${col}$${row}`))\n if (this._CellHeaderPathMap.has(`${col}-${row}`)) {\n return this._CellHeaderPathMap.get(`${col}-${row}`);\n }\n const recordCol = this.getRecordIndexByCol(col);\n const recordRow = this.getRecordIndexByRow(row);\n let colPath;\n let rowPath;\n if (col >= 0) {\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 if (row >= 0) {\n if (this.rowHierarchyType === 'tree') {\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 } else {\n rowPath = this.rowDimensionTree.getTreePath(\n recordRow,\n this.showHeader && this.showRowHeader ? col - (this.rowHeaderTitle ? 1 : 0) : this.rowDimensionTree.totalLevel\n );\n }\n }\n const p = { colHeaderPaths: colPath, rowHeaderPaths: rowPath };\n this._CellHeaderPathMap.set(`${col}-${row}`, p);\n return p;\n }\n getCellHeaderPaths(col: number, row: number): IPivotTableCellHeaderPaths {\n const headerPathsWidthNode = this.getCellHeaderPathsWidthTreeNode(col, row);\n const headerPaths: IPivotTableCellHeaderPaths = {\n colHeaderPaths: [],\n rowHeaderPaths: []\n };\n headerPathsWidthNode.colHeaderPaths.forEach((colHeader: any) => {\n const colHeaderPath: {\n dimensionKey?: string;\n indicatorKey?: string;\n value?: string;\n } = {};\n colHeaderPath.dimensionKey = colHeader.dimensionKey;\n colHeaderPath.indicatorKey = colHeader.indicatorKey;\n colHeaderPath.value = colHeader.value ?? this.getIndicatorInfoByIndicatorKey(colHeader.indicatorKey)?.title ?? '';\n headerPaths.colHeaderPaths.push(colHeaderPath);\n });\n\n headerPathsWidthNode.rowHeaderPaths.forEach((rowHeader: any) => {\n const rowHeaderPath: {\n dimensionKey?: string;\n indicatorKey?: string;\n value?: string;\n } = {};\n rowHeaderPath.dimensionKey = rowHeader.dimensionKey;\n rowHeaderPath.indicatorKey = rowHeader.indicatorKey;\n rowHeaderPath.value = rowHeader.value ?? this.getIndicatorInfoByIndicatorKey(rowHeader.indicatorKey)?.title ?? '';\n headerPaths.rowHeaderPaths.push(rowHeaderPath);\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 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 * @param col\n * @param row\n */\n toggleHierarchyState(col: number, row: number) {\n const oldRowHeaderCellIds = this._rowHeaderCellIds.slice(0);\n const oldRowHeaderCellPositons = oldRowHeaderCellIds.map(id => this.getHeaderCellAdress(id[0]));\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, true);\n this._rowHeaderCellIds = [];\n this.rowHeaderObjs = this._addHeadersForTreeMode(\n this._rowHeaderCellIds,\n 0,\n this.rowDimensionTree.tree.children,\n [],\n this.rowDimensionTree.totalLevel,\n true\n );\n\n if (this.rowHeaderTitle) {\n const id = ++seqId;\n const firstColIds = Array(this.rowCount - this.columnHeaderLevelCount).fill(id);\n this._rowHeaderCellIds.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 }\n };\n this.rowHeaderObjs.push(cell);\n this._headerObjects[id] = cell;\n }\n colIndex = 0;\n\n this._rowHeaderCellIds = transpose(this._rowHeaderCellIds);\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\n return diffCellAddress(oldRowHeaderCellIds, this._rowHeaderCellIds, oldRowHeaderCellPositons, this);\n }\n // 为列宽计算专用,兼容列表\n isHeaderForColWidth(col: number, row: number): boolean {\n return this.isHeader(col, row);\n }\n getHeaderForColWidth(col: number, row: number): HeaderData {\n return this.getHeader(col, row);\n }\n /**\n * 通过dimensionPath获取到对应的表头地址col row\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 || !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 ? undefined : { col: this.rowHeaderTitle ? col + 1 : col, row: 0 };\n }\n\n const row = (this.colDimensionKeys as Array<string | number>).indexOf(highlightDimension.dimensionKey);\n return row === -1 ? undefined : { col: 0, 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;\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;\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, level } = rowDimension as IPivotLayoutHeadNode;\n row += startInTotal;\n if (this.rowHierarchyType === 'grid') {\n col = this.rowHeaderTitle ? level + 1 : level;\n } else {\n col = 0;\n } //树形展示的情况下 肯定是在第0列\n return { col, row };\n } else if (colDimension) {\n col = this.rowHeaderLevelCount;\n const { startInTotal, level } = colDimension as IPivotLayoutHeadNode;\n col += startInTotal;\n row = this.columnHeaderTitle ? level + 1 : level;\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: this.rowDimensionKeys[this.rowHeaderTitle ? col - 1 : col],\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)?.indicatorKey;\n }\n private 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 /**\n * 判断从source地址是否可以移动到target地址\n * @param source\n * @param target\n * @returns boolean 是否可以移动\n */\n canMoveHeaderPosition(source: CellAddress, target: CellAddress): boolean {\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.getCellHeaderPathsWidthTreeNode(source.col, source.row).rowHeaderPaths\n );\n const targetRowHeaderPaths = cloneDeep(\n this.getCellHeaderPathsWidthTreeNode(target.col, target.row).rowHeaderPaths\n );\n sourceRowHeaderPaths.pop(); // 如果用了缓存_CellHeaderPathMap的话 这里pop会影响缓存的值 所以上面使用clone\n targetRowHeaderPaths.pop();\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 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(source: CellAddress, target: CellAddress) {\n // 判断从source地址是否可以移动到target地址\n if (\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 moveSize = 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 - moveSize + 1;\n } else {\n targetIndex = targetCellRange.start.col;\n }\n //如果操作列和目标地址col一样 则不执行其他逻辑\n if (targetIndex === sourceCellRange.end.col) {\n return null;\n }\n // 逐行将每一行的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,\n moveSize\n );\n // 将source ids插入到目标地址targetCol处\n // 把sourceIds变成一个适合splice的数组(包含splice前2个参数的数组) 以通过splice来插入sourceIds数组\n sourceIds.unshift(targetIndex - this.rowHeaderLevelCount, 0);\n Array.prototype.splice.apply(this._columnHeaderCellIds[row], sourceIds);\n }\n\n //将_columns的列定义调整位置 同调整_headerCellIds逻辑\n const sourceColumns = this._columnWidths.splice(sourceCellRange.start.col, moveSize);\n sourceColumns.unshift(targetIndex as any, 0 as any);\n Array.prototype.splice.apply(this._columnWidths, sourceColumns);\n\n // 对维度树结构调整节点位置\n this.columnDimensionTree.movePosition(\n source.row,\n sourceCellRange.start.col - this.rowHeaderLevelCount,\n targetIndex - this.rowHeaderLevelCount\n );\n this.columnDimensionTree.reset(this.columnDimensionTree.tree.children, true);\n this._CellHeaderPathMap = new Map();\n this._cellRangeMap = new Map();\n return {\n sourceIndex: sourceCellRange.start.col,\n targetIndex,\n moveSize,\n moveType: 'column'\n };\n } else if (this.isRowHeader(source.col, source.row)) {\n // 插入目标地址的列index\n let targetIndex;\n const sourceRowHeaderPaths = this.getCellHeaderPathsWidthTreeNode(source.col, source.row).rowHeaderPaths;\n const targetRowHeaderPaths = this.getCellHeaderPathsWidthTreeNode(target.col, target.row).rowHeaderPaths;\n const sourceRowHeaderNode = sourceRowHeaderPaths[sourceRowHeaderPaths.length - 1];\n const targetRowHeaderNode = targetRowHeaderPaths[sourceRowHeaderPaths.length - 1];\n //整体移动的列数\n const moveSize = sourceRowHeaderNode.size;\n if (target.row >= source.row) {\n targetIndex = targetRowHeaderNode.startInTotal + targetRowHeaderNode.size - moveSize;\n } else {\n targetIndex = targetRowHeaderNode.startInTotal;\n }\n\n //如果操作列和目标地址col一样 则不执行其他逻辑\n if (targetIndex === source.row || targetIndex === sourceCellRange.end.row) {\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 moveSize\n );\n sourceIds.unshift(targetIndex as any, 0 as any);\n Array.prototype.splice.apply(this._rowHeaderCellIds, sourceIds);\n\n // 对维度树结构调整节点位置\n this.rowDimensionTree.movePosition(\n this.getCellHeaderPathsWidthTreeNode(source.col, source.row).rowHeaderPaths.length - 1,\n sourceCellRange.start.row - this.columnHeaderLevelCount,\n targetIndex + (target.row > source.row ? sourceRowHeaderNode.size - 1 : 0)\n );\n this.rowDimensionTree.reset(this.rowDimensionTree.tree.children, true);\n this._CellHeaderPathMap = new Map();\n this._cellRangeMap = new Map();\n return {\n sourceIndex: sourceCellRange.start.row,\n targetIndex: targetIndex + this.columnHeaderLevelCount,\n moveSize,\n moveType: 'row'\n };\n }\n }\n return null;\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;\n let rowHeaderPaths;\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) => this.colDimensionKeys.indexOf(path.dimensionKey) >= 0\n );\n rowHeaderPaths = dimensionPaths.filter(\n (path: IDimensionInfo) => this.rowDimensionKeys.indexOf(path.dimensionKey) >= 0\n );\n } else {\n colHeaderPaths = dimensionPaths.colHeaderPaths;\n rowHeaderPaths = dimensionPaths.rowHeaderPaths;\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.rowDimensionKeys.indexOf(a.dimensionKey ?? this.indicatorDimensionKey) -\n this.rowDimensionKeys.indexOf(b.dimensionKey ?? this.indicatorDimensionKey)\n );\n });\n let needLowestLevel = false; // needLowestLevel来标记是否需要 提供到最底层的维度层级信息\n // 如果行列维度都有值 说明是匹配body单元格 那这个时候 维度层级应该是满的\n if (colHeaderPaths?.length >= 1 && rowHeaderPaths?.length >= 1) {\n needLowestLevel = true;\n }\n let col;\n let row;\n let defaultCol;\n let defaultRow;\n let rowArr = this.rowTree;\n let rowDimensionFinded;\n let colArr = this.columnTree;\n let colDimensionFinded;\n // 按照colHeaderPaths维度层级寻找到底层维度值节点\n if (colHeaderPaths) {\n for (let i = 0; i < colHeaderPaths.length; i++) {\n const colDimension = colHeaderPaths[i];\n for (let j = 0; j < colArr.length; j++) {\n const dimension = colArr[j];\n if (\n (!isValid(colDimension.indicatorKey) &&\n dimension.dimensionKey === colDimension.dimensionKey &&\n dimension.value === colDimension.value) ||\n (isValid(colDimension.indicatorKey) && dimension.indicatorKey === colDimension.indicatorKey)\n ) {\n colArr = dimension.children;\n if (needLowestLevel && !colArr) {\n colDimensionFinded = dimension;\n } else if (!needLowestLevel) {\n colDimensionFinded = dimension;\n }\n break;\n }\n }\n }\n }\n // 按照rowHeaderPaths维度层级寻找到底层维度值节点\n if (rowHeaderPaths) {\n for (let i = 0; i < rowHeaderPaths.length; i++) {\n const rowDimension = rowHeaderPaths[i];\n // 判断级别,找到distDimension\n // let isCol = false;\n for (let j = 0; j < rowArr.length; j++) {\n const dimension = rowArr[j];\n if (\n ((!isValid(rowDimension.indicatorKey) &&\n dimension.dimensionKey === rowDimension.dimensionKey &&\n dimension.value === rowDimension.value) ||\n (isValid(rowDimension.indicatorKey) && dimension.indicatorKey === rowDimension.indicatorKey)) &&\n dimension.value === rowDimension.value\n ) {\n rowArr = dimension.children;\n if (needLowestLevel && !rowArr) {\n rowDimensionFinded = dimension;\n } else if (!needLowestLevel) {\n rowDimensionFinded = dimension;\n }\n break;\n }\n }\n }\n }\n // 如果是body单元格 需要找到行列对应的维度值节点\n if (needLowestLevel) {\n if (!rowDimensionFinded || !colDimensionFinded) {\n return undefined;\n }\n }\n // 通过dimension获取col和row\n if (rowDimensionFinded) {\n row = this.columnHeaderLevelCount;\n const { startInTotal, level } = rowDimensionFinded as IPivotLayoutHeadNode;\n row += startInTotal;\n if (this.rowHierarchyType === 'grid') {\n defaultCol = this.rowHeaderTitle ? level + 1 : level;\n } else {\n defaultCol = 0;\n } //树形展示的情况下 肯定是在第0列\n }\n if (colDimensionFinded) {\n col = this.rowHeaderLevelCount;\n const { startInTotal, level } = colDimensionFinded as IPivotLayoutHeadNode;\n col += startInTotal;\n defaultRow = this.columnHeaderTitle ? level + 1 : level;\n }\n if (isValid(col) || isValid(row)) {\n return { col: col ?? defaultCol, row: row ?? defaultRow };\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 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\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 return undefined;\n }\n isEmpty(col: number, row: number) {\n return false;\n }\n getChartAxes(col: number, row: number): any[] {\n return [];\n }\n getRawChartSpec(col: number, row: number): any {\n return getRawChartSpec(col, row, this);\n }\n getChartDataId(col: number, row: number): any {\n return getChartDataId(col, row, this);\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(dimensions: IDimensionInfo[]) {\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 || !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) && dimension.dimensionKey === highlightDimension.dimensionKey) ||\n (isValid(highlightDimension.indicatorKey) && dimension.indicatorKey === highlightDimension.indicatorKey)) &&\n dimension.value === highlightDimension.value\n ) {\n colArr = dimension.children;\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;\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}\n"]}
|
|
1
|
+
{"version":3,"sources":["layout/pivot-header-layout.ts"],"names":[],"mappings":"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","file":"pivot-header-layout.js","sourcesContent":["/* eslint-disable sort-imports */\nimport { cloneDeep, isValid, transpose } from '../tools/util';\nimport type {\n CellAddress,\n CellRange,\n ICustomRender,\n IPivotTableCellHeaderPaths,\n LayoutObjectId,\n ShowColumnRowType,\n ColumnIconOption,\n CellInfo,\n CellLocation,\n IHeaderTreeDefine,\n IDimension,\n IIndicator,\n ITitleDefine,\n ICornerDefine,\n IDimensionInfo\n} from '../ts-types';\nimport { HierarchyState } from '../ts-types';\nimport type {\n HeaderData,\n IndicatorData,\n LayoutMapAPI,\n // PivotTableLayoutDefine,\n WidthData\n} from '../ts-types/list-table/layout-map/api';\n// import { EmptyDataCache } from './utils';\nimport type { PivotTable } from '../PivotTable';\nimport { NumberMap } from '../tools/NumberMap';\nimport type { Either } from '../tools/helper';\nimport { IndicatorDimensionKeyPlaceholder } from '../tools/global';\nimport { diffCellAddress } from '../tools/diff-cell';\nimport type { ILinkDimension } from '../ts-types/pivot-table/dimension/link-dimension';\nimport type { IImageDimension } from '../ts-types/pivot-table/dimension/image-dimension';\nimport { getChartDataId, getRawChartSpec } from './chart-helper/get-chart-spec';\ninterface IPivotLayoutBaseHeadNode {\n id: number;\n // dimensionKey: string;\n // // title: string;\n // indicatorKey?: string;\n value: string;\n children: IPivotLayoutHeadNode[] | undefined;\n level: number;\n startIndex: number;\n size: number; //对应到colSpan或者rowSpan\n // parsing?: 'img' | 'link' | 'video' | 'templateLink';\n startInTotal: number;\n // headerStyle:HeaderStyleOption| null;\n customRender?: ICustomRender;\n\n hierarchyState: HierarchyState;\n headerIcon?: (string | ColumnIconOption)[] | ((args: CellInfo) => (string | ColumnIconOption)[]);\n}\ninterface IPivotLayoutDimensionHeadNode extends IPivotLayoutBaseHeadNode {\n dimensionKey: string;\n}\ninterface IPivotLayoutIndicatorHeadNode extends IPivotLayoutBaseHeadNode {\n indicatorKey: string;\n}\ntype IPivotLayoutHeadNode = Either<IPivotLayoutDimensionHeadNode, IPivotLayoutIndicatorHeadNode>;\nclass DimensionTree {\n // 每一个值对应的序号 结果缓存\n // cache: {\n // [propName: string]: any;\n // };\n //树形展示 会将非叶子节点单独展示一行 所以size会增加非叶子节点的个数\n sizeIncludeParent = false;\n rowExpandLevel: number;\n hierarchyType: 'grid' | 'tree';\n tree: IPivotLayoutHeadNode = {\n id: 0,\n dimensionKey: '',\n // title: '',\n value: '',\n children: [],\n level: -1,\n startIndex: 0,\n size: 0,\n startInTotal: 0,\n hierarchyState: undefined\n };\n\n totalLevel = 0;\n\n // blockLevel: number = 0;\n\n // blockStartIndexMap: Map<number, boolean> = new Map();\n // blockEndIndexMap: Map<number, boolean> = new Map();\n dimensionKeys: NumberMap<string> = new NumberMap<string>();\n // dimensions: IDimension[] | undefined;//目前用不到这个\n constructor(\n tree: IPivotLayoutHeadNode[],\n hierarchyType: 'grid' | 'tree' = 'grid',\n rowExpandLevel: number = undefined\n ) {\n this.sizeIncludeParent = rowExpandLevel !== null && rowExpandLevel !== undefined;\n this.rowExpandLevel = rowExpandLevel;\n this.hierarchyType = hierarchyType;\n this.reset(tree);\n }\n\n reset(tree: IPivotLayoutHeadNode[], updateTreeNode = false) {\n // 清空缓存的计算\n // this.cache = {};\n // this.dimensions = dimensions;\n this.dimensionKeys = new NumberMap<string>();\n this.tree.children = tree as IPivotLayoutHeadNode[];\n // const re = { totalLevel: 0 };\n // if (updateTreeNode) this.updateTreeNode(this.tree, 0, re, this.tree);\n // else\n this.setTreeNode(this.tree, 0, this.tree);\n this.totalLevel = this.dimensionKeys.count();\n }\n setTreeNode(node: IPivotLayoutHeadNode, startIndex: number, parent: IPivotLayoutHeadNode): number {\n node.startIndex = startIndex;\n node.startInTotal = (parent.startInTotal ?? 0) + node.startIndex;\n // if (node.dimensionKey) {\n // !this.dimensionKeys.contain(node.dimensionKey) &&\n // this.dimensionKeys.put(node.level, node.dimensionKey);\n // if (!node.id) node.id = ++seqId;\n // }\n if (node.dimensionKey ?? node.indicatorKey) {\n !this.dimensionKeys.contain(node.indicatorKey ? IndicatorDimensionKeyPlaceholder : node.dimensionKey) &&\n this.dimensionKeys.put(node.level, node.indicatorKey ? IndicatorDimensionKeyPlaceholder : node.dimensionKey);\n if (!node.id) {\n node.id = ++seqId;\n }\n }\n let size = node.dimensionKey ? (this.sizeIncludeParent ? 1 : 0) : 0;\n //平铺展示 分析所有层级\n if (this.hierarchyType === 'grid') {\n if (node.children) {\n node.children.forEach(n => {\n n.level = (node.level ?? 0) + 1;\n size += this.setTreeNode(n, size, node);\n });\n } else {\n size = 1;\n // re.totalLevel = Math.max(re.totalLevel, (node.level ?? -1) + 1);\n }\n } else if (node.hierarchyState === HierarchyState.expand && node.children) {\n //树形展示 有子节点 且下一层需要展开\n node.children.forEach(n => {\n n.level = (node.level ?? 0) + 1;\n size += this.setTreeNode(n, size, node);\n });\n } else if (node.hierarchyState === HierarchyState.collapse && node.children) {\n //树形展示 有子节点 且下一层不需要展开\n node.children.forEach(n => {\n n.level = (node.level ?? 0) + 1;\n this.setTreeNode(n, size, node);\n });\n } else if (!node.hierarchyState && node.level + 1 < this.rowExpandLevel && node.children) {\n //树形展示 有子节点 且下一层需要展开\n node.hierarchyState = HierarchyState.expand;\n node.children.forEach(n => {\n n.level = (node.level ?? 0) + 1;\n size += this.setTreeNode(n, size, node);\n });\n } else if (node.children) {\n //树形展示 有子节点 且下一层不需要展开\n node.hierarchyState = HierarchyState.collapse;\n node.children.forEach(n => {\n n.level = (node.level ?? 0) + 1;\n this.setTreeNode(n, size, node);\n });\n } else {\n //树形展示 无children子节点。但不能确定是最后一层的叶子节点 totalLevel还不能确定是计算完整棵树的整体深度\n node.hierarchyState = HierarchyState.none;\n size = 1;\n // re.totalLevel = Math.max(re.totalLevel, (node.level ?? -1) + 1);\n }\n\n node.size = size;\n // startInTotal = parent.startIndex + prevStartIndex\n return size;\n }\n getTreePath(index: number, maxDeep = 30): Array<IPivotLayoutHeadNode> {\n const path: any[] = [];\n this.searchPath(index, this.tree, path, maxDeep);\n path.shift();\n return path;\n }\n\n searchPath(index: number, node: IPivotLayoutHeadNode, path: Array<IPivotLayoutHeadNode>, maxDeep: number) {\n if (!node) {\n return false;\n }\n if (index < node.startIndex || index >= node.startIndex + node.size) {\n return false;\n }\n path.push(node);\n if (!node.children || node.children.length === 0) {\n return true;\n }\n if (node.level >= maxDeep) {\n return true;\n }\n // 这里按照 数据填充时,序号时同级序号 还是全局序号\n const cIndex = index - node.startIndex;\n node.children.some(n => this.searchPath(cIndex, n, path, maxDeep));\n return true;\n }\n /**\n * 将该树中 层级为level 的sourceIndex处的节点移动到targetIndex位置\n * @param level\n * @param sourceIndex\n * @param targetIndex\n */\n movePosition(level: number, sourceIndex: number, targetIndex: number) {\n // let sourceNode: IPivotLayoutHeadNode;\n let parNode: IPivotLayoutHeadNode;\n let sourceSubIndex: number;\n let targetSubIndex: number;\n /**\n * 对parNode的子节点第subIndex处的node节点 进行判断是否为sourceIndex或者targetIndex\n * 如果是 则记录下subIndex 以对parNode中个节点位置进行移位\n * @param node\n * @param subIndex\n * @returns\n */\n const findTargetNode = (node: IPivotLayoutHeadNode, subIndex: number) => {\n if (sourceSubIndex !== undefined && targetSubIndex !== undefined) {\n return;\n }\n if (node.level === level) {\n if (node.startInTotal === sourceIndex) {\n // sourceNode = node;\n sourceSubIndex = subIndex;\n }\n // if (node.startInTotal === targetIndex) targetSubIndex = subIndex;\n // 判断targetIndex是否在node的范围内 将当前node的subIndex记为targetSubIndex\n if (node.startInTotal <= targetIndex && targetIndex <= node.startInTotal + node.size - 1) {\n targetSubIndex = subIndex;\n }\n }\n\n if (node.children && node.level < level) {\n parNode = node;\n for (let i = 0; i < node.children.length; i++) {\n if (\n (sourceIndex >= node.children[i].startInTotal &&\n sourceIndex <= node.children[i].startInTotal + node.children[i].size) ||\n (targetIndex >= node.children[i].startInTotal &&\n targetIndex <= node.children[i].startInTotal + node.children[i].size)\n ) {\n findTargetNode(node.children[i], i);\n }\n }\n }\n };\n findTargetNode(this.tree, 0);\n\n //对parNode子节点位置进行移位【根据sourceSubIndex和targetSubIndex】\n const sourceColumns = parNode.children.splice(sourceSubIndex, 1);\n sourceColumns.unshift(targetSubIndex as any, 0 as any);\n Array.prototype.splice.apply(parNode.children, sourceColumns);\n }\n}\n\nlet seqId = 0;\nlet colIndex = 0;\n\nexport class PivotHeaderLayoutMap implements LayoutMapAPI {\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 private _cornerHeaderCellIds: number[][] = [];\n private _columnHeaderCellIds: number[][] = [];\n private _rowHeaderCellIds: number[][] = [];\n private _columnWidths: WidthData[] = [];\n rowsDefine: (IDimension | string)[];\n columnsDefine: (IDimension | string)[];\n indicatorsDefine: (IIndicator | string)[];\n columnPaths: number[][] = [];\n private _headerObjects: HeaderData[] = [];\n private _headerObjectMap: { [key: LayoutObjectId]: HeaderData } = {};\n // private _emptyDataCache = new EmptyDataCache();\n private _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';\n rowExpandLevel?: number;\n rowHierarchyIndent?: number;\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 // 缓存行号列号对应的headerPath,注意树形结构展开需要清除! 需要注意当表头位置拖拽后 这个缓存的行列号已不准确 进行重置\n private _CellHeaderPathMap: Map<string, IPivotTableCellHeaderPaths>;\n _table: PivotTable;\n constructor(table: PivotTable) {\n this._table = table;\n this._cellRangeMap = new Map();\n this._CellHeaderPathMap = new Map();\n // this.showHeader = showHeader;\n // this.pivotLayout = pivotLayoutObj;\n this.rowTree = table.options.rowTree;\n this.columnTree = table.options.columnTree;\n this.rowsDefine = table.options.rows ?? [];\n this.columnsDefine = table.options.columns ?? [];\n this.indicatorsDefine = table.options.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.options.rowHierarchyType ?? 'grid';\n this.rowExpandLevel = table.options.rowExpandLevel ?? 1;\n this.rowHierarchyIndent = table.options.rowHierarchyIndent ?? 20;\n this.cornerSetting = table.options.corner ?? { titleOnDimension: 'column' };\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 = new DimensionTree((this.columnTree as IPivotLayoutHeadNode[]) ?? []);\n this.rowDimensionTree = new DimensionTree(\n (this.rowTree as IPivotLayoutHeadNode[]) ?? [],\n this.rowHierarchyType,\n this.rowHierarchyType === 'tree' ? this.rowExpandLevel : undefined\n );\n this.colDimensionKeys = this.columnDimensionTree.dimensionKeys.valueArr();\n this.rowDimensionKeys = this.rowDimensionTree.dimensionKeys.valueArr();\n\n this.cornerHeaderObjs =\n this.cornerSetting.titleOnDimension === 'column'\n ? this._addCornerHeaders(\n this.columnHeaderTitle ? [''].concat(this.colDimensionKeys as any) : this.colDimensionKeys\n )\n : this.cornerSetting.titleOnDimension === 'row'\n ? this._addCornerHeaders(\n this.rowHeaderTitle ? [''].concat(this.rowDimensionKeys as any) : this.rowDimensionKeys\n )\n : this._addCornerHeaders(null);\n //生成列表头单元格\n if (this.columnDimensionTree.tree.children) {\n this.columnHeaderObjs = this._addHeaders(\n this._columnHeaderCellIds,\n 0,\n this.columnDimensionTree.tree.children,\n []\n );\n // if (typeof this.showColumnHeader !== 'boolean') {\n if (this.columnHeaderTitle) {\n const id = ++seqId;\n const firstRowIds = Array(this.colCount - this.rowHeaderLevelCount).fill(id);\n this._columnHeaderCellIds.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 }\n };\n this.columnHeaderObjs.push(cell);\n this._headerObjects[id] = cell;\n }\n // }\n }\n colIndex = 0;\n //生成行表头单元格\n if (this.rowDimensionTree.tree.children) {\n this.rowHeaderObjs =\n this.rowHierarchyType === 'tree'\n ? this._addHeadersForTreeMode(\n this._rowHeaderCellIds,\n 0,\n this.rowDimensionTree.tree.children,\n [],\n this.rowDimensionTree.totalLevel,\n true\n )\n : this._addHeaders(this._rowHeaderCellIds, 0, this.rowDimensionTree.tree.children, []);\n }\n // if (typeof this.showRowHeader !== 'boolean') {\n if (this.rowHeaderTitle) {\n const id = ++seqId;\n const firstColIds = Array(this.rowCount - this.columnHeaderLevelCount).fill(id);\n this._rowHeaderCellIds.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 }\n };\n this.rowHeaderObjs.push(cell);\n this._headerObjects[id] = cell;\n }\n // }\n colIndex = 0;\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._rowHeaderCellIds = transpose(this._rowHeaderCellIds);\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.setColumnWidths();\n }\n\n private _addHeaders(\n _headerCellIds: number[][],\n row: number,\n header: IPivotLayoutHeadNode[],\n roots: number[]\n ): HeaderData[] {\n function _newRow(row: number): number[] {\n const newRow: number[] = (_headerCellIds[row] = []);\n if (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 const results: HeaderData[] = [];\n if (!_headerCellIds[row]) {\n _newRow(row);\n }\n header.forEach(hd => {\n // const col = this._columns.length;\n const id = hd.id;\n const dimensionInfo: IDimension =\n (this.rowsDefine?.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === hd.dimensionKey\n ) as IDimension) ??\n (this.columnsDefine?.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === hd.dimensionKey\n ) as IDimension);\n const indicatorInfo = this.indicatorsDefine?.find(indicator => {\n if (typeof indicator === 'string') {\n return false;\n }\n if (hd.indicatorKey) {\n return indicator.indicatorKey === hd.indicatorKey;\n }\n return indicator.title === hd.value;\n }) as IIndicator;\n const cell: HeaderData = {\n id,\n title: hd.value ?? indicatorInfo.title,\n field: hd.dimensionKey,\n style:\n typeof (indicatorInfo ?? dimensionInfo)?.headerStyle === 'function'\n ? (indicatorInfo ?? dimensionInfo)?.headerStyle\n : Object.assign({}, (indicatorInfo ?? dimensionInfo)?.headerStyle),\n headerType: indicatorInfo?.headerType ?? dimensionInfo?.headerType ?? 'text',\n headerIcon: indicatorInfo?.headerIcon ?? dimensionInfo?.headerIcon,\n // define: <any>hd,\n define: Object.assign({}, <any>hd, indicatorInfo ?? dimensionInfo),\n fieldFormat: indicatorInfo?.headerFormat ?? dimensionInfo?.headerFormat,\n // iconPositionList:[]\n dropDownMenu: indicatorInfo?.dropDownMenu ?? dimensionInfo?.dropDownMenu,\n pivotInfo: {\n value: hd.value,\n dimensionKey: hd.dimensionKey,\n isPivotCorner: false\n // customInfo: dimensionInfo?.customInfo\n },\n width: dimensionInfo?.width,\n minWidth: dimensionInfo?.minWidth,\n maxWidth: dimensionInfo?.maxWidth,\n showSort: indicatorInfo?.showSort ?? dimensionInfo?.showSort,\n description: dimensionInfo?.description\n };\n\n if (indicatorInfo) {\n //收集indicatorDimensionKey 提到了构造函数中\n // this.indicatorDimensionKey = dimensionInfo.dimensionKey;\n if (indicatorInfo.customRender) {\n hd.customRender = indicatorInfo.customRender;\n }\n if (!isValid(this._indicators?.find(indicator => indicator.indicatorKey === indicatorInfo.indicatorKey))) {\n this._indicators?.push({\n id: ++seqId,\n indicatorKey: indicatorInfo.indicatorKey,\n field: indicatorInfo.indicatorKey,\n fieldFormat: indicatorInfo?.format,\n cellType: indicatorInfo?.cellType ?? (indicatorInfo as any)?.columnType ?? 'text',\n chartModule: 'chartModule' in indicatorInfo ? indicatorInfo.chartModule : null,\n chartSpec: 'chartSpec' in indicatorInfo ? indicatorInfo.chartSpec : null,\n sparklineSpec: 'sparklineSpec' in indicatorInfo ? indicatorInfo.sparklineSpec : null,\n style: indicatorInfo?.style,\n icon: indicatorInfo?.icon,\n define: Object.assign({}, <any>hd, indicatorInfo, {\n dragHeader: dimensionInfo?.dragHeader\n }),\n width: indicatorInfo?.width,\n minWidth: indicatorInfo?.minWidth,\n maxWidth: indicatorInfo?.maxWidth,\n disableColumnResize: indicatorInfo?.disableColumnResize\n });\n }\n } else if (hd.indicatorKey) {\n //兼容当某个指标没有设置在dimension.indicators中\n if (!isValid(this._indicators?.find(indicator => indicator.indicatorKey === hd.indicatorKey))) {\n this._indicators?.push({\n id: ++seqId,\n indicatorKey: hd.indicatorKey,\n field: hd.indicatorKey,\n cellType: 'text',\n define: Object.assign({}, <any>hd)\n });\n }\n }\n // if (dimensionInfo.indicators) {\n // this.hideIndicatorName = dimensionInfo.hideIndicatorName ?? false;\n // this.indicatorsAsCol = dimensionInfo.indicatorsAsCol ?? true;\n // }\n results[id] = cell;\n this._headerObjects[id] = cell;\n _headerCellIds[row][colIndex] = id;\n for (let r = row - 1; r >= 0; r--) {\n _headerCellIds[r][colIndex] = roots[r];\n }\n if ((hd as IPivotLayoutHeadNode).children) {\n this._addHeaders(_headerCellIds, row + 1, (hd as IPivotLayoutHeadNode).children ?? [], [...roots, id]).forEach(\n c => results.push(c)\n );\n } else {\n // columns.push([\"\"])//代码一个路径\n for (let r = row + 1; r < _headerCellIds.length; r++) {\n _headerCellIds[r][colIndex] = id;\n }\n colIndex++;\n }\n });\n return results;\n }\n private _addHeadersForTreeMode(\n _headerCellIds: number[][],\n row: number,\n header: IPivotLayoutHeadNode[],\n roots: number[],\n totalLevel: number,\n show: boolean\n ): HeaderData[] {\n function _newRow(row: number): number[] {\n const newRow: number[] = (_headerCellIds[row] = []);\n if (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 const results: HeaderData[] = [];\n if (!_headerCellIds[row]) {\n _newRow(row);\n }\n header.forEach(hd => {\n // const col = this._columns.length;\n const id = hd.id;\n const dimensionInfo: IDimension =\n (this.rowsDefine?.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === hd.dimensionKey\n ) as IDimension) ??\n (this.columnsDefine?.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === hd.dimensionKey\n ) as IDimension);\n\n const cell: HeaderData = {\n id,\n title: hd.value,\n field: hd.dimensionKey,\n //如果不是整棵树的叶子节点,都靠左显示\n style:\n hd.level + 1 === totalLevel || typeof dimensionInfo?.headerStyle === 'function'\n ? dimensionInfo?.headerStyle\n : Object.assign({}, dimensionInfo?.headerStyle, { textAlign: 'left' }),\n headerType: dimensionInfo?.headerType ?? 'text',\n headerIcon: dimensionInfo?.headerIcon,\n define: Object.assign(<any>hd, {\n linkJump: (dimensionInfo as ILinkDimension)?.linkJump,\n linkDetect: (dimensionInfo as ILinkDimension)?.linkDetect,\n templateLink: (dimensionInfo as ILinkDimension)?.templateLink,\n\n // image相关 to be fixed\n keepAspectRatio: (dimensionInfo as IImageDimension)?.keepAspectRatio ?? false,\n imageAutoSizing: (dimensionInfo as IImageDimension)?.imageAutoSizing,\n\n headerCustomRender: dimensionInfo?.headerCustomRender,\n headerCustomLayout: dimensionInfo?.headerCustomLayout,\n dragHeader: dimensionInfo?.dragHeader\n }), //这里不能新建对象,要用hd保持引用关系\n fieldFormat: dimensionInfo?.headerFormat,\n // iconPositionList:[]\n dropDownMenu: dimensionInfo?.dropDownMenu,\n pivotInfo: {\n value: hd.value,\n dimensionKey: hd.dimensionKey,\n isPivotCorner: false\n // customInfo: dimensionInfo?.customInfo\n },\n hierarchyLevel: hd.level,\n dimensionTotalLevel: totalLevel,\n hierarchyState: hd.level + 1 === totalLevel ? undefined : hd.hierarchyState,\n width: dimensionInfo?.width,\n minWidth: dimensionInfo?.minWidth,\n maxWidth: dimensionInfo?.maxWidth\n };\n\n results[id] = cell;\n this._headerObjects[id] = cell;\n _headerCellIds[row][colIndex] = id;\n for (let r = row - 1; r >= 0; r--) {\n _headerCellIds[r][colIndex] = roots[r];\n }\n if (hd.hierarchyState === HierarchyState.expand && (hd as IPivotLayoutHeadNode).children) {\n //row传值 colIndex++和_addHeaders有区别\n show && colIndex++;\n this._addHeadersForTreeMode(\n _headerCellIds,\n row,\n (hd as IPivotLayoutHeadNode).children ?? [],\n [...roots, id],\n totalLevel,\n show && hd.hierarchyState === HierarchyState.expand //当前节点show 且当前节点状态为展开 则传给子节点为show:true\n ).forEach(c => results.push(c));\n } else {\n // columns.push([\"\"])//代码一个路径\n show && colIndex++;\n for (let r = row + 1; r < _headerCellIds.length; r++) {\n _headerCellIds[r][colIndex] = id;\n }\n }\n });\n return results;\n }\n _addCornerHeaders(dimensionKeys: (string | number)[] | null) {\n const results: HeaderData[] = [];\n if (dimensionKeys) {\n dimensionKeys.forEach((dimensionKey: string, key: number) => {\n const id = ++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\n const cell: HeaderData = {\n id,\n title: dimensionKey === this.indicatorDimensionKey ? this.indicatorTitle : dimensionInfo?.title ?? '',\n field: '维度名称',\n style: this.cornerSetting.headerStyle,\n headerType: this.cornerSetting.headerType ?? 'text',\n define: <any>{\n dimensionKey: '维度名称',\n id,\n value: dimensionKey\n },\n dropDownMenu: dimensionInfo?.cornerDropDownMenu,\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._cornerHeaderCellIds[key]) {\n this._cornerHeaderCellIds[key] = [];\n }\n for (let r = 0; r < this.rowHeaderLevelCount; r++) {\n this._cornerHeaderCellIds[key][r] = id;\n }\n } else if (this.cornerSetting.titleOnDimension === 'row') {\n for (let r = 0; r < this.columnHeaderLevelCount; r++) {\n if (!this._cornerHeaderCellIds[r]) {\n this._cornerHeaderCellIds[r] = [];\n }\n this._cornerHeaderCellIds[r][key] = id;\n }\n }\n });\n } else {\n const id = ++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 value: ''\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._cornerHeaderCellIds[r]) {\n this._cornerHeaderCellIds[r] = [];\n }\n this._cornerHeaderCellIds[r][j] = id;\n }\n }\n }\n return results;\n }\n\n private setColumnWidths() {\n const returnWidths: WidthData[] = new Array(this.colCount).fill(undefined);\n if (this.showHeader && this.showRowHeader) {\n if (this.rowHeaderTitle) {\n returnWidths[0] = {};\n }\n this.rowDimensionKeys.forEach((objKey, index) => {\n const dimension = this.rowsDefine?.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === objKey\n ) as IDimension;\n dimension &&\n (returnWidths[index + (this.rowHeaderTitle ? 1 : 0)] = {\n width: dimension.width,\n minWidth: dimension.minWidth,\n maxWidth: dimension.maxWidth\n });\n });\n }\n if (this.indicatorsAsCol) {\n for (let i = this.rowHeaderLevelCount; 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 = 0;\n let maxWidth: string | number;\n let minWidth: string | number;\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);\n }\n if (typeof obj.maxWidth === 'number') {\n maxWidth = Math.max(obj.maxWidth, <number>maxWidth);\n }\n });\n width = width > 0 ? width : isAuto ? 'auto' : undefined;\n returnWidths.fill({ width, minWidth, maxWidth }, this.rowHeaderLevelCount, this.colCount);\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 (col < this.rowHeaderLevelCount) {\n return true;\n }\n if (row < this.columnHeaderLevelCount) {\n return true;\n }\n if (col >= this.colCount - this.rightFrozenColCount) {\n return true;\n }\n if (row >= this.rowCount - this.bottomFrozenRowCount) {\n return true;\n }\n return false;\n }\n isCornerHeader(col: number, row: number): boolean {\n if (col < this.rowHeaderLevelCount && row < this.columnHeaderLevelCount) {\n return true;\n }\n return false;\n }\n isColumnHeader(col: number, row: number): boolean {\n if (col >= this.rowHeaderLevelCount && row < this.columnHeaderLevelCount) {\n return true;\n }\n return false;\n }\n isRowHeader(col: number, row: number): boolean {\n if (col < this.rowHeaderLevelCount && row >= this.columnHeaderLevelCount) {\n return true;\n }\n return false;\n }\n isRightFrozenColumn(col: number, row: number): boolean {\n if (\n col >= this.colCount - this.rightFrozenColCount &&\n row >= this.columnHeaderLevelCount &&\n row < this.rowCount - this.bottomFrozenRowCount\n ) {\n return true;\n }\n return false;\n }\n isBottomFrozenRow(col: number, row: number): boolean {\n if (\n col >= this.rowHeaderLevelCount &&\n row >= this.rowCount - this.bottomFrozenRowCount &&\n col < this.colCount - this.rightFrozenColCount\n ) {\n return true;\n }\n return false;\n }\n isLeftBottomCorner(col: number, row: number): boolean {\n if (col < this.rowHeaderLevelCount && 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 < this.columnHeaderLevelCount) {\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 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 headerLevelCount(): number {\n return this.columnHeaderLevelCount;\n }\n get columnHeaderLevelCount(): number {\n if (this.showHeader && this.showColumnHeader) {\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 if (this.columnHeaderTitle) {\n count += 1;\n }\n return count;\n }\n return 0;\n }\n get rowHeaderLevelCount(): number {\n if (this.showHeader && this.showRowHeader) {\n if (this.rowHierarchyType === 'tree') {\n if (this.rowHeaderTitle) {\n return 2;\n }\n return 1;\n }\n let count = this.indicatorsAsCol\n ? this.rowDimensionTree.totalLevel\n : this.hideIndicatorName //设置隐藏表头,且表头最下面一级就是指标维度 则-1\n ? this.rowDimensionKeys[this.rowDimensionKeys.length - 1] === this.indicatorDimensionKey\n ? this.rowDimensionTree.totalLevel - 1\n : this.rowDimensionTree.totalLevel\n : this.rowDimensionTree.totalLevel;\n if (this.rowHeaderTitle) {\n count += 1;\n }\n return count;\n }\n return 0;\n }\n get colCount(): number {\n return this.columnDimensionTree.tree.size + this.rowHeaderLevelCount + this.rightFrozenColCount;\n }\n get rowCount(): number {\n return this.rowDimensionTree.tree.size + this.columnHeaderLevelCount + this.bottomFrozenRowCount;\n }\n get bodyRowCount() {\n return this.rowDimensionTree.tree.size;\n }\n get bottomFrozenRowCount(): number {\n // return 0;\n if (this.showHeader && this.showColumnHeader) {\n if (this.indicatorsAsCol && !this.hideIndicatorName) {\n // 查询指标是否有multiIndicator\n return this.indicatorsDefine.find(indicator => {\n return (indicator as any)?.multiIndicator;\n })\n ? 1\n : 0;\n }\n }\n return 0;\n }\n get rightFrozenColCount(): number {\n // return 0;\n if (this.showHeader && this.showColumnHeader) {\n if (!this.indicatorsAsCol && !this.hideIndicatorName) {\n // 查询指标是否有multiIndicator\n return this.indicatorsDefine.find(indicator => {\n return (indicator as any)?.multiIndicator;\n })\n ? 1\n : 0;\n }\n }\n return 0;\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.isCornerHeader(col, row)) {\n 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 } 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]?.[col - this.rowHeaderLevelCount];\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 {\n const id = this.getCellId(col, row);\n return this._headerObjectMap[id as number]!;\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 getHeaderCellAdress(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 this.getHeaderCellAdress(hd.id as number);\n }\n //TODO 这里的indicators是否可以改为和真正指标值一样数量 但目前也不会造成太多内存浪费 对象较简单 引用对象\n getBody(_col: number, _row: number): IndicatorData {\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 return (\n this._indicators?.find(indicator => indicator.indicatorKey === indicatorKey) ??\n this._indicators[0] ?? {\n id: '',\n field: undefined,\n indicatorKey: undefined,\n cellType: undefined,\n define: undefined\n }\n );\n }\n const indicatorKey = paths.rowHeaderPaths.find(rowPath => rowPath.indicatorKey)?.indicatorKey;\n return (\n this._indicators?.find(indicator => indicator.indicatorKey === indicatorKey) ??\n this._indicators[0] ?? {\n id: '',\n field: undefined,\n indicatorKey: undefined,\n cellType: undefined,\n define: undefined\n }\n );\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 if (col === -1 || row === -1) {\n return {\n start: { col, row },\n end: { col, row }\n };\n }\n // if (this._cellRangeMap.has(`$${col}$${row}`)) return this._cellRangeMap.get(`$${col}$${row}`);\n if (this._cellRangeMap.has(`${col}-${row}`)) {\n return this._cellRangeMap.get(`${col}-${row}`);\n }\n const result: CellRange = { start: { col, row }, end: { col, row } };\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 (id !== this.getCellId(col, r)) {\n break;\n }\n result.start.row = r;\n }\n for (let r = row + 1; r < (this.rowCount ?? 0); r++) {\n if (id !== this.getCellId(col, r)) {\n break;\n }\n result.end.row = r;\n }\n }\n this._cellRangeMap.set(`${col}-${row}`, result);\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 getRecordIndexByRow(row: number): number {\n if (row < this.columnHeaderLevelCount) {\n return -1;\n } else if (row >= this.rowCount - this.bottomFrozenRowCount) {\n return -1;\n }\n return row - this.columnHeaderLevelCount;\n }\n getRecordIndexByCol(col: number): number {\n if (col < this.rowHeaderLevelCount) {\n return -1;\n } else if (col >= this.colCount - this.rightFrozenColCount) {\n return -1;\n }\n return col - this.rowHeaderLevelCount;\n }\n getRecordStartRowByRecordIndex(index: number): number {\n return this.columnHeaderLevelCount + index;\n }\n\n // getCellRangeTranspose(): CellRange {\n // return { start: { col: 0, row: 0 }, end: { col: 0, row: 0 } };\n // }\n\n getCellHeaderPathsWidthTreeNode(\n col: number,\n row: number\n ): {\n /** 列表头各级path表头信息 */\n readonly colHeaderPaths?: any[];\n /** 行表头各级path表头信息 */\n readonly rowHeaderPaths?: any[];\n } {\n // if (this._CellHeaderPathMap.has(`$${col}$${row}`))\n if (this._CellHeaderPathMap.has(`${col}-${row}`)) {\n return this._CellHeaderPathMap.get(`${col}-${row}`);\n }\n const recordCol = this.getRecordIndexByCol(col);\n const recordRow = this.getRecordIndexByRow(row);\n let colPath;\n let rowPath;\n if (col >= 0) {\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 if (row >= 0) {\n if (this.rowHierarchyType === 'tree') {\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 } else {\n rowPath = this.rowDimensionTree.getTreePath(\n recordRow,\n this.showHeader && this.showRowHeader ? col - (this.rowHeaderTitle ? 1 : 0) : this.rowDimensionTree.totalLevel\n );\n }\n }\n const p = { colHeaderPaths: colPath, rowHeaderPaths: rowPath };\n this._CellHeaderPathMap.set(`${col}-${row}`, p);\n return p;\n }\n getCellHeaderPaths(col: number, row: number): IPivotTableCellHeaderPaths {\n const headerPathsWidthNode = this.getCellHeaderPathsWidthTreeNode(col, row);\n const headerPaths: IPivotTableCellHeaderPaths = {\n colHeaderPaths: [],\n rowHeaderPaths: []\n };\n headerPathsWidthNode.colHeaderPaths.forEach((colHeader: any) => {\n const colHeaderPath: {\n dimensionKey?: string;\n indicatorKey?: string;\n value?: string;\n } = {};\n colHeaderPath.dimensionKey = colHeader.dimensionKey;\n colHeaderPath.indicatorKey = colHeader.indicatorKey;\n colHeaderPath.value = colHeader.value ?? this.getIndicatorInfoByIndicatorKey(colHeader.indicatorKey)?.title ?? '';\n headerPaths.colHeaderPaths.push(colHeaderPath);\n });\n\n headerPathsWidthNode.rowHeaderPaths.forEach((rowHeader: any) => {\n const rowHeaderPath: {\n dimensionKey?: string;\n indicatorKey?: string;\n value?: string;\n } = {};\n rowHeaderPath.dimensionKey = rowHeader.dimensionKey;\n rowHeaderPath.indicatorKey = rowHeader.indicatorKey;\n rowHeaderPath.value = rowHeader.value ?? this.getIndicatorInfoByIndicatorKey(rowHeader.indicatorKey)?.title ?? '';\n headerPaths.rowHeaderPaths.push(rowHeaderPath);\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 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 * @param col\n * @param row\n */\n toggleHierarchyState(col: number, row: number) {\n const oldRowHeaderCellIds = this._rowHeaderCellIds.slice(0);\n const oldRowHeaderCellPositons = oldRowHeaderCellIds.map(id => this.getHeaderCellAdress(id[0]));\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, true);\n this._rowHeaderCellIds = [];\n this.rowHeaderObjs = this._addHeadersForTreeMode(\n this._rowHeaderCellIds,\n 0,\n this.rowDimensionTree.tree.children,\n [],\n this.rowDimensionTree.totalLevel,\n true\n );\n\n if (this.rowHeaderTitle) {\n const id = ++seqId;\n const firstColIds = Array(this.rowCount - this.columnHeaderLevelCount).fill(id);\n this._rowHeaderCellIds.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 }\n };\n this.rowHeaderObjs.push(cell);\n this._headerObjects[id] = cell;\n }\n colIndex = 0;\n\n this._rowHeaderCellIds = transpose(this._rowHeaderCellIds);\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\n return diffCellAddress(oldRowHeaderCellIds, this._rowHeaderCellIds, oldRowHeaderCellPositons, this);\n }\n // 为列宽计算专用,兼容列表\n isHeaderForColWidth(col: number, row: number): boolean {\n return this.isHeader(col, row);\n }\n getHeaderForColWidth(col: number, row: number): HeaderData {\n return this.getHeader(col, row);\n }\n /**\n * 通过dimensionPath获取到对应的表头地址col row\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 || !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 ? undefined : { col: this.rowHeaderTitle ? col + 1 : col, row: 0 };\n }\n\n const row = (this.colDimensionKeys as Array<string | number>).indexOf(highlightDimension.dimensionKey);\n return row === -1 ? undefined : { col: 0, 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;\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;\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, level } = rowDimension as IPivotLayoutHeadNode;\n row += startInTotal;\n if (this.rowHierarchyType === 'grid') {\n col = this.rowHeaderTitle ? level + 1 : level;\n } else {\n col = 0;\n } //树形展示的情况下 肯定是在第0列\n return { col, row };\n } else if (colDimension) {\n col = this.rowHeaderLevelCount;\n const { startInTotal, level } = colDimension as IPivotLayoutHeadNode;\n col += startInTotal;\n row = this.columnHeaderTitle ? level + 1 : level;\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: this.rowDimensionKeys[this.rowHeaderTitle ? col - 1 : col],\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)?.indicatorKey;\n }\n private 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 /**\n * 判断从source地址是否可以移动到target地址\n * @param source\n * @param target\n * @returns boolean 是否可以移动\n */\n canMoveHeaderPosition(source: CellAddress, target: CellAddress): boolean {\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.getCellHeaderPathsWidthTreeNode(source.col, source.row).rowHeaderPaths\n );\n const targetRowHeaderPaths = cloneDeep(\n this.getCellHeaderPathsWidthTreeNode(target.col, target.row).rowHeaderPaths\n );\n sourceRowHeaderPaths.pop(); // 如果用了缓存_CellHeaderPathMap的话 这里pop会影响缓存的值 所以上面使用clone\n targetRowHeaderPaths.pop();\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 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(source: CellAddress, target: CellAddress) {\n // 判断从source地址是否可以移动到target地址\n if (\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 moveSize = 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 - moveSize + 1;\n } else {\n targetIndex = targetCellRange.start.col;\n }\n //如果操作列和目标地址col一样 则不执行其他逻辑\n if (targetIndex === sourceCellRange.end.col) {\n return null;\n }\n // 逐行将每一行的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,\n moveSize\n );\n // 将source ids插入到目标地址targetCol处\n // 把sourceIds变成一个适合splice的数组(包含splice前2个参数的数组) 以通过splice来插入sourceIds数组\n sourceIds.unshift(targetIndex - this.rowHeaderLevelCount, 0);\n Array.prototype.splice.apply(this._columnHeaderCellIds[row], sourceIds);\n }\n\n //将_columns的列定义调整位置 同调整_headerCellIds逻辑\n const sourceColumns = this._columnWidths.splice(sourceCellRange.start.col, moveSize);\n sourceColumns.unshift(targetIndex as any, 0 as any);\n Array.prototype.splice.apply(this._columnWidths, sourceColumns);\n\n // 对维度树结构调整节点位置\n this.columnDimensionTree.movePosition(\n source.row,\n sourceCellRange.start.col - this.rowHeaderLevelCount,\n targetIndex - this.rowHeaderLevelCount\n );\n this.columnDimensionTree.reset(this.columnDimensionTree.tree.children, true);\n this._CellHeaderPathMap = new Map();\n this._cellRangeMap = new Map();\n return {\n sourceIndex: sourceCellRange.start.col,\n targetIndex,\n moveSize,\n moveType: 'column'\n };\n } else if (this.isRowHeader(source.col, source.row)) {\n // 插入目标地址的列index\n let targetIndex;\n const sourceRowHeaderPaths = this.getCellHeaderPathsWidthTreeNode(source.col, source.row).rowHeaderPaths;\n const targetRowHeaderPaths = this.getCellHeaderPathsWidthTreeNode(target.col, target.row).rowHeaderPaths;\n const sourceRowHeaderNode = sourceRowHeaderPaths[sourceRowHeaderPaths.length - 1];\n const targetRowHeaderNode = targetRowHeaderPaths[sourceRowHeaderPaths.length - 1];\n //整体移动的列数\n const moveSize = sourceRowHeaderNode.size;\n if (target.row >= source.row) {\n targetIndex = targetRowHeaderNode.startInTotal + targetRowHeaderNode.size - moveSize;\n } else {\n targetIndex = targetRowHeaderNode.startInTotal;\n }\n\n //如果操作列和目标地址col一样 则不执行其他逻辑\n if (targetIndex === source.row || targetIndex === sourceCellRange.end.row) {\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 moveSize\n );\n sourceIds.unshift(targetIndex as any, 0 as any);\n Array.prototype.splice.apply(this._rowHeaderCellIds, sourceIds);\n\n // 对维度树结构调整节点位置\n this.rowDimensionTree.movePosition(\n this.getCellHeaderPathsWidthTreeNode(source.col, source.row).rowHeaderPaths.length - 1,\n sourceCellRange.start.row - this.columnHeaderLevelCount,\n targetIndex + (target.row > source.row ? sourceRowHeaderNode.size - 1 : 0)\n );\n this.rowDimensionTree.reset(this.rowDimensionTree.tree.children, true);\n this._CellHeaderPathMap = new Map();\n this._cellRangeMap = new Map();\n return {\n sourceIndex: sourceCellRange.start.row,\n targetIndex: targetIndex + this.columnHeaderLevelCount,\n moveSize,\n moveType: 'row'\n };\n }\n }\n return null;\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;\n let rowHeaderPaths;\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) => this.colDimensionKeys.indexOf(path.dimensionKey) >= 0\n );\n rowHeaderPaths = dimensionPaths.filter(\n (path: IDimensionInfo) => this.rowDimensionKeys.indexOf(path.dimensionKey) >= 0\n );\n } else {\n colHeaderPaths = dimensionPaths.colHeaderPaths;\n rowHeaderPaths = dimensionPaths.rowHeaderPaths;\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.rowDimensionKeys.indexOf(a.dimensionKey ?? this.indicatorDimensionKey) -\n this.rowDimensionKeys.indexOf(b.dimensionKey ?? this.indicatorDimensionKey)\n );\n });\n let needLowestLevel = false; // needLowestLevel来标记是否需要 提供到最底层的维度层级信息\n // 如果行列维度都有值 说明是匹配body单元格 那这个时候 维度层级应该是满的\n if (colHeaderPaths?.length >= 1 && rowHeaderPaths?.length >= 1) {\n needLowestLevel = true;\n }\n let col;\n let row;\n let defaultCol;\n let defaultRow;\n let rowArr = this.rowTree;\n let rowDimensionFinded;\n let colArr = this.columnTree;\n let colDimensionFinded;\n // 按照colHeaderPaths维度层级寻找到底层维度值节点\n if (colHeaderPaths) {\n for (let i = 0; i < colHeaderPaths.length; i++) {\n const colDimension = colHeaderPaths[i];\n for (let j = 0; j < colArr.length; j++) {\n const dimension = colArr[j];\n if (\n (!isValid(colDimension.indicatorKey) &&\n dimension.dimensionKey === colDimension.dimensionKey &&\n dimension.value === colDimension.value) ||\n (isValid(colDimension.indicatorKey) && dimension.indicatorKey === colDimension.indicatorKey)\n ) {\n colArr = dimension.children;\n if (needLowestLevel && !colArr) {\n colDimensionFinded = dimension;\n } else if (!needLowestLevel) {\n colDimensionFinded = dimension;\n }\n break;\n }\n }\n }\n }\n // 按照rowHeaderPaths维度层级寻找到底层维度值节点\n if (rowHeaderPaths) {\n for (let i = 0; i < rowHeaderPaths.length; i++) {\n const rowDimension = rowHeaderPaths[i];\n // 判断级别,找到distDimension\n // let isCol = false;\n for (let j = 0; j < rowArr.length; j++) {\n const dimension = rowArr[j];\n if (\n ((!isValid(rowDimension.indicatorKey) &&\n dimension.dimensionKey === rowDimension.dimensionKey &&\n dimension.value === rowDimension.value) ||\n (isValid(rowDimension.indicatorKey) && dimension.indicatorKey === rowDimension.indicatorKey)) &&\n dimension.value === rowDimension.value\n ) {\n rowArr = dimension.children;\n if (needLowestLevel && !rowArr) {\n rowDimensionFinded = dimension;\n } else if (!needLowestLevel) {\n rowDimensionFinded = dimension;\n }\n break;\n }\n }\n }\n }\n // 如果是body单元格 需要找到行列对应的维度值节点\n if (needLowestLevel) {\n if (!rowDimensionFinded || !colDimensionFinded) {\n return undefined;\n }\n }\n // 通过dimension获取col和row\n if (rowDimensionFinded) {\n row = this.columnHeaderLevelCount;\n const { startInTotal, level } = rowDimensionFinded as IPivotLayoutHeadNode;\n row += startInTotal;\n if (this.rowHierarchyType === 'grid') {\n defaultCol = this.rowHeaderTitle ? level + 1 : level;\n } else {\n defaultCol = 0;\n } //树形展示的情况下 肯定是在第0列\n }\n if (colDimensionFinded) {\n col = this.rowHeaderLevelCount;\n const { startInTotal, level } = colDimensionFinded as IPivotLayoutHeadNode;\n col += startInTotal;\n defaultRow = this.columnHeaderTitle ? level + 1 : level;\n }\n if (isValid(col) || isValid(row)) {\n return { col: col ?? defaultCol, row: row ?? defaultRow };\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 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\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 return undefined;\n }\n isEmpty(col: number, row: number) {\n return false;\n }\n getChartAxes(col: number, row: number): any[] {\n return [];\n }\n getRawChartSpec(col: number, row: number): any {\n return getRawChartSpec(col, row, this);\n }\n getChartDataId(col: number, row: number): any {\n return getChartDataId(col, row, this);\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(dimensions: IDimensionInfo[]) {\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 || !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) && dimension.dimensionKey === highlightDimension.dimensionKey) ||\n (isValid(highlightDimension.indicatorKey) && dimension.indicatorKey === highlightDimension.indicatorKey)) &&\n dimension.value === highlightDimension.value\n ) {\n colArr = dimension.children;\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;\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}\n"]}
|