e-virt-table 1.2.35 → 1.3.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.
Files changed (52) hide show
  1. package/dist/index.cjs.js +5 -5
  2. package/dist/index.cjs.js.map +1 -1
  3. package/dist/index.es.js +1770 -1163
  4. package/dist/index.es.js.map +1 -1
  5. package/dist/index.umd.js +5 -5
  6. package/dist/index.umd.js.map +1 -1
  7. package/dist/lib/Cell.js +1 -1
  8. package/dist/lib/Cell.js.map +1 -1
  9. package/dist/lib/CellHeader.d.ts +2 -1
  10. package/dist/lib/CellHeader.js +27 -9
  11. package/dist/lib/CellHeader.js.map +1 -1
  12. package/dist/lib/Config.d.ts +17 -1
  13. package/dist/lib/Config.js +72 -1
  14. package/dist/lib/Config.js.map +1 -1
  15. package/dist/lib/Context.d.ts +5 -0
  16. package/dist/lib/Context.js +25 -0
  17. package/dist/lib/Context.js.map +1 -1
  18. package/dist/lib/ContextMenu.d.ts +3 -5
  19. package/dist/lib/ContextMenu.js +172 -88
  20. package/dist/lib/ContextMenu.js.map +1 -1
  21. package/dist/lib/DOMTreeMenu.d.ts +44 -0
  22. package/dist/lib/DOMTreeMenu.js +348 -0
  23. package/dist/lib/DOMTreeMenu.js.map +1 -0
  24. package/dist/lib/Database.d.ts +13 -3
  25. package/dist/lib/Database.js +130 -16
  26. package/dist/lib/Database.js.map +1 -1
  27. package/dist/lib/EVirtTable.d.ts +6 -1
  28. package/dist/lib/EVirtTable.js +10 -2
  29. package/dist/lib/EVirtTable.js.map +1 -1
  30. package/dist/lib/EventBrowser.js +10 -0
  31. package/dist/lib/EventBrowser.js.map +1 -1
  32. package/dist/lib/EventTable.d.ts +1 -0
  33. package/dist/lib/EventTable.js +32 -0
  34. package/dist/lib/EventTable.js.map +1 -1
  35. package/dist/lib/Header.d.ts +11 -0
  36. package/dist/lib/Header.js +236 -14
  37. package/dist/lib/Header.js.map +1 -1
  38. package/dist/lib/Icons.d.ts +7 -1
  39. package/dist/lib/Icons.js +3 -1
  40. package/dist/lib/Icons.js.map +1 -1
  41. package/dist/lib/Selector.js +27 -16
  42. package/dist/lib/Selector.js.map +1 -1
  43. package/dist/lib/Tooltip.js +19 -0
  44. package/dist/lib/Tooltip.js.map +1 -1
  45. package/dist/lib/TreeUtil.d.ts +18 -0
  46. package/dist/lib/TreeUtil.js +85 -0
  47. package/dist/lib/TreeUtil.js.map +1 -0
  48. package/dist/lib/types.d.ts +21 -3
  49. package/dist/lib/util.d.ts +4 -2
  50. package/dist/lib/util.js +44 -8
  51. package/dist/lib/util.js.map +1 -1
  52. package/package.json +1 -1
@@ -0,0 +1,348 @@
1
+ import { computePosition, autoUpdate, flip, shift, offset } from '@floating-ui/dom';
2
+ import { expandSvg } from './Icons';
3
+ export class DOMTreeMenu {
4
+ constructor(container, menuData = [], options = {}) {
5
+ Object.defineProperty(this, "container", {
6
+ enumerable: true,
7
+ configurable: true,
8
+ writable: true,
9
+ value: void 0
10
+ });
11
+ Object.defineProperty(this, "menuData", {
12
+ enumerable: true,
13
+ configurable: true,
14
+ writable: true,
15
+ value: void 0
16
+ });
17
+ Object.defineProperty(this, "onClick", {
18
+ enumerable: true,
19
+ configurable: true,
20
+ writable: true,
21
+ value: void 0
22
+ });
23
+ Object.defineProperty(this, "activeSubmenus", {
24
+ enumerable: true,
25
+ configurable: true,
26
+ writable: true,
27
+ value: new Set()
28
+ });
29
+ Object.defineProperty(this, "boundMouseEnterHandler", {
30
+ enumerable: true,
31
+ configurable: true,
32
+ writable: true,
33
+ value: void 0
34
+ });
35
+ Object.defineProperty(this, "boundMouseLeaveHandler", {
36
+ enumerable: true,
37
+ configurable: true,
38
+ writable: true,
39
+ value: void 0
40
+ });
41
+ Object.defineProperty(this, "boundClickHandler", {
42
+ enumerable: true,
43
+ configurable: true,
44
+ writable: true,
45
+ value: void 0
46
+ });
47
+ this.container = container;
48
+ this.menuData = menuData;
49
+ this.onClick = options.onClick;
50
+ // 绑定事件处理器
51
+ this.boundMouseEnterHandler = (e) => this.handleMouseEvent(e, 'enter');
52
+ this.boundMouseLeaveHandler = (e) => this.handleMouseEvent(e, 'leave');
53
+ this.boundClickHandler = (e) => this.handleClick(e);
54
+ this.createMenu();
55
+ this.bindEvents();
56
+ }
57
+ createMenu() {
58
+ this.container.className = 'e-virt-table-main-menu';
59
+ // 确保菜单可见
60
+ this.container.style.display = 'block';
61
+ const mainMenu = document.createDocumentFragment();
62
+ this.menuData.forEach((item) => {
63
+ mainMenu.appendChild(this.createMenuItem(item));
64
+ });
65
+ this.container.appendChild(mainMenu);
66
+ }
67
+ createMenuItem(item, isSubmenu = false) {
68
+ const menuItem = this.createElement('div', isSubmenu ? 'e-virt-table-submenu-item' : 'e-virt-table-menu-item');
69
+ menuItem.setAttribute(isSubmenu ? 'data-submenu' : 'data-menu', item.value);
70
+ if (item.disabled)
71
+ menuItem.classList.add('disabled');
72
+ const contentContainer = this.createElement('div', 'menu-item-content');
73
+ if (item.icon) {
74
+ const iconContainer = this.createElement('span', 'menu-item-icon');
75
+ iconContainer.innerHTML = item.icon;
76
+ contentContainer.appendChild(iconContainer);
77
+ }
78
+ else {
79
+ contentContainer.classList.add('menu-item-no-icon');
80
+ }
81
+ const textSpan = this.createElement('span', 'menu-item-text');
82
+ textSpan.textContent = item.label;
83
+ contentContainer.appendChild(textSpan);
84
+ menuItem.appendChild(contentContainer);
85
+ if (item.children?.length) {
86
+ const arrowContainer = this.createElement('span', 'e-virt-table-menu-arrow');
87
+ arrowContainer.innerHTML = expandSvg;
88
+ menuItem.appendChild(arrowContainer);
89
+ const submenu = this.createSubmenu(item.children);
90
+ menuItem._submenu = submenu;
91
+ this.container.appendChild(submenu);
92
+ }
93
+ return menuItem;
94
+ }
95
+ createSubmenu(submenuData) {
96
+ const submenu = this.createElement('div', 'e-virt-table-submenu');
97
+ submenuData.forEach((item) => {
98
+ submenu.appendChild(this.createMenuItem(item, true));
99
+ });
100
+ return submenu;
101
+ }
102
+ createElement(tagName, className = '') {
103
+ const element = document.createElement(tagName);
104
+ if (className)
105
+ element.className = className;
106
+ return element;
107
+ }
108
+ bindEvents() {
109
+ this.container.addEventListener('mouseenter', this.boundMouseEnterHandler, true);
110
+ this.container.addEventListener('mouseleave', this.boundMouseLeaveHandler, true);
111
+ this.container.addEventListener('click', this.boundClickHandler);
112
+ }
113
+ handleMouseEvent(e, type) {
114
+ // 阻止事件冒泡,防止触发外部的鼠标事件
115
+ e.stopPropagation();
116
+ const target = e.target;
117
+ const menuItem = target.closest('.e-virt-table-menu-item, .e-virt-table-submenu-item');
118
+ if (menuItem &&
119
+ (this.container.contains(menuItem) || menuItem.classList.contains('e-virt-table-submenu-item'))) {
120
+ if (type === 'enter') {
121
+ this.handleHover(menuItem);
122
+ }
123
+ else {
124
+ this.handleLeave(menuItem);
125
+ }
126
+ }
127
+ }
128
+ handleHover(menuItem) {
129
+ if (menuItem.classList.contains('e-virt-table-menu-item')) {
130
+ this.container
131
+ .querySelectorAll('.e-virt-table-menu-item')
132
+ .forEach((item) => item.classList.remove('active'));
133
+ if (!menuItem.classList.contains('disabled')) {
134
+ menuItem.classList.add('active');
135
+ }
136
+ }
137
+ const submenu = menuItem._submenu || menuItem.querySelector('.e-virt-table-submenu');
138
+ if (submenu) {
139
+ this.showSubmenu(menuItem, submenu);
140
+ }
141
+ }
142
+ handleLeave(menuItem) {
143
+ const submenu = menuItem._submenu || menuItem.querySelector('.e-virt-table-submenu');
144
+ setTimeout(() => {
145
+ const submenuEl = submenu;
146
+ if (submenuEl && !submenuEl.matches(':hover') && !menuItem.matches(':hover')) {
147
+ this.hideSubmenu(submenuEl);
148
+ if (menuItem.classList.contains('e-virt-table-menu-item')) {
149
+ menuItem.classList.remove('active');
150
+ }
151
+ }
152
+ }, 150);
153
+ }
154
+ async showSubmenu(trigger, submenu) {
155
+ if (this.activeSubmenus.has(submenu))
156
+ return;
157
+ this.activeSubmenus.add(submenu);
158
+ submenu.classList.add('show');
159
+ const cleanup = autoUpdate(trigger, submenu, async () => {
160
+ const { x, y } = await computePosition(trigger, submenu, {
161
+ placement: 'right-start',
162
+ middleware: [offset(8), flip(), shift({ padding: 8 })],
163
+ });
164
+ Object.assign(submenu.style, {
165
+ left: `${x}px`,
166
+ top: `${y}px`,
167
+ });
168
+ });
169
+ submenu._cleanup = cleanup;
170
+ }
171
+ hideSubmenu(submenu) {
172
+ if (!this.activeSubmenus.has(submenu))
173
+ return;
174
+ this.activeSubmenus.delete(submenu);
175
+ submenu.classList.remove('show');
176
+ this.hideAllChildSubmenus(submenu);
177
+ const menuElement = submenu;
178
+ if (menuElement._cleanup) {
179
+ menuElement._cleanup();
180
+ delete menuElement._cleanup;
181
+ }
182
+ }
183
+ hideAllChildSubmenus(parentSubmenu) {
184
+ const childMenuItems = parentSubmenu.querySelectorAll('.e-virt-table-submenu-item');
185
+ childMenuItems.forEach((menuItem) => {
186
+ if (menuItem._submenu) {
187
+ const childSubmenu = menuItem._submenu;
188
+ if (this.activeSubmenus.has(childSubmenu)) {
189
+ this.activeSubmenus.delete(childSubmenu);
190
+ childSubmenu.classList.remove('show');
191
+ const menuElement = childSubmenu;
192
+ if (menuElement._cleanup) {
193
+ menuElement._cleanup();
194
+ delete menuElement._cleanup;
195
+ }
196
+ this.hideAllChildSubmenus(childSubmenu);
197
+ }
198
+ }
199
+ });
200
+ }
201
+ handleClick(e) {
202
+ // 阻止事件冒泡,防止触发外部的点击事件
203
+ e.stopPropagation();
204
+ const menuItem = e.target.closest('.e-virt-table-menu-item, .e-virt-table-submenu-item');
205
+ if (!menuItem)
206
+ return;
207
+ if (menuItem.classList.contains('disabled'))
208
+ return;
209
+ // 如果点击的是有子菜单的菜单项,先显示子菜单
210
+ if (menuItem.classList.contains('e-virt-table-menu-item')) {
211
+ const submenu = menuItem._submenu || menuItem.querySelector('.e-virt-table-submenu');
212
+ if (submenu) {
213
+ this.showSubmenu(menuItem, submenu);
214
+ return; // 不执行点击回调,只是显示子菜单
215
+ }
216
+ }
217
+ const menuValue = menuItem.getAttribute('data-menu') || menuItem?.getAttribute('data-submenu');
218
+ const itemData = this.findMenuItem(menuValue || '');
219
+ if (itemData) {
220
+ if (itemData.event) {
221
+ itemData.event(e, this.hide.bind(this));
222
+ }
223
+ if (this.onClick) {
224
+ this.onClick(itemData, menuValue || '');
225
+ }
226
+ }
227
+ }
228
+ findMenuItem(value, items = this.menuData) {
229
+ for (const item of items) {
230
+ if (item.value === value)
231
+ return item;
232
+ if (item.children) {
233
+ const found = this.findMenuItem(value, item.children);
234
+ if (found)
235
+ return found;
236
+ }
237
+ }
238
+ return null;
239
+ }
240
+ positionMenu(e) {
241
+ const virtualReference = {
242
+ getBoundingClientRect: () => ({
243
+ width: 0,
244
+ height: 0,
245
+ top: e.clientY,
246
+ left: e.clientX,
247
+ right: e.clientX,
248
+ bottom: e.clientY,
249
+ x: e.clientX,
250
+ y: e.clientY,
251
+ }),
252
+ contextElement: document.body,
253
+ };
254
+ autoUpdate(virtualReference, this.container, () => {
255
+ computePosition(virtualReference, this.container, {
256
+ placement: 'right-start',
257
+ middleware: [offset(), shift(), flip()],
258
+ }).then(({ x, y }) => {
259
+ if (this.container) {
260
+ Object.assign(this.container.style, {
261
+ left: `${x}px`,
262
+ top: `${y}px`,
263
+ });
264
+ }
265
+ });
266
+ });
267
+ }
268
+ hide() {
269
+ // 隐藏菜单
270
+ this.cleanupAllSubmenus(this.container);
271
+ this.container.style.display = 'none';
272
+ }
273
+ destroy() {
274
+ // 移除事件监听器
275
+ this.container.removeEventListener('mouseenter', this.boundMouseEnterHandler, true);
276
+ this.container.removeEventListener('mouseleave', this.boundMouseLeaveHandler, true);
277
+ this.container.removeEventListener('click', this.boundClickHandler);
278
+ // 递归清理所有子菜单
279
+ this.cleanupAllSubmenus(this.container);
280
+ // 隐藏菜单
281
+ this.container.style.display = 'none';
282
+ // 清理容器
283
+ this.container.replaceChildren();
284
+ }
285
+ /**
286
+ * 删除指定值的菜单项
287
+ * @param value 要删除的菜单项的值
288
+ * @returns 是否成功删除
289
+ */
290
+ removeMenuItem(value) {
291
+ // 查找要删除的菜单项
292
+ const menuItem = this.container.querySelector(`[data-menu="${value}"]`);
293
+ if (!menuItem) {
294
+ return false;
295
+ }
296
+ // 如果菜单项有子菜单,先清理子菜单
297
+ const submenu = menuItem.querySelector('.e-virt-table-submenu');
298
+ if (submenu) {
299
+ this.cleanupSubmenuRecursively(submenu);
300
+ }
301
+ // 从 DOM 中移除菜单项
302
+ menuItem.remove();
303
+ return true;
304
+ }
305
+ /**
306
+ * 删除指定值的子菜单项
307
+ * @param value 要删除的子菜单项的值
308
+ * @returns 是否成功删除
309
+ */
310
+ removeSubMenuItem(value) {
311
+ // 查找要删除的子菜单项
312
+ const subMenuItem = this.container.querySelector(`[data-submenu="${value}"]`);
313
+ if (!subMenuItem) {
314
+ return false;
315
+ }
316
+ // 从 DOM 中移除子菜单项
317
+ subMenuItem.remove();
318
+ return true;
319
+ }
320
+ cleanupAllSubmenus(container) {
321
+ // 清理所有菜单项的子菜单
322
+ const menuItems = container.querySelectorAll('.e-virt-table-menu-item');
323
+ menuItems.forEach((menuItem) => {
324
+ if (menuItem._submenu) {
325
+ this.cleanupSubmenuRecursively(menuItem._submenu);
326
+ menuItem._submenu = undefined;
327
+ }
328
+ });
329
+ }
330
+ cleanupSubmenuRecursively(submenu) {
331
+ // 清理当前子菜单的清理函数
332
+ const menuElement = submenu;
333
+ if (menuElement._cleanup) {
334
+ menuElement._cleanup();
335
+ delete menuElement._cleanup;
336
+ }
337
+ // 递归清理子菜单中的子菜单
338
+ const childMenuItems = submenu.querySelectorAll('.e-virt-table-submenu-item');
339
+ childMenuItems.forEach((menuItem) => {
340
+ if (menuItem._submenu) {
341
+ this.cleanupSubmenuRecursively(menuItem._submenu);
342
+ }
343
+ });
344
+ // 从 DOM 中移除子菜单
345
+ submenu.remove();
346
+ }
347
+ }
348
+ //# sourceMappingURL=DOMTreeMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DOMTreeMenu.js","sourceRoot":"","sources":["../../src/DOMTreeMenu.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import type CellHeader from './CellHeader';
2
2
  import { ValidateResult } from './Validator';
3
3
  import type Context from './Context';
4
- import type { ChangeItem, Column, FilterMethod, Position, EVirtTableOptions, SpanInfo, HistoryAction } from './types';
4
+ import type { ChangeItem, Column, FilterMethod, Position, EVirtTableOptions, SpanInfo, HistoryAction, CustomHeader, Fixed } from './types';
5
5
  import Cell from './Cell';
6
6
  export default class Database {
7
7
  private ctx;
@@ -21,6 +21,8 @@ export default class Database {
21
21
  private validationErrorMap;
22
22
  private itemRowKeyMap;
23
23
  private bufferData;
24
+ private originalColumns;
25
+ private customHeader;
24
26
  overlayerAutoHeightMap: Map<string, number>;
25
27
  private bufferCheckState;
26
28
  private sumHeight;
@@ -58,8 +60,8 @@ export default class Database {
58
60
  * @returns 获取转化平铺数据
59
61
  */
60
62
  getAllRowsData(): any[];
61
- private filterColumns;
62
- getColumns(): Column[];
63
+ private generateColumns;
64
+ getColumns(): any[];
63
65
  setColumns(columns: Column[]): void;
64
66
  setData(data: any[]): void;
65
67
  /**
@@ -301,4 +303,12 @@ export default class Database {
301
303
  setOverlayerAutoHeightMap(map: Map<string, number>): void;
302
304
  getOverlayerAutoHeightMap(): Map<string, number>;
303
305
  getOverlayerAutoHeight(rowIndex: number, colIndex: number): number;
306
+ setCustomHeader(customHeader: CustomHeader, ignoreEmit?: boolean): void;
307
+ resetCustomHeader(): void;
308
+ getCustomHeader(): CustomHeader;
309
+ setCustomHeaderResizableData(key: string, width: number): void;
310
+ setCustomHeaderHideData(keys: string[], hide: boolean): void;
311
+ setCustomHeaderFixedData(keys: string[], fixed: Fixed | ''): void;
312
+ setOriginalColumns(columns: Column[]): void;
313
+ clearCustomHeaderInvalidValues(columns: Column[]): CustomHeader;
304
314
  }
@@ -1,5 +1,5 @@
1
1
  import Validator from './Validator';
2
- import { generateShortUUID, toLeaf, compareDates } from './util';
2
+ import { generateShortUUID, toLeaf, compareDates, deepClone } from './util';
3
3
  import Cell from './Cell';
4
4
  export default class Database {
5
5
  constructor(ctx, options) {
@@ -105,6 +105,23 @@ export default class Database {
105
105
  writable: true,
106
106
  value: []
107
107
  });
108
+ Object.defineProperty(this, "originalColumns", {
109
+ enumerable: true,
110
+ configurable: true,
111
+ writable: true,
112
+ value: []
113
+ });
114
+ Object.defineProperty(this, "customHeader", {
115
+ enumerable: true,
116
+ configurable: true,
117
+ writable: true,
118
+ value: {
119
+ fixedData: {},
120
+ sortData: {},
121
+ hideData: {},
122
+ resizableData: {},
123
+ }
124
+ });
108
125
  Object.defineProperty(this, "overlayerAutoHeightMap", {
109
126
  enumerable: true,
110
127
  configurable: true,
@@ -151,6 +168,7 @@ export default class Database {
151
168
  this.data = data;
152
169
  this.footerData = footerData;
153
170
  this.columns = columns;
171
+ this.originalColumns = deepClone(columns);
154
172
  this.init();
155
173
  }
156
174
  // 初始化默认不忽略清空改变值和校验map
@@ -328,24 +346,34 @@ export default class Database {
328
346
  recursiveData(this.data);
329
347
  return list;
330
348
  }
331
- filterColumns(columns) {
332
- return columns.reduce((acc, column) => {
333
- // 检查当前列的 hide 属性
334
- const shouldHide = typeof column.hide === 'function' ? column.hide() : column.hide;
335
- // 如果当前列不应该隐藏,则添加到结果中
336
- if (!shouldHide) {
337
- const newColumn = { ...column }; // 复制当前列
338
- // 递归处理子列
339
- if (newColumn.children && Array.isArray(newColumn.children)) {
340
- newColumn.children = this.filterColumns(newColumn.children);
349
+ generateColumns(columns) {
350
+ const _generateColumns = (columns) => {
351
+ return columns.map((column) => {
352
+ if (column.children && Array.isArray(column.children)) {
353
+ column.children = _generateColumns(column.children);
341
354
  }
342
- acc.push(newColumn);
343
- }
344
- return acc;
345
- }, []);
355
+ const dataMap = {
356
+ hide: this.customHeader?.hideData?.[column.key],
357
+ fixed: this.customHeader?.fixedData?.[column.key],
358
+ sort: this.customHeader?.sortData?.[column.key],
359
+ width: this.customHeader?.resizableData?.[column.key],
360
+ };
361
+ const obj = {};
362
+ for (const [key, value] of Object.entries(dataMap)) {
363
+ if (value !== undefined)
364
+ obj[key] = value;
365
+ }
366
+ return {
367
+ ...column,
368
+ ...obj,
369
+ };
370
+ });
371
+ };
372
+ return _generateColumns(columns);
346
373
  }
347
374
  getColumns() {
348
- return this.filterColumns(this.columns);
375
+ const _columns = deepClone(this.columns);
376
+ return this.generateColumns(_columns);
349
377
  }
350
378
  setColumns(columns) {
351
379
  this.columns = columns;
@@ -1821,5 +1849,91 @@ export default class Database {
1821
1849
  const height = this.overlayerAutoHeightMap.get(key) || 0;
1822
1850
  return height;
1823
1851
  }
1852
+ setCustomHeader(customHeader, ignoreEmit = false) {
1853
+ ['fixedData', 'sortData', 'hideData', 'resizableData'].forEach((key) => {
1854
+ const value = customHeader[key];
1855
+ if (value !== undefined) {
1856
+ this.customHeader[key] = value;
1857
+ }
1858
+ });
1859
+ if (!ignoreEmit) {
1860
+ const obj = this.clearCustomHeaderInvalidValues(this.originalColumns);
1861
+ this.ctx.emit('customHeaderChange', obj);
1862
+ }
1863
+ }
1864
+ resetCustomHeader() {
1865
+ this.customHeader = {};
1866
+ this.columns = this.originalColumns;
1867
+ this.init(false);
1868
+ this.ctx.emit('resetHeader');
1869
+ this.ctx.emit('customHeaderChange', this.customHeader);
1870
+ }
1871
+ getCustomHeader() {
1872
+ return this.customHeader;
1873
+ }
1874
+ setCustomHeaderResizableData(key, width) {
1875
+ // 统一设置方法
1876
+ let { resizableData = {} } = this.customHeader;
1877
+ resizableData[key] = width;
1878
+ this.setCustomHeader({
1879
+ resizableData,
1880
+ });
1881
+ }
1882
+ setCustomHeaderHideData(keys, hide) {
1883
+ let { hideData = {} } = this.customHeader;
1884
+ keys.forEach((key) => {
1885
+ hideData[key] = hide;
1886
+ });
1887
+ this.setCustomHeader({
1888
+ hideData,
1889
+ });
1890
+ this.init(false);
1891
+ this.ctx.emit('resetHeader');
1892
+ }
1893
+ setCustomHeaderFixedData(keys, fixed) {
1894
+ let { fixedData = {} } = this.customHeader;
1895
+ keys.forEach((key) => {
1896
+ fixedData[key] = fixed;
1897
+ });
1898
+ this.setCustomHeader({
1899
+ fixedData,
1900
+ });
1901
+ this.init(false);
1902
+ this.ctx.emit('resetHeader');
1903
+ }
1904
+ setOriginalColumns(columns) {
1905
+ this.originalColumns = columns;
1906
+ }
1907
+ // 递归处理
1908
+ clearCustomHeaderInvalidValues(columns) {
1909
+ const clearCustomHeaderInvalidValues = (columns, customHeader = {}) => {
1910
+ columns.forEach((column) => {
1911
+ if (column.children && column.children.length > 0) {
1912
+ clearCustomHeaderInvalidValues(column.children, customHeader);
1913
+ }
1914
+ // 用一个小的 helper 函数,减少重复代码
1915
+ const assignIfDifferent = (field, columnValue) => {
1916
+ const value = this.customHeader[field]?.[column.key];
1917
+ if (value !== undefined && value !== columnValue) {
1918
+ if (!customHeader[field]) {
1919
+ customHeader[field] = {};
1920
+ }
1921
+ customHeader[field][column.key] = value;
1922
+ // 如果固定源数据为空,则删除
1923
+ if (field === 'fixedData' && !value && !columnValue) {
1924
+ delete customHeader[field]?.[column.key];
1925
+ }
1926
+ }
1927
+ };
1928
+ assignIfDifferent('fixedData', column.fixed);
1929
+ assignIfDifferent('sortData', column.sort);
1930
+ assignIfDifferent('hideData', column.hide);
1931
+ assignIfDifferent('resizableData', column.width);
1932
+ });
1933
+ };
1934
+ let obj = {};
1935
+ clearCustomHeaderInvalidValues(columns, obj);
1936
+ return obj;
1937
+ }
1824
1938
  }
1825
1939
  //# sourceMappingURL=Database.js.map