@nokecy/qc-ui 1.1.38 → 1.1.39

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 (121) hide show
  1. package/dist/cjs/ag-grid-plus/ag-gridPlus.js +33 -20
  2. package/dist/cjs/ag-grid-plus/context/useSchemeDataFlow.js +37 -1
  3. package/dist/cjs/ag-grid-plus/context/useSchemeManager.js +120 -79
  4. package/dist/cjs/ag-grid-plus/setting/ColumnSetting.js +52 -36
  5. package/dist/cjs/ag-grid-plus/setting/columnGroupUtils.js +14 -3
  6. package/dist/cjs/array-table/arrayAddBtn.js +26 -17
  7. package/dist/cjs/array-table/hooks.d.ts +2 -1
  8. package/dist/cjs/array-table/hooks.js +23 -43
  9. package/dist/cjs/array-table/index.js +105 -25
  10. package/dist/cjs/array-table/preview.js +1 -1
  11. package/dist/cjs/array-table/readOnlyFormatters.d.ts +28 -0
  12. package/dist/cjs/array-table/readOnlyFormatters.js +113 -0
  13. package/dist/cjs/array-table/utils.d.ts +2 -2
  14. package/dist/cjs/array-table/utils.js +162 -11
  15. package/dist/cjs/editable/index.js +3 -1
  16. package/dist/cjs/formDesigner/FormDesigner.js +3 -2
  17. package/dist/cjs/formDesigner/preWidgets/index.d.ts +1 -10
  18. package/dist/cjs/formDesigner/preWidgets/index.js +1 -100
  19. package/dist/cjs/formDesigner/preWidgets/preDefineProperty.d.ts +11 -0
  20. package/dist/cjs/formDesigner/preWidgets/preDefineProperty.js +70 -0
  21. package/dist/esm/ag-grid-plus/ag-gridPlus.js +33 -20
  22. package/dist/esm/ag-grid-plus/context/useSchemeDataFlow.js +37 -1
  23. package/dist/esm/ag-grid-plus/context/useSchemeManager.js +120 -79
  24. package/dist/esm/ag-grid-plus/setting/ColumnSetting.js +52 -36
  25. package/dist/esm/ag-grid-plus/setting/columnGroupUtils.js +13 -0
  26. package/dist/esm/array-table/arrayAddBtn.js +26 -17
  27. package/dist/esm/array-table/hooks.d.ts +2 -1
  28. package/dist/esm/array-table/hooks.js +23 -43
  29. package/dist/esm/array-table/index.js +107 -27
  30. package/dist/esm/array-table/preview.js +2 -2
  31. package/dist/esm/array-table/readOnlyFormatters.d.ts +28 -0
  32. package/dist/esm/array-table/readOnlyFormatters.js +107 -0
  33. package/dist/esm/array-table/utils.d.ts +2 -2
  34. package/dist/esm/array-table/utils.js +162 -11
  35. package/dist/esm/editable/index.js +3 -1
  36. package/dist/esm/formDesigner/FormDesigner.js +3 -2
  37. package/dist/esm/formDesigner/preWidgets/index.d.ts +1 -10
  38. package/dist/esm/formDesigner/preWidgets/index.js +1 -10
  39. package/dist/esm/formDesigner/preWidgets/preDefineProperty.d.ts +11 -0
  40. package/dist/esm/formDesigner/preWidgets/{preDefineProperty1/preview.js → preDefineProperty.js} +49 -30
  41. package/dist/umd/qc-ui.min.js +1 -1
  42. package/package.json +1 -1
  43. package/dist/cjs/formDesigner/preWidgets/preDefineProperty1/index.d.ts +0 -1
  44. package/dist/cjs/formDesigner/preWidgets/preDefineProperty1/index.js +0 -16
  45. package/dist/cjs/formDesigner/preWidgets/preDefineProperty1/preview.d.ts +0 -5
  46. package/dist/cjs/formDesigner/preWidgets/preDefineProperty1/preview.js +0 -51
  47. package/dist/cjs/formDesigner/preWidgets/preDefineProperty10/index.d.ts +0 -1
  48. package/dist/cjs/formDesigner/preWidgets/preDefineProperty10/index.js +0 -16
  49. package/dist/cjs/formDesigner/preWidgets/preDefineProperty10/preview.d.ts +0 -5
  50. package/dist/cjs/formDesigner/preWidgets/preDefineProperty10/preview.js +0 -50
  51. package/dist/cjs/formDesigner/preWidgets/preDefineProperty2/index.d.ts +0 -1
  52. package/dist/cjs/formDesigner/preWidgets/preDefineProperty2/index.js +0 -16
  53. package/dist/cjs/formDesigner/preWidgets/preDefineProperty2/preview.d.ts +0 -5
  54. package/dist/cjs/formDesigner/preWidgets/preDefineProperty2/preview.js +0 -50
  55. package/dist/cjs/formDesigner/preWidgets/preDefineProperty3/index.d.ts +0 -1
  56. package/dist/cjs/formDesigner/preWidgets/preDefineProperty3/index.js +0 -16
  57. package/dist/cjs/formDesigner/preWidgets/preDefineProperty3/preview.d.ts +0 -5
  58. package/dist/cjs/formDesigner/preWidgets/preDefineProperty3/preview.js +0 -50
  59. package/dist/cjs/formDesigner/preWidgets/preDefineProperty4/index.d.ts +0 -1
  60. package/dist/cjs/formDesigner/preWidgets/preDefineProperty4/index.js +0 -16
  61. package/dist/cjs/formDesigner/preWidgets/preDefineProperty4/preview.d.ts +0 -5
  62. package/dist/cjs/formDesigner/preWidgets/preDefineProperty4/preview.js +0 -50
  63. package/dist/cjs/formDesigner/preWidgets/preDefineProperty5/index.d.ts +0 -1
  64. package/dist/cjs/formDesigner/preWidgets/preDefineProperty5/index.js +0 -16
  65. package/dist/cjs/formDesigner/preWidgets/preDefineProperty5/preview.d.ts +0 -5
  66. package/dist/cjs/formDesigner/preWidgets/preDefineProperty5/preview.js +0 -50
  67. package/dist/cjs/formDesigner/preWidgets/preDefineProperty6/index.d.ts +0 -1
  68. package/dist/cjs/formDesigner/preWidgets/preDefineProperty6/index.js +0 -16
  69. package/dist/cjs/formDesigner/preWidgets/preDefineProperty6/preview.d.ts +0 -5
  70. package/dist/cjs/formDesigner/preWidgets/preDefineProperty6/preview.js +0 -50
  71. package/dist/cjs/formDesigner/preWidgets/preDefineProperty7/index.d.ts +0 -1
  72. package/dist/cjs/formDesigner/preWidgets/preDefineProperty7/index.js +0 -16
  73. package/dist/cjs/formDesigner/preWidgets/preDefineProperty7/preview.d.ts +0 -5
  74. package/dist/cjs/formDesigner/preWidgets/preDefineProperty7/preview.js +0 -50
  75. package/dist/cjs/formDesigner/preWidgets/preDefineProperty8/index.d.ts +0 -1
  76. package/dist/cjs/formDesigner/preWidgets/preDefineProperty8/index.js +0 -16
  77. package/dist/cjs/formDesigner/preWidgets/preDefineProperty8/preview.d.ts +0 -5
  78. package/dist/cjs/formDesigner/preWidgets/preDefineProperty8/preview.js +0 -50
  79. package/dist/cjs/formDesigner/preWidgets/preDefineProperty9/index.d.ts +0 -1
  80. package/dist/cjs/formDesigner/preWidgets/preDefineProperty9/index.js +0 -16
  81. package/dist/cjs/formDesigner/preWidgets/preDefineProperty9/preview.d.ts +0 -5
  82. package/dist/cjs/formDesigner/preWidgets/preDefineProperty9/preview.js +0 -50
  83. package/dist/esm/formDesigner/preWidgets/preDefineProperty1/index.d.ts +0 -1
  84. package/dist/esm/formDesigner/preWidgets/preDefineProperty1/index.js +0 -1
  85. package/dist/esm/formDesigner/preWidgets/preDefineProperty1/preview.d.ts +0 -5
  86. package/dist/esm/formDesigner/preWidgets/preDefineProperty10/index.d.ts +0 -1
  87. package/dist/esm/formDesigner/preWidgets/preDefineProperty10/index.js +0 -1
  88. package/dist/esm/formDesigner/preWidgets/preDefineProperty10/preview.d.ts +0 -5
  89. package/dist/esm/formDesigner/preWidgets/preDefineProperty10/preview.js +0 -43
  90. package/dist/esm/formDesigner/preWidgets/preDefineProperty2/index.d.ts +0 -1
  91. package/dist/esm/formDesigner/preWidgets/preDefineProperty2/index.js +0 -1
  92. package/dist/esm/formDesigner/preWidgets/preDefineProperty2/preview.d.ts +0 -5
  93. package/dist/esm/formDesigner/preWidgets/preDefineProperty2/preview.js +0 -43
  94. package/dist/esm/formDesigner/preWidgets/preDefineProperty3/index.d.ts +0 -1
  95. package/dist/esm/formDesigner/preWidgets/preDefineProperty3/index.js +0 -1
  96. package/dist/esm/formDesigner/preWidgets/preDefineProperty3/preview.d.ts +0 -5
  97. package/dist/esm/formDesigner/preWidgets/preDefineProperty3/preview.js +0 -43
  98. package/dist/esm/formDesigner/preWidgets/preDefineProperty4/index.d.ts +0 -1
  99. package/dist/esm/formDesigner/preWidgets/preDefineProperty4/index.js +0 -1
  100. package/dist/esm/formDesigner/preWidgets/preDefineProperty4/preview.d.ts +0 -5
  101. package/dist/esm/formDesigner/preWidgets/preDefineProperty4/preview.js +0 -43
  102. package/dist/esm/formDesigner/preWidgets/preDefineProperty5/index.d.ts +0 -1
  103. package/dist/esm/formDesigner/preWidgets/preDefineProperty5/index.js +0 -1
  104. package/dist/esm/formDesigner/preWidgets/preDefineProperty5/preview.d.ts +0 -5
  105. package/dist/esm/formDesigner/preWidgets/preDefineProperty5/preview.js +0 -43
  106. package/dist/esm/formDesigner/preWidgets/preDefineProperty6/index.d.ts +0 -1
  107. package/dist/esm/formDesigner/preWidgets/preDefineProperty6/index.js +0 -1
  108. package/dist/esm/formDesigner/preWidgets/preDefineProperty6/preview.d.ts +0 -5
  109. package/dist/esm/formDesigner/preWidgets/preDefineProperty6/preview.js +0 -43
  110. package/dist/esm/formDesigner/preWidgets/preDefineProperty7/index.d.ts +0 -1
  111. package/dist/esm/formDesigner/preWidgets/preDefineProperty7/index.js +0 -1
  112. package/dist/esm/formDesigner/preWidgets/preDefineProperty7/preview.d.ts +0 -5
  113. package/dist/esm/formDesigner/preWidgets/preDefineProperty7/preview.js +0 -43
  114. package/dist/esm/formDesigner/preWidgets/preDefineProperty8/index.d.ts +0 -1
  115. package/dist/esm/formDesigner/preWidgets/preDefineProperty8/index.js +0 -1
  116. package/dist/esm/formDesigner/preWidgets/preDefineProperty8/preview.d.ts +0 -5
  117. package/dist/esm/formDesigner/preWidgets/preDefineProperty8/preview.js +0 -43
  118. package/dist/esm/formDesigner/preWidgets/preDefineProperty9/index.d.ts +0 -1
  119. package/dist/esm/formDesigner/preWidgets/preDefineProperty9/index.js +0 -1
  120. package/dist/esm/formDesigner/preWidgets/preDefineProperty9/preview.d.ts +0 -5
  121. package/dist/esm/formDesigner/preWidgets/preDefineProperty9/preview.js +0 -43
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.default = void 0;
8
8
  var _react = _interopRequireWildcard(require("react"));
9
+ var _logger = require("../utils/logger");
9
10
  var _antd = require("antd");
10
11
  var _icons = require("@ant-design/icons");
11
12
  var _agGridReact = require("ag-grid-react");
@@ -286,6 +287,9 @@ var ColumnSetting = function ColumnSetting(_ref) {
286
287
  // 从根级别开始查找新增列
287
288
  findNewColumns(originalDefs, 0);
288
289
  if (newItems.length > 0) {
290
+ _logger.logger.debug('[getColumnData] 检测到新增列/分组,已追加到末尾:', newItems.map(function (i) {
291
+ return i.field || i.groupId;
292
+ }));
289
293
  return [].concat(_toConsumableArray(config), newItems);
290
294
  }
291
295
  return config;
@@ -430,19 +434,20 @@ var ColumnSetting = function ColumnSetting(_ref) {
430
434
  return s.id === schemeId;
431
435
  });
432
436
  if (!(scheme && gridApi)) {
433
- _context.next = 12;
437
+ _context.next = 13;
434
438
  break;
435
439
  }
436
440
  // 【关键修复】先更新 columnDefs(处理分组结构),使用 allColDefs 保留自定义属性
437
441
  gridColumnDefs = (0, _columnGroupUtils.flatConfigToGridState)(scheme.columnConfig, allColDefs);
442
+ _logger.logger.debug('[ColumnSetting] 加载方案 - 更新 columnDefs');
438
443
  gridApi.setGridOption('columnDefs', gridColumnDefs);
439
444
 
440
445
  // 等待 columnDefs 更新完成
441
- _context.next = 9;
446
+ _context.next = 10;
442
447
  return new Promise(function (resolve) {
443
448
  return setTimeout(resolve, 100);
444
449
  });
445
- case 9:
450
+ case 10:
446
451
  // 【修复】然后应用列状态(宽度、隐藏、顺序等)
447
452
  columnState = (0, _columnGroupUtils.flatConfigToColumnState)(scheme.columnConfig);
448
453
  gridApi.applyColumnState({
@@ -454,7 +459,7 @@ var ColumnSetting = function ColumnSetting(_ref) {
454
459
  if (scheme.filterModel) {
455
460
  gridApi.setFilterModel(scheme.filterModel);
456
461
  }
457
- case 12:
462
+ case 13:
458
463
  _antd.message.success('方案已加载');
459
464
 
460
465
  // 等待Grid状态更新后再刷新表单
@@ -469,17 +474,17 @@ var ColumnSetting = function ColumnSetting(_ref) {
469
474
 
470
475
  // 自动关闭弹窗,让用户看到Grid的变化
471
476
  onClose();
472
- _context.next = 20;
477
+ _context.next = 21;
473
478
  break;
474
- case 17:
475
- _context.prev = 17;
479
+ case 18:
480
+ _context.prev = 18;
476
481
  _context.t0 = _context["catch"](0);
477
482
  _antd.message.error(_context.t0.message || '加载方案失败');
478
- case 20:
483
+ case 21:
479
484
  case "end":
480
485
  return _context.stop();
481
486
  }
482
- }, _callee, null, [[0, 17]]);
487
+ }, _callee, null, [[0, 18]]);
483
488
  }));
484
489
  return function (_x) {
485
490
  return _ref2.apply(this, arguments);
@@ -597,15 +602,24 @@ var ColumnSetting = function ColumnSetting(_ref) {
597
602
  return setTimeout(resolve, 100);
598
603
  });
599
604
  case 39:
605
+ // 【关键修复】直接应用方案到 Grid,不通过 handleLoadScheme
606
+ // 这样可以避免依赖 Context 状态更新的时序问题
607
+ _logger.logger.debug('[ColumnSetting] 保存后直接应用方案到 Grid');
608
+
609
+ // 【修复】始终更新 columnDefs,确保 cellClass 等属性能即时生效
610
+ // 原逻辑只在有分组时才更新 columnDefs,导致对齐方式保存后无法即时生效
611
+ _logger.logger.debug('[ColumnSetting] 更新 columnDefs');
600
612
  gridColumnDefs = (0, _columnGroupUtils.flatConfigToGridState)(savedScheme.columnConfig, allColDefs);
601
613
  gridApi.setGridOption('columnDefs', gridColumnDefs);
602
614
 
603
615
  // 等待 columnDefs 更新完成
604
- _context2.next = 43;
616
+ _context2.next = 45;
605
617
  return new Promise(function (resolve) {
606
618
  return setTimeout(resolve, 100);
607
619
  });
608
- case 43:
620
+ case 45:
621
+ // 2. 应用列状态(列顺序、宽度、隐藏、固定等)
622
+ _logger.logger.debug('[ColumnSetting] 应用列状态');
609
623
  columnState = (0, _columnGroupUtils.flatConfigToColumnState)(savedScheme.columnConfig);
610
624
  gridApi.applyColumnState({
611
625
  state: columnState,
@@ -614,36 +628,37 @@ var ColumnSetting = function ColumnSetting(_ref) {
614
628
 
615
629
  // 3. 应用过滤器
616
630
  if (savedScheme.filterModel) {
631
+ _logger.logger.debug('[ColumnSetting] 应用 filterModel');
617
632
  gridApi.setFilterModel(savedScheme.filterModel);
618
633
  }
619
634
 
620
635
  // 4. 设置为当前方案(如果不是当前方案)
621
636
  if (!(!currentScheme || savedScheme.id !== currentScheme.id)) {
622
- _context2.next = 49;
637
+ _context2.next = 52;
623
638
  break;
624
639
  }
625
- _context2.next = 49;
640
+ _context2.next = 52;
626
641
  return setCurrentColumnScheme === null || setCurrentColumnScheme === void 0 ? void 0 : setCurrentColumnScheme(gridKey, savedScheme.id);
627
- case 49:
628
- _context2.next = 51;
642
+ case 52:
643
+ _context2.next = 54;
629
644
  return new Promise(function (resolve) {
630
645
  return setTimeout(resolve, 50);
631
646
  });
632
- case 51:
647
+ case 54:
633
648
  // 5. 关闭弹窗
634
649
  onClose();
635
- _context2.next = 58;
650
+ _context2.next = 61;
636
651
  break;
637
- case 54:
638
- _context2.prev = 54;
652
+ case 57:
653
+ _context2.prev = 57;
639
654
  _context2.t0 = _context2["catch"](8);
640
655
  console.error('保存列配置到方案失败:', _context2.t0);
641
656
  _antd.message.error('保存列配置失败');
642
- case 58:
657
+ case 61:
643
658
  case "end":
644
659
  return _context2.stop();
645
660
  }
646
- }, _callee2, null, [[8, 54]]);
661
+ }, _callee2, null, [[8, 57]]);
647
662
  })), [form, gridApi, saveColumnScheme, setCurrentColumnScheme, currentScheme, schemes, gridKey, allColDefs, onClose]);
648
663
 
649
664
  // 保存为新方案
@@ -661,21 +676,22 @@ var ColumnSetting = function ColumnSetting(_ref) {
661
676
  case 3:
662
677
  _context3.prev = 3;
663
678
  if (!(activeTab === 'columns' && form)) {
664
- _context3.next = 17;
679
+ _context3.next = 18;
665
680
  break;
666
681
  }
667
682
  values = form.values;
668
683
  columnConfigToSave = values.items; // 直接使用 FlatColumnItem[] 数据
669
684
  // 【修复】传入 allColDefs 以保留自定义属性(cellRenderer 等)
670
685
  gridColumnDefs = (0, _columnGroupUtils.flatConfigToGridState)(values.items, allColDefs); // 【关键修复】先更新 columnDefs(处理分组结构变化)
686
+ _logger.logger.debug('[ColumnSetting] 另存为方案 - 更新 columnDefs');
671
687
  gridApi.setGridOption('columnDefs', gridColumnDefs);
672
688
 
673
689
  // 等待 columnDefs 更新完成
674
- _context3.next = 11;
690
+ _context3.next = 12;
675
691
  return new Promise(function (resolve) {
676
692
  return setTimeout(resolve, 100);
677
693
  });
678
- case 11:
694
+ case 12:
679
695
  // 【修复】然后应用列状态(宽度、隐藏、顺序等)
680
696
  columnState = (0, _columnGroupUtils.flatConfigToColumnState)(values.items);
681
697
  gridApi.applyColumnState({
@@ -684,18 +700,18 @@ var ColumnSetting = function ColumnSetting(_ref) {
684
700
  });
685
701
 
686
702
  // 等待状态更新
687
- _context3.next = 15;
703
+ _context3.next = 16;
688
704
  return new Promise(function (resolve) {
689
705
  return setTimeout(resolve, 50);
690
706
  });
691
- case 15:
692
- _context3.next = 19;
707
+ case 16:
708
+ _context3.next = 20;
693
709
  break;
694
- case 17:
710
+ case 18:
695
711
  // 如果在"方案管理"标签页,使用当前表单数据
696
712
  _values = form === null || form === void 0 ? void 0 : form.values;
697
713
  columnConfigToSave = (_values === null || _values === void 0 ? void 0 : _values.items) || [];
698
- case 19:
714
+ case 20:
699
715
  // 获取过滤器模型
700
716
  filterModel = gridApi.getFilterModel();
701
717
  newScheme = {
@@ -708,9 +724,9 @@ var ColumnSetting = function ColumnSetting(_ref) {
708
724
  isSystem: false
709
725
  // createdAt 和 updatedAt 由存储适配器自动生成
710
726
  };
711
- _context3.next = 23;
727
+ _context3.next = 24;
712
728
  return saveColumnScheme === null || saveColumnScheme === void 0 ? void 0 : saveColumnScheme(gridKey, newScheme);
713
- case 23:
729
+ case 24:
714
730
  _antd.message.success('方案保存成功');
715
731
  setSaveSchemeVisible(false);
716
732
  setSchemeName('');
@@ -718,17 +734,17 @@ var ColumnSetting = function ColumnSetting(_ref) {
718
734
 
719
735
  // 切换到方案管理标签页,显示新创建的方案
720
736
  setActiveTab('schemes');
721
- _context3.next = 33;
737
+ _context3.next = 34;
722
738
  break;
723
- case 30:
724
- _context3.prev = 30;
739
+ case 31:
740
+ _context3.prev = 31;
725
741
  _context3.t0 = _context3["catch"](3);
726
742
  _antd.message.error(_context3.t0.message || '保存方案失败');
727
- case 33:
743
+ case 34:
728
744
  case "end":
729
745
  return _context3.stop();
730
746
  }
731
- }, _callee3, null, [[3, 30]]);
747
+ }, _callee3, null, [[3, 31]]);
732
748
  })), [gridApi, saveColumnScheme, gridKey, schemeName, schemeDescription, activeTab, form, allColDefs]);
733
749
 
734
750
  // 设置默认方案
@@ -14,6 +14,7 @@ exports.isOldSchemeData = isOldSchemeData;
14
14
  exports.migrateOldScheme = migrateOldScheme;
15
15
  exports.reorderItems = reorderItems;
16
16
  var _uniqueId2 = _interopRequireDefault(require("lodash/uniqueId"));
17
+ var _logger = require("../utils/logger");
17
18
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
18
19
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
19
20
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
@@ -26,12 +27,10 @@ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symb
26
27
  function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
27
28
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
28
29
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
29
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
30
- /**
30
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } /**
31
31
  * 表头分组配置工具函数
32
32
  * 负责 Grid State 与扁平化配置之间的转换
33
33
  */
34
-
35
34
  /**
36
35
  * 生成唯一 ID
37
36
  */
@@ -283,6 +282,12 @@ function flatConfigToGridState(flatConfig, originalColumnDefs) {
283
282
  }
284
283
  });
285
284
  if (newColumnsWithIndex.length > 0) {
285
+ _logger.logger.debug('[flatConfigToGridState] 检测到新增列,将插入到原始位置:', {
286
+ newColumnFields: newColumnsWithIndex.map(function (item) {
287
+ return item.col.field;
288
+ })
289
+ });
290
+
286
291
  // 将新增列插入到正确位置(基于其在原始定义中的相对位置)
287
292
  var _iterator4 = _createForOfIteratorHelper(newColumnsWithIndex),
288
293
  _step4;
@@ -531,6 +536,12 @@ function flatConfigToColumnState(flatConfig, originalColumnDefs) {
531
536
  }
532
537
  });
533
538
  if (newColumnsWithIndex.length > 0) {
539
+ _logger.logger.debug('[flatConfigToColumnState] 检测到新增列,将插入到原始位置:', {
540
+ newColumnFields: newColumnsWithIndex.map(function (item) {
541
+ return item.col.field;
542
+ })
543
+ });
544
+
534
545
  // 将新增列插入到正确位置(基于其在原始定义中的相对位置)
535
546
  var _iterator6 = _createForOfIteratorHelper(newColumnsWithIndex),
536
547
  _step6;
@@ -11,8 +11,11 @@ var _builtins__ = require("@formily/antd-v5/lib/__builtins__");
11
11
  var _classnames = _interopRequireDefault(require("classnames"));
12
12
  var _icons = require("@ant-design/icons");
13
13
  var _shared = require("@formily/shared");
14
+ var _excluded = ["arrayField", "schema", "method", "defaultValue", "onAdd", "title", "icon", "className", "onClick"];
14
15
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
16
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
17
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
18
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
16
19
  var getSchemaDefaultValue = function getSchemaDefaultValue(schema) {
17
20
  if ((schema === null || schema === void 0 ? void 0 : schema.type) === 'array') return [];
18
21
  if ((schema === null || schema === void 0 ? void 0 : schema.type) === 'object') return {};
@@ -30,34 +33,40 @@ var getDefaultValue = function getDefaultValue(defaultValue, schema) {
30
33
  };
31
34
  var ArrayAddBtn = function ArrayAddBtn(props) {
32
35
  var self = (0, _react2.useField)();
36
+ // 解构出所有非 DOM 属性,只把 rest 透传给 Button,避免 arrayField/schema/method 等漏到 DOM 触发 React 警告。@author nokecy
33
37
  var arrayField = props.arrayField,
34
- schema = props.schema;
38
+ schema = props.schema,
39
+ method = props.method,
40
+ defaultValue = props.defaultValue,
41
+ onAdd = props.onAdd,
42
+ title = props.title,
43
+ icon = props.icon,
44
+ className = props.className,
45
+ _onClick = props.onClick,
46
+ rest = _objectWithoutProperties(props, _excluded);
35
47
  var prefixCls = (0, _builtins__.usePrefixCls)("formily-array-base");
36
48
  if (!arrayField) return null;
37
49
  if (arrayField.pattern !== "editable" && arrayField.pattern !== "disabled") return null;
38
50
  return /*#__PURE__*/_react.default.createElement(_antd.Button, _extends({
39
51
  type: "primary"
40
- }, props, {
52
+ }, rest, {
41
53
  disabled: self === null || self === void 0 ? void 0 : self.disabled,
42
- className: (0, _classnames.default)("".concat(prefixCls, "-addition"), props.className),
54
+ className: (0, _classnames.default)("".concat(prefixCls, "-addition"), className),
43
55
  onClick: function onClick(e) {
44
56
  if (arrayField !== null && arrayField !== void 0 && arrayField.disabled) return;
45
- var defaultValue = getDefaultValue(props.defaultValue, schema);
46
- if (props.method === "unshift") {
47
- var _arrayField$unshift, _props$onAdd;
48
- (_arrayField$unshift = arrayField.unshift) === null || _arrayField$unshift === void 0 || _arrayField$unshift.call(arrayField, defaultValue);
49
- props === null || props === void 0 || (_props$onAdd = props.onAdd) === null || _props$onAdd === void 0 || _props$onAdd.call(props, 0);
57
+ var dv = getDefaultValue(defaultValue, schema);
58
+ if (method === "unshift") {
59
+ var _arrayField$unshift;
60
+ (_arrayField$unshift = arrayField.unshift) === null || _arrayField$unshift === void 0 || _arrayField$unshift.call(arrayField, dv);
61
+ onAdd === null || onAdd === void 0 || onAdd(0);
50
62
  } else {
51
- var _arrayField$push, _props$onAdd2, _arrayField$value;
52
- (_arrayField$push = arrayField.push) === null || _arrayField$push === void 0 || _arrayField$push.call(arrayField, defaultValue);
53
- props === null || props === void 0 || (_props$onAdd2 = props.onAdd) === null || _props$onAdd2 === void 0 || _props$onAdd2.call(props, (arrayField === null || arrayField === void 0 || (_arrayField$value = arrayField.value) === null || _arrayField$value === void 0 ? void 0 : _arrayField$value.length) - 1);
54
- }
55
- if (props.onClick) {
56
- //@ts-ignore
57
- props.onClick(e);
63
+ var _arrayField$push, _arrayField$value;
64
+ (_arrayField$push = arrayField.push) === null || _arrayField$push === void 0 || _arrayField$push.call(arrayField, dv);
65
+ onAdd === null || onAdd === void 0 || onAdd((arrayField === null || arrayField === void 0 || (_arrayField$value = arrayField.value) === null || _arrayField$value === void 0 ? void 0 : _arrayField$value.length) - 1);
58
66
  }
67
+ _onClick === null || _onClick === void 0 || _onClick(e);
59
68
  },
60
- icon: (0, _shared.isUndef)(props.icon) ? /*#__PURE__*/_react.default.createElement(_icons.PlusOutlined, null) : props.icon
61
- }), props.title || self.title);
69
+ icon: (0, _shared.isUndef)(icon) ? /*#__PURE__*/_react.default.createElement(_icons.PlusOutlined, null) : icon
70
+ }), title || self.title);
62
71
  };
63
72
  var _default = exports.default = ArrayAddBtn;
@@ -1,4 +1,5 @@
1
1
  import { RefObject } from 'react';
2
+ import { GridApi } from 'ag-grid-community';
2
3
  import { ArrayField } from '@formily/core';
3
4
  /**
4
5
  * 单元格聚焦 Hook
@@ -11,7 +12,7 @@ export declare const useCellFocus: () => {
11
12
  * 键盘导航 Hook
12
13
  * 处理方向键在表格单元格间的导航
13
14
  */
14
- export declare const useKeyboardNavigation: (ref: RefObject<any>, dataSource: any[], focusInputInCell: (cell: Element) => void) => {
15
+ export declare const useKeyboardNavigation: (ref: RefObject<any>, dataSource: any[], focusInputInCell: (cell: Element) => void, activateCell?: ((api: GridApi, node: any, colId: string) => boolean) | undefined) => {
15
16
  handleCellKeyDown: (event: any) => void;
16
17
  };
17
18
  /**
@@ -5,9 +5,12 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.useRowDrag = exports.useKeyboardNavigation = exports.useCellFocus = void 0;
7
7
  var _react = require("react");
8
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
9
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
10
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
8
+ // setSelectionRange 仅 textarea 与 text/search/url/tel/password 类型 input 支持;
9
+ // checkbox/number/date 等调用会抛 InvalidStateError,故用白名单守卫。@author nokecy
10
+ var supportsSelectionRange = function supportsSelectionRange(el) {
11
+ return el.tagName === 'TEXTAREA' || /^(text|search|url|tel|password)$/i.test(el.type || 'text');
12
+ };
13
+
11
14
  /**
12
15
  * 单元格聚焦 Hook
13
16
  * 处理 Editable 包装和普通输入框的聚焦逻辑
@@ -24,7 +27,7 @@ var useCellFocus = exports.useCellFocus = function useCellFocus() {
24
27
  var existingInput = editableElement.querySelector('input:not([readonly]):not([disabled]), textarea:not([readonly]):not([disabled])');
25
28
  if (existingInput) {
26
29
  existingInput.focus();
27
- if ('setSelectionRange' in existingInput && existingInput.type !== 'number' && existingInput.type !== 'date') {
30
+ if (supportsSelectionRange(existingInput)) {
28
31
  var _existingInput$value;
29
32
  var length = ((_existingInput$value = existingInput.value) === null || _existingInput$value === void 0 ? void 0 : _existingInput$value.length) || 0;
30
33
  setTimeout(function () {
@@ -45,7 +48,7 @@ var useCellFocus = exports.useCellFocus = function useCellFocus() {
45
48
  var newInput = editableElement.querySelector('input:not([readonly]):not([disabled]), textarea:not([readonly]):not([disabled])');
46
49
  if (newInput) {
47
50
  newInput.focus();
48
- if ('setSelectionRange' in newInput && newInput.type !== 'number' && newInput.type !== 'date') {
51
+ if (supportsSelectionRange(newInput)) {
49
52
  var _newInput$value;
50
53
  var _length = ((_newInput$value = newInput.value) === null || _newInput$value === void 0 ? void 0 : _newInput$value.length) || 0;
51
54
  setTimeout(function () {
@@ -74,7 +77,7 @@ var useCellFocus = exports.useCellFocus = function useCellFocus() {
74
77
  inputElement.focus();
75
78
 
76
79
  // 将光标定位到末尾
77
- if ('setSelectionRange' in inputElement && inputElement.type !== 'number' && inputElement.type !== 'date') {
80
+ if (supportsSelectionRange(inputElement)) {
78
81
  var _inputElement$value;
79
82
  var _length2 = ((_inputElement$value = inputElement.value) === null || _inputElement$value === void 0 ? void 0 : _inputElement$value.length) || 0;
80
83
  setTimeout(function () {
@@ -96,7 +99,7 @@ var useCellFocus = exports.useCellFocus = function useCellFocus() {
96
99
  * 键盘导航 Hook
97
100
  * 处理方向键在表格单元格间的导航
98
101
  */
99
- var useKeyboardNavigation = exports.useKeyboardNavigation = function useKeyboardNavigation(ref, dataSource, focusInputInCell) {
102
+ var useKeyboardNavigation = exports.useKeyboardNavigation = function useKeyboardNavigation(ref, dataSource, focusInputInCell, activateCell) {
100
103
  var handleCellKeyDown = (0, _react.useCallback)(function (event) {
101
104
  var keyEvent = event.event,
102
105
  node = event.node,
@@ -147,46 +150,23 @@ var useKeyboardNavigation = exports.useKeyboardNavigation = function useKeyboard
147
150
  if (isValidTarget) {
148
151
  // 延迟执行以确保当前编辑完成
149
152
  setTimeout(function () {
153
+ var _api$getDisplayedRowA;
150
154
  api.setFocusedCell(targetRowIndex, targetColId);
151
155
 
156
+ // 懒挂载:目标格若是懒列存量格,先激活挂树(refreshCells),下方 150ms 内完成挂载再聚焦 @author nokecy
157
+ var targetNode = (_api$getDisplayedRowA = api.getDisplayedRowAtIndex) === null || _api$getDisplayedRowA === void 0 ? void 0 : _api$getDisplayedRowA.call(api, targetRowIndex);
158
+ if (activateCell && targetNode) {
159
+ activateCell(api, targetNode, targetColId);
160
+ }
161
+
152
162
  // 不使用原生startEditingCell,而是手动触发编辑状态
153
- // 使用DOM选择器查找目标单元格
163
+ // v33 themeQuartz 容器不再有 .ag-theme-alpine 类;且行虚拟化下 DOM 顺序与 rowIndex 不一致,
164
+ // 改为直接在 ref 容器内按 row-index + col-id 属性定位目标单元格 @author nokecy
154
165
  setTimeout(function () {
155
166
  var _ref$current;
156
- // 通过ref获取网格容器
157
- var gridContainer = (_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.querySelector('.ag-theme-alpine');
158
- if (gridContainer) {
159
- // 尝试通过行和列分步查找目标单元格
160
- var rows = gridContainer.querySelectorAll('.ag-row');
161
- if (rows[targetRowIndex]) {
162
- var targetRow = rows[targetRowIndex];
163
-
164
- // 在行内查找指定列的单元格
165
- var targetCell = targetRow.querySelector(".ag-cell[col-id=\"".concat(targetColId, "\"]"));
166
- if (!targetCell) {
167
- // 如果通过col-id找不到,遍历所有单元格查找匹配的列
168
- var cells = targetRow.querySelectorAll('.ag-cell');
169
- var _iterator = _createForOfIteratorHelper(cells),
170
- _step;
171
- try {
172
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
173
- var _cell = _step.value;
174
- var colId = _cell.getAttribute('col-id') || _cell.getAttribute('data-col-id');
175
- if (colId === targetColId) {
176
- targetCell = _cell;
177
- break;
178
- }
179
- }
180
- } catch (err) {
181
- _iterator.e(err);
182
- } finally {
183
- _iterator.f();
184
- }
185
- }
186
- if (targetCell) {
187
- focusInputInCell(targetCell);
188
- }
189
- }
167
+ var targetCell = (_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.querySelector(".ag-row[row-index=\"".concat(targetRowIndex, "\"] .ag-cell[col-id=\"").concat(targetColId, "\"]"));
168
+ if (targetCell) {
169
+ focusInputInCell(targetCell);
190
170
  }
191
171
  }, 150);
192
172
  }, 10);
@@ -194,7 +174,7 @@ var useKeyboardNavigation = exports.useKeyboardNavigation = function useKeyboard
194
174
  keyEvent.preventDefault();
195
175
  keyEvent.stopPropagation();
196
176
  }
197
- }, [dataSource, focusInputInCell, ref]);
177
+ }, [dataSource, focusInputInCell, ref, activateCell]);
198
178
  return {
199
179
  handleCellKeyDown: handleCellKeyDown
200
180
  };