@nokecy/qc-ui 1.1.86 → 1.1.88

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 (108) hide show
  1. package/dist/cjs/ag-grid-plus/ag-gridPlus.js +148 -144
  2. package/dist/cjs/ag-grid-plus/context/useSchemeDataFlow.js +4 -4
  3. package/dist/cjs/ag-grid-plus/errors/types.d.ts +9 -0
  4. package/dist/cjs/ag-grid-plus/errors/types.js +20 -0
  5. package/dist/cjs/ag-grid-plus/interface.d.ts +2 -0
  6. package/dist/cjs/ag-grid-plus/locale.d.ts +413 -1
  7. package/dist/cjs/ag-grid-plus/locale.js +14 -3
  8. package/dist/cjs/ag-grid-plus/queryForm/index.d.ts +2 -0
  9. package/dist/cjs/ag-grid-plus/queryForm/index.js +47 -51
  10. package/dist/cjs/ag-grid-plus/queryForm/queryColumns.d.ts +8 -0
  11. package/dist/cjs/ag-grid-plus/queryForm/queryColumns.js +52 -0
  12. package/dist/cjs/ag-grid-plus/queryForm/schemaKey.d.ts +15 -8
  13. package/dist/cjs/ag-grid-plus/queryForm/schemaKey.js +64 -12
  14. package/dist/cjs/ag-grid-plus/setting/ColumnConfigForm.js +3 -0
  15. package/dist/cjs/ag-grid-plus/setting/ColumnSetting.js +69 -106
  16. package/dist/cjs/ag-grid-plus/setting/QuerySchemeManager.js +3 -1
  17. package/dist/cjs/ag-grid-plus/setting/columnGroupTypes.d.ts +2 -0
  18. package/dist/cjs/ag-grid-plus/setting/columnGroupUtils.d.ts +14 -0
  19. package/dist/cjs/ag-grid-plus/setting/columnGroupUtils.js +98 -110
  20. package/dist/cjs/ag-grid-plus/types.d.ts +6 -0
  21. package/dist/cjs/array-table/batchRemove.d.ts +36 -0
  22. package/dist/cjs/array-table/batchRemove.js +299 -0
  23. package/dist/cjs/array-table/cellFocusScope.js +58 -7
  24. package/dist/cjs/array-table/cellInteractionLock.d.ts +13 -0
  25. package/dist/cjs/array-table/cellInteractionLock.js +26 -0
  26. package/dist/cjs/array-table/hooks.d.ts +11 -6
  27. package/dist/cjs/array-table/hooks.js +138 -88
  28. package/dist/cjs/array-table/index.d.ts +8 -2
  29. package/dist/cjs/array-table/index.js +55 -32
  30. package/dist/cjs/array-table/indexColumn.d.ts +1 -1
  31. package/dist/cjs/array-table/indexColumn.js +3 -2
  32. package/dist/cjs/array-table/interface.d.ts +13 -1
  33. package/dist/cjs/array-table/preview.js +8 -0
  34. package/dist/cjs/array-table/readOnlyFormatters.d.ts +9 -1
  35. package/dist/cjs/array-table/readOnlyFormatters.js +41 -13
  36. package/dist/cjs/array-table/rowIdentity.d.ts +17 -0
  37. package/dist/cjs/array-table/rowIdentity.js +43 -0
  38. package/dist/cjs/array-table/sorting.d.ts +3 -0
  39. package/dist/cjs/array-table/sorting.js +46 -0
  40. package/dist/cjs/array-table/utils.js +146 -67
  41. package/dist/cjs/dialogSelect/index.d.ts +3 -0
  42. package/dist/cjs/dialogSelect/index.js +13 -3
  43. package/dist/cjs/editable/index.js +101 -139
  44. package/dist/cjs/index.d.ts +2 -2
  45. package/dist/cjs/index.js +14 -0
  46. package/dist/cjs/readPretty/arrayTable.js +29 -14
  47. package/dist/cjs/readPretty/formily.d.ts +1 -0
  48. package/dist/cjs/readPretty/formily.js +7 -0
  49. package/dist/cjs/readPretty/index.d.ts +1 -0
  50. package/dist/cjs/readPretty/index.js +7 -0
  51. package/dist/cjs/readPretty/schemaScope.d.ts +2 -0
  52. package/dist/cjs/readPretty/schemaScope.js +49 -0
  53. package/dist/cjs/standardList/emptyState.js +9 -0
  54. package/dist/esm/ag-grid-plus/ag-gridPlus.js +148 -144
  55. package/dist/esm/ag-grid-plus/context/useSchemeDataFlow.js +4 -4
  56. package/dist/esm/ag-grid-plus/errors/types.d.ts +9 -0
  57. package/dist/esm/ag-grid-plus/errors/types.js +20 -0
  58. package/dist/esm/ag-grid-plus/interface.d.ts +2 -0
  59. package/dist/esm/ag-grid-plus/locale.d.ts +413 -1
  60. package/dist/esm/ag-grid-plus/locale.js +15 -3
  61. package/dist/esm/ag-grid-plus/queryForm/index.d.ts +2 -0
  62. package/dist/esm/ag-grid-plus/queryForm/index.js +47 -52
  63. package/dist/esm/ag-grid-plus/queryForm/queryColumns.d.ts +8 -0
  64. package/dist/esm/ag-grid-plus/queryForm/queryColumns.js +46 -0
  65. package/dist/esm/ag-grid-plus/queryForm/schemaKey.d.ts +15 -8
  66. package/dist/esm/ag-grid-plus/queryForm/schemaKey.js +64 -12
  67. package/dist/esm/ag-grid-plus/setting/ColumnConfigForm.js +3 -0
  68. package/dist/esm/ag-grid-plus/setting/ColumnSetting.js +70 -107
  69. package/dist/esm/ag-grid-plus/setting/QuerySchemeManager.js +3 -1
  70. package/dist/esm/ag-grid-plus/setting/columnGroupTypes.d.ts +2 -0
  71. package/dist/esm/ag-grid-plus/setting/columnGroupUtils.d.ts +14 -0
  72. package/dist/esm/ag-grid-plus/setting/columnGroupUtils.js +95 -110
  73. package/dist/esm/ag-grid-plus/types.d.ts +6 -0
  74. package/dist/esm/array-table/batchRemove.d.ts +36 -0
  75. package/dist/esm/array-table/batchRemove.js +289 -0
  76. package/dist/esm/array-table/cellFocusScope.js +59 -8
  77. package/dist/esm/array-table/cellInteractionLock.d.ts +13 -0
  78. package/dist/esm/array-table/cellInteractionLock.js +21 -0
  79. package/dist/esm/array-table/hooks.d.ts +11 -6
  80. package/dist/esm/array-table/hooks.js +139 -89
  81. package/dist/esm/array-table/index.d.ts +8 -2
  82. package/dist/esm/array-table/index.js +55 -32
  83. package/dist/esm/array-table/indexColumn.d.ts +1 -1
  84. package/dist/esm/array-table/indexColumn.js +3 -2
  85. package/dist/esm/array-table/interface.d.ts +13 -1
  86. package/dist/esm/array-table/preview.js +8 -0
  87. package/dist/esm/array-table/readOnlyFormatters.d.ts +9 -1
  88. package/dist/esm/array-table/readOnlyFormatters.js +41 -12
  89. package/dist/esm/array-table/rowIdentity.d.ts +17 -0
  90. package/dist/esm/array-table/rowIdentity.js +37 -0
  91. package/dist/esm/array-table/sorting.d.ts +3 -0
  92. package/dist/esm/array-table/sorting.js +40 -0
  93. package/dist/esm/array-table/utils.js +147 -68
  94. package/dist/esm/dialogSelect/index.d.ts +3 -0
  95. package/dist/esm/dialogSelect/index.js +13 -3
  96. package/dist/esm/editable/index.js +102 -140
  97. package/dist/esm/index.d.ts +2 -2
  98. package/dist/esm/index.js +1 -1
  99. package/dist/esm/readPretty/arrayTable.js +30 -13
  100. package/dist/esm/readPretty/formily.d.ts +1 -0
  101. package/dist/esm/readPretty/formily.js +1 -0
  102. package/dist/esm/readPretty/index.d.ts +1 -0
  103. package/dist/esm/readPretty/index.js +1 -0
  104. package/dist/esm/readPretty/schemaScope.d.ts +2 -0
  105. package/dist/esm/readPretty/schemaScope.js +42 -0
  106. package/dist/esm/standardList/emptyState.js +9 -0
  107. package/dist/umd/qc-ui.min.js +1 -1
  108. package/package.json +3 -1
@@ -8,6 +8,20 @@ import type { FlatColumnItem, OldColumnState } from './columnGroupTypes';
8
8
  * 生成唯一 ID
9
9
  */
10
10
  export declare const generateId: () => string;
11
+ /** 方案与 AG-Grid 使用相同的列标识规则。@author nokecy */
12
+ export declare function getColumnIdentity(column: {
13
+ colId?: string;
14
+ field?: string;
15
+ }): string | undefined;
16
+ /** 递归匹配业务列;仅对缺失标识的已存方案使用唯一原始标题恢复。@author nokecy */
17
+ export declare function findOriginalColumn(item: {
18
+ colId?: string;
19
+ field?: string;
20
+ originalHeaderName?: string;
21
+ headerName?: string;
22
+ }, definitions?: (ColDef | ColGroupDef)[]): ColDef | undefined;
23
+ /** 为列方案补齐业务列身份,保留用户的顺序、标题与布局设置。@author nokecy */
24
+ export declare function normalizeColumnConfig(items: FlatColumnItem[], definitions?: (ColDef | ColGroupDef)[]): FlatColumnItem[];
11
25
  /**
12
26
  * 去掉只做查询条件的列(hideInTable),含分组内的
13
27
  * 这类列只进查询表单,不是表格列:列方案的还原、新增列检测都不能把它带进表格
@@ -25,6 +25,49 @@ export var generateId = function generateId() {
25
25
  return uniqueId('col_');
26
26
  };
27
27
 
28
+ /** 方案与 AG-Grid 使用相同的列标识规则。@author nokecy */
29
+ export function getColumnIdentity(column) {
30
+ return column.colId || column.field || undefined;
31
+ }
32
+
33
+ /** 递归匹配业务列;仅对缺失标识的已存方案使用唯一原始标题恢复。@author nokecy */
34
+ export function findOriginalColumn(item, definitions) {
35
+ var columns = [];
36
+ var collect = function collect(defs) {
37
+ return defs.forEach(function (def) {
38
+ if ('children' in def && def.children) collect(def.children);else columns.push(def);
39
+ });
40
+ };
41
+ collect(definitions !== null && definitions !== void 0 ? definitions : []);
42
+ if (item.colId) return columns.find(function (column) {
43
+ return getColumnIdentity(column) === item.colId;
44
+ });
45
+ var title = item.originalHeaderName || item.headerName;
46
+ var candidates = item.field ? columns.filter(function (column) {
47
+ return column.field === item.field;
48
+ }) : columns.filter(function (column) {
49
+ return !!getColumnIdentity(column) && !!title && column.headerName === title;
50
+ });
51
+ if (candidates.length === 1) return candidates[0];
52
+ var named = candidates.filter(function (column) {
53
+ return !!title && column.headerName === title;
54
+ });
55
+ return named.length === 1 ? named[0] : undefined;
56
+ }
57
+
58
+ /** 为列方案补齐业务列身份,保留用户的顺序、标题与布局设置。@author nokecy */
59
+ export function normalizeColumnConfig(items, definitions) {
60
+ return items.map(function (item) {
61
+ if (item.type !== 'column') return item;
62
+ var original = findOriginalColumn(item, definitions);
63
+ return original ? _objectSpread(_objectSpread({}, item), {}, {
64
+ colId: original.colId,
65
+ field: original.field,
66
+ originalHeaderName: original.headerName || item.originalHeaderName
67
+ }) : item;
68
+ });
69
+ }
70
+
28
71
  /**
29
72
  * 去掉只做查询条件的列(hideInTable),含分组内的
30
73
  * 这类列只进查询表单,不是表格列:列方案的还原、新增列检测都不能把它带进表格
@@ -49,12 +92,12 @@ export function dropQueryOnlyItems(flatConfig, originalColumnDefs) {
49
92
  var queryOnlyFields = new Set();
50
93
  var collect = function collect(defs) {
51
94
  return defs.forEach(function (def) {
52
- if ('children' in def && def.children) collect(def.children);else if (def.hideInTable && def.field) queryOnlyFields.add(def.field);
95
+ if ('children' in def && def.children) collect(def.children);else if (def.hideInTable && getColumnIdentity(def)) queryOnlyFields.add(getColumnIdentity(def));
53
96
  });
54
97
  };
55
98
  collect(originalColumnDefs !== null && originalColumnDefs !== void 0 ? originalColumnDefs : []);
56
99
  return flatConfig.filter(function (item) {
57
- return item.type !== 'column' || !item.field || !queryOnlyFields.has(item.field);
100
+ return item.type !== 'column' || !getColumnIdentity(item) || !queryOnlyFields.has(getColumnIdentity(item));
58
101
  });
59
102
  }
60
103
 
@@ -70,37 +113,6 @@ export function gridStateToFlatConfig(columnDefs, originalColumnDefs) {
70
113
  var result = [];
71
114
  var order = 0;
72
115
 
73
- /**
74
- * 从原始列定义中查找指定字段的原始 headerName
75
- */
76
- function findOriginalHeaderName(field, defs) {
77
- if (!defs || !field) return undefined;
78
- var _iterator = _createForOfIteratorHelper(defs),
79
- _step;
80
- try {
81
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
82
- var def = _step.value;
83
- // 检查是否是分组
84
- if ('children' in def && def.children) {
85
- // 递归查找分组内的列
86
- var found = findOriginalHeaderName(field, def.children);
87
- if (found) return found;
88
- } else {
89
- // 检查是否是目标列
90
- var colDef = def;
91
- if (colDef.field === field) {
92
- return colDef.headerName;
93
- }
94
- }
95
- }
96
- } catch (err) {
97
- _iterator.e(err);
98
- } finally {
99
- _iterator.f();
100
- }
101
- return undefined;
102
- }
103
-
104
116
  /**
105
117
  * 递归遍历列定义树
106
118
  */
@@ -125,10 +137,11 @@ export function gridStateToFlatConfig(columnDefs, originalColumnDefs) {
125
137
  // 递归处理子节点
126
138
  traverse(item.children, level + 1, groupId);
127
139
  } else {
140
+ var _findOriginalColumn;
128
141
  // 这是一个列节点
129
142
  var _headerName = item.headerName || item.field || '未命名列';
130
143
  // 从原始列定义中获取 originalHeaderName,如果没有则使用当前 headerName
131
- var originalHeaderName = item.field ? findOriginalHeaderName(item.field, originalColumnDefs) || _headerName : _headerName;
144
+ var originalHeaderName = ((_findOriginalColumn = findOriginalColumn(item, originalColumnDefs)) === null || _findOriginalColumn === void 0 ? void 0 : _findOriginalColumn.headerName) || _headerName;
132
145
  result.push({
133
146
  id: generateId(),
134
147
  type: 'column',
@@ -136,6 +149,7 @@ export function gridStateToFlatConfig(columnDefs, originalColumnDefs) {
136
149
  level: level,
137
150
  order: order++,
138
151
  field: item.field,
152
+ colId: item.colId,
139
153
  headerName: _headerName,
140
154
  originalHeaderName: originalHeaderName,
141
155
  // 从原始定义获取,或使用当前值
@@ -168,50 +182,19 @@ export function gridStateToFlatConfig(columnDefs, originalColumnDefs) {
168
182
  */
169
183
  export function flatConfigToGridState(flatConfig, originalColumnDefs) {
170
184
  // 只做查询条件的列不进表格:方案里存过的剔除,也不当新增列补回 @author nokecy
171
- flatConfig = dropQueryOnlyItems(flatConfig, originalColumnDefs);
185
+ flatConfig = dropQueryOnlyItems(normalizeColumnConfig(flatConfig, originalColumnDefs), originalColumnDefs);
172
186
  originalColumnDefs = excludeQueryOnlyColumns(originalColumnDefs);
173
187
 
174
- /**
175
- * 从原始列定义中查找指定字段的列定义(支持递归查找分组内的列)
176
- */
177
- function findOriginalColDef(field, defs) {
178
- if (!defs) return undefined;
179
- var _iterator2 = _createForOfIteratorHelper(defs),
180
- _step2;
181
- try {
182
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
183
- var def = _step2.value;
184
- // 检查是否是分组
185
- if ('children' in def && def.children) {
186
- // 递归查找分组内的列
187
- var found = findOriginalColDef(field, def.children);
188
- if (found) return found;
189
- } else {
190
- // 检查是否是目标列(使用类型守卫)
191
- var colDef = def;
192
- if (colDef.field === field) {
193
- return colDef;
194
- }
195
- }
196
- }
197
- } catch (err) {
198
- _iterator2.e(err);
199
- } finally {
200
- _iterator2.f();
201
- }
202
- return undefined;
203
- }
204
-
205
188
  /**
206
189
  * 递归收集所有列定义(包括分组内的列)
207
190
  */
208
191
  function collectAllColumns(defs) {
209
192
  var columns = [];
210
- var _iterator3 = _createForOfIteratorHelper(defs),
211
- _step3;
193
+ var _iterator = _createForOfIteratorHelper(defs),
194
+ _step;
212
195
  try {
213
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
214
- var def = _step3.value;
196
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
197
+ var def = _step.value;
215
198
  if ('children' in def && def.children) {
216
199
  columns.push.apply(columns, _toConsumableArray(collectAllColumns(def.children)));
217
200
  } else {
@@ -219,9 +202,9 @@ export function flatConfigToGridState(flatConfig, originalColumnDefs) {
219
202
  }
220
203
  }
221
204
  } catch (err) {
222
- _iterator3.e(err);
205
+ _iterator.e(err);
223
206
  } finally {
224
- _iterator3.f();
207
+ _iterator.f();
225
208
  }
226
209
  return columns;
227
210
  }
@@ -249,7 +232,7 @@ export function flatConfigToGridState(flatConfig, originalColumnDefs) {
249
232
  } else {
250
233
  // 构建列节点
251
234
  // 查找原始列定义
252
- var originalDef = item.field ? findOriginalColDef(item.field, originalColumnDefs) : undefined;
235
+ var originalDef = findOriginalColumn(item, originalColumnDefs);
253
236
 
254
237
  // 如果找到原始列定义,合并所有属性
255
238
  if (originalDef) {
@@ -269,6 +252,7 @@ export function flatConfigToGridState(flatConfig, originalColumnDefs) {
269
252
  // 如果没有找到原始定义,使用基本属性
270
253
  return {
271
254
  field: item.field,
255
+ colId: item.colId,
272
256
  headerName: item.headerName,
273
257
  width: item.width,
274
258
  hide: item.hide,
@@ -287,9 +271,9 @@ export function flatConfigToGridState(flatConfig, originalColumnDefs) {
287
271
  if (originalColumnDefs && originalColumnDefs.length > 0) {
288
272
  // 收集 flatConfig 中所有已存在的 field
289
273
  var existingFields = new Set(flatConfig.filter(function (item) {
290
- return item.type === 'column' && item.field;
274
+ return item.type === 'column' && getColumnIdentity(item);
291
275
  }).map(function (item) {
292
- return item.field;
276
+ return getColumnIdentity(item);
293
277
  }));
294
278
 
295
279
  // 收集原始列定义中所有的列(保留顺序索引)
@@ -298,7 +282,7 @@ export function flatConfigToGridState(flatConfig, originalColumnDefs) {
298
282
  // 找出新增的列及其在原始定义中的索引
299
283
  var newColumnsWithIndex = [];
300
284
  allOriginalColumns.forEach(function (col, index) {
301
- if (col.field && !existingFields.has(col.field)) {
285
+ if (getColumnIdentity(col) && !existingFields.has(getColumnIdentity(col))) {
302
286
  newColumnsWithIndex.push({
303
287
  col: col,
304
288
  originalIndex: index
@@ -313,23 +297,23 @@ export function flatConfigToGridState(flatConfig, originalColumnDefs) {
313
297
  });
314
298
 
315
299
  // 将新增列插入到正确位置(基于其在原始定义中的相对位置)
316
- var _iterator4 = _createForOfIteratorHelper(newColumnsWithIndex),
317
- _step4;
300
+ var _iterator2 = _createForOfIteratorHelper(newColumnsWithIndex),
301
+ _step2;
318
302
  try {
319
- for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
320
- var _step4$value = _step4.value,
321
- col = _step4$value.col,
322
- originalIndex = _step4$value.originalIndex;
303
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
304
+ var _step2$value = _step2.value,
305
+ col = _step2$value.col,
306
+ originalIndex = _step2$value.originalIndex;
323
307
  var insertIndex = 0; // 默认插入到开头
324
308
 
325
309
  // 从该列之前的列开始查找,找到第一个在 result 中存在的列
326
310
  var _loop = function _loop() {
327
311
  var prevCol = allOriginalColumns[i];
328
- if (!prevCol.field) return 0; // continue
312
+ if (!getColumnIdentity(prevCol)) return 0; // continue
329
313
 
330
314
  // 在 result 中找到这个前置列的位置
331
315
  var prevIndexInResult = result.findIndex(function (r) {
332
- return r.field === prevCol.field;
316
+ return getColumnIdentity(r) === getColumnIdentity(prevCol);
333
317
  });
334
318
  if (prevIndexInResult !== -1) {
335
319
  insertIndex = prevIndexInResult + 1;
@@ -347,9 +331,9 @@ export function flatConfigToGridState(flatConfig, originalColumnDefs) {
347
331
  result.splice(insertIndex, 0, col);
348
332
  }
349
333
  } catch (err) {
350
- _iterator4.e(err);
334
+ _iterator2.e(err);
351
335
  } finally {
352
- _iterator4.f();
336
+ _iterator2.f();
353
337
  }
354
338
  }
355
339
  }
@@ -394,6 +378,7 @@ export function migrateOldScheme(oldState) {
394
378
  level: col.groupName ? 1 : 0,
395
379
  order: order++,
396
380
  field: col.field,
381
+ colId: col.colId,
397
382
  headerName: col.headerName,
398
383
  width: col.width,
399
384
  hide: col.hide,
@@ -489,7 +474,7 @@ export function isOldSchemeData(data) {
489
474
  */
490
475
  export function flatConfigToColumnState(flatConfig, originalColumnDefs) {
491
476
  // 只做查询条件的列不进表格:方案里存过的剔除,也不当新增列补回 @author nokecy
492
- flatConfig = dropQueryOnlyItems(flatConfig, originalColumnDefs);
477
+ flatConfig = dropQueryOnlyItems(normalizeColumnConfig(flatConfig, originalColumnDefs), originalColumnDefs);
493
478
  originalColumnDefs = excludeQueryOnlyColumns(originalColumnDefs);
494
479
 
495
480
  /**
@@ -497,11 +482,11 @@ export function flatConfigToColumnState(flatConfig, originalColumnDefs) {
497
482
  */
498
483
  function collectAllColumns(defs) {
499
484
  var columns = [];
500
- var _iterator5 = _createForOfIteratorHelper(defs),
501
- _step5;
485
+ var _iterator3 = _createForOfIteratorHelper(defs),
486
+ _step3;
502
487
  try {
503
- for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
504
- var def = _step5.value;
488
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
489
+ var def = _step3.value;
505
490
  if ('children' in def && def.children) {
506
491
  columns.push.apply(columns, _toConsumableArray(collectAllColumns(def.children)));
507
492
  } else {
@@ -509,9 +494,9 @@ export function flatConfigToColumnState(flatConfig, originalColumnDefs) {
509
494
  }
510
495
  }
511
496
  } catch (err) {
512
- _iterator5.e(err);
497
+ _iterator3.e(err);
513
498
  } finally {
514
- _iterator5.f();
499
+ _iterator3.f();
515
500
  }
516
501
  return columns;
517
502
  }
@@ -519,14 +504,14 @@ export function flatConfigToColumnState(flatConfig, originalColumnDefs) {
519
504
  return item.type === 'column';
520
505
  }) // 只处理列节点,分组不在 columnState 中
521
506
  .filter(function (item) {
522
- return item.field;
523
- }) // 【修复】过滤掉没有 field 的列,防止 colId 为 undefined
507
+ return getColumnIdentity(item);
508
+ }) // 控件列可只有 colId。@author nokecy
524
509
  .sort(function (a, b) {
525
510
  return a.order - b.order;
526
511
  }) // 按 order 字段排序
527
512
  .map(function (item) {
528
513
  var state = {
529
- colId: item.field // 使用 field 作为 colId
514
+ colId: getColumnIdentity(item)
530
515
  };
531
516
 
532
517
  // 只设置有值的属性,undefined 表示不改变该属性
@@ -545,9 +530,9 @@ export function flatConfigToColumnState(flatConfig, originalColumnDefs) {
545
530
  if (originalColumnDefs && originalColumnDefs.length > 0) {
546
531
  // 收集 flatConfig 中所有已存在的 field
547
532
  var existingFields = new Set(flatConfig.filter(function (item) {
548
- return item.type === 'column' && item.field;
533
+ return item.type === 'column' && getColumnIdentity(item);
549
534
  }).map(function (item) {
550
- return item.field;
535
+ return getColumnIdentity(item);
551
536
  }));
552
537
 
553
538
  // 收集原始列定义中所有的列(保留顺序索引)
@@ -556,7 +541,7 @@ export function flatConfigToColumnState(flatConfig, originalColumnDefs) {
556
541
  // 找出新增的列及其在原始定义中的索引
557
542
  var newColumnsWithIndex = [];
558
543
  allOriginalColumns.forEach(function (col, index) {
559
- if (col.field && !existingFields.has(col.field)) {
544
+ if (getColumnIdentity(col) && !existingFields.has(getColumnIdentity(col))) {
560
545
  newColumnsWithIndex.push({
561
546
  col: col,
562
547
  originalIndex: index
@@ -571,23 +556,23 @@ export function flatConfigToColumnState(flatConfig, originalColumnDefs) {
571
556
  });
572
557
 
573
558
  // 将新增列插入到正确位置(基于其在原始定义中的相对位置)
574
- var _iterator6 = _createForOfIteratorHelper(newColumnsWithIndex),
575
- _step6;
559
+ var _iterator4 = _createForOfIteratorHelper(newColumnsWithIndex),
560
+ _step4;
576
561
  try {
577
- for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
578
- var _step6$value = _step6.value,
579
- col = _step6$value.col,
580
- originalIndex = _step6$value.originalIndex;
562
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
563
+ var _step4$value = _step4.value,
564
+ col = _step4$value.col,
565
+ originalIndex = _step4$value.originalIndex;
581
566
  var insertIndex = 0; // 默认插入到开头
582
567
 
583
568
  // 从该列之前的列开始查找,找到第一个在 result 中存在的列
584
569
  var _loop2 = function _loop2() {
585
570
  var prevCol = allOriginalColumns[i];
586
- if (!prevCol.field) return 0; // continue
571
+ if (!getColumnIdentity(prevCol)) return 0; // continue
587
572
 
588
573
  // 在 result 中找到这个前置列的位置
589
574
  var prevIndexInResult = result.findIndex(function (r) {
590
- return r.colId === prevCol.field;
575
+ return r.colId === getColumnIdentity(prevCol);
591
576
  });
592
577
  if (prevIndexInResult !== -1) {
593
578
  insertIndex = prevIndexInResult + 1;
@@ -603,14 +588,14 @@ export function flatConfigToColumnState(flatConfig, originalColumnDefs) {
603
588
 
604
589
  // 在 insertIndex 位置插入新列状态
605
590
  result.splice(insertIndex, 0, {
606
- colId: col.field
591
+ colId: getColumnIdentity(col)
607
592
  // 新增列使用默认状态,不设置 hide/width 等
608
593
  });
609
594
  }
610
595
  } catch (err) {
611
- _iterator6.e(err);
596
+ _iterator4.e(err);
612
597
  } finally {
613
- _iterator6.f();
598
+ _iterator4.f();
614
599
  }
615
600
  }
616
601
  }
@@ -128,6 +128,8 @@ export interface ExtendedColDef extends ColDef {
128
128
  hideInSearch?: boolean;
129
129
  /** 查询字段名 (不同于显示字段) */
130
130
  queryField?: string;
131
+ /** 查询区独立标题;优先于列方案中的表头名称。@author nokecy */
132
+ searchTitle?: string;
131
133
  /** 是否文本缩略显示并使用 tooltip */
132
134
  ellipsis?: boolean;
133
135
  /** 枚举值配置 */
@@ -142,6 +144,8 @@ export interface ExtendedColDef extends ColDef {
142
144
  searchComponent?: ReactNode | ((props: any) => JSX.Element);
143
145
  /** 搜索组件属性 */
144
146
  searchComponentProps?: any;
147
+ /** 查询组件的枚举数据源。@author nokecy */
148
+ enum?: any[];
145
149
  /** 搜索表单排序顺序 */
146
150
  searchSort?: number;
147
151
  /** 列计算类型 */
@@ -208,6 +212,8 @@ export interface QueryFormItem {
208
212
  field: string;
209
213
  /** 表头名称 */
210
214
  headerName: string;
215
+ /** 查询区独立标题。@author nokecy */
216
+ searchTitle?: string;
211
217
  /** 排序顺序 */
212
218
  order: number;
213
219
  /** 是否精确查询 */
@@ -0,0 +1,36 @@
1
+ import React from 'react';
2
+ import type { ArrayField } from '@formily/core';
3
+ import type { GridApi, IRowNode, SelectionChangedEvent } from 'ag-grid-community';
4
+ import type { ArrayTableProps, ObservableColumnSource } from './interface';
5
+ /** 标准删除控件在行内的字段路径与静态约束。@author nokecy */
6
+ export type RemovalAction = {
7
+ path: string[];
8
+ schemas: any[];
9
+ column: ObservableColumnSource;
10
+ };
11
+ /** 收集标准删除入口,保留列级显隐约束,不把其他业务按钮当成删除。@author nokecy */
12
+ export declare function collectRemovalActions(sources: ObservableColumnSource[]): RemovalAction[];
13
+ /**
14
+ * 与行内删除共用字段的运行时权限;未挂载的普通行采用静态规则。
15
+ * 含动态权限且尚未求值的行保持不可删除,避免绕过业务禁用条件。@author nokecy
16
+ */
17
+ export declare function findRemovalAction(field: ArrayField, index: number, actions: RemovalAction[]): RemovalAction | undefined;
18
+ /**
19
+ * 把选择时的稳定行标识转换为当前表单索引;确认前全部复核,倒序删除保持数组地址正确。
20
+ * 返回 false 表示所选行已删除或变为不可删除,整个批次不执行。@author nokecy
21
+ */
22
+ export declare function removeSelectedRows(field: ArrayField, ids: string[], actions: RemovalAction[], getId: (row: any) => string, onRemove?: (index: number) => void, event?: React.MouseEvent): boolean;
23
+ /** 公共明细表格的勾选及批量删除,沿用业务行权限、行标识与删除通知。@author nokecy */
24
+ export declare function useArrayTableBatchRemove(field: ArrayField, sources: ObservableColumnSource[], props: ArrayTableProps, apiRef: React.MutableRefObject<GridApi | undefined>, getId: (row: any) => string): {
25
+ rowSelection: "multiple" | "single" | import("ag-grid-community/dist/types/src/entities/gridOptions").SingleRowSelectionOptions<any, any> | import("ag-grid-community/dist/types/src/entities/gridOptions").MultiRowSelectionOptions<any, any> | {
26
+ isRowSelectable: (node: IRowNode) => boolean;
27
+ headerCheckbox?: boolean | undefined;
28
+ selectAll?: "filtered" | undefined;
29
+ mode: "singleRow" | "multiRow";
30
+ checkboxes: boolean;
31
+ enableClickSelection: boolean;
32
+ } | undefined;
33
+ selectionColumnDef: import("ag-grid-community").SelectionColumnDef | undefined;
34
+ onSelectionChanged: (event: SelectionChangedEvent) => void;
35
+ toolbar: React.JSX.Element;
36
+ };