@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
- // 优先使用方案中的 columnConfig(用户在列配置界面调整后的数据)
266
+ // 只有当有 columnConfig 时才设置列样式
253
267
  if (columnSchemeManager !== null && columnSchemeManager !== void 0 && (_columnSchemeManager$ = columnSchemeManager.currentScheme) !== null && _columnSchemeManager$ !== void 0 && _columnSchemeManager$.columnConfig) {
254
- // 【关键修复】检查是否包含分组结构
255
- var hasGroups = columnSchemeManager.currentScheme.columnConfig.some(function (item) {
256
- return item.type === 'group';
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
- // 如果包含分组结构,跳过 applyColumnState
260
- // 原因: 分组结构由下面的 useEffect #2 通过 setGridOption("columnDefs") 处理
261
- // applyColumnState 只能设置列属性,会把分组子列当作独立列,破坏分组结构
262
- if (hasGroups) {
263
- console.log('[AgGridPlus] useEffect #1: 检测到分组结构,跳过 applyColumnState');
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
- // 后备方案:使用旧的 gridPlusColumnState
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 _require3 = require("./setting/columnGroupUtils"),
329
- flatConfigToGridState = _require3.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 cols = getTableColumns(rowData);
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, rowData, gridKey]);
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$current3;
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$current3 = apiRef.current) === null || _apiRef$current3 === void 0 ? void 0 : _apiRef$current3.getColumnState());
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$current4;
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$current4 = apiRef.current) === null || _apiRef$current4 === void 0 || _apiRef$current4.refreshCells({
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$current5;
931
- (_apiRef$current5 = apiRef.current) === null || _apiRef$current5 === void 0 || _apiRef$current5.setGridOption('pinnedBottomRowData', undefined);
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$current6;
937
+ var _apiRef$current4;
946
938
  var calculatedValues = calculatefun(calcColFields, displayedData);
947
- (_apiRef$current6 = apiRef.current) === null || _apiRef$current6 === void 0 || _apiRef$current6.setGridOption('pinnedBottomRowData', calculatedValues);
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
- var columnDefs = getTableColumns(rowData);
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, rowData]);
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$current7;
1145
- var _columnState3 = (_apiRef$current7 = apiRef.current) === null || _apiRef$current7 === void 0 ? void 0 : _apiRef$current7.getColumnState();
1146
- setColumnState(_columnState3);
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 = 28;
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 = 23;
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 = 23;
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
- _context.next = 23;
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 23:
327
- _context.next = 28;
335
+ case 24:
336
+ _context.next = 29;
328
337
  break;
329
- case 25:
330
- _context.prev = 25;
338
+ case 26:
339
+ _context.prev = 26;
331
340
  _context.t0 = _context["catch"](1);
332
341
  console.error('[ColumnSetting] 保存列配置到方案失败:', _context.t0);
333
- case 28:
342
+ case 29:
334
343
  case "end":
335
344
  return _context.stop();
336
345
  }
337
- }, _callee, null, [[1, 25]]);
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
- // 优先使用方案中的 columnConfig(用户在列配置界面调整后的数据)
259
+ // 只有当有 columnConfig 时才设置列样式
246
260
  if (columnSchemeManager !== null && columnSchemeManager !== void 0 && (_columnSchemeManager$ = columnSchemeManager.currentScheme) !== null && _columnSchemeManager$ !== void 0 && _columnSchemeManager$.columnConfig) {
247
- // 【关键修复】检查是否包含分组结构
248
- var hasGroups = columnSchemeManager.currentScheme.columnConfig.some(function (item) {
249
- return item.type === 'group';
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
- // 如果包含分组结构,跳过 applyColumnState
253
- // 原因: 分组结构由下面的 useEffect #2 通过 setGridOption("columnDefs") 处理
254
- // applyColumnState 只能设置列属性,会把分组子列当作独立列,破坏分组结构
255
- if (hasGroups) {
256
- console.log('[AgGridPlus] useEffect #1: 检测到分组结构,跳过 applyColumnState');
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
- // 后备方案:使用旧的 gridPlusColumnState
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 _require3 = require("./setting/columnGroupUtils"),
322
- flatConfigToGridState = _require3.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 cols = getTableColumns(rowData);
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, rowData, gridKey]);
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$current3;
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$current3 = apiRef.current) === null || _apiRef$current3 === void 0 ? void 0 : _apiRef$current3.getColumnState());
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$current4;
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$current4 = apiRef.current) === null || _apiRef$current4 === void 0 || _apiRef$current4.refreshCells({
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$current5;
924
- (_apiRef$current5 = apiRef.current) === null || _apiRef$current5 === void 0 || _apiRef$current5.setGridOption('pinnedBottomRowData', undefined);
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$current6;
930
+ var _apiRef$current4;
939
931
  var calculatedValues = calculatefun(calcColFields, displayedData);
940
- (_apiRef$current6 = apiRef.current) === null || _apiRef$current6 === void 0 || _apiRef$current6.setGridOption('pinnedBottomRowData', calculatedValues);
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
- var columnDefs = getTableColumns(rowData);
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, rowData]);
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$current7;
1138
- var _columnState3 = (_apiRef$current7 = apiRef.current) === null || _apiRef$current7 === void 0 ? void 0 : _apiRef$current7.getColumnState();
1139
- setColumnState(_columnState3);
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 = 28;
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 = 23;
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 = 23;
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
- _context.next = 23;
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 23:
318
- _context.next = 28;
326
+ case 24:
327
+ _context.next = 29;
319
328
  break;
320
- case 25:
321
- _context.prev = 25;
329
+ case 26:
330
+ _context.prev = 26;
322
331
  _context.t0 = _context["catch"](1);
323
332
  console.error('[ColumnSetting] 保存列配置到方案失败:', _context.t0);
324
- case 28:
333
+ case 29:
325
334
  case "end":
326
335
  return _context.stop();
327
336
  }
328
- }, _callee, null, [[1, 25]]);
337
+ }, _callee, null, [[1, 26]]);
329
338
  })), 50);
330
339
 
331
340
  // 保存成功后清除备份