@visactor/vtable 0.10.2-alpha.3 → 0.10.2
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/ListTable.d.ts +2 -1
- package/cjs/ListTable.js +6 -0
- package/cjs/ListTable.js.map +1 -1
- package/cjs/PivotChart.d.ts +1 -0
- package/cjs/PivotChart.js +3 -2
- package/cjs/PivotChart.js.map +1 -1
- package/cjs/PivotTable.d.ts +2 -1
- package/cjs/PivotTable.js +8 -2
- package/cjs/PivotTable.js.map +1 -1
- package/cjs/components/axis/axis.js +4 -0
- package/cjs/components/axis/axis.js.map +1 -1
- package/cjs/components/legend/continue-legend/continue-legend.d.ts +24 -0
- package/cjs/components/legend/continue-legend/continue-legend.js +93 -0
- package/cjs/components/legend/continue-legend/continue-legend.js.map +1 -0
- package/cjs/components/legend/continue-legend/get-continue-legend-attributes.d.ts +5 -0
- package/cjs/components/legend/continue-legend/get-continue-legend-attributes.js +139 -0
- package/cjs/components/legend/continue-legend/get-continue-legend-attributes.js.map +1 -0
- package/cjs/components/legend/create-legend.d.ts +5 -0
- package/cjs/components/legend/create-legend.js +14 -0
- package/cjs/components/legend/create-legend.js.map +1 -0
- package/{es/components/legend/legend.d.ts → cjs/components/legend/discrete-legend/discrete-legend.d.ts} +6 -6
- package/cjs/components/legend/{legend.js → discrete-legend/discrete-legend.js} +6 -6
- package/cjs/components/legend/discrete-legend/discrete-legend.js.map +1 -0
- package/cjs/components/legend/discrete-legend/get-discrete-legend-attributes.d.ts +5 -0
- package/cjs/components/legend/{get-legend-attributes.js → discrete-legend/get-discrete-legend-attributes.js} +2 -2
- package/cjs/components/legend/discrete-legend/get-discrete-legend-attributes.js.map +1 -0
- package/cjs/core/BaseTable.d.ts +1 -1
- package/cjs/core/BaseTable.js +4 -10
- package/cjs/core/BaseTable.js.map +1 -1
- package/cjs/core/TABLE_EVENT_TYPE.d.ts +1 -0
- package/cjs/core/TABLE_EVENT_TYPE.js +1 -0
- package/cjs/core/TABLE_EVENT_TYPE.js.map +1 -1
- package/cjs/dataset/dataset.d.ts +11 -8
- package/cjs/dataset/dataset.js +14 -3
- package/cjs/dataset/dataset.js.map +1 -1
- package/cjs/event/listener/table-group.js +42 -49
- package/cjs/event/listener/table-group.js.map +1 -1
- package/cjs/index.d.ts +1 -1
- package/cjs/index.js +1 -1
- package/cjs/index.js.map +1 -1
- package/cjs/ts-types/base-table.d.ts +3 -2
- package/cjs/ts-types/base-table.js.map +1 -1
- package/cjs/ts-types/component/legend.d.ts +15 -2
- package/cjs/ts-types/component/legend.js.map +1 -1
- package/cjs/ts-types/events.d.ts +6 -0
- package/cjs/ts-types/events.js.map +1 -1
- package/cjs/ts-types/table-engine.js.map +1 -1
- package/dist/vtable.js +1118 -26
- package/dist/vtable.min.js +3 -3
- package/es/ListTable.d.ts +2 -1
- package/es/ListTable.js +6 -0
- package/es/ListTable.js.map +1 -1
- package/es/PivotChart.d.ts +1 -0
- package/es/PivotChart.js +3 -2
- package/es/PivotChart.js.map +1 -1
- package/es/PivotTable.d.ts +2 -1
- package/es/PivotTable.js +8 -2
- package/es/PivotTable.js.map +1 -1
- package/es/components/axis/axis.js +4 -0
- package/es/components/axis/axis.js.map +1 -1
- package/es/components/legend/continue-legend/continue-legend.d.ts +24 -0
- package/es/components/legend/continue-legend/continue-legend.js +91 -0
- package/es/components/legend/continue-legend/continue-legend.js.map +1 -0
- package/es/components/legend/continue-legend/get-continue-legend-attributes.d.ts +5 -0
- package/es/components/legend/continue-legend/get-continue-legend-attributes.js +132 -0
- package/es/components/legend/continue-legend/get-continue-legend-attributes.js.map +1 -0
- package/es/components/legend/create-legend.d.ts +5 -0
- package/es/components/legend/create-legend.js +8 -0
- package/es/components/legend/create-legend.js.map +1 -0
- package/{cjs/components/legend/legend.d.ts → es/components/legend/discrete-legend/discrete-legend.d.ts} +6 -6
- package/es/components/legend/{legend.js → discrete-legend/discrete-legend.js} +5 -5
- package/es/components/legend/discrete-legend/discrete-legend.js.map +1 -0
- package/es/components/legend/discrete-legend/get-discrete-legend-attributes.d.ts +5 -0
- package/es/components/legend/{get-legend-attributes.js → discrete-legend/get-discrete-legend-attributes.js} +3 -3
- package/es/components/legend/discrete-legend/get-discrete-legend-attributes.js.map +1 -0
- package/es/core/BaseTable.d.ts +1 -1
- package/es/core/BaseTable.js +4 -10
- package/es/core/BaseTable.js.map +1 -1
- package/es/core/TABLE_EVENT_TYPE.d.ts +1 -0
- package/es/core/TABLE_EVENT_TYPE.js +1 -0
- package/es/core/TABLE_EVENT_TYPE.js.map +1 -1
- package/es/dataset/dataset.d.ts +11 -8
- package/es/dataset/dataset.js +13 -3
- package/es/dataset/dataset.js.map +1 -1
- package/es/event/listener/table-group.js +41 -48
- package/es/event/listener/table-group.js.map +1 -1
- package/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/es/index.js.map +1 -1
- package/es/ts-types/base-table.d.ts +3 -2
- package/es/ts-types/base-table.js.map +1 -1
- package/es/ts-types/component/legend.d.ts +15 -2
- package/es/ts-types/component/legend.js.map +1 -1
- package/es/ts-types/events.d.ts +6 -0
- package/es/ts-types/events.js.map +1 -1
- package/es/ts-types/table-engine.js.map +1 -1
- package/package.json +1 -1
- package/cjs/components/legend/get-legend-attributes.d.ts +0 -5
- package/cjs/components/legend/get-legend-attributes.js.map +0 -1
- package/cjs/components/legend/legend.js.map +0 -1
- package/es/components/legend/get-legend-attributes.d.ts +0 -5
- package/es/components/legend/get-legend-attributes.js.map +0 -1
- package/es/components/legend/legend.js.map +0 -1
|
@@ -29,6 +29,7 @@ export interface TableEvents {
|
|
|
29
29
|
LEGEND_ITEM_CLICK: 'legend_item_click';
|
|
30
30
|
LEGEND_ITEM_HOVER: 'legend_item_hover';
|
|
31
31
|
LEGEND_ITEM_UNHOVER: 'legend_item_unHover';
|
|
32
|
+
LEGEND_CHANGE: 'legend_change';
|
|
32
33
|
MOUSEENTER_AXIS: 'mouseenter_axis';
|
|
33
34
|
MOUSELEAVE_AXIS: 'mouseleave_axis';
|
|
34
35
|
}
|
|
@@ -33,6 +33,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
33
33
|
LEGEND_ITEM_CLICK: "legend_item_click",
|
|
34
34
|
LEGEND_ITEM_HOVER: "legend_item_hover",
|
|
35
35
|
LEGEND_ITEM_UNHOVER: "legend_item_unHover",
|
|
36
|
+
LEGEND_CHANGE: "legend_change",
|
|
36
37
|
MOUSEENTER_AXIS: "mouseenter_axis",
|
|
37
38
|
MOUSELEAVE_AXIS: "mouseleave_axis"
|
|
38
39
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["core/TABLE_EVENT_TYPE.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"sources":["core/TABLE_EVENT_TYPE.ts"],"names":[],"mappings":";;;AA0Ha,QAAA,gBAAgB,GAAgB;IAC3C,UAAU,EAAE,YAAY;IACxB,aAAa,EAAE,eAAe;IAC9B,cAAc,EAAE,gBAAgB;IAChC,YAAY,EAAE,cAAc;IAC5B,aAAa,EAAE,eAAe;IAC9B,OAAO,EAAE,SAAS;IAClB,gBAAgB,EAAE,kBAAkB;IACpC,gBAAgB,EAAE,kBAAkB;IACpC,cAAc,EAAE,gBAAgB;IAChC,eAAe,EAAE,iBAAiB;IAClC,eAAe,EAAE,iBAAiB;IAClC,gBAAgB,EAAE,kBAAkB;IACpC,aAAa,EAAE,eAAe;IAC9B,iBAAiB,EAAE,mBAAmB;IACtC,sBAAsB,EAAE,wBAAwB;IAChD,UAAU,EAAE,YAAY;IACxB,YAAY,EAAE,cAAc;IAC5B,MAAM,EAAE,QAAQ;IAChB,kBAAkB,EAAE,oBAAoB;IACxC,sBAAsB,EAAE,wBAAwB;IAChD,eAAe,EAAE,iBAAiB;IAElC,mBAAmB,EAAE,qBAAqB;IAC1C,mBAAmB,EAAE,qBAAqB;IAE1C,2BAA2B,EAAE,6BAA6B;IAE1D,SAAS,EAAE,WAAW;IACtB,SAAS,EAAE,WAAW;IAEtB,UAAU,EAAE,YAAY;IAExB,iBAAiB,EAAE,mBAAmB;IACtC,iBAAiB,EAAE,mBAAmB;IACtC,mBAAmB,EAAE,qBAAqB;IAC1C,aAAa,EAAE,eAAe;IAE9B,eAAe,EAAE,iBAAiB;IAClC,eAAe,EAAE,iBAAiB;CACpB,CAAC","file":"TABLE_EVENT_TYPE.js","sourcesContent":["export interface TableEvents {\n /**\n * 鼠标点击单元格事件\n */\n CLICK_CELL: 'click_cell';\n /**\n * 鼠标双击单元格事件\n */\n DBLCLICK_CELL: 'dblclick_cell';\n /**\n * 单元格上鼠标按下事件\n */\n MOUSEDOWN_CELL: 'mousedown_cell';\n /**\n * 单元格鼠标松开事件\n */\n MOUSEUP_CELL: 'mouseup_cell';\n\n /**\n * 单元格选中状态改变事件\n */\n SELECTED_CELL: 'selected_cell';\n /**\n * 键盘按下事件\n */\n KEYDOWN: 'keydown';\n /**\n * 鼠标进入表格事件\n */\n MOUSEENTER_TABLE: 'mouseenter_table';\n /**\n * 鼠标离开表格事件\n */\n MOUSELEAVE_TABLE: 'mouseleave_table';\n /**\n * 鼠标在某个单元格上移动事件\n */\n MOUSEMOVE_CELL: 'mousemove_cell';\n /**\n * 鼠标进入单元格事件\n */\n MOUSEENTER_CELL: 'mouseenter_cell';\n /**\n * 鼠标离开单元格事件\n */\n MOUSELEAVE_CELL: 'mouseleave_cell';\n /**\n * 单元格右键事件\n */\n CONTEXTMENU_CELL: 'contextmenu_cell';\n /**\n * 列宽调整事件\n */\n RESIZE_COLUMN: 'resize_column';\n /**\n * 列宽调整结束事件\n */\n RESIZE_COLUMN_END: 'resize_column_end';\n /**\n * 拖拽表头移动位置的事件\n */\n CHANGE_HEADER_POSITION: 'change_header_position';\n /**\n * 点击排序图标事件\n */\n SORT_CLICK: 'sort_click';\n /**\n * 点击固定列图标 冻结或者解冻事件\n */\n FREEZE_CLICK: 'freeze_click';\n /**\n * 滚动表格事件\n */\n SCROLL: 'scroll';\n\n /**\n * 点击下拉菜单图标事件\n */\n DROPDOWNMENU_CLICK: 'dropdownmenu_click';\n /**\n * 鼠标经过迷你图标记事件\n */\n MOUSEOVER_CHART_SYMBOL: 'mouseover_chart_symbol';\n\n /**\n * 拖拽框选单元格鼠标松开事件\n */\n DRAG_SELECT_END: 'drag_select_end';\n\n /**\n * 点击下拉菜单按钮\n */\n DROPDOWN_ICON_CLICK: 'dropdown_icon_click';\n /**\n * 清空下拉菜单事件(菜单显示时点击其他区域)\n */\n DROPDOWN_MENU_CLEAR: 'dropdown_menu_clear';\n\n /**\n * 树形结构展开收起的点击事件\n */\n TREE_HIERARCHY_STATE_CHANGE: 'tree_hierarchy_state_change';\n\n SHOW_MENU: 'show_menu';\n HIDE_MENU: 'hide_menu';\n /**\n * icon图标点击事件\n */\n ICON_CLICK: 'icon_click';\n\n // legend component\n LEGEND_ITEM_CLICK: 'legend_item_click';\n LEGEND_ITEM_HOVER: 'legend_item_hover';\n LEGEND_ITEM_UNHOVER: 'legend_item_unHover';\n LEGEND_CHANGE: 'legend_change';\n\n MOUSEENTER_AXIS: 'mouseenter_axis';\n MOUSELEAVE_AXIS: 'mouseleave_axis';\n}\n/**\n * Table event types\n */\nexport const TABLE_EVENT_TYPE: TableEvents = {\n CLICK_CELL: 'click_cell',\n DBLCLICK_CELL: 'dblclick_cell',\n MOUSEDOWN_CELL: 'mousedown_cell',\n MOUSEUP_CELL: 'mouseup_cell',\n SELECTED_CELL: 'selected_cell',\n KEYDOWN: 'keydown',\n MOUSEENTER_TABLE: 'mouseenter_table',\n MOUSELEAVE_TABLE: 'mouseleave_table',\n MOUSEMOVE_CELL: 'mousemove_cell',\n MOUSEENTER_CELL: 'mouseenter_cell',\n MOUSELEAVE_CELL: 'mouseleave_cell',\n CONTEXTMENU_CELL: 'contextmenu_cell',\n RESIZE_COLUMN: 'resize_column',\n RESIZE_COLUMN_END: 'resize_column_end',\n CHANGE_HEADER_POSITION: 'change_header_position',\n SORT_CLICK: 'sort_click',\n FREEZE_CLICK: 'freeze_click',\n SCROLL: 'scroll',\n DROPDOWNMENU_CLICK: 'dropdownmenu_click',\n MOUSEOVER_CHART_SYMBOL: 'mouseover_chart_symbol',\n DRAG_SELECT_END: 'drag_select_end',\n\n DROPDOWN_ICON_CLICK: 'dropdown_icon_click', // 点击下拉菜单按钮\n DROPDOWN_MENU_CLEAR: 'dropdown_menu_clear', // 清空下拉菜单事件(菜单显示时点击其他区域)\n\n TREE_HIERARCHY_STATE_CHANGE: 'tree_hierarchy_state_change', //树形结构展开收起的点击事件\n\n SHOW_MENU: 'show_menu',\n HIDE_MENU: 'hide_menu',\n\n ICON_CLICK: 'icon_click',\n\n LEGEND_ITEM_CLICK: 'legend_item_click',\n LEGEND_ITEM_HOVER: 'legend_item_hover',\n LEGEND_ITEM_UNHOVER: 'legend_item_unHover',\n LEGEND_CHANGE: 'legend_change',\n\n MOUSEENTER_AXIS: 'mouseenter_axis',\n MOUSELEAVE_AXIS: 'mouseleave_axis'\n} as TableEvents;\n"]}
|
package/cjs/dataset/dataset.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import type { FilterRules, IDataConfig, SortRule, AggregationRules, SortRules, DerivedFieldRules, Totals, MappingRules, IHeaderTreeDefine, CollectValueBy, CollectedValue } from '../ts-types';
|
|
1
|
+
import type { FilterRules, IDataConfig, SortRule, AggregationRules, SortRules, DerivedFieldRules, Totals, MappingRules, IHeaderTreeDefine, CollectValueBy, CollectedValue, IPagination } from '../ts-types';
|
|
2
2
|
import type { Aggregator } from './statistics-helper';
|
|
3
3
|
import { typeSort } from './statistics-helper';
|
|
4
4
|
export declare class Dataset {
|
|
5
5
|
dataConfig: IDataConfig;
|
|
6
|
+
pagination: IPagination;
|
|
6
7
|
records: any[] | Record<string, any[]>;
|
|
7
8
|
tree: Record<string, Record<string, Aggregator[]>>;
|
|
8
9
|
private colFlatKeys;
|
|
@@ -43,17 +44,19 @@ export declare class Dataset {
|
|
|
43
44
|
rows: string[];
|
|
44
45
|
columns: string[];
|
|
45
46
|
indicatorKeys: string[];
|
|
46
|
-
|
|
47
|
+
private rowKeysPath_FULL;
|
|
48
|
+
constructor(dataConfig: IDataConfig, pagination: IPagination, rows: string[], columns: string[], indicatorKeys: string[], records: any[] | Record<string, any[]>, customColTree?: IHeaderTreeDefine[], customRowTree?: IHeaderTreeDefine[]);
|
|
47
49
|
registerAggregator(type: string, aggregator: any): void;
|
|
48
50
|
registerAggregators(): void;
|
|
49
|
-
setRecords
|
|
50
|
-
processCollectedValuesWithSumBy
|
|
51
|
-
processCollectedValuesWithSortBy
|
|
52
|
-
processRecords
|
|
53
|
-
filterRecord
|
|
54
|
-
processRecord
|
|
51
|
+
private setRecords;
|
|
52
|
+
private processCollectedValuesWithSumBy;
|
|
53
|
+
private processCollectedValuesWithSortBy;
|
|
54
|
+
private processRecords;
|
|
55
|
+
private filterRecord;
|
|
56
|
+
private processRecord;
|
|
55
57
|
updateSortRules(sortRules: SortRules): void;
|
|
56
58
|
updateFilterRules(filterRules: FilterRules, isResetTree?: boolean): void;
|
|
59
|
+
updatePagination(pagination: IPagination): void;
|
|
57
60
|
private getAggregatorRule;
|
|
58
61
|
getAggregator(rowKey: string[] | string, colKey: string[] | string, indicator: string): Aggregator;
|
|
59
62
|
sortKeys(): void;
|
package/cjs/dataset/dataset.js
CHANGED
|
@@ -7,7 +7,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
const vutils_1 = require("@visactor/vutils"), util_1 = require("../tools/util"), ts_types_1 = require("../ts-types"), statistics_helper_1 = require("./statistics-helper"), zero_align_1 = require("./util/zero-align");
|
|
8
8
|
|
|
9
9
|
class Dataset {
|
|
10
|
-
constructor(dataConfig, rows, columns, indicatorKeys, records, customColTree, customRowTree) {
|
|
10
|
+
constructor(dataConfig, pagination, rows, columns, indicatorKeys, records, customColTree, customRowTree) {
|
|
11
11
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4;
|
|
12
12
|
this.tree = {}, this.colFlatKeys = {}, this.rowFlatKeys = {}, this.colKeys = [],
|
|
13
13
|
this.rowKeys = [], this.rowOrder = "key_a_to_z", this.colOrder = "key_a_to_z", this.sorted = !1,
|
|
@@ -47,12 +47,13 @@ class Dataset {
|
|
|
47
47
|
const t3 = "undefined" != typeof window ? window.performance.now() : 0;
|
|
48
48
|
console.log("sortKeys:", t3 - t2);
|
|
49
49
|
const t7 = "undefined" != typeof window ? window.performance.now() : 0;
|
|
50
|
-
this.
|
|
50
|
+
this.rowKeysPath_FULL = customRowTree ? this.TreeToArr2(customRowTree) : this.TreeToArr(this.ArrToTree(this.rowKeys, this.rowsIsTotal, null === (_1 = null === (_0 = null == this ? void 0 : this.totals) || void 0 === _0 ? void 0 : _0.row) || void 0 === _1 ? void 0 : _1.showGrandTotals, this.rowGrandTotalLabel, this.rowSubTotalLabel)),
|
|
51
51
|
this.colKeysPath = customColTree ? this.TreeToArr2(customColTree) : this.TreeToArr(this.ArrToTree(this.colKeys, this.colsIsTotal, null === (_3 = null === (_2 = this.totals) || void 0 === _2 ? void 0 : _2.column) || void 0 === _3 ? void 0 : _3.showGrandTotals, this.colGrandTotalLabel, this.colSubTotalLabel));
|
|
52
52
|
const t8 = "undefined" != typeof window ? window.performance.now() : 0;
|
|
53
53
|
console.log("TreeToArr:", t8 - t7), (null === (_4 = this.dataConfig) || void 0 === _4 ? void 0 : _4.isPivotChart) && (this.dealWithZeroAlign(),
|
|
54
54
|
this.cacheDeminsionCollectedValues());
|
|
55
55
|
}
|
|
56
|
+
this.updatePagination(pagination);
|
|
56
57
|
}
|
|
57
58
|
registerAggregator(type, aggregator) {
|
|
58
59
|
this.aggregators[type] = aggregator;
|
|
@@ -175,7 +176,7 @@ class Dataset {
|
|
|
175
176
|
}
|
|
176
177
|
updateSortRules(sortRules) {
|
|
177
178
|
var _a, _b, _c, _d;
|
|
178
|
-
this.sorted = !1, this.sortRules = sortRules, this.sortKeys(), this.
|
|
179
|
+
this.sorted = !1, this.sortRules = sortRules, this.sortKeys(), this.rowKeysPath_FULL = this.TreeToArr(this.ArrToTree(this.rowKeys, this.rowsIsTotal, (null === (_b = null === (_a = null == this ? void 0 : this.totals) || void 0 === _a ? void 0 : _a.row) || void 0 === _b ? void 0 : _b.showGrandTotals) || 0 === this.columns.length, this.rowGrandTotalLabel, this.rowSubTotalLabel)),
|
|
179
180
|
this.colKeysPath = this.TreeToArr(this.ArrToTree(this.colKeys, this.colsIsTotal, (null === (_d = null === (_c = this.totals) || void 0 === _c ? void 0 : _c.column) || void 0 === _d ? void 0 : _d.showGrandTotals) || 0 === this.rows.length, this.colGrandTotalLabel, this.colSubTotalLabel));
|
|
180
181
|
}
|
|
181
182
|
updateFilterRules(filterRules, isResetTree = !1) {
|
|
@@ -184,6 +185,16 @@ class Dataset {
|
|
|
184
185
|
this.collectedValues = {}, this.processRecords(), this.processCollectedValuesWithSumBy(),
|
|
185
186
|
this.processCollectedValuesWithSortBy(), (null === (_a = this.dataConfig) || void 0 === _a ? void 0 : _a.isPivotChart) && this.dealWithZeroAlign();
|
|
186
187
|
}
|
|
188
|
+
updatePagination(pagination) {
|
|
189
|
+
var _a, _b, _c, _d;
|
|
190
|
+
if (this.pagination = pagination, (0, util_1.isValid)(null === (_a = this.pagination) || void 0 === _a ? void 0 : _a.perPageCount) && (0,
|
|
191
|
+
util_1.isValid)(null === (_b = this.pagination) || void 0 === _b ? void 0 : _b.currentPage)) {
|
|
192
|
+
this.pagination.perPageCount = Math.ceil(this.pagination.perPageCount / this.indicatorKeys.length) * this.indicatorKeys.length;
|
|
193
|
+
const {perPageCount: perPageCount, currentPage: currentPage} = this.pagination, startIndex = Math.ceil(perPageCount * (currentPage || 0) / this.indicatorKeys.length), endIndex = startIndex + Math.ceil(perPageCount / this.indicatorKeys.length);
|
|
194
|
+
this.rowKeysPath = null === (_c = this.rowKeysPath_FULL) || void 0 === _c ? void 0 : _c.slice(startIndex, endIndex);
|
|
195
|
+
} else this.rowKeysPath = this.rowKeysPath_FULL;
|
|
196
|
+
this.pagination && (this.pagination.totalCount = null === (_d = this.rowKeysPath_FULL) || void 0 === _d ? void 0 : _d.length);
|
|
197
|
+
}
|
|
187
198
|
getAggregatorRule(indicatorKey) {
|
|
188
199
|
var _a;
|
|
189
200
|
return null === (_a = this.aggregationRules) || void 0 === _a ? void 0 : _a.find(((value, index) => indicatorKey === value.indicatorKey));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["dataset/dataset.ts"],"names":[],"mappings":"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","file":"dataset.js","sourcesContent":["import { isArray } from '@visactor/vutils';\nimport { isValid } from '../tools/util';\nimport type {\n FilterRules,\n IDataConfig,\n SortRule,\n AggregationRules,\n AggregationRule,\n SortRules,\n DerivedFieldRule,\n DerivedFieldRules,\n SortByIndicatorRule,\n SortByRule,\n SortTypeRule,\n SortFuncRule,\n Totals,\n MappingRules,\n SortOrder,\n IHeaderTreeDefine,\n CollectValueBy,\n CollectedValue\n} from '../ts-types';\nimport { AggregationType, SortType } from '../ts-types';\nimport type { Aggregator } from './statistics-helper';\nimport {\n AvgAggregator,\n CountAggregator,\n MaxAggregator,\n MinAggregator,\n RecordAggregator,\n SumAggregator,\n naturalSort,\n sortBy,\n typeSort\n} from './statistics-helper';\nimport { getNewRangeToAlign } from './util/zero-align';\n/**\n * 数据处理模块\n */\nexport class Dataset {\n /**\n * 用户配置\n */\n dataConfig: IDataConfig;\n /**\n * 明细数据\n */\n records: any[] | Record<string, any[]>;\n /**\n * 树形节点,最后的子节点对应到body部分的每个单元格 树结构: 行-列-单元格\n */\n tree: Record<string, Record<string, Aggregator[]>> = {};\n private colFlatKeys = {};\n private rowFlatKeys = {};\n\n //列表头的每列对应的表头键值\n colKeys: string[][] = [];\n //行表头的每行对应的表头键值\n rowKeys: string[][] = [];\n /**\n * 对应dataset中的rowKeys,行表头的每行表头键值,包含小计总计\n */\n rowKeysPath: string[][];\n /**\n * 对应dataset中的colKeys,列表头的每列表头键值,包含小计总计\n */\n colKeysPath: string[][];\n // allTotal: SumAggregator;\n rowOrder = 'key_a_to_z';\n colOrder = 'key_a_to_z';\n //是否已排序\n sorted = false;\n //排序规则\n sortRules: SortRules;\n //过滤规则\n filterRules: FilterRules;\n //聚合规则\n aggregationRules: AggregationRules;\n //派生字段规则\n derivedFieldRules: DerivedFieldRules;\n mappingRules: MappingRules;\n //汇总配置\n totals: Totals;\n //全局统计各指标的极值\n indicatorStatistics: { max: Aggregator; min: Aggregator; total: Aggregator }[] = [];\n\n aggregators: {\n [key: string]: { new (dimension: string | string[], formatFun?: any, isRecord?: boolean): Aggregator };\n } = {};\n\n stringJoinChar = String.fromCharCode(0);\n //缓存rows对应每个值是否为汇总字段\n private rowsIsTotal: boolean[] = [];\n private colsIsTotal: boolean[] = [];\n private colGrandTotalLabel: string;\n private colSubTotalLabel: string;\n private rowGrandTotalLabel: string;\n private rowSubTotalLabel: string;\n collectValuesBy: Record<string, CollectValueBy>; //收集维度值,field收集维度,by按什么进行分组收集\n collectedValues: Record<string, Record<string, CollectedValue>> = {};\n cacheCollectedValues: Record<string, Record<string, CollectedValue>> = {};\n rows: string[];\n columns: string[];\n indicatorKeys: string[];\n constructor(\n dataConfig: IDataConfig,\n rows: string[],\n columns: string[],\n indicatorKeys: string[],\n records: any[] | Record<string, any[]>,\n customColTree?: IHeaderTreeDefine[],\n customRowTree?: IHeaderTreeDefine[]\n ) {\n this.registerAggregators();\n this.dataConfig = dataConfig;\n // this.allTotal = new SumAggregator(this.indicators[0]);\n this.sortRules = this.dataConfig?.sortRules;\n this.aggregationRules = this.dataConfig?.aggregationRules;\n this.derivedFieldRules = this.dataConfig?.derivedFieldRules;\n this.mappingRules = this.dataConfig?.mappingRules;\n this.totals = this.dataConfig?.totals;\n this.rows = rows;\n this.columns = columns;\n this.indicatorKeys = indicatorKeys;\n this.colGrandTotalLabel = this.totals?.column?.grandTotalLabel ?? '总计';\n this.colSubTotalLabel = this.totals?.column?.subTotalLabel ?? '小计';\n this.rowGrandTotalLabel = this.totals?.row?.grandTotalLabel ?? '总计';\n this.rowSubTotalLabel = this.totals?.row?.subTotalLabel ?? '小计';\n this.collectValuesBy = this.dataConfig?.collectValuesBy;\n // for (let i = 0; i < this.indicators.length; i++) {\n // this.indicatorStatistics.push({\n // max: new this.aggregators[AggregationType.MAX](this.indicators[i]),\n // min: new this.aggregators[AggregationType.MIN](this.indicators[i]),\n // total: new this.aggregators[AggregationType.SUM](this.indicators[i]),\n // });\n // }\n this.rowsIsTotal = new Array(this.rows.length).fill(false);\n this.colsIsTotal = new Array(this.columns.length).fill(false);\n for (let i = 0, len = this.totals?.row?.subTotalsDimensions?.length; i < len; i++) {\n const dimension = this.totals.row.subTotalsDimensions[i];\n const dimensionIndex = this.rows.indexOf(dimension);\n this.rowsIsTotal[dimensionIndex] = true;\n }\n for (let i = 0, len = this.totals?.column?.subTotalsDimensions?.length; i < len; i++) {\n const dimension = this.totals.column.subTotalsDimensions[i];\n const dimensionIndex = this.columns.indexOf(dimension);\n this.colsIsTotal[dimensionIndex] = true;\n }\n if (records) {\n //处理数据\n this.records = records;\n const t0 = typeof window !== 'undefined' ? window.performance.now() : 0;\n this.setRecords();\n\n //processRecord中按照collectValuesBy 收集了维度值。现在需要对有聚合需求的sumby 处理收集维度值范围\n this.processCollectedValuesWithSumBy();\n //processRecord中按照collectValuesBy 收集了维度值。现在需要对有排序需求的处理sortby\n this.processCollectedValuesWithSortBy();\n const t1 = typeof window !== 'undefined' ? window.performance.now() : 0;\n console.log('processRecords:', t1 - t0);\n\n // 处理汇总\n const t4 = typeof window !== 'undefined' ? window.performance.now() : 0;\n this.totalStatistics();\n const t5 = typeof window !== 'undefined' ? window.performance.now() : 0;\n console.log('totalStatistics:', t5 - t4);\n\n //对维度排序\n const t2 = typeof window !== 'undefined' ? window.performance.now() : 0;\n this.sortKeys();\n const t3 = typeof window !== 'undefined' ? window.performance.now() : 0;\n console.log('sortKeys:', t3 - t2);\n //转为树形\n // const t4 = typeof window !== 'undefined' ? window.performance.now() : 0;\n // this.madeTree(this.rowKeys);\n // const t41 = typeof window !== 'undefined' ? window.performance.now() : 0;\n // console.log('madeTree:', t41 - t4);\n\n const t7 = typeof window !== 'undefined' ? window.performance.now() : 0;\n if (customRowTree) {\n this.rowKeysPath = this.TreeToArr2(customRowTree);\n } else {\n this.rowKeysPath = this.TreeToArr(\n this.ArrToTree(\n this.rowKeys,\n this.rowsIsTotal,\n this?.totals?.row?.showGrandTotals, // || this.columns.length === 0, //todo 这里原有逻辑暂时注释掉\n this.rowGrandTotalLabel,\n this.rowSubTotalLabel\n )\n );\n }\n if (customColTree) {\n this.colKeysPath = this.TreeToArr2(customColTree);\n } else {\n this.colKeysPath = this.TreeToArr(\n this.ArrToTree(\n this.colKeys,\n this.colsIsTotal,\n this.totals?.column?.showGrandTotals, // || this.rows.length === 0,//todo 这里原有逻辑暂时注释掉\n this.colGrandTotalLabel,\n this.colSubTotalLabel\n )\n );\n }\n const t8 = typeof window !== 'undefined' ? window.performance.now() : 0;\n console.log('TreeToArr:', t8 - t7);\n\n if (this.dataConfig?.isPivotChart) {\n // 处理PivotChart双轴图0值对齐\n this.dealWithZeroAlign();\n\n // 记录PivotChart维度对应的数据\n this.cacheDeminsionCollectedValues();\n }\n }\n }\n //将聚合类型注册 收集到aggregators\n registerAggregator(type: string, aggregator: any) {\n this.aggregators[type] = aggregator;\n }\n //将聚合类型注册\n registerAggregators() {\n this.registerAggregator(AggregationType.RECORD, RecordAggregator);\n this.registerAggregator(AggregationType.SUM, SumAggregator);\n this.registerAggregator(AggregationType.COUNT, CountAggregator);\n this.registerAggregator(AggregationType.MAX, MaxAggregator);\n this.registerAggregator(AggregationType.MIN, MinAggregator);\n this.registerAggregator(AggregationType.AVG, AvgAggregator);\n }\n setRecords() {\n this.processRecords();\n }\n /**processRecord中按照collectValuesBy 收集了维度值。现在需要对有聚合需求的 处理收集维度值范围 */\n processCollectedValuesWithSumBy() {\n for (const field in this.collectedValues) {\n if (this.collectValuesBy[field]?.sumBy) {\n for (const byKeys in this.collectedValues[field]) {\n const max = Object.values(this.collectedValues[field][byKeys]).reduce((acc, cur) => {\n return cur.value() > acc ? cur.value() : acc;\n }, Number.MIN_SAFE_INTEGER);\n const min = Object.values(this.collectedValues[field][byKeys]).reduce((acc, cur) => {\n return cur.value() < acc ? cur.value() : acc;\n }, Number.MAX_SAFE_INTEGER);\n this.collectedValues[field][byKeys] = {};\n (\n this.collectedValues[field][byKeys] as {\n max: number;\n min: number;\n }\n ).max = max;\n (\n this.collectedValues[field][byKeys] as {\n max: number;\n min: number;\n }\n ).min = min;\n }\n }\n }\n }\n /**processRecord中按照collectValuesBy 收集了维度值。现在需要对有排序需求的处理 */\n processCollectedValuesWithSortBy() {\n for (const field in this.collectedValues) {\n if (this.collectValuesBy[field]?.sortBy) {\n for (const byKeys in this.collectedValues[field]) {\n this.collectedValues[field][byKeys] = (this.collectedValues[field][byKeys] as Array<string>).sort(\n (a, b) => this.collectValuesBy[field]?.sortBy.indexOf(a) - this.collectValuesBy[field]?.sortBy.indexOf(b)\n );\n }\n }\n }\n }\n /**\n * 处理数据,遍历所有条目,过滤和派生字段的处理有待优化TODO\n */\n processRecords() {\n let isNeedFilter = false;\n if (this.dataConfig?.filterRules?.length >= 1) {\n isNeedFilter = true;\n }\n //常规records是数组的情况\n if (Array.isArray(this.records)) {\n for (let i = 0, len = this.records.length; i < len; i++) {\n const record = this.records[i];\n if (!isNeedFilter || this.filterRecord(record)) {\n this.processRecord(record);\n }\n }\n } else {\n //records是用户传来的按指标分组后的数据\n for (const key in this.records) {\n for (let i = 0, len = this.records[key].length; i < len; i++) {\n const record = this.records[key][i];\n if (!isNeedFilter || this.filterRecord(record)) {\n this.processRecord(record, key);\n }\n }\n }\n }\n this.rowFlatKeys = {};\n this.colFlatKeys = {};\n }\n filterRecord(record: any) {\n let isReserved = true;\n for (let i = 0; i < this.dataConfig.filterRules.length; i++) {\n const filterRule = this.dataConfig?.filterRules[i];\n if (filterRule.filterKey) {\n const filterValue = record[filterRule.filterKey];\n if (filterRule.filteredValues.indexOf(filterValue) === -1) {\n isReserved = false;\n break;\n }\n } else if (!filterRule.filterFunc?.(record)) {\n isReserved = false;\n break;\n }\n }\n return isReserved;\n }\n /**\n * 处理单条数据\n * @param record\n * @returns\n */\n processRecord(record: any, assignedIndicatorKey?: string) {\n //这个派生字段的计算位置有待确定,是否应该放到filter之前\n this.derivedFieldRules?.forEach((derivedFieldRule: DerivedFieldRule, i: number) => {\n record[derivedFieldRule.fieldName] = derivedFieldRule.derivedFunc(record);\n });\n const colKey = [];\n const rowKey = [];\n\n for (let l = 0, len1 = this.rows.length; l < len1; l++) {\n const rowAttr = this.rows[l];\n rowKey.push(record[rowAttr]);\n }\n for (let n = 0, len2 = this.columns.length; n < len2; n++) {\n const colAttr = this.columns[n];\n colKey.push(record[colAttr]);\n }\n\n //#region 按照collectValuesBy 收集维度值\n for (const field in this.collectValuesBy) {\n if (record[field]) {\n if (!this.collectedValues[field]) {\n this.collectedValues[field] = {};\n }\n const collectKeys = this.collectValuesBy[field].by.map(byField => record[byField]).join(this.stringJoinChar);\n if (!this.collectedValues[field][collectKeys]) {\n if (this.collectValuesBy[field].sumBy) {\n this.collectedValues[field][collectKeys] = {};\n } else if (this.collectValuesBy[field].range) {\n this.collectedValues[field][collectKeys] = {\n min: Number.MAX_SAFE_INTEGER,\n max: Number.MIN_SAFE_INTEGER\n };\n } else {\n this.collectedValues[field][collectKeys] = [];\n }\n }\n\n if (this.collectValuesBy[field].sumBy) {\n const sumByKeys = this.collectValuesBy[field].sumBy.map(byField => record[byField]).join(this.stringJoinChar);\n if (!this.collectedValues[field][collectKeys][sumByKeys]) {\n this.collectedValues[field][collectKeys][sumByKeys] = new this.aggregators[AggregationType.SUM](field);\n }\n this.collectedValues[field][collectKeys][sumByKeys].push(record);\n } else if (this.collectValuesBy[field].range) {\n const fieldRange = this.collectedValues[field][collectKeys] as {\n max: number;\n min: number;\n };\n fieldRange.max = Math.max(record[field], fieldRange.max);\n fieldRange.min = Math.min(record[field], fieldRange.min);\n } else {\n const fieldRange = this.collectedValues[field][collectKeys] as Array<string>;\n if (fieldRange.indexOf(record[field]) === -1) {\n fieldRange.push(record[field]);\n }\n }\n }\n }\n //#endregion\n // this.allTotal.push(record);\n\n const flatRowKey = rowKey.join(this.stringJoinChar);\n const flatColKey = colKey.join(this.stringJoinChar);\n\n // 此方法判断效率很低\n // if (this.rowKeys.indexOf(rowKey) === -1) this.rowKeys.push(rowKey);\n // if (this.colKeys.indexOf(colKey) === -1) this.colKeys.push(colKey);\n\n // rowTotals colTotals原本汇总的每行每列的总计,当columns或者rows不配置的时候 可以用这个值展示,现在放到了tree上 'total'作为默认键值\n if (rowKey.length !== 0) {\n if (!this.rowFlatKeys[flatRowKey]) {\n this.rowKeys.push(rowKey);\n this.rowFlatKeys[flatRowKey] = 1;\n }\n //如有需要显示总计 或者columns配置空\n // if (this.totals?.row?.showGrandTotals || !(this.dataConfig?.columns?.length > 0))\n // for (let i = 0; i < this.indicators.length; i++) {\n // if (!this.rowTotals[flatRowKey][i]) {\n // const aggRule = this.getAggregatorRule(this.indicators[i]);\n // this.rowTotals[flatRowKey][i] = new this.aggregators[\n // aggRule?.aggregationType ?? AggregationType.SUM\n // ](aggRule?.field ?? this.indicators[i], aggRule?.formatFun);\n // }\n // this.rowTotals[flatRowKey][i].push(record);\n // }\n }\n if (colKey.length !== 0) {\n if (!this.colFlatKeys[flatColKey]) {\n this.colKeys.push(colKey);\n this.colFlatKeys[flatColKey] = 1;\n }\n //如有需要显示总计 或者rows配置空\n // if (this.totals?.column?.showGrandTotals || !(this.dataConfig?.rows?.length > 0))\n // for (let i = 0; i < this.indicators.length; i++) {\n // if (!this.colTotals[flatColKey][i]) {\n // const aggRule = this.getAggregatorRule(this.indicators[i]);\n // this.colTotals[flatColKey][i] = new this.aggregators[\n // aggRule?.aggregationType ?? AggregationType.SUM\n // ](aggRule?.field ?? this.indicators[i], aggRule?.formatFun);\n // }\n // this.colTotals[flatColKey][i].push(record);\n // }\n }\n\n //组织树结构: 行-列-单元格 行key为flatRowKey如’山东青岛‘ 列key为flatColKey如’家具椅子‘\n // TODO 原先pivotTable是必须有行或列维度的 pivotChart这里强制进入\n if (true || colKey.length !== 0 || rowKey.length !== 0) {\n if (!this.tree[flatRowKey]) {\n this.tree[flatRowKey] = {};\n }\n //这里改成数组 因为可能是多个指标值 遍历indicators 生成对应类型的聚合对象\n if (!this.tree[flatRowKey]?.[flatColKey]) {\n this.tree[flatRowKey][flatColKey] = [];\n }\n for (let i = 0; i < this.indicatorKeys.length; i++) {\n const aggRule = this.getAggregatorRule(this.indicatorKeys[i]);\n if (!this.tree[flatRowKey]?.[flatColKey]?.[i]) {\n this.tree[flatRowKey][flatColKey][i] = new this.aggregators[aggRule?.aggregationType ?? AggregationType.SUM](\n aggRule?.field ?? this.indicatorKeys[i],\n aggRule?.formatFun\n );\n }\n if (assignedIndicatorKey) {\n this.indicatorKeys[i] === assignedIndicatorKey && this.tree[flatRowKey]?.[flatColKey]?.[i].push(record);\n }\n //加入聚合结果 考虑field为数组的情况\n else if (aggRule?.field) {\n if (typeof aggRule?.field === 'string') {\n isValid(record[aggRule?.field]) && this.tree[flatRowKey]?.[flatColKey]?.[i].push(record);\n } else {\n const isPush = aggRule?.field.find((field: string) => {\n return record[field];\n });\n isPush && this.tree[flatRowKey]?.[flatColKey]?.[i].push(record);\n }\n } else {\n //push融合了计算过程\n isValid(record[this.indicatorKeys[i]]) && this.tree[flatRowKey]?.[flatColKey]?.[i].push(record);\n }\n }\n }\n //统计整体的最大最小值和总计值 共mapping使用\n if (this.mappingRules) {\n for (let i = 0; i < this.indicatorKeys.length; i++) {\n if (!this.indicatorStatistics[i]) {\n const aggRule = this.getAggregatorRule(this.indicatorKeys[i]);\n this.indicatorStatistics[i] = {\n max: new this.aggregators[AggregationType.MAX](this.indicatorKeys[i]),\n min: new this.aggregators[AggregationType.MIN](this.indicatorKeys[i]),\n total: new this.aggregators[aggRule?.aggregationType ?? AggregationType.SUM](\n aggRule?.field ?? this.indicatorKeys[i],\n aggRule?.formatFun\n )\n };\n }\n //push融合了计算过程\n this.indicatorStatistics[i].max.push(this.tree[flatRowKey]?.[flatColKey]?.[i].value());\n this.indicatorStatistics[i].min.push(this.tree[flatRowKey]?.[flatColKey]?.[i].value());\n this.indicatorStatistics[i].total.push(record);\n }\n }\n }\n /**\n * 全量更新排序规则 对数据重新排序 生成行列paths\n * @param sortRules\n */\n updateSortRules(sortRules: SortRules) {\n this.sorted = false;\n this.sortRules = sortRules;\n this.sortKeys();\n this.rowKeysPath = this.TreeToArr(\n this.ArrToTree(\n this.rowKeys,\n this.rowsIsTotal,\n this?.totals?.row?.showGrandTotals || this.columns.length === 0,\n this.rowGrandTotalLabel,\n this.rowSubTotalLabel\n )\n );\n this.colKeysPath = this.TreeToArr(\n this.ArrToTree(\n this.colKeys,\n this.colsIsTotal,\n this.totals?.column?.showGrandTotals || this.rows.length === 0,\n this.colGrandTotalLabel,\n this.colSubTotalLabel\n )\n );\n }\n /** 更新过滤规则 修改tree数据及收集的value */\n updateFilterRules(filterRules: FilterRules, isResetTree: boolean = false) {\n this.filterRules = filterRules;\n if (isResetTree) {\n this.tree = {};\n } else {\n for (const treeRowKey in this.tree) {\n for (const treeColKey in this.tree[treeRowKey]) {\n for (let i = 0; i < this.tree[treeRowKey][treeColKey].length; i++) {\n this.tree[treeRowKey][treeColKey][i].reset();\n }\n }\n }\n }\n this.collectedValues = {};\n this.processRecords();\n this.processCollectedValuesWithSumBy();\n this.processCollectedValuesWithSortBy();\n\n if (this.dataConfig?.isPivotChart) {\n // 处理PivotChart双轴图0值对齐\n this.dealWithZeroAlign();\n }\n }\n\n private getAggregatorRule(indicatorKey: string): AggregationRule<AggregationType> | undefined {\n return this.aggregationRules?.find((value: AggregationRule<AggregationType>, index: number) => {\n return indicatorKey === value.indicatorKey;\n });\n }\n /**\n * 根据行列的维度key 获取聚合对象\n * @param rowKey\n * @param colKey\n * @param indicator\n * @returns\n */\n getAggregator(rowKey: string[] | string = [], colKey: string[] | string = [], indicator: string): Aggregator {\n const indicatorIndex = this.indicatorKeys.indexOf(indicator);\n let agg;\n let flatRowKey;\n let flatColKey;\n if (typeof rowKey === 'string') {\n flatRowKey = rowKey;\n } else {\n flatRowKey = rowKey.join(this.stringJoinChar);\n }\n\n if (typeof colKey === 'string') {\n flatColKey = colKey;\n } else {\n flatColKey = colKey.join(this.stringJoinChar);\n }\n //TODO 原有逻辑 但这里先强制跳过\n if (false && rowKey.length === 0 && colKey.length === 0) {\n // agg = this.allTotal;\n // } else if (rowKey.length === 0) {\n // // agg = this.tree.total[flatColKey]?.[sortByIndicatorIndex];\n // agg = this.colTotals[flatColKey]?.[sortByIndicatorIndex];\n // } else if (colKey.length === 0) {\n // // agg = this.tree[flatRowKey].total?.[sortByIndicatorIndex];\n // agg = this.rowTotals[flatRowKey]?.[sortByIndicatorIndex];\n } else {\n agg = this.tree[flatRowKey]?.[flatColKey]?.[indicatorIndex];\n }\n return agg\n ? agg\n : {\n className: '',\n push() {\n // do nothing\n },\n value(): any {\n return null;\n },\n formatValue() {\n return '';\n },\n reset() {\n // do nothing\n }\n };\n }\n /**\n * 根据排序规则 对维度keys排序\n */\n sortKeys() {\n const that = this;\n if (!this.sorted) {\n this.sorted = true;\n const getValue = function (rowKey: any, colKey: any) {\n return that.getAggregator(rowKey, colKey, '').value();\n };\n\n switch (this.rowOrder) {\n case 'value_a_to_z':\n this.rowKeys.sort(function (a, b) {\n return naturalSort(getValue(a, []), getValue(b, []));\n });\n break;\n case 'value_z_to_a':\n this.rowKeys.sort(function (a, b) {\n return -naturalSort(getValue(a, []), getValue(b, []));\n });\n break;\n default:\n this.rowKeys.sort(this.arrSort(this.rows, true));\n }\n switch (this.colOrder) {\n case 'value_a_to_z':\n this.colKeys.sort(function (a, b) {\n return naturalSort(getValue([], a), getValue([], b));\n });\n break;\n case 'value_z_to_a':\n this.colKeys.sort(function (a, b) {\n return -naturalSort(getValue([], a), getValue([], b));\n });\n break;\n default:\n const sortfun = this.arrSort(this.columns, false);\n this.colKeys.sort(sortfun);\n }\n }\n }\n /**\n * 生成排序函数 综合配置的多条排序规则\n * @param fieldArr 排序维度名称 如行rows 列columns\n * @returns\n */\n arrSort(fieldArr: string[], isRow: boolean) {\n let field;\n const that = this;\n const sortersArr: any[] = function (_this: any) {\n const results = [];\n for (let l = 0, len1 = fieldArr.length; l < len1; l++) {\n field = fieldArr[l];\n let isHasSortRule = false;\n if (that.sortRules) {\n for (let m = 0, len2 = that.sortRules.length; m < len2; m++) {\n if (that.sortRules[m].sortField === field) {\n isHasSortRule = true;\n results.push({\n field,\n fieldIndex: l,\n sortRule: that.sortRules[m],\n func: that.getSort(that.sortRules[m], isRow)\n });\n\n // if (that.sortRules[m].sortByIndicator) {\n // isHasSortRule = true;\n // results.push({\n // field,\n // fieldIndex: l,\n // sortRule: that.sortRules[m],\n // func: that.getSort(that.sortRules[m], field),\n // });\n // }\n }\n }\n }\n if (!isHasSortRule) {\n results.push({ field, fieldIndex: l, func: naturalSort });\n }\n }\n return results;\n }.call(this);\n return function (a: string[], b: string[]) {\n let comparison;\n let sorter;\n for (let i = 0; i < sortersArr.length; i++) {\n sorter = sortersArr[i];\n if (sorter.sortRule?.sortByIndicator) {\n let aChanged = a;\n let bChanged = b;\n if (sorter.fieldIndex < fieldArr.length - 1) {\n aChanged = a.slice(0, sorter.fieldIndex + 1);\n aChanged.push(isRow ? that.totals?.row?.subTotalLabel : that.totals?.column?.subTotalLabel);\n bChanged = b.slice(0, sorter.fieldIndex + 1);\n bChanged.push(isRow ? that.totals?.row?.subTotalLabel : that.totals?.column?.subTotalLabel);\n }\n comparison = sorter.func(aChanged, bChanged);\n } else {\n comparison = sorter.func(a[sorter.fieldIndex], b[sorter.fieldIndex]);\n }\n if (comparison !== 0) {\n return comparison * (sorter.sortRule?.sortType === SortType.DESC ? -1 : 1);\n }\n }\n return 0;\n };\n }\n /**\n * 根据具体排序 获取不同的排序函数\n * @param sortRule\n * @returns\n */\n getSort(sortRule: SortRule, isSortRow: boolean) {\n const that = this;\n\n if ((<SortByIndicatorRule>sortRule).sortByIndicator) {\n return (a: string[], b: string[]) => {\n /**\n * 根据rowKey和colKey获取tree上对应的聚合值\n * @param rowKey\n * @param colKey\n * @returns\n */\n const getValue = function (rowKey: any, colKey: any) {\n //如果rowKey提供的不全 如 [地区,省,城市] 只提供了如[华东,山东] 会补全为[华东,山东,小计]\n if (\n rowKey.length < that.rows.length &&\n rowKey[rowKey.length - 1] !== that.rowSubTotalLabel &&\n rowKey[rowKey.length - 1] !== that.rowGrandTotalLabel\n ) {\n rowKey.push(that.rowSubTotalLabel);\n }\n if (\n colKey.length < that.columns.length &&\n colKey[colKey.length - 1] !== that.colSubTotalLabel &&\n colKey[colKey.length - 1] !== that.colGrandTotalLabel\n ) {\n colKey.push(that.colSubTotalLabel);\n }\n return that.getAggregator(rowKey, colKey, (<SortByIndicatorRule>sortRule).sortByIndicator).value();\n };\n if (isSortRow) {\n return naturalSort(\n getValue(a, (<SortByIndicatorRule>sortRule).query),\n getValue(b, (<SortByIndicatorRule>sortRule).query)\n );\n }\n return naturalSort(\n getValue((<SortByIndicatorRule>sortRule).query, a),\n getValue((<SortByIndicatorRule>sortRule).query, b)\n );\n };\n } else if ((<SortByRule>sortRule).sortBy) {\n return sortBy((<SortByRule>sortRule).sortBy);\n }\n if ((<SortTypeRule>sortRule).sortType) {\n return typeSort;\n }\n if ((<SortFuncRule>sortRule).sortFunc) {\n return (<SortFuncRule>sortRule).sortFunc;\n }\n return naturalSort;\n }\n /**\n * 汇总小计\n */\n totalStatistics() {\n const that = this;\n if (\n (that?.totals?.column?.showSubTotals && that?.totals?.column?.subTotalsDimensions?.length >= 1) ||\n (that?.totals?.row?.showSubTotals && that?.totals?.row?.subTotalsDimensions?.length >= 1) ||\n that?.totals?.column?.showGrandTotals ||\n that?.totals?.row?.showGrandTotals\n // ||\n // that.rows.length === 0 || //todo 这里原有逻辑暂时注释掉\n // that.columns.length === 0\n ) {\n const rowTotalKeys: string[] = [];\n /**\n * 计算每一行的所有列的汇总值\n * @param flatRowKey\n * @param flatColKey\n */\n const colCompute = (flatRowKey: string, flatColKey: string) => {\n const colKey = flatColKey.split(this.stringJoinChar);\n for (let i = 0, len = that.totals?.column?.subTotalsDimensions?.length; i < len; i++) {\n const dimension = that.totals.column.subTotalsDimensions[i];\n const dimensionIndex = that.columns.indexOf(dimension);\n if (dimensionIndex >= 0) {\n const colTotalKey = colKey.slice(0, dimensionIndex + 1);\n colTotalKey.push(that.totals?.column?.subTotalLabel ?? '小计');\n const flatColTotalKey = colTotalKey.join(this.stringJoinChar);\n if (!this.tree[flatRowKey][flatColTotalKey]) {\n this.tree[flatRowKey][flatColTotalKey] = [];\n }\n for (let i = 0; i < this.indicatorKeys.length; i++) {\n if (!this.tree[flatRowKey][flatColTotalKey][i]) {\n const aggRule = this.getAggregatorRule(this.indicatorKeys[i]);\n this.tree[flatRowKey][flatColTotalKey][i] = new this.aggregators[\n aggRule?.aggregationType ?? AggregationType.SUM\n ](aggRule?.field ?? this.indicatorKeys[i], aggRule?.formatFun);\n }\n this.tree[flatRowKey][flatColTotalKey][i].push(that.tree[flatRowKey]?.[flatColKey]?.[i]);\n }\n }\n }\n if (that.totals?.column?.showGrandTotals || this.rows.length === 0) {\n const flatColTotalKey = that.colGrandTotalLabel;\n if (!this.tree[flatRowKey][flatColTotalKey]) {\n this.tree[flatRowKey][flatColTotalKey] = [];\n }\n for (let i = 0; i < this.indicatorKeys.length; i++) {\n if (!this.tree[flatRowKey][flatColTotalKey][i]) {\n const aggRule = this.getAggregatorRule(this.indicatorKeys[i]);\n this.tree[flatRowKey][flatColTotalKey][i] = new this.aggregators[\n aggRule?.aggregationType ?? AggregationType.SUM\n ](aggRule?.field ?? this.indicatorKeys[i], aggRule?.formatFun);\n }\n this.tree[flatRowKey][flatColTotalKey][i].push(that.tree[flatRowKey]?.[flatColKey]?.[i]);\n }\n }\n };\n Object.keys(that.tree).forEach(flatRowKey => {\n const rowKey = flatRowKey.split(this.stringJoinChar);\n Object.keys(that.tree[flatRowKey]).forEach(flatColKey => {\n for (let i = 0, len = that.totals?.row?.subTotalsDimensions?.length; i < len; i++) {\n const dimension = that.totals.row.subTotalsDimensions[i];\n const dimensionIndex = that.rows.indexOf(dimension);\n if (dimensionIndex >= 0) {\n const rowTotalKey = rowKey.slice(0, dimensionIndex + 1);\n rowTotalKey.push(that.totals?.row?.subTotalLabel ?? '小计');\n const flatRowTotalKey = rowTotalKey.join(this.stringJoinChar);\n if (!this.tree[flatRowTotalKey]) {\n this.tree[flatRowTotalKey] = {};\n rowTotalKeys.push(flatRowTotalKey);\n }\n if (!this.tree[flatRowTotalKey][flatColKey]) {\n this.tree[flatRowTotalKey][flatColKey] = [];\n for (let i = 0; i < this.indicatorKeys.length; i++) {\n if (!this.tree[flatRowTotalKey][flatColKey][i]) {\n const aggRule = this.getAggregatorRule(this.indicatorKeys[i]);\n this.tree[flatRowTotalKey][flatColKey][i] = new this.aggregators[\n aggRule?.aggregationType ?? AggregationType.SUM\n ](aggRule?.field ?? this.indicatorKeys[i], aggRule?.formatFun);\n }\n this.tree[flatRowTotalKey][flatColKey][i].push(that.tree[flatRowKey]?.[flatColKey]?.[i]);\n }\n }\n }\n }\n\n if (that.totals?.row?.showGrandTotals || this.columns.length === 0) {\n const flatRowTotalKey = that.rowGrandTotalLabel;\n if (!this.tree[flatRowTotalKey]) {\n this.tree[flatRowTotalKey] = {};\n rowTotalKeys.push(flatRowTotalKey);\n }\n if (!this.tree[flatRowTotalKey][flatColKey]) {\n this.tree[flatRowTotalKey][flatColKey] = [];\n }\n for (let i = 0; i < this.indicatorKeys.length; i++) {\n if (!this.tree[flatRowTotalKey][flatColKey][i]) {\n const aggRule = this.getAggregatorRule(this.indicatorKeys[i]);\n this.tree[flatRowTotalKey][flatColKey][i] = new this.aggregators[\n aggRule?.aggregationType ?? AggregationType.SUM\n ](aggRule?.field ?? this.indicatorKeys[i], aggRule?.formatFun);\n }\n this.tree[flatRowTotalKey][flatColKey][i].push(that.tree[flatRowKey]?.[flatColKey]?.[i]);\n }\n }\n colCompute(flatRowKey, flatColKey);\n });\n });\n //增加出来的rowTotalKeys 再遍历一次 汇总小计的小计 如 东北小计(row)-办公用品小计(col)所指单元格的值\n rowTotalKeys.forEach(flatRowKey => {\n Object.keys(that.tree[flatRowKey]).forEach(flatColKey => {\n colCompute(flatRowKey, flatColKey);\n });\n });\n }\n }\n /**\n * 将rowKeys和colKeys 转为树形结构\n * @param arr\n * @param subTotalFlags 标志小计的维度\n * @returns\n */\n private ArrToTree(\n arr: string[][],\n subTotalFlags: boolean[],\n isGrandTotal: boolean,\n grandTotalLabel: string,\n subTotalLabel: string\n ) {\n /**\n *\n * @param {string} s 父级id\n * @param {number} n 需转换数字\n */\n // const getId = (pId: any, curId: any) => `${pId}$${curId}`;\n const result: any[] = []; // 结果\n const concatStr = this.stringJoinChar; // 连接符(随便写,保证key唯一性就OK)\n const map = new Map(); // 存储根节点 主要提升性能\n function addList(list: any) {\n const path: any[] = []; // 路径\n let node: any; // 当前节点\n list.forEach((value: any, index: number) => {\n path.push(value);\n const flatKey = path.join(concatStr);\n //id的值可以每次生成一个新的 这里用的path作为id 方便layout对象获取\n let item: { id: string; children: any[] } = map.get(flatKey); // 当前节点\n if (!item) {\n item = {\n // name: value,\n id: flatKey, //getId(node?.id ?? '', (node?.children?.length ?? result.length) + 1),\n children: []\n };\n if (subTotalFlags[index]) {\n let curChild = item.children;\n for (let i = index; i < list.length - 1; i++) {\n const totalChild: { id: string; children: any[] } = {\n id: `${flatKey}${concatStr}${subTotalLabel}`, // getId(item?.id, 1),\n children: []\n };\n curChild.push(totalChild);\n curChild = totalChild.children;\n }\n }\n map.set(flatKey, item); // 存储路径对应的节点\n if (node) {\n //为了确保汇总小计放到最后 使用splice插入到倒数第二个位置。如果小计放前面 直接push就行\n if (subTotalFlags[index - 1]) {\n node.children.splice(node.children.length - 1, 0, item);\n } else {\n node.children.push(item);\n }\n } else {\n result.push(item);\n }\n }\n node = item; // 更新当前节点\n });\n }\n\n arr.forEach(item => addList(item));\n //最后将总计的节点加上\n if (isGrandTotal) {\n const node: { id: string; children: any[] } = {\n id: grandTotalLabel, // getId(item?.id, 1),\n children: []\n };\n let curChild = node.children;\n for (let i = 1; i < subTotalFlags.length; i++) {\n const totalChild: { id: string; children: any[] } = {\n id: grandTotalLabel, // getId(item?.id, 1),\n children: []\n };\n curChild.push(totalChild);\n curChild = totalChild.children;\n }\n result.push(node);\n }\n return result;\n }\n //将树形结构转为二维数组 值为node.id\n private TreeToArr(tree: any) {\n const result: any[] = []; // 结果\n function getPath(node: any, arr: any) {\n arr.push(node.id);\n if (node.children.length > 0) {\n // 存在多个节点就递归\n node.children?.forEach((childItem: any) => getPath(childItem, [...arr]));\n } else {\n result.push(arr);\n }\n }\n tree.forEach((treeNode: any) => getPath(treeNode, []));\n return result;\n }\n private TreeToArr2(tree: any) {\n const result: any[] = []; // 结果\n function getPath(node: any, arr: any) {\n arr.push(arr.length > 0 ? [arr[arr.length - 1], node.value].join(String.fromCharCode(0)) : node.value);\n if (node.children?.length > 0 && !node.children[0].indicatorKey) {\n // 存在多个节点就递归\n node.children?.forEach((childItem: any) => getPath(childItem, [...arr]));\n } else {\n result.push(arr);\n }\n }\n tree.forEach((treeNode: any) => getPath(treeNode, []));\n return result;\n }\n\n private dealWithZeroAlign() {\n const indicatorsToAlign = [];\n for (let i = 0; i < this.aggregationRules.length; i++) {\n const rule = this.aggregationRules[i];\n if (isArray(rule.field) && rule.field.length === 2) {\n indicatorsToAlign.push(rule.field);\n }\n }\n\n indicatorsToAlign.forEach(indicatorToAlign => {\n const indicator1 = indicatorToAlign[0];\n const indicator2 = indicatorToAlign[1];\n const collectedValue1 = this.collectedValues[indicator1];\n const collectedValue2 = this.collectedValues[indicator2];\n this.collectedValues[indicator1 + '_align'] = {};\n this.collectedValues[indicator2 + '_align'] = {};\n\n const toAlignCollectedValue = collectedValue1 || collectedValue2;\n for (const key in toAlignCollectedValue) {\n const range1 = collectedValue1?.[key] ?? { min: 0, max: 1 };\n const range2 = collectedValue2?.[key] ?? { min: 0, max: 1 };\n\n const newRanges = getNewRangeToAlign(\n range1 as { min: number; max: number },\n range2 as { min: number; max: number }\n );\n if (!newRanges) {\n // 没有正确完成0值对齐,直接沿用之前的range\n this.collectedValues[indicator1 + '_align'][key] = {\n min: (range1 as { min: number; max: number }).min,\n max: (range1 as { min: number; max: number }).max\n };\n this.collectedValues[indicator2 + '_align'][key] = {\n min: (range2 as { min: number; max: number }).min,\n max: (range2 as { min: number; max: number }).max\n };\n } else {\n const { range1: newRange1, range2: newRange2 } = newRanges;\n this.collectedValues[indicator1 + '_align'][key] = { min: newRange1[0], max: newRange1[1] };\n this.collectedValues[indicator2 + '_align'][key] = { min: newRange2[0], max: newRange2[1] };\n }\n }\n });\n }\n\n private cacheDeminsionCollectedValues() {\n for (const key in this.collectValuesBy) {\n if (this.collectValuesBy[key].type === 'xField' || this.collectValuesBy[key].type === 'yField') {\n if (this.dataConfig.dimensionSortArray) {\n this.cacheCollectedValues[key] = arraySortByAnotherArray(\n this.collectedValues[key] as unknown as string[],\n this.dataConfig.dimensionSortArray\n ) as unknown as Record<string, CollectedValue>;\n } else {\n this.cacheCollectedValues[key] = this.collectedValues[key];\n }\n }\n }\n }\n}\n\nfunction arraySortByAnotherArray(array: string[], sortArray: string[]) {\n return array.sort((a, b) => {\n const aIndex = sortArray.indexOf(a);\n const bIndex = sortArray.indexOf(b);\n if (aIndex < bIndex) {\n return -1;\n }\n if (aIndex > bIndex) {\n return 1;\n }\n return 0;\n });\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["dataset/dataset.ts"],"names":[],"mappings":"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","file":"dataset.js","sourcesContent":["import { isArray } from '@visactor/vutils';\nimport { isValid } from '../tools/util';\nimport type {\n FilterRules,\n IDataConfig,\n SortRule,\n AggregationRules,\n AggregationRule,\n SortRules,\n DerivedFieldRule,\n DerivedFieldRules,\n SortByIndicatorRule,\n SortByRule,\n SortTypeRule,\n SortFuncRule,\n Totals,\n MappingRules,\n SortOrder,\n IHeaderTreeDefine,\n CollectValueBy,\n CollectedValue,\n IPagination\n} from '../ts-types';\nimport { AggregationType, SortType } from '../ts-types';\nimport type { Aggregator } from './statistics-helper';\nimport {\n AvgAggregator,\n CountAggregator,\n MaxAggregator,\n MinAggregator,\n RecordAggregator,\n SumAggregator,\n naturalSort,\n sortBy,\n typeSort\n} from './statistics-helper';\nimport { getNewRangeToAlign } from './util/zero-align';\n/**\n * 数据处理模块\n */\nexport class Dataset {\n /**\n * 用户配置\n */\n dataConfig: IDataConfig;\n /**\n * 分页配置\n */\n pagination: IPagination;\n /**\n * 明细数据\n */\n records: any[] | Record<string, any[]>;\n /**\n * 树形节点,最后的子节点对应到body部分的每个单元格 树结构: 行-列-单元格\n */\n tree: Record<string, Record<string, Aggregator[]>> = {};\n private colFlatKeys = {};\n private rowFlatKeys = {};\n\n //列表头的每列对应的表头键值\n colKeys: string[][] = [];\n //行表头的每行对应的表头键值\n rowKeys: string[][] = [];\n /**\n * 对应dataset中的rowKeys,行表头的每行表头键值,包含小计总计\n */\n rowKeysPath: string[][];\n /**\n * 对应dataset中的colKeys,列表头的每列表头键值,包含小计总计\n */\n colKeysPath: string[][];\n // allTotal: SumAggregator;\n rowOrder = 'key_a_to_z';\n colOrder = 'key_a_to_z';\n //是否已排序\n sorted = false;\n //排序规则\n sortRules: SortRules;\n //过滤规则\n filterRules: FilterRules;\n //聚合规则\n aggregationRules: AggregationRules;\n //派生字段规则\n derivedFieldRules: DerivedFieldRules;\n mappingRules: MappingRules;\n //汇总配置\n totals: Totals;\n //全局统计各指标的极值\n indicatorStatistics: { max: Aggregator; min: Aggregator; total: Aggregator }[] = [];\n\n aggregators: {\n [key: string]: { new (dimension: string | string[], formatFun?: any, isRecord?: boolean): Aggregator };\n } = {};\n\n stringJoinChar = String.fromCharCode(0);\n //缓存rows对应每个值是否为汇总字段\n private rowsIsTotal: boolean[] = [];\n private colsIsTotal: boolean[] = [];\n private colGrandTotalLabel: string;\n private colSubTotalLabel: string;\n private rowGrandTotalLabel: string;\n private rowSubTotalLabel: string;\n collectValuesBy: Record<string, CollectValueBy>; //收集维度值,field收集维度,by按什么进行分组收集\n collectedValues: Record<string, Record<string, CollectedValue>> = {};\n cacheCollectedValues: Record<string, Record<string, CollectedValue>> = {};\n rows: string[];\n columns: string[];\n indicatorKeys: string[];\n // 存储行表头path 这个是全量的 对比于分页截取的rowKeysPath;\n private rowKeysPath_FULL: string[][];\n constructor(\n dataConfig: IDataConfig,\n pagination: IPagination,\n rows: string[],\n columns: string[],\n indicatorKeys: string[],\n records: any[] | Record<string, any[]>,\n customColTree?: IHeaderTreeDefine[],\n customRowTree?: IHeaderTreeDefine[]\n ) {\n this.registerAggregators();\n this.dataConfig = dataConfig;\n // this.allTotal = new SumAggregator(this.indicators[0]);\n this.sortRules = this.dataConfig?.sortRules;\n this.aggregationRules = this.dataConfig?.aggregationRules;\n this.derivedFieldRules = this.dataConfig?.derivedFieldRules;\n this.mappingRules = this.dataConfig?.mappingRules;\n this.totals = this.dataConfig?.totals;\n this.rows = rows;\n this.columns = columns;\n this.indicatorKeys = indicatorKeys;\n this.colGrandTotalLabel = this.totals?.column?.grandTotalLabel ?? '总计';\n this.colSubTotalLabel = this.totals?.column?.subTotalLabel ?? '小计';\n this.rowGrandTotalLabel = this.totals?.row?.grandTotalLabel ?? '总计';\n this.rowSubTotalLabel = this.totals?.row?.subTotalLabel ?? '小计';\n this.collectValuesBy = this.dataConfig?.collectValuesBy;\n // for (let i = 0; i < this.indicators.length; i++) {\n // this.indicatorStatistics.push({\n // max: new this.aggregators[AggregationType.MAX](this.indicators[i]),\n // min: new this.aggregators[AggregationType.MIN](this.indicators[i]),\n // total: new this.aggregators[AggregationType.SUM](this.indicators[i]),\n // });\n // }\n this.rowsIsTotal = new Array(this.rows.length).fill(false);\n this.colsIsTotal = new Array(this.columns.length).fill(false);\n for (let i = 0, len = this.totals?.row?.subTotalsDimensions?.length; i < len; i++) {\n const dimension = this.totals.row.subTotalsDimensions[i];\n const dimensionIndex = this.rows.indexOf(dimension);\n this.rowsIsTotal[dimensionIndex] = true;\n }\n for (let i = 0, len = this.totals?.column?.subTotalsDimensions?.length; i < len; i++) {\n const dimension = this.totals.column.subTotalsDimensions[i];\n const dimensionIndex = this.columns.indexOf(dimension);\n this.colsIsTotal[dimensionIndex] = true;\n }\n if (records) {\n //处理数据\n this.records = records;\n const t0 = typeof window !== 'undefined' ? window.performance.now() : 0;\n this.setRecords();\n\n //processRecord中按照collectValuesBy 收集了维度值。现在需要对有聚合需求的sumby 处理收集维度值范围\n this.processCollectedValuesWithSumBy();\n //processRecord中按照collectValuesBy 收集了维度值。现在需要对有排序需求的处理sortby\n this.processCollectedValuesWithSortBy();\n const t1 = typeof window !== 'undefined' ? window.performance.now() : 0;\n console.log('processRecords:', t1 - t0);\n\n // 处理汇总\n const t4 = typeof window !== 'undefined' ? window.performance.now() : 0;\n this.totalStatistics();\n const t5 = typeof window !== 'undefined' ? window.performance.now() : 0;\n console.log('totalStatistics:', t5 - t4);\n\n //对维度排序\n const t2 = typeof window !== 'undefined' ? window.performance.now() : 0;\n this.sortKeys();\n const t3 = typeof window !== 'undefined' ? window.performance.now() : 0;\n console.log('sortKeys:', t3 - t2);\n //转为树形\n // const t4 = typeof window !== 'undefined' ? window.performance.now() : 0;\n // this.madeTree(this.rowKeys);\n // const t41 = typeof window !== 'undefined' ? window.performance.now() : 0;\n // console.log('madeTree:', t41 - t4);\n\n const t7 = typeof window !== 'undefined' ? window.performance.now() : 0;\n if (customRowTree) {\n this.rowKeysPath_FULL = this.TreeToArr2(customRowTree);\n } else {\n this.rowKeysPath_FULL = this.TreeToArr(\n this.ArrToTree(\n this.rowKeys,\n this.rowsIsTotal,\n this?.totals?.row?.showGrandTotals, // || this.columns.length === 0, //todo 这里原有逻辑暂时注释掉\n this.rowGrandTotalLabel,\n this.rowSubTotalLabel\n )\n );\n }\n if (customColTree) {\n this.colKeysPath = this.TreeToArr2(customColTree);\n } else {\n this.colKeysPath = this.TreeToArr(\n this.ArrToTree(\n this.colKeys,\n this.colsIsTotal,\n this.totals?.column?.showGrandTotals, // || this.rows.length === 0,//todo 这里原有逻辑暂时注释掉\n this.colGrandTotalLabel,\n this.colSubTotalLabel\n )\n );\n }\n const t8 = typeof window !== 'undefined' ? window.performance.now() : 0;\n console.log('TreeToArr:', t8 - t7);\n\n if (this.dataConfig?.isPivotChart) {\n // 处理PivotChart双轴图0值对齐\n this.dealWithZeroAlign();\n\n // 记录PivotChart维度对应的数据\n this.cacheDeminsionCollectedValues();\n }\n }\n this.updatePagination(pagination);\n }\n //将聚合类型注册 收集到aggregators\n registerAggregator(type: string, aggregator: any) {\n this.aggregators[type] = aggregator;\n }\n //将聚合类型注册\n registerAggregators() {\n this.registerAggregator(AggregationType.RECORD, RecordAggregator);\n this.registerAggregator(AggregationType.SUM, SumAggregator);\n this.registerAggregator(AggregationType.COUNT, CountAggregator);\n this.registerAggregator(AggregationType.MAX, MaxAggregator);\n this.registerAggregator(AggregationType.MIN, MinAggregator);\n this.registerAggregator(AggregationType.AVG, AvgAggregator);\n }\n private setRecords() {\n this.processRecords();\n }\n /**processRecord中按照collectValuesBy 收集了维度值。现在需要对有聚合需求的 处理收集维度值范围 */\n private processCollectedValuesWithSumBy() {\n for (const field in this.collectedValues) {\n if (this.collectValuesBy[field]?.sumBy) {\n for (const byKeys in this.collectedValues[field]) {\n const max = Object.values(this.collectedValues[field][byKeys]).reduce((acc, cur) => {\n return cur.value() > acc ? cur.value() : acc;\n }, Number.MIN_SAFE_INTEGER);\n const min = Object.values(this.collectedValues[field][byKeys]).reduce((acc, cur) => {\n return cur.value() < acc ? cur.value() : acc;\n }, Number.MAX_SAFE_INTEGER);\n this.collectedValues[field][byKeys] = {};\n (\n this.collectedValues[field][byKeys] as {\n max: number;\n min: number;\n }\n ).max = max;\n (\n this.collectedValues[field][byKeys] as {\n max: number;\n min: number;\n }\n ).min = min;\n }\n }\n }\n }\n /**processRecord中按照collectValuesBy 收集了维度值。现在需要对有排序需求的处理 */\n private processCollectedValuesWithSortBy() {\n for (const field in this.collectedValues) {\n if (this.collectValuesBy[field]?.sortBy) {\n for (const byKeys in this.collectedValues[field]) {\n this.collectedValues[field][byKeys] = (this.collectedValues[field][byKeys] as Array<string>).sort(\n (a, b) => this.collectValuesBy[field]?.sortBy.indexOf(a) - this.collectValuesBy[field]?.sortBy.indexOf(b)\n );\n }\n }\n }\n }\n /**\n * 处理数据,遍历所有条目,过滤和派生字段的处理有待优化TODO\n */\n private processRecords() {\n let isNeedFilter = false;\n if (this.dataConfig?.filterRules?.length >= 1) {\n isNeedFilter = true;\n }\n //常规records是数组的情况\n if (Array.isArray(this.records)) {\n for (let i = 0, len = this.records.length; i < len; i++) {\n const record = this.records[i];\n if (!isNeedFilter || this.filterRecord(record)) {\n this.processRecord(record);\n }\n }\n } else {\n //records是用户传来的按指标分组后的数据\n for (const key in this.records) {\n for (let i = 0, len = this.records[key].length; i < len; i++) {\n const record = this.records[key][i];\n if (!isNeedFilter || this.filterRecord(record)) {\n this.processRecord(record, key);\n }\n }\n }\n }\n this.rowFlatKeys = {};\n this.colFlatKeys = {};\n }\n private filterRecord(record: any) {\n let isReserved = true;\n for (let i = 0; i < this.dataConfig.filterRules.length; i++) {\n const filterRule = this.dataConfig?.filterRules[i];\n if (filterRule.filterKey) {\n const filterValue = record[filterRule.filterKey];\n if (filterRule.filteredValues.indexOf(filterValue) === -1) {\n isReserved = false;\n break;\n }\n } else if (!filterRule.filterFunc?.(record)) {\n isReserved = false;\n break;\n }\n }\n return isReserved;\n }\n /**\n * 处理单条数据\n * @param record\n * @returns\n */\n private processRecord(record: any, assignedIndicatorKey?: string) {\n //这个派生字段的计算位置有待确定,是否应该放到filter之前\n this.derivedFieldRules?.forEach((derivedFieldRule: DerivedFieldRule, i: number) => {\n record[derivedFieldRule.fieldName] = derivedFieldRule.derivedFunc(record);\n });\n const colKey = [];\n const rowKey = [];\n\n for (let l = 0, len1 = this.rows.length; l < len1; l++) {\n const rowAttr = this.rows[l];\n rowKey.push(record[rowAttr]);\n }\n for (let n = 0, len2 = this.columns.length; n < len2; n++) {\n const colAttr = this.columns[n];\n colKey.push(record[colAttr]);\n }\n\n //#region 按照collectValuesBy 收集维度值\n for (const field in this.collectValuesBy) {\n if (record[field]) {\n if (!this.collectedValues[field]) {\n this.collectedValues[field] = {};\n }\n const collectKeys = this.collectValuesBy[field].by.map(byField => record[byField]).join(this.stringJoinChar);\n if (!this.collectedValues[field][collectKeys]) {\n if (this.collectValuesBy[field].sumBy) {\n this.collectedValues[field][collectKeys] = {};\n } else if (this.collectValuesBy[field].range) {\n this.collectedValues[field][collectKeys] = {\n min: Number.MAX_SAFE_INTEGER,\n max: Number.MIN_SAFE_INTEGER\n };\n } else {\n this.collectedValues[field][collectKeys] = [];\n }\n }\n\n if (this.collectValuesBy[field].sumBy) {\n const sumByKeys = this.collectValuesBy[field].sumBy.map(byField => record[byField]).join(this.stringJoinChar);\n if (!this.collectedValues[field][collectKeys][sumByKeys]) {\n this.collectedValues[field][collectKeys][sumByKeys] = new this.aggregators[AggregationType.SUM](field);\n }\n this.collectedValues[field][collectKeys][sumByKeys].push(record);\n } else if (this.collectValuesBy[field].range) {\n const fieldRange = this.collectedValues[field][collectKeys] as {\n max: number;\n min: number;\n };\n fieldRange.max = Math.max(record[field], fieldRange.max);\n fieldRange.min = Math.min(record[field], fieldRange.min);\n } else {\n const fieldRange = this.collectedValues[field][collectKeys] as Array<string>;\n if (fieldRange.indexOf(record[field]) === -1) {\n fieldRange.push(record[field]);\n }\n }\n }\n }\n //#endregion\n // this.allTotal.push(record);\n\n const flatRowKey = rowKey.join(this.stringJoinChar);\n const flatColKey = colKey.join(this.stringJoinChar);\n\n // 此方法判断效率很低\n // if (this.rowKeys.indexOf(rowKey) === -1) this.rowKeys.push(rowKey);\n // if (this.colKeys.indexOf(colKey) === -1) this.colKeys.push(colKey);\n\n // rowTotals colTotals原本汇总的每行每列的总计,当columns或者rows不配置的时候 可以用这个值展示,现在放到了tree上 'total'作为默认键值\n if (rowKey.length !== 0) {\n if (!this.rowFlatKeys[flatRowKey]) {\n this.rowKeys.push(rowKey);\n this.rowFlatKeys[flatRowKey] = 1;\n }\n //如有需要显示总计 或者columns配置空\n // if (this.totals?.row?.showGrandTotals || !(this.dataConfig?.columns?.length > 0))\n // for (let i = 0; i < this.indicators.length; i++) {\n // if (!this.rowTotals[flatRowKey][i]) {\n // const aggRule = this.getAggregatorRule(this.indicators[i]);\n // this.rowTotals[flatRowKey][i] = new this.aggregators[\n // aggRule?.aggregationType ?? AggregationType.SUM\n // ](aggRule?.field ?? this.indicators[i], aggRule?.formatFun);\n // }\n // this.rowTotals[flatRowKey][i].push(record);\n // }\n }\n if (colKey.length !== 0) {\n if (!this.colFlatKeys[flatColKey]) {\n this.colKeys.push(colKey);\n this.colFlatKeys[flatColKey] = 1;\n }\n //如有需要显示总计 或者rows配置空\n // if (this.totals?.column?.showGrandTotals || !(this.dataConfig?.rows?.length > 0))\n // for (let i = 0; i < this.indicators.length; i++) {\n // if (!this.colTotals[flatColKey][i]) {\n // const aggRule = this.getAggregatorRule(this.indicators[i]);\n // this.colTotals[flatColKey][i] = new this.aggregators[\n // aggRule?.aggregationType ?? AggregationType.SUM\n // ](aggRule?.field ?? this.indicators[i], aggRule?.formatFun);\n // }\n // this.colTotals[flatColKey][i].push(record);\n // }\n }\n\n //组织树结构: 行-列-单元格 行key为flatRowKey如’山东青岛‘ 列key为flatColKey如’家具椅子‘\n // TODO 原先pivotTable是必须有行或列维度的 pivotChart这里强制进入\n if (true || colKey.length !== 0 || rowKey.length !== 0) {\n if (!this.tree[flatRowKey]) {\n this.tree[flatRowKey] = {};\n }\n //这里改成数组 因为可能是多个指标值 遍历indicators 生成对应类型的聚合对象\n if (!this.tree[flatRowKey]?.[flatColKey]) {\n this.tree[flatRowKey][flatColKey] = [];\n }\n for (let i = 0; i < this.indicatorKeys.length; i++) {\n const aggRule = this.getAggregatorRule(this.indicatorKeys[i]);\n if (!this.tree[flatRowKey]?.[flatColKey]?.[i]) {\n this.tree[flatRowKey][flatColKey][i] = new this.aggregators[aggRule?.aggregationType ?? AggregationType.SUM](\n aggRule?.field ?? this.indicatorKeys[i],\n aggRule?.formatFun\n );\n }\n if (assignedIndicatorKey) {\n this.indicatorKeys[i] === assignedIndicatorKey && this.tree[flatRowKey]?.[flatColKey]?.[i].push(record);\n }\n //加入聚合结果 考虑field为数组的情况\n else if (aggRule?.field) {\n if (typeof aggRule?.field === 'string') {\n isValid(record[aggRule?.field]) && this.tree[flatRowKey]?.[flatColKey]?.[i].push(record);\n } else {\n const isPush = aggRule?.field.find((field: string) => {\n return record[field];\n });\n isPush && this.tree[flatRowKey]?.[flatColKey]?.[i].push(record);\n }\n } else {\n //push融合了计算过程\n isValid(record[this.indicatorKeys[i]]) && this.tree[flatRowKey]?.[flatColKey]?.[i].push(record);\n }\n }\n }\n //统计整体的最大最小值和总计值 共mapping使用\n if (this.mappingRules) {\n for (let i = 0; i < this.indicatorKeys.length; i++) {\n if (!this.indicatorStatistics[i]) {\n const aggRule = this.getAggregatorRule(this.indicatorKeys[i]);\n this.indicatorStatistics[i] = {\n max: new this.aggregators[AggregationType.MAX](this.indicatorKeys[i]),\n min: new this.aggregators[AggregationType.MIN](this.indicatorKeys[i]),\n total: new this.aggregators[aggRule?.aggregationType ?? AggregationType.SUM](\n aggRule?.field ?? this.indicatorKeys[i],\n aggRule?.formatFun\n )\n };\n }\n //push融合了计算过程\n this.indicatorStatistics[i].max.push(this.tree[flatRowKey]?.[flatColKey]?.[i].value());\n this.indicatorStatistics[i].min.push(this.tree[flatRowKey]?.[flatColKey]?.[i].value());\n this.indicatorStatistics[i].total.push(record);\n }\n }\n }\n /**\n * 全量更新排序规则 对数据重新排序 生成行列paths\n * @param sortRules\n */\n updateSortRules(sortRules: SortRules) {\n this.sorted = false;\n this.sortRules = sortRules;\n this.sortKeys();\n this.rowKeysPath_FULL = this.TreeToArr(\n this.ArrToTree(\n this.rowKeys,\n this.rowsIsTotal,\n this?.totals?.row?.showGrandTotals || this.columns.length === 0,\n this.rowGrandTotalLabel,\n this.rowSubTotalLabel\n )\n );\n this.colKeysPath = this.TreeToArr(\n this.ArrToTree(\n this.colKeys,\n this.colsIsTotal,\n this.totals?.column?.showGrandTotals || this.rows.length === 0,\n this.colGrandTotalLabel,\n this.colSubTotalLabel\n )\n );\n }\n /** 更新过滤规则 修改tree数据及收集的value */\n updateFilterRules(filterRules: FilterRules, isResetTree: boolean = false) {\n this.filterRules = filterRules;\n if (isResetTree) {\n this.tree = {};\n } else {\n for (const treeRowKey in this.tree) {\n for (const treeColKey in this.tree[treeRowKey]) {\n for (let i = 0; i < this.tree[treeRowKey][treeColKey].length; i++) {\n this.tree[treeRowKey][treeColKey][i].reset();\n }\n }\n }\n }\n this.collectedValues = {};\n this.processRecords();\n this.processCollectedValuesWithSumBy();\n this.processCollectedValuesWithSortBy();\n\n if (this.dataConfig?.isPivotChart) {\n // 处理PivotChart双轴图0值对齐\n this.dealWithZeroAlign();\n }\n }\n\n updatePagination(pagination: IPagination) {\n this.pagination = pagination;\n\n if (isValid(this.pagination?.perPageCount) && isValid(this.pagination?.currentPage)) {\n //调整perPageCount的数量 需要是indicatorKeys.length的整数倍\n this.pagination.perPageCount =\n Math.ceil(this.pagination.perPageCount / this.indicatorKeys.length) * this.indicatorKeys.length;\n const { perPageCount, currentPage } = this.pagination;\n const startIndex = Math.ceil((perPageCount * (currentPage || 0)) / this.indicatorKeys.length);\n const endIndex = startIndex + Math.ceil(perPageCount / this.indicatorKeys.length);\n this.rowKeysPath = this.rowKeysPath_FULL?.slice(startIndex, endIndex);\n } else {\n this.rowKeysPath = this.rowKeysPath_FULL;\n }\n this.pagination && (this.pagination.totalCount = this.rowKeysPath_FULL?.length);\n }\n private getAggregatorRule(indicatorKey: string): AggregationRule<AggregationType> | undefined {\n return this.aggregationRules?.find((value: AggregationRule<AggregationType>, index: number) => {\n return indicatorKey === value.indicatorKey;\n });\n }\n /**\n * 根据行列的维度key 获取聚合对象\n * @param rowKey\n * @param colKey\n * @param indicator\n * @returns\n */\n getAggregator(rowKey: string[] | string = [], colKey: string[] | string = [], indicator: string): Aggregator {\n const indicatorIndex = this.indicatorKeys.indexOf(indicator);\n let agg;\n let flatRowKey;\n let flatColKey;\n if (typeof rowKey === 'string') {\n flatRowKey = rowKey;\n } else {\n flatRowKey = rowKey.join(this.stringJoinChar);\n }\n\n if (typeof colKey === 'string') {\n flatColKey = colKey;\n } else {\n flatColKey = colKey.join(this.stringJoinChar);\n }\n //TODO 原有逻辑 但这里先强制跳过\n if (false && rowKey.length === 0 && colKey.length === 0) {\n // agg = this.allTotal;\n // } else if (rowKey.length === 0) {\n // // agg = this.tree.total[flatColKey]?.[sortByIndicatorIndex];\n // agg = this.colTotals[flatColKey]?.[sortByIndicatorIndex];\n // } else if (colKey.length === 0) {\n // // agg = this.tree[flatRowKey].total?.[sortByIndicatorIndex];\n // agg = this.rowTotals[flatRowKey]?.[sortByIndicatorIndex];\n } else {\n agg = this.tree[flatRowKey]?.[flatColKey]?.[indicatorIndex];\n }\n return agg\n ? agg\n : {\n className: '',\n push() {\n // do nothing\n },\n value(): any {\n return null;\n },\n formatValue() {\n return '';\n },\n reset() {\n // do nothing\n }\n };\n }\n /**\n * 根据排序规则 对维度keys排序\n */\n sortKeys() {\n const that = this;\n if (!this.sorted) {\n this.sorted = true;\n const getValue = function (rowKey: any, colKey: any) {\n return that.getAggregator(rowKey, colKey, '').value();\n };\n\n switch (this.rowOrder) {\n case 'value_a_to_z':\n this.rowKeys.sort(function (a, b) {\n return naturalSort(getValue(a, []), getValue(b, []));\n });\n break;\n case 'value_z_to_a':\n this.rowKeys.sort(function (a, b) {\n return -naturalSort(getValue(a, []), getValue(b, []));\n });\n break;\n default:\n this.rowKeys.sort(this.arrSort(this.rows, true));\n }\n switch (this.colOrder) {\n case 'value_a_to_z':\n this.colKeys.sort(function (a, b) {\n return naturalSort(getValue([], a), getValue([], b));\n });\n break;\n case 'value_z_to_a':\n this.colKeys.sort(function (a, b) {\n return -naturalSort(getValue([], a), getValue([], b));\n });\n break;\n default:\n const sortfun = this.arrSort(this.columns, false);\n this.colKeys.sort(sortfun);\n }\n }\n }\n /**\n * 生成排序函数 综合配置的多条排序规则\n * @param fieldArr 排序维度名称 如行rows 列columns\n * @returns\n */\n arrSort(fieldArr: string[], isRow: boolean) {\n let field;\n const that = this;\n const sortersArr: any[] = function (_this: any) {\n const results = [];\n for (let l = 0, len1 = fieldArr.length; l < len1; l++) {\n field = fieldArr[l];\n let isHasSortRule = false;\n if (that.sortRules) {\n for (let m = 0, len2 = that.sortRules.length; m < len2; m++) {\n if (that.sortRules[m].sortField === field) {\n isHasSortRule = true;\n results.push({\n field,\n fieldIndex: l,\n sortRule: that.sortRules[m],\n func: that.getSort(that.sortRules[m], isRow)\n });\n\n // if (that.sortRules[m].sortByIndicator) {\n // isHasSortRule = true;\n // results.push({\n // field,\n // fieldIndex: l,\n // sortRule: that.sortRules[m],\n // func: that.getSort(that.sortRules[m], field),\n // });\n // }\n }\n }\n }\n if (!isHasSortRule) {\n results.push({ field, fieldIndex: l, func: naturalSort });\n }\n }\n return results;\n }.call(this);\n return function (a: string[], b: string[]) {\n let comparison;\n let sorter;\n for (let i = 0; i < sortersArr.length; i++) {\n sorter = sortersArr[i];\n if (sorter.sortRule?.sortByIndicator) {\n let aChanged = a;\n let bChanged = b;\n if (sorter.fieldIndex < fieldArr.length - 1) {\n aChanged = a.slice(0, sorter.fieldIndex + 1);\n aChanged.push(isRow ? that.totals?.row?.subTotalLabel : that.totals?.column?.subTotalLabel);\n bChanged = b.slice(0, sorter.fieldIndex + 1);\n bChanged.push(isRow ? that.totals?.row?.subTotalLabel : that.totals?.column?.subTotalLabel);\n }\n comparison = sorter.func(aChanged, bChanged);\n } else {\n comparison = sorter.func(a[sorter.fieldIndex], b[sorter.fieldIndex]);\n }\n if (comparison !== 0) {\n return comparison * (sorter.sortRule?.sortType === SortType.DESC ? -1 : 1);\n }\n }\n return 0;\n };\n }\n /**\n * 根据具体排序 获取不同的排序函数\n * @param sortRule\n * @returns\n */\n getSort(sortRule: SortRule, isSortRow: boolean) {\n const that = this;\n\n if ((<SortByIndicatorRule>sortRule).sortByIndicator) {\n return (a: string[], b: string[]) => {\n /**\n * 根据rowKey和colKey获取tree上对应的聚合值\n * @param rowKey\n * @param colKey\n * @returns\n */\n const getValue = function (rowKey: any, colKey: any) {\n //如果rowKey提供的不全 如 [地区,省,城市] 只提供了如[华东,山东] 会补全为[华东,山东,小计]\n if (\n rowKey.length < that.rows.length &&\n rowKey[rowKey.length - 1] !== that.rowSubTotalLabel &&\n rowKey[rowKey.length - 1] !== that.rowGrandTotalLabel\n ) {\n rowKey.push(that.rowSubTotalLabel);\n }\n if (\n colKey.length < that.columns.length &&\n colKey[colKey.length - 1] !== that.colSubTotalLabel &&\n colKey[colKey.length - 1] !== that.colGrandTotalLabel\n ) {\n colKey.push(that.colSubTotalLabel);\n }\n return that.getAggregator(rowKey, colKey, (<SortByIndicatorRule>sortRule).sortByIndicator).value();\n };\n if (isSortRow) {\n return naturalSort(\n getValue(a, (<SortByIndicatorRule>sortRule).query),\n getValue(b, (<SortByIndicatorRule>sortRule).query)\n );\n }\n return naturalSort(\n getValue((<SortByIndicatorRule>sortRule).query, a),\n getValue((<SortByIndicatorRule>sortRule).query, b)\n );\n };\n } else if ((<SortByRule>sortRule).sortBy) {\n return sortBy((<SortByRule>sortRule).sortBy);\n }\n if ((<SortTypeRule>sortRule).sortType) {\n return typeSort;\n }\n if ((<SortFuncRule>sortRule).sortFunc) {\n return (<SortFuncRule>sortRule).sortFunc;\n }\n return naturalSort;\n }\n /**\n * 汇总小计\n */\n totalStatistics() {\n const that = this;\n if (\n (that?.totals?.column?.showSubTotals && that?.totals?.column?.subTotalsDimensions?.length >= 1) ||\n (that?.totals?.row?.showSubTotals && that?.totals?.row?.subTotalsDimensions?.length >= 1) ||\n that?.totals?.column?.showGrandTotals ||\n that?.totals?.row?.showGrandTotals\n // ||\n // that.rows.length === 0 || //todo 这里原有逻辑暂时注释掉\n // that.columns.length === 0\n ) {\n const rowTotalKeys: string[] = [];\n /**\n * 计算每一行的所有列的汇总值\n * @param flatRowKey\n * @param flatColKey\n */\n const colCompute = (flatRowKey: string, flatColKey: string) => {\n const colKey = flatColKey.split(this.stringJoinChar);\n for (let i = 0, len = that.totals?.column?.subTotalsDimensions?.length; i < len; i++) {\n const dimension = that.totals.column.subTotalsDimensions[i];\n const dimensionIndex = that.columns.indexOf(dimension);\n if (dimensionIndex >= 0) {\n const colTotalKey = colKey.slice(0, dimensionIndex + 1);\n colTotalKey.push(that.totals?.column?.subTotalLabel ?? '小计');\n const flatColTotalKey = colTotalKey.join(this.stringJoinChar);\n if (!this.tree[flatRowKey][flatColTotalKey]) {\n this.tree[flatRowKey][flatColTotalKey] = [];\n }\n for (let i = 0; i < this.indicatorKeys.length; i++) {\n if (!this.tree[flatRowKey][flatColTotalKey][i]) {\n const aggRule = this.getAggregatorRule(this.indicatorKeys[i]);\n this.tree[flatRowKey][flatColTotalKey][i] = new this.aggregators[\n aggRule?.aggregationType ?? AggregationType.SUM\n ](aggRule?.field ?? this.indicatorKeys[i], aggRule?.formatFun);\n }\n this.tree[flatRowKey][flatColTotalKey][i].push(that.tree[flatRowKey]?.[flatColKey]?.[i]);\n }\n }\n }\n if (that.totals?.column?.showGrandTotals || this.rows.length === 0) {\n const flatColTotalKey = that.colGrandTotalLabel;\n if (!this.tree[flatRowKey][flatColTotalKey]) {\n this.tree[flatRowKey][flatColTotalKey] = [];\n }\n for (let i = 0; i < this.indicatorKeys.length; i++) {\n if (!this.tree[flatRowKey][flatColTotalKey][i]) {\n const aggRule = this.getAggregatorRule(this.indicatorKeys[i]);\n this.tree[flatRowKey][flatColTotalKey][i] = new this.aggregators[\n aggRule?.aggregationType ?? AggregationType.SUM\n ](aggRule?.field ?? this.indicatorKeys[i], aggRule?.formatFun);\n }\n this.tree[flatRowKey][flatColTotalKey][i].push(that.tree[flatRowKey]?.[flatColKey]?.[i]);\n }\n }\n };\n Object.keys(that.tree).forEach(flatRowKey => {\n const rowKey = flatRowKey.split(this.stringJoinChar);\n Object.keys(that.tree[flatRowKey]).forEach(flatColKey => {\n for (let i = 0, len = that.totals?.row?.subTotalsDimensions?.length; i < len; i++) {\n const dimension = that.totals.row.subTotalsDimensions[i];\n const dimensionIndex = that.rows.indexOf(dimension);\n if (dimensionIndex >= 0) {\n const rowTotalKey = rowKey.slice(0, dimensionIndex + 1);\n rowTotalKey.push(that.totals?.row?.subTotalLabel ?? '小计');\n const flatRowTotalKey = rowTotalKey.join(this.stringJoinChar);\n if (!this.tree[flatRowTotalKey]) {\n this.tree[flatRowTotalKey] = {};\n rowTotalKeys.push(flatRowTotalKey);\n }\n if (!this.tree[flatRowTotalKey][flatColKey]) {\n this.tree[flatRowTotalKey][flatColKey] = [];\n for (let i = 0; i < this.indicatorKeys.length; i++) {\n if (!this.tree[flatRowTotalKey][flatColKey][i]) {\n const aggRule = this.getAggregatorRule(this.indicatorKeys[i]);\n this.tree[flatRowTotalKey][flatColKey][i] = new this.aggregators[\n aggRule?.aggregationType ?? AggregationType.SUM\n ](aggRule?.field ?? this.indicatorKeys[i], aggRule?.formatFun);\n }\n this.tree[flatRowTotalKey][flatColKey][i].push(that.tree[flatRowKey]?.[flatColKey]?.[i]);\n }\n }\n }\n }\n\n if (that.totals?.row?.showGrandTotals || this.columns.length === 0) {\n const flatRowTotalKey = that.rowGrandTotalLabel;\n if (!this.tree[flatRowTotalKey]) {\n this.tree[flatRowTotalKey] = {};\n rowTotalKeys.push(flatRowTotalKey);\n }\n if (!this.tree[flatRowTotalKey][flatColKey]) {\n this.tree[flatRowTotalKey][flatColKey] = [];\n }\n for (let i = 0; i < this.indicatorKeys.length; i++) {\n if (!this.tree[flatRowTotalKey][flatColKey][i]) {\n const aggRule = this.getAggregatorRule(this.indicatorKeys[i]);\n this.tree[flatRowTotalKey][flatColKey][i] = new this.aggregators[\n aggRule?.aggregationType ?? AggregationType.SUM\n ](aggRule?.field ?? this.indicatorKeys[i], aggRule?.formatFun);\n }\n this.tree[flatRowTotalKey][flatColKey][i].push(that.tree[flatRowKey]?.[flatColKey]?.[i]);\n }\n }\n colCompute(flatRowKey, flatColKey);\n });\n });\n //增加出来的rowTotalKeys 再遍历一次 汇总小计的小计 如 东北小计(row)-办公用品小计(col)所指单元格的值\n rowTotalKeys.forEach(flatRowKey => {\n Object.keys(that.tree[flatRowKey]).forEach(flatColKey => {\n colCompute(flatRowKey, flatColKey);\n });\n });\n }\n }\n /**\n * 将rowKeys和colKeys 转为树形结构\n * @param arr\n * @param subTotalFlags 标志小计的维度\n * @returns\n */\n private ArrToTree(\n arr: string[][],\n subTotalFlags: boolean[],\n isGrandTotal: boolean,\n grandTotalLabel: string,\n subTotalLabel: string\n ) {\n /**\n *\n * @param {string} s 父级id\n * @param {number} n 需转换数字\n */\n // const getId = (pId: any, curId: any) => `${pId}$${curId}`;\n const result: any[] = []; // 结果\n const concatStr = this.stringJoinChar; // 连接符(随便写,保证key唯一性就OK)\n const map = new Map(); // 存储根节点 主要提升性能\n function addList(list: any) {\n const path: any[] = []; // 路径\n let node: any; // 当前节点\n list.forEach((value: any, index: number) => {\n path.push(value);\n const flatKey = path.join(concatStr);\n //id的值可以每次生成一个新的 这里用的path作为id 方便layout对象获取\n let item: { id: string; children: any[] } = map.get(flatKey); // 当前节点\n if (!item) {\n item = {\n // name: value,\n id: flatKey, //getId(node?.id ?? '', (node?.children?.length ?? result.length) + 1),\n children: []\n };\n if (subTotalFlags[index]) {\n let curChild = item.children;\n for (let i = index; i < list.length - 1; i++) {\n const totalChild: { id: string; children: any[] } = {\n id: `${flatKey}${concatStr}${subTotalLabel}`, // getId(item?.id, 1),\n children: []\n };\n curChild.push(totalChild);\n curChild = totalChild.children;\n }\n }\n map.set(flatKey, item); // 存储路径对应的节点\n if (node) {\n //为了确保汇总小计放到最后 使用splice插入到倒数第二个位置。如果小计放前面 直接push就行\n if (subTotalFlags[index - 1]) {\n node.children.splice(node.children.length - 1, 0, item);\n } else {\n node.children.push(item);\n }\n } else {\n result.push(item);\n }\n }\n node = item; // 更新当前节点\n });\n }\n\n arr.forEach(item => addList(item));\n //最后将总计的节点加上\n if (isGrandTotal) {\n const node: { id: string; children: any[] } = {\n id: grandTotalLabel, // getId(item?.id, 1),\n children: []\n };\n let curChild = node.children;\n for (let i = 1; i < subTotalFlags.length; i++) {\n const totalChild: { id: string; children: any[] } = {\n id: grandTotalLabel, // getId(item?.id, 1),\n children: []\n };\n curChild.push(totalChild);\n curChild = totalChild.children;\n }\n result.push(node);\n }\n return result;\n }\n //将树形结构转为二维数组 值为node.id\n private TreeToArr(tree: any) {\n const result: any[] = []; // 结果\n function getPath(node: any, arr: any) {\n arr.push(node.id);\n if (node.children.length > 0) {\n // 存在多个节点就递归\n node.children?.forEach((childItem: any) => getPath(childItem, [...arr]));\n } else {\n result.push(arr);\n }\n }\n tree.forEach((treeNode: any) => getPath(treeNode, []));\n return result;\n }\n private TreeToArr2(tree: any) {\n const result: any[] = []; // 结果\n function getPath(node: any, arr: any) {\n arr.push(arr.length > 0 ? [arr[arr.length - 1], node.value].join(String.fromCharCode(0)) : node.value);\n if (node.children?.length > 0 && !node.children[0].indicatorKey) {\n // 存在多个节点就递归\n node.children?.forEach((childItem: any) => getPath(childItem, [...arr]));\n } else {\n result.push(arr);\n }\n }\n tree.forEach((treeNode: any) => getPath(treeNode, []));\n return result;\n }\n\n private dealWithZeroAlign() {\n const indicatorsToAlign = [];\n for (let i = 0; i < this.aggregationRules.length; i++) {\n const rule = this.aggregationRules[i];\n if (isArray(rule.field) && rule.field.length === 2) {\n indicatorsToAlign.push(rule.field);\n }\n }\n\n indicatorsToAlign.forEach(indicatorToAlign => {\n const indicator1 = indicatorToAlign[0];\n const indicator2 = indicatorToAlign[1];\n const collectedValue1 = this.collectedValues[indicator1];\n const collectedValue2 = this.collectedValues[indicator2];\n this.collectedValues[indicator1 + '_align'] = {};\n this.collectedValues[indicator2 + '_align'] = {};\n\n const toAlignCollectedValue = collectedValue1 || collectedValue2;\n for (const key in toAlignCollectedValue) {\n const range1 = collectedValue1?.[key] ?? { min: 0, max: 1 };\n const range2 = collectedValue2?.[key] ?? { min: 0, max: 1 };\n\n const newRanges = getNewRangeToAlign(\n range1 as { min: number; max: number },\n range2 as { min: number; max: number }\n );\n if (!newRanges) {\n // 没有正确完成0值对齐,直接沿用之前的range\n this.collectedValues[indicator1 + '_align'][key] = {\n min: (range1 as { min: number; max: number }).min,\n max: (range1 as { min: number; max: number }).max\n };\n this.collectedValues[indicator2 + '_align'][key] = {\n min: (range2 as { min: number; max: number }).min,\n max: (range2 as { min: number; max: number }).max\n };\n } else {\n const { range1: newRange1, range2: newRange2 } = newRanges;\n this.collectedValues[indicator1 + '_align'][key] = { min: newRange1[0], max: newRange1[1] };\n this.collectedValues[indicator2 + '_align'][key] = { min: newRange2[0], max: newRange2[1] };\n }\n }\n });\n }\n\n private cacheDeminsionCollectedValues() {\n for (const key in this.collectValuesBy) {\n if (this.collectValuesBy[key].type === 'xField' || this.collectValuesBy[key].type === 'yField') {\n if (this.dataConfig.dimensionSortArray) {\n this.cacheCollectedValues[key] = arraySortByAnotherArray(\n this.collectedValues[key] as unknown as string[],\n this.dataConfig.dimensionSortArray\n ) as unknown as Record<string, CollectedValue>;\n } else {\n this.cacheCollectedValues[key] = this.collectedValues[key];\n }\n }\n }\n }\n}\n\nfunction arraySortByAnotherArray(array: string[], sortArray: string[]) {\n return array.sort((a, b) => {\n const aIndex = sortArray.indexOf(a);\n const bIndex = sortArray.indexOf(b);\n if (aIndex < bIndex) {\n return -1;\n }\n if (aIndex > bIndex) {\n return 1;\n }\n return 0;\n });\n}\n"]}
|