@nokecy/qc-ui 1.0.86 → 1.0.87
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.
|
@@ -241,67 +241,48 @@ function AgGridPlus(props) {
|
|
|
241
241
|
};
|
|
242
242
|
}, []);
|
|
243
243
|
|
|
244
|
+
// 【修复】缓存第一次数据用于类型推断,避免 rowData 更新时重新计算 colDefs
|
|
245
|
+
// 原因: getTableColumns 只需要第一行数据来推断列的数据类型(数字列自动求和)
|
|
246
|
+
// 类型推断应该只在初始化时进行一次,后续数据更新不应改变列定义
|
|
247
|
+
var firstRowDataRef = (0, _react.useRef)(null);
|
|
248
|
+
(0, _react.useEffect)(function () {
|
|
249
|
+
// 只在首次有数据时保存
|
|
250
|
+
if (!firstRowDataRef.current && rowData.length > 0) {
|
|
251
|
+
firstRowDataRef.current = rowData[0];
|
|
252
|
+
console.log('[AgGridPlus] 保存首行数据用于类型推断:', firstRowDataRef.current);
|
|
253
|
+
}
|
|
254
|
+
}, [rowData]);
|
|
255
|
+
|
|
244
256
|
// 测试列数据
|
|
245
257
|
// const restData = [{"id":"47","field":"code","headerName":"编码","width":110,"hide":false,"cellClass":"custom-cell-left","suppressHeaderFilterButton":true,"colId":"code","pinned":null,"sort":null,"sortIndex":null,"aggFunc":null,"rowGroup":false,"rowGroupIndex":null,"pivot":false,"pivotIndex":null,"flex":null},{"id":"48","field":"name","headerName":"名称","width":110,"hide":false,"cellClass":"custom-cell-left","suppressHeaderFilterButton":true,"colId":"name","pinned":null,"sort":null,"sortIndex":null,"aggFunc":null,"rowGroup":false,"rowGroupIndex":null,"pivot":false,"pivotIndex":null,"flex":null},{"id":"49","field":"abbName","headerName":"简称","width":110,"hide":false,"cellClass":"custom-cell-left","suppressHeaderFilterButton":true,"colId":"abbName","pinned":null,"sort":null,"sortIndex":null,"aggFunc":null,"rowGroup":false,"rowGroupIndex":null,"pivot":false,"pivotIndex":null,"flex":null},{"id":"50","field":"address","headerName":"地址","width":662,"hide":false,"cellClass":"custom-cell-left","suppressHeaderFilterButton":true,"colId":"address","pinned":null,"sort":null,"sortIndex":null,"aggFunc":null,"rowGroup":false,"rowGroupIndex":null,"pivot":false,"pivotIndex":null,"flex":1},{"id":"51","field":"creator","headerName":"创建人","width":90,"hide":false,"cellClass":"custom-cell-left","suppressHeaderFilterButton":true,"colId":"creator","pinned":null,"sort":null,"sortIndex":null,"aggFunc":null,"rowGroup":false,"rowGroupIndex":null,"pivot":false,"pivotIndex":null,"flex":null},{"id":"52","field":"creationTime","headerName":"创建时间","width":160,"hide":false,"cellClass":"custom-cell-left","suppressHeaderFilterButton":true,"colId":"creationTime","pinned":null,"sort":null,"sortIndex":null,"aggFunc":null,"rowGroup":false,"rowGroupIndex":null,"pivot":false,"pivotIndex":null,"flex":null},{"id":"53","field":"lastModifier","headerName":"最后修改人","width":90,"hide":false,"cellClass":"custom-cell-left","suppressHeaderFilterButton":true,"colId":"lastModifier","pinned":null,"sort":null,"sortIndex":null,"aggFunc":null,"rowGroup":false,"rowGroupIndex":null,"pivot":false,"pivotIndex":null,"flex":null},{"id":"54","field":"lastModificationTime","headerName":"最后修改时间","width":160,"hide":false,"cellClass":"custom-cell-left","suppressHeaderFilterButton":true,"colId":"lastModificationTime","pinned":null,"sort":null,"sortIndex":null,"aggFunc":null,"rowGroup":false,"rowGroupIndex":null,"pivot":false,"pivotIndex":null,"flex":null},{"id":"55","field":"","headerName":"操作","width":160,"hide":false,"cellClass":"custom-cell-left","suppressHeaderFilterButton":true,"colId":"0","pinned":"right","sort":null,"sortIndex":null,"aggFunc":null,"rowGroup":false,"rowGroupIndex":null,"pivot":false,"pivotIndex":null,"flex":null}]
|
|
246
258
|
|
|
247
259
|
// 加载列方案
|
|
260
|
+
// 仅用于设置列样式,不改变列结构
|
|
261
|
+
// 列结构(包括分组)由 useEffect #2 通过 setGridOption("columnDefs") 处理
|
|
248
262
|
(0, _react.useEffect)(function () {
|
|
249
263
|
var _columnSchemeManager$;
|
|
250
264
|
if (!gridKey || !apiRef.current) return;
|
|
251
265
|
|
|
252
|
-
//
|
|
266
|
+
// 只有当有 columnConfig 时才设置列样式
|
|
253
267
|
if (columnSchemeManager !== null && columnSchemeManager !== void 0 && (_columnSchemeManager$ = columnSchemeManager.currentScheme) !== null && _columnSchemeManager$ !== void 0 && _columnSchemeManager$.columnConfig) {
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
268
|
+
var _require = require("./setting/columnGroupUtils"),
|
|
269
|
+
flatConfigToColumnState = _require.flatConfigToColumnState;
|
|
270
|
+
var _columnState = flatConfigToColumnState(columnSchemeManager.currentScheme.columnConfig);
|
|
271
|
+
console.log('[AgGridPlus] useEffect #1: 设置列样式', {
|
|
272
|
+
gridKey: gridKey,
|
|
273
|
+
schemeId: columnSchemeManager.currentScheme.id,
|
|
274
|
+
schemeName: columnSchemeManager.currentScheme.name,
|
|
275
|
+
columnCount: _columnState.length
|
|
257
276
|
});
|
|
277
|
+
setColumnCellClass(handelgridPlusColumnState(_columnState));
|
|
258
278
|
|
|
259
|
-
//
|
|
260
|
-
// 原因:
|
|
261
|
-
// applyColumnState
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
// 仍然需要设置列样式
|
|
266
|
-
var _require = require("./setting/columnGroupUtils"),
|
|
267
|
-
_flatConfigToColumnState = _require.flatConfigToColumnState;
|
|
268
|
-
var _columnState = _flatConfigToColumnState(columnSchemeManager.currentScheme.columnConfig);
|
|
269
|
-
setColumnCellClass(handelgridPlusColumnState(_columnState));
|
|
270
|
-
return;
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
// 没有分组时,使用 applyColumnState 应用列配置
|
|
274
|
-
var _require2 = require("./setting/columnGroupUtils"),
|
|
275
|
-
flatConfigToColumnState = _require2.flatConfigToColumnState;
|
|
276
|
-
var _columnState2 = flatConfigToColumnState(columnSchemeManager.currentScheme.columnConfig);
|
|
277
|
-
setColumnCellClass(handelgridPlusColumnState(_columnState2));
|
|
278
|
-
var timer = setTimeout(function () {
|
|
279
|
-
var _apiRef$current;
|
|
280
|
-
(_apiRef$current = apiRef.current) === null || _apiRef$current === void 0 || _apiRef$current.applyColumnState({
|
|
281
|
-
state: _columnState2,
|
|
282
|
-
applyOrder: true
|
|
283
|
-
});
|
|
284
|
-
}, 10);
|
|
285
|
-
return function () {
|
|
286
|
-
return clearTimeout(timer);
|
|
287
|
-
};
|
|
279
|
+
// 【重要】不再调用 applyColumnState
|
|
280
|
+
// 原因:
|
|
281
|
+
// 1. 如果有分组,applyColumnState 会破坏分组结构
|
|
282
|
+
// 2. 列顺序、宽度、隐藏等属性已由 useEffect #2 的 setGridOption("columnDefs") 应用
|
|
283
|
+
// 3. 这里只负责设置列样式(cellClass)
|
|
288
284
|
}
|
|
289
|
-
|
|
290
|
-
else if (gridPlusColumnState !== null && gridPlusColumnState !== void 0 && gridPlusColumnState[gridKey]) {
|
|
291
|
-
var currentState = gridPlusColumnState[gridKey];
|
|
292
|
-
setColumnCellClass(handelgridPlusColumnState(currentState));
|
|
293
|
-
var _timer = setTimeout(function () {
|
|
294
|
-
var _apiRef$current2;
|
|
295
|
-
(_apiRef$current2 = apiRef.current) === null || _apiRef$current2 === void 0 || _apiRef$current2.applyColumnState({
|
|
296
|
-
state: currentState,
|
|
297
|
-
applyOrder: true
|
|
298
|
-
});
|
|
299
|
-
}, 10);
|
|
300
|
-
return function () {
|
|
301
|
-
return clearTimeout(_timer);
|
|
302
|
-
};
|
|
303
|
-
}
|
|
304
|
-
}, [gridKey, columnSchemeManager === null || columnSchemeManager === void 0 || (_columnSchemeManager$2 = columnSchemeManager.currentScheme) === null || _columnSchemeManager$2 === void 0 ? void 0 : _columnSchemeManager$2.columnConfig, gridPlusColumnState]);
|
|
285
|
+
}, [gridKey, columnSchemeManager === null || columnSchemeManager === void 0 || (_columnSchemeManager$2 = columnSchemeManager.currentScheme) === null || _columnSchemeManager$2 === void 0 ? void 0 : _columnSchemeManager$2.columnConfig]);
|
|
305
286
|
|
|
306
287
|
// 同步 apiRef 和 currentScheme,确保方案在两者都准备好时应用
|
|
307
288
|
(0, _react.useEffect)(function () {
|
|
@@ -325,8 +306,8 @@ function AgGridPlus(props) {
|
|
|
325
306
|
var timer = setTimeout(function () {
|
|
326
307
|
// 优先使用 columnConfig(包含完整的分组结构)
|
|
327
308
|
if (currentScheme.columnConfig) {
|
|
328
|
-
var
|
|
329
|
-
flatConfigToGridState =
|
|
309
|
+
var _require2 = require("./setting/columnGroupUtils"),
|
|
310
|
+
flatConfigToGridState = _require2.flatConfigToGridState;
|
|
330
311
|
var gridColumnDefs = flatConfigToGridState(currentScheme.columnConfig);
|
|
331
312
|
console.log('[AgGridPlus] useEffect: 应用方案的 columnConfig:', {
|
|
332
313
|
columnConfig: currentScheme.columnConfig,
|
|
@@ -541,11 +522,22 @@ function AgGridPlus(props) {
|
|
|
541
522
|
};
|
|
542
523
|
|
|
543
524
|
// 计算所有列定义(包括隐藏的列)
|
|
525
|
+
// 【修复】移除 rowData 依赖,使用缓存的首行数据进行类型推断
|
|
544
526
|
var allColDefs = (0, _react.useMemo)(function () {
|
|
545
|
-
var
|
|
527
|
+
var dataForTypeInference = firstRowDataRef.current || (rowData.length > 0 ? rowData[0] : {});
|
|
528
|
+
var cols = getTableColumns([dataForTypeInference]);
|
|
546
529
|
allColDefsRef.current = cols; // 同步更新 ref
|
|
530
|
+
|
|
531
|
+
console.log('[AgGridPlus] allColDefs 重新计算:', {
|
|
532
|
+
childrenCount: _react.default.Children.count(children),
|
|
533
|
+
hasPropsColumnDefs: !!props.columnDefs,
|
|
534
|
+
extensibleColumnsCount: Object.keys(extensibleColumns || {}).length,
|
|
535
|
+
gridKey: gridKey,
|
|
536
|
+
colsCount: cols.length,
|
|
537
|
+
usingCachedData: !!firstRowDataRef.current
|
|
538
|
+
});
|
|
547
539
|
return cols;
|
|
548
|
-
}, [_react.default.Children.count(children), props.columnDefs, extensibleColumns,
|
|
540
|
+
}, [_react.default.Children.count(children), props.columnDefs, extensibleColumns, gridKey]);
|
|
549
541
|
|
|
550
542
|
// 稳定化 gridParams 和 sortColumn 的引用
|
|
551
543
|
var stableGridParams = (0, _react.useMemo)(function () {
|
|
@@ -600,7 +592,7 @@ function AgGridPlus(props) {
|
|
|
600
592
|
};
|
|
601
593
|
}, [propsRowSelection, enableClickSelection]);
|
|
602
594
|
var onGridReady = (0, _react.useCallback)(function (params) {
|
|
603
|
-
var _columnSchemeManager$3, _columnSchemeManager$4, _columnSchemeManager$5, _apiRef$
|
|
595
|
+
var _columnSchemeManager$3, _columnSchemeManager$4, _columnSchemeManager$5, _apiRef$current;
|
|
604
596
|
console.log('[AgGridPlus] onGridReady 被调用:', {
|
|
605
597
|
hasColumnSchemeManager: !!columnSchemeManager,
|
|
606
598
|
hasCurrentScheme: !!(columnSchemeManager !== null && columnSchemeManager !== void 0 && columnSchemeManager.currentScheme),
|
|
@@ -612,7 +604,7 @@ function AgGridPlus(props) {
|
|
|
612
604
|
onReady && onReady(params);
|
|
613
605
|
///@ts-ignore
|
|
614
606
|
dataSource && setRowData(dataSource);
|
|
615
|
-
setColumnState((_apiRef$
|
|
607
|
+
setColumnState((_apiRef$current = apiRef.current) === null || _apiRef$current === void 0 ? void 0 : _apiRef$current.getColumnState());
|
|
616
608
|
sortChanged(params.api);
|
|
617
609
|
setReady(true);
|
|
618
610
|
|
|
@@ -637,7 +629,7 @@ function AgGridPlus(props) {
|
|
|
637
629
|
sorter: getSort(stableSortColumn)
|
|
638
630
|
});
|
|
639
631
|
requestRef.current(params, undefined, queryFilter).then(function (response) {
|
|
640
|
-
var _apiRef$
|
|
632
|
+
var _apiRef$current2;
|
|
641
633
|
// 验证响应数据格式
|
|
642
634
|
if (!response || _typeof(response) !== 'object') {
|
|
643
635
|
throw new _errors.GridPlusError('服务器返回数据格式错误', _errors.ErrorType.DATA_FORMAT_ERROR, _errors.ErrorSeverity.HIGH, {
|
|
@@ -653,7 +645,7 @@ function AgGridPlus(props) {
|
|
|
653
645
|
var rowCount = response.total;
|
|
654
646
|
setRowData(rowData);
|
|
655
647
|
// 刷新所有单元格
|
|
656
|
-
(_apiRef$
|
|
648
|
+
(_apiRef$current2 = apiRef.current) === null || _apiRef$current2 === void 0 || _apiRef$current2.refreshCells({
|
|
657
649
|
force: true
|
|
658
650
|
});
|
|
659
651
|
setPagination(function (prev) {
|
|
@@ -927,8 +919,8 @@ function AgGridPlus(props) {
|
|
|
927
919
|
});
|
|
928
920
|
}
|
|
929
921
|
if (!allColDefs || displayedData.length === 0) {
|
|
930
|
-
var _apiRef$
|
|
931
|
-
(_apiRef$
|
|
922
|
+
var _apiRef$current3;
|
|
923
|
+
(_apiRef$current3 = apiRef.current) === null || _apiRef$current3 === void 0 || _apiRef$current3.setGridOption('pinnedBottomRowData', undefined);
|
|
932
924
|
return;
|
|
933
925
|
}
|
|
934
926
|
var calcColFields = allColDefs.filter(function (col) {
|
|
@@ -942,16 +934,19 @@ function AgGridPlus(props) {
|
|
|
942
934
|
};
|
|
943
935
|
});
|
|
944
936
|
if (calcColFields.length > 0) {
|
|
945
|
-
var _apiRef$
|
|
937
|
+
var _apiRef$current4;
|
|
946
938
|
var calculatedValues = calculatefun(calcColFields, displayedData);
|
|
947
|
-
(_apiRef$
|
|
939
|
+
(_apiRef$current4 = apiRef.current) === null || _apiRef$current4 === void 0 || _apiRef$current4.setGridOption('pinnedBottomRowData', calculatedValues);
|
|
948
940
|
}
|
|
949
941
|
}, [allColDefs, calculatefun]);
|
|
950
942
|
var onFilterChanged = function onFilterChanged(event) {
|
|
951
943
|
calculateSum();
|
|
952
944
|
};
|
|
953
945
|
var colDefs = (0, _react.useMemo)(function () {
|
|
954
|
-
|
|
946
|
+
// 使用缓存的首行数据进行类型推断,而不是当前的 rowData
|
|
947
|
+
// 这样 rowData 更新时不会触发 colDefs 重新计算
|
|
948
|
+
var dataForTypeInference = firstRowDataRef.current || (rowData.length > 0 ? rowData[0] : {});
|
|
949
|
+
var columnDefs = getTableColumns([dataForTypeInference]);
|
|
955
950
|
|
|
956
951
|
// 递归应用 columnCellClass 配置
|
|
957
952
|
var applyCellConfig = function applyCellConfig(col) {
|
|
@@ -983,8 +978,16 @@ function AgGridPlus(props) {
|
|
|
983
978
|
return !x.hideInTable;
|
|
984
979
|
});
|
|
985
980
|
var processedColumns = (0, _processColumnGroups.default)(columnDefs);
|
|
981
|
+
console.log('[AgGridPlus] colDefs 重新计算:', {
|
|
982
|
+
childrenCount: _react.default.Children.count(children),
|
|
983
|
+
hasPropsColumnDefs: !!props.columnDefs,
|
|
984
|
+
extensibleColumnsCount: Object.keys(extensibleColumns || {}).length,
|
|
985
|
+
columnCellClassCount: Object.keys(columnCellClass).length,
|
|
986
|
+
processedColumnsCount: processedColumns.length,
|
|
987
|
+
usingCachedData: !!firstRowDataRef.current
|
|
988
|
+
});
|
|
986
989
|
return processedColumns;
|
|
987
|
-
}, [_react.default.Children.count(children), props.columnDefs, extensibleColumns, columnCellClass
|
|
990
|
+
}, [_react.default.Children.count(children), props.columnDefs, extensibleColumns, columnCellClass]);
|
|
988
991
|
|
|
989
992
|
// 构建查询表单项(带 order 属性)
|
|
990
993
|
var queryFormItems = (0, _react.useMemo)(function () {
|
|
@@ -1141,9 +1144,9 @@ function AgGridPlus(props) {
|
|
|
1141
1144
|
rowSelection: rowSelectionConfig,
|
|
1142
1145
|
onDragStopped: function onDragStopped(e) {
|
|
1143
1146
|
if (apiRef.current) {
|
|
1144
|
-
var _apiRef$
|
|
1145
|
-
var
|
|
1146
|
-
setColumnState(
|
|
1147
|
+
var _apiRef$current5;
|
|
1148
|
+
var _columnState2 = (_apiRef$current5 = apiRef.current) === null || _apiRef$current5 === void 0 ? void 0 : _apiRef$current5.getColumnState();
|
|
1149
|
+
setColumnState(_columnState2);
|
|
1147
1150
|
|
|
1148
1151
|
// onColumnStateChanged && onColumnStateChanged(columnState)
|
|
1149
1152
|
}
|
|
@@ -249,12 +249,12 @@ var ColumnSetting = function ColumnSetting(_ref) {
|
|
|
249
249
|
|
|
250
250
|
// 等待 Grid 状态更新完成后再保存到方案
|
|
251
251
|
setTimeout( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
|
|
252
|
-
var updatedState, filterModel, defaultScheme, newScheme;
|
|
252
|
+
var updatedState, filterModel, defaultScheme, _newScheme$columnConf, newScheme;
|
|
253
253
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
254
254
|
while (1) switch (_context.prev = _context.next) {
|
|
255
255
|
case 0:
|
|
256
256
|
if (!(schemeManager && gridKey)) {
|
|
257
|
-
_context.next =
|
|
257
|
+
_context.next = 29;
|
|
258
258
|
break;
|
|
259
259
|
}
|
|
260
260
|
_context.prev = 1;
|
|
@@ -287,7 +287,7 @@ var ColumnSetting = function ColumnSetting(_ref) {
|
|
|
287
287
|
filterModel: filterModel
|
|
288
288
|
});
|
|
289
289
|
case 8:
|
|
290
|
-
_context.next =
|
|
290
|
+
_context.next = 24;
|
|
291
291
|
break;
|
|
292
292
|
case 10:
|
|
293
293
|
// 如果没有激活的方案,查找或创建"默认配置"方案
|
|
@@ -308,7 +308,7 @@ var ColumnSetting = function ColumnSetting(_ref) {
|
|
|
308
308
|
filterModel: filterModel
|
|
309
309
|
});
|
|
310
310
|
case 16:
|
|
311
|
-
_context.next =
|
|
311
|
+
_context.next = 24;
|
|
312
312
|
break;
|
|
313
313
|
case 18:
|
|
314
314
|
_context.next = 20;
|
|
@@ -321,20 +321,29 @@ var ColumnSetting = function ColumnSetting(_ref) {
|
|
|
321
321
|
});
|
|
322
322
|
case 20:
|
|
323
323
|
newScheme = _context.sent;
|
|
324
|
-
|
|
324
|
+
console.log('[ColumnSetting] 创建默认方案成功,准备应用:', {
|
|
325
|
+
schemeId: newScheme.id,
|
|
326
|
+
schemeName: newScheme.name,
|
|
327
|
+
hasColumnConfig: !!newScheme.columnConfig,
|
|
328
|
+
columnConfigLength: ((_newScheme$columnConf = newScheme.columnConfig) === null || _newScheme$columnConf === void 0 ? void 0 : _newScheme$columnConf.length) || 0
|
|
329
|
+
});
|
|
330
|
+
|
|
331
|
+
// 【修复】直接加载方案,确保立即应用
|
|
332
|
+
// loadScheme 会设置 currentScheme 并触发 onSchemeChange
|
|
333
|
+
_context.next = 24;
|
|
325
334
|
return schemeManager.loadScheme(newScheme.id);
|
|
326
|
-
case
|
|
327
|
-
_context.next =
|
|
335
|
+
case 24:
|
|
336
|
+
_context.next = 29;
|
|
328
337
|
break;
|
|
329
|
-
case
|
|
330
|
-
_context.prev =
|
|
338
|
+
case 26:
|
|
339
|
+
_context.prev = 26;
|
|
331
340
|
_context.t0 = _context["catch"](1);
|
|
332
341
|
console.error('[ColumnSetting] 保存列配置到方案失败:', _context.t0);
|
|
333
|
-
case
|
|
342
|
+
case 29:
|
|
334
343
|
case "end":
|
|
335
344
|
return _context.stop();
|
|
336
345
|
}
|
|
337
|
-
}, _callee, null, [[1,
|
|
346
|
+
}, _callee, null, [[1, 26]]);
|
|
338
347
|
})), 50);
|
|
339
348
|
|
|
340
349
|
// 保存成功后清除备份
|
|
@@ -234,67 +234,48 @@ function AgGridPlus(props) {
|
|
|
234
234
|
};
|
|
235
235
|
}, []);
|
|
236
236
|
|
|
237
|
+
// 【修复】缓存第一次数据用于类型推断,避免 rowData 更新时重新计算 colDefs
|
|
238
|
+
// 原因: getTableColumns 只需要第一行数据来推断列的数据类型(数字列自动求和)
|
|
239
|
+
// 类型推断应该只在初始化时进行一次,后续数据更新不应改变列定义
|
|
240
|
+
var firstRowDataRef = useRef(null);
|
|
241
|
+
useEffect(function () {
|
|
242
|
+
// 只在首次有数据时保存
|
|
243
|
+
if (!firstRowDataRef.current && rowData.length > 0) {
|
|
244
|
+
firstRowDataRef.current = rowData[0];
|
|
245
|
+
console.log('[AgGridPlus] 保存首行数据用于类型推断:', firstRowDataRef.current);
|
|
246
|
+
}
|
|
247
|
+
}, [rowData]);
|
|
248
|
+
|
|
237
249
|
// 测试列数据
|
|
238
250
|
// const restData = [{"id":"47","field":"code","headerName":"编码","width":110,"hide":false,"cellClass":"custom-cell-left","suppressHeaderFilterButton":true,"colId":"code","pinned":null,"sort":null,"sortIndex":null,"aggFunc":null,"rowGroup":false,"rowGroupIndex":null,"pivot":false,"pivotIndex":null,"flex":null},{"id":"48","field":"name","headerName":"名称","width":110,"hide":false,"cellClass":"custom-cell-left","suppressHeaderFilterButton":true,"colId":"name","pinned":null,"sort":null,"sortIndex":null,"aggFunc":null,"rowGroup":false,"rowGroupIndex":null,"pivot":false,"pivotIndex":null,"flex":null},{"id":"49","field":"abbName","headerName":"简称","width":110,"hide":false,"cellClass":"custom-cell-left","suppressHeaderFilterButton":true,"colId":"abbName","pinned":null,"sort":null,"sortIndex":null,"aggFunc":null,"rowGroup":false,"rowGroupIndex":null,"pivot":false,"pivotIndex":null,"flex":null},{"id":"50","field":"address","headerName":"地址","width":662,"hide":false,"cellClass":"custom-cell-left","suppressHeaderFilterButton":true,"colId":"address","pinned":null,"sort":null,"sortIndex":null,"aggFunc":null,"rowGroup":false,"rowGroupIndex":null,"pivot":false,"pivotIndex":null,"flex":1},{"id":"51","field":"creator","headerName":"创建人","width":90,"hide":false,"cellClass":"custom-cell-left","suppressHeaderFilterButton":true,"colId":"creator","pinned":null,"sort":null,"sortIndex":null,"aggFunc":null,"rowGroup":false,"rowGroupIndex":null,"pivot":false,"pivotIndex":null,"flex":null},{"id":"52","field":"creationTime","headerName":"创建时间","width":160,"hide":false,"cellClass":"custom-cell-left","suppressHeaderFilterButton":true,"colId":"creationTime","pinned":null,"sort":null,"sortIndex":null,"aggFunc":null,"rowGroup":false,"rowGroupIndex":null,"pivot":false,"pivotIndex":null,"flex":null},{"id":"53","field":"lastModifier","headerName":"最后修改人","width":90,"hide":false,"cellClass":"custom-cell-left","suppressHeaderFilterButton":true,"colId":"lastModifier","pinned":null,"sort":null,"sortIndex":null,"aggFunc":null,"rowGroup":false,"rowGroupIndex":null,"pivot":false,"pivotIndex":null,"flex":null},{"id":"54","field":"lastModificationTime","headerName":"最后修改时间","width":160,"hide":false,"cellClass":"custom-cell-left","suppressHeaderFilterButton":true,"colId":"lastModificationTime","pinned":null,"sort":null,"sortIndex":null,"aggFunc":null,"rowGroup":false,"rowGroupIndex":null,"pivot":false,"pivotIndex":null,"flex":null},{"id":"55","field":"","headerName":"操作","width":160,"hide":false,"cellClass":"custom-cell-left","suppressHeaderFilterButton":true,"colId":"0","pinned":"right","sort":null,"sortIndex":null,"aggFunc":null,"rowGroup":false,"rowGroupIndex":null,"pivot":false,"pivotIndex":null,"flex":null}]
|
|
239
251
|
|
|
240
252
|
// 加载列方案
|
|
253
|
+
// 仅用于设置列样式,不改变列结构
|
|
254
|
+
// 列结构(包括分组)由 useEffect #2 通过 setGridOption("columnDefs") 处理
|
|
241
255
|
useEffect(function () {
|
|
242
256
|
var _columnSchemeManager$;
|
|
243
257
|
if (!gridKey || !apiRef.current) return;
|
|
244
258
|
|
|
245
|
-
//
|
|
259
|
+
// 只有当有 columnConfig 时才设置列样式
|
|
246
260
|
if (columnSchemeManager !== null && columnSchemeManager !== void 0 && (_columnSchemeManager$ = columnSchemeManager.currentScheme) !== null && _columnSchemeManager$ !== void 0 && _columnSchemeManager$.columnConfig) {
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
261
|
+
var _require = require("./setting/columnGroupUtils"),
|
|
262
|
+
flatConfigToColumnState = _require.flatConfigToColumnState;
|
|
263
|
+
var _columnState = flatConfigToColumnState(columnSchemeManager.currentScheme.columnConfig);
|
|
264
|
+
console.log('[AgGridPlus] useEffect #1: 设置列样式', {
|
|
265
|
+
gridKey: gridKey,
|
|
266
|
+
schemeId: columnSchemeManager.currentScheme.id,
|
|
267
|
+
schemeName: columnSchemeManager.currentScheme.name,
|
|
268
|
+
columnCount: _columnState.length
|
|
250
269
|
});
|
|
270
|
+
setColumnCellClass(handelgridPlusColumnState(_columnState));
|
|
251
271
|
|
|
252
|
-
//
|
|
253
|
-
// 原因:
|
|
254
|
-
// applyColumnState
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
// 仍然需要设置列样式
|
|
259
|
-
var _require = require("./setting/columnGroupUtils"),
|
|
260
|
-
_flatConfigToColumnState = _require.flatConfigToColumnState;
|
|
261
|
-
var _columnState = _flatConfigToColumnState(columnSchemeManager.currentScheme.columnConfig);
|
|
262
|
-
setColumnCellClass(handelgridPlusColumnState(_columnState));
|
|
263
|
-
return;
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
// 没有分组时,使用 applyColumnState 应用列配置
|
|
267
|
-
var _require2 = require("./setting/columnGroupUtils"),
|
|
268
|
-
flatConfigToColumnState = _require2.flatConfigToColumnState;
|
|
269
|
-
var _columnState2 = flatConfigToColumnState(columnSchemeManager.currentScheme.columnConfig);
|
|
270
|
-
setColumnCellClass(handelgridPlusColumnState(_columnState2));
|
|
271
|
-
var timer = setTimeout(function () {
|
|
272
|
-
var _apiRef$current;
|
|
273
|
-
(_apiRef$current = apiRef.current) === null || _apiRef$current === void 0 || _apiRef$current.applyColumnState({
|
|
274
|
-
state: _columnState2,
|
|
275
|
-
applyOrder: true
|
|
276
|
-
});
|
|
277
|
-
}, 10);
|
|
278
|
-
return function () {
|
|
279
|
-
return clearTimeout(timer);
|
|
280
|
-
};
|
|
272
|
+
// 【重要】不再调用 applyColumnState
|
|
273
|
+
// 原因:
|
|
274
|
+
// 1. 如果有分组,applyColumnState 会破坏分组结构
|
|
275
|
+
// 2. 列顺序、宽度、隐藏等属性已由 useEffect #2 的 setGridOption("columnDefs") 应用
|
|
276
|
+
// 3. 这里只负责设置列样式(cellClass)
|
|
281
277
|
}
|
|
282
|
-
|
|
283
|
-
else if (gridPlusColumnState !== null && gridPlusColumnState !== void 0 && gridPlusColumnState[gridKey]) {
|
|
284
|
-
var currentState = gridPlusColumnState[gridKey];
|
|
285
|
-
setColumnCellClass(handelgridPlusColumnState(currentState));
|
|
286
|
-
var _timer = setTimeout(function () {
|
|
287
|
-
var _apiRef$current2;
|
|
288
|
-
(_apiRef$current2 = apiRef.current) === null || _apiRef$current2 === void 0 || _apiRef$current2.applyColumnState({
|
|
289
|
-
state: currentState,
|
|
290
|
-
applyOrder: true
|
|
291
|
-
});
|
|
292
|
-
}, 10);
|
|
293
|
-
return function () {
|
|
294
|
-
return clearTimeout(_timer);
|
|
295
|
-
};
|
|
296
|
-
}
|
|
297
|
-
}, [gridKey, columnSchemeManager === null || columnSchemeManager === void 0 || (_columnSchemeManager$2 = columnSchemeManager.currentScheme) === null || _columnSchemeManager$2 === void 0 ? void 0 : _columnSchemeManager$2.columnConfig, gridPlusColumnState]);
|
|
278
|
+
}, [gridKey, columnSchemeManager === null || columnSchemeManager === void 0 || (_columnSchemeManager$2 = columnSchemeManager.currentScheme) === null || _columnSchemeManager$2 === void 0 ? void 0 : _columnSchemeManager$2.columnConfig]);
|
|
298
279
|
|
|
299
280
|
// 同步 apiRef 和 currentScheme,确保方案在两者都准备好时应用
|
|
300
281
|
useEffect(function () {
|
|
@@ -318,8 +299,8 @@ function AgGridPlus(props) {
|
|
|
318
299
|
var timer = setTimeout(function () {
|
|
319
300
|
// 优先使用 columnConfig(包含完整的分组结构)
|
|
320
301
|
if (currentScheme.columnConfig) {
|
|
321
|
-
var
|
|
322
|
-
flatConfigToGridState =
|
|
302
|
+
var _require2 = require("./setting/columnGroupUtils"),
|
|
303
|
+
flatConfigToGridState = _require2.flatConfigToGridState;
|
|
323
304
|
var gridColumnDefs = flatConfigToGridState(currentScheme.columnConfig);
|
|
324
305
|
console.log('[AgGridPlus] useEffect: 应用方案的 columnConfig:', {
|
|
325
306
|
columnConfig: currentScheme.columnConfig,
|
|
@@ -534,11 +515,22 @@ function AgGridPlus(props) {
|
|
|
534
515
|
};
|
|
535
516
|
|
|
536
517
|
// 计算所有列定义(包括隐藏的列)
|
|
518
|
+
// 【修复】移除 rowData 依赖,使用缓存的首行数据进行类型推断
|
|
537
519
|
var allColDefs = useMemo(function () {
|
|
538
|
-
var
|
|
520
|
+
var dataForTypeInference = firstRowDataRef.current || (rowData.length > 0 ? rowData[0] : {});
|
|
521
|
+
var cols = getTableColumns([dataForTypeInference]);
|
|
539
522
|
allColDefsRef.current = cols; // 同步更新 ref
|
|
523
|
+
|
|
524
|
+
console.log('[AgGridPlus] allColDefs 重新计算:', {
|
|
525
|
+
childrenCount: React.Children.count(children),
|
|
526
|
+
hasPropsColumnDefs: !!props.columnDefs,
|
|
527
|
+
extensibleColumnsCount: Object.keys(extensibleColumns || {}).length,
|
|
528
|
+
gridKey: gridKey,
|
|
529
|
+
colsCount: cols.length,
|
|
530
|
+
usingCachedData: !!firstRowDataRef.current
|
|
531
|
+
});
|
|
540
532
|
return cols;
|
|
541
|
-
}, [React.Children.count(children), props.columnDefs, extensibleColumns,
|
|
533
|
+
}, [React.Children.count(children), props.columnDefs, extensibleColumns, gridKey]);
|
|
542
534
|
|
|
543
535
|
// 稳定化 gridParams 和 sortColumn 的引用
|
|
544
536
|
var stableGridParams = useMemo(function () {
|
|
@@ -593,7 +585,7 @@ function AgGridPlus(props) {
|
|
|
593
585
|
};
|
|
594
586
|
}, [propsRowSelection, enableClickSelection]);
|
|
595
587
|
var onGridReady = useCallback(function (params) {
|
|
596
|
-
var _columnSchemeManager$3, _columnSchemeManager$4, _columnSchemeManager$5, _apiRef$
|
|
588
|
+
var _columnSchemeManager$3, _columnSchemeManager$4, _columnSchemeManager$5, _apiRef$current;
|
|
597
589
|
console.log('[AgGridPlus] onGridReady 被调用:', {
|
|
598
590
|
hasColumnSchemeManager: !!columnSchemeManager,
|
|
599
591
|
hasCurrentScheme: !!(columnSchemeManager !== null && columnSchemeManager !== void 0 && columnSchemeManager.currentScheme),
|
|
@@ -605,7 +597,7 @@ function AgGridPlus(props) {
|
|
|
605
597
|
onReady && onReady(params);
|
|
606
598
|
///@ts-ignore
|
|
607
599
|
dataSource && setRowData(dataSource);
|
|
608
|
-
setColumnState((_apiRef$
|
|
600
|
+
setColumnState((_apiRef$current = apiRef.current) === null || _apiRef$current === void 0 ? void 0 : _apiRef$current.getColumnState());
|
|
609
601
|
sortChanged(params.api);
|
|
610
602
|
setReady(true);
|
|
611
603
|
|
|
@@ -630,7 +622,7 @@ function AgGridPlus(props) {
|
|
|
630
622
|
sorter: getSort(stableSortColumn)
|
|
631
623
|
});
|
|
632
624
|
requestRef.current(params, undefined, queryFilter).then(function (response) {
|
|
633
|
-
var _apiRef$
|
|
625
|
+
var _apiRef$current2;
|
|
634
626
|
// 验证响应数据格式
|
|
635
627
|
if (!response || _typeof(response) !== 'object') {
|
|
636
628
|
throw new GridPlusError('服务器返回数据格式错误', ErrorType.DATA_FORMAT_ERROR, ErrorSeverity.HIGH, {
|
|
@@ -646,7 +638,7 @@ function AgGridPlus(props) {
|
|
|
646
638
|
var rowCount = response.total;
|
|
647
639
|
setRowData(rowData);
|
|
648
640
|
// 刷新所有单元格
|
|
649
|
-
(_apiRef$
|
|
641
|
+
(_apiRef$current2 = apiRef.current) === null || _apiRef$current2 === void 0 || _apiRef$current2.refreshCells({
|
|
650
642
|
force: true
|
|
651
643
|
});
|
|
652
644
|
setPagination(function (prev) {
|
|
@@ -920,8 +912,8 @@ function AgGridPlus(props) {
|
|
|
920
912
|
});
|
|
921
913
|
}
|
|
922
914
|
if (!allColDefs || displayedData.length === 0) {
|
|
923
|
-
var _apiRef$
|
|
924
|
-
(_apiRef$
|
|
915
|
+
var _apiRef$current3;
|
|
916
|
+
(_apiRef$current3 = apiRef.current) === null || _apiRef$current3 === void 0 || _apiRef$current3.setGridOption('pinnedBottomRowData', undefined);
|
|
925
917
|
return;
|
|
926
918
|
}
|
|
927
919
|
var calcColFields = allColDefs.filter(function (col) {
|
|
@@ -935,16 +927,19 @@ function AgGridPlus(props) {
|
|
|
935
927
|
};
|
|
936
928
|
});
|
|
937
929
|
if (calcColFields.length > 0) {
|
|
938
|
-
var _apiRef$
|
|
930
|
+
var _apiRef$current4;
|
|
939
931
|
var calculatedValues = calculatefun(calcColFields, displayedData);
|
|
940
|
-
(_apiRef$
|
|
932
|
+
(_apiRef$current4 = apiRef.current) === null || _apiRef$current4 === void 0 || _apiRef$current4.setGridOption('pinnedBottomRowData', calculatedValues);
|
|
941
933
|
}
|
|
942
934
|
}, [allColDefs, calculatefun]);
|
|
943
935
|
var onFilterChanged = function onFilterChanged(event) {
|
|
944
936
|
calculateSum();
|
|
945
937
|
};
|
|
946
938
|
var colDefs = useMemo(function () {
|
|
947
|
-
|
|
939
|
+
// 使用缓存的首行数据进行类型推断,而不是当前的 rowData
|
|
940
|
+
// 这样 rowData 更新时不会触发 colDefs 重新计算
|
|
941
|
+
var dataForTypeInference = firstRowDataRef.current || (rowData.length > 0 ? rowData[0] : {});
|
|
942
|
+
var columnDefs = getTableColumns([dataForTypeInference]);
|
|
948
943
|
|
|
949
944
|
// 递归应用 columnCellClass 配置
|
|
950
945
|
var applyCellConfig = function applyCellConfig(col) {
|
|
@@ -976,8 +971,16 @@ function AgGridPlus(props) {
|
|
|
976
971
|
return !x.hideInTable;
|
|
977
972
|
});
|
|
978
973
|
var processedColumns = processColumnGroups(columnDefs);
|
|
974
|
+
console.log('[AgGridPlus] colDefs 重新计算:', {
|
|
975
|
+
childrenCount: React.Children.count(children),
|
|
976
|
+
hasPropsColumnDefs: !!props.columnDefs,
|
|
977
|
+
extensibleColumnsCount: Object.keys(extensibleColumns || {}).length,
|
|
978
|
+
columnCellClassCount: Object.keys(columnCellClass).length,
|
|
979
|
+
processedColumnsCount: processedColumns.length,
|
|
980
|
+
usingCachedData: !!firstRowDataRef.current
|
|
981
|
+
});
|
|
979
982
|
return processedColumns;
|
|
980
|
-
}, [React.Children.count(children), props.columnDefs, extensibleColumns, columnCellClass
|
|
983
|
+
}, [React.Children.count(children), props.columnDefs, extensibleColumns, columnCellClass]);
|
|
981
984
|
|
|
982
985
|
// 构建查询表单项(带 order 属性)
|
|
983
986
|
var queryFormItems = useMemo(function () {
|
|
@@ -1134,9 +1137,9 @@ function AgGridPlus(props) {
|
|
|
1134
1137
|
rowSelection: rowSelectionConfig,
|
|
1135
1138
|
onDragStopped: function onDragStopped(e) {
|
|
1136
1139
|
if (apiRef.current) {
|
|
1137
|
-
var _apiRef$
|
|
1138
|
-
var
|
|
1139
|
-
setColumnState(
|
|
1140
|
+
var _apiRef$current5;
|
|
1141
|
+
var _columnState2 = (_apiRef$current5 = apiRef.current) === null || _apiRef$current5 === void 0 ? void 0 : _apiRef$current5.getColumnState();
|
|
1142
|
+
setColumnState(_columnState2);
|
|
1140
1143
|
|
|
1141
1144
|
// onColumnStateChanged && onColumnStateChanged(columnState)
|
|
1142
1145
|
}
|
|
@@ -240,12 +240,12 @@ var ColumnSetting = function ColumnSetting(_ref) {
|
|
|
240
240
|
|
|
241
241
|
// 等待 Grid 状态更新完成后再保存到方案
|
|
242
242
|
setTimeout( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
|
|
243
|
-
var updatedState, filterModel, defaultScheme, newScheme;
|
|
243
|
+
var updatedState, filterModel, defaultScheme, _newScheme$columnConf, newScheme;
|
|
244
244
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
245
245
|
while (1) switch (_context.prev = _context.next) {
|
|
246
246
|
case 0:
|
|
247
247
|
if (!(schemeManager && gridKey)) {
|
|
248
|
-
_context.next =
|
|
248
|
+
_context.next = 29;
|
|
249
249
|
break;
|
|
250
250
|
}
|
|
251
251
|
_context.prev = 1;
|
|
@@ -278,7 +278,7 @@ var ColumnSetting = function ColumnSetting(_ref) {
|
|
|
278
278
|
filterModel: filterModel
|
|
279
279
|
});
|
|
280
280
|
case 8:
|
|
281
|
-
_context.next =
|
|
281
|
+
_context.next = 24;
|
|
282
282
|
break;
|
|
283
283
|
case 10:
|
|
284
284
|
// 如果没有激活的方案,查找或创建"默认配置"方案
|
|
@@ -299,7 +299,7 @@ var ColumnSetting = function ColumnSetting(_ref) {
|
|
|
299
299
|
filterModel: filterModel
|
|
300
300
|
});
|
|
301
301
|
case 16:
|
|
302
|
-
_context.next =
|
|
302
|
+
_context.next = 24;
|
|
303
303
|
break;
|
|
304
304
|
case 18:
|
|
305
305
|
_context.next = 20;
|
|
@@ -312,20 +312,29 @@ var ColumnSetting = function ColumnSetting(_ref) {
|
|
|
312
312
|
});
|
|
313
313
|
case 20:
|
|
314
314
|
newScheme = _context.sent;
|
|
315
|
-
|
|
315
|
+
console.log('[ColumnSetting] 创建默认方案成功,准备应用:', {
|
|
316
|
+
schemeId: newScheme.id,
|
|
317
|
+
schemeName: newScheme.name,
|
|
318
|
+
hasColumnConfig: !!newScheme.columnConfig,
|
|
319
|
+
columnConfigLength: ((_newScheme$columnConf = newScheme.columnConfig) === null || _newScheme$columnConf === void 0 ? void 0 : _newScheme$columnConf.length) || 0
|
|
320
|
+
});
|
|
321
|
+
|
|
322
|
+
// 【修复】直接加载方案,确保立即应用
|
|
323
|
+
// loadScheme 会设置 currentScheme 并触发 onSchemeChange
|
|
324
|
+
_context.next = 24;
|
|
316
325
|
return schemeManager.loadScheme(newScheme.id);
|
|
317
|
-
case
|
|
318
|
-
_context.next =
|
|
326
|
+
case 24:
|
|
327
|
+
_context.next = 29;
|
|
319
328
|
break;
|
|
320
|
-
case
|
|
321
|
-
_context.prev =
|
|
329
|
+
case 26:
|
|
330
|
+
_context.prev = 26;
|
|
322
331
|
_context.t0 = _context["catch"](1);
|
|
323
332
|
console.error('[ColumnSetting] 保存列配置到方案失败:', _context.t0);
|
|
324
|
-
case
|
|
333
|
+
case 29:
|
|
325
334
|
case "end":
|
|
326
335
|
return _context.stop();
|
|
327
336
|
}
|
|
328
|
-
}, _callee, null, [[1,
|
|
337
|
+
}, _callee, null, [[1, 26]]);
|
|
329
338
|
})), 50);
|
|
330
339
|
|
|
331
340
|
// 保存成功后清除备份
|