@nokecy/qc-ui 1.0.75 → 1.0.77

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.
@@ -90,6 +90,25 @@ interface GridProps extends AgGridReactProps {
90
90
  * 当组件发生错误时调用,可用于自定义错误处理逻辑
91
91
  */
92
92
  onError?: (error: GridPlusError) => void;
93
+ /**
94
+ * 是否启用点击行选择功能
95
+ * - true: 启用行点击选择(默认)
96
+ * - false: 禁用点击行选择(仅复选框可选择)
97
+ *
98
+ * 默认值: true
99
+ *
100
+ * AG-Grid v33+ 特性:
101
+ * 1. 点击行即可选择/取消选择
102
+ * 2. **无需按键即可点击多选**(enableSelectionWithoutKeys)
103
+ * 3. 复选框和行点击都支持多选
104
+ * 4. 支持 Ctrl/Cmd + A 全选
105
+ *
106
+ * 内部实现:
107
+ * - 使用 v33+ 对象化 rowSelection API
108
+ * - 自动配置 enableClickSelection 和 enableSelectionWithoutKeys
109
+ * - 兼容旧的字符串 API('single' | 'multiple')
110
+ */
111
+ enableClickSelection?: boolean;
93
112
  }
94
113
  interface AgGridColumnPropsClone extends ColDef {
95
114
  /**
@@ -93,6 +93,11 @@ export declare class SchemeSyncManager {
93
93
  * 应用服务器版本
94
94
  */
95
95
  private applyServerVersion;
96
+ /**
97
+ * 反序列化从后端接收的方案数据
98
+ * 将 columnState 和 itemsOrder 从 JSON 字符串转换为数组
99
+ */
100
+ private deserializeSchemesData;
96
101
  /**
97
102
  * 页面卸载前同步
98
103
  */
@@ -4,6 +4,12 @@ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try
4
4
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
5
5
  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; }
6
6
  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; }
7
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
8
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
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; }
11
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
12
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
7
13
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
8
14
  function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
9
15
  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
@@ -57,11 +63,35 @@ export var SchemeSyncManager = /*#__PURE__*/function () {
57
63
  */
58
64
  _defineProperty(this, "handleBeforeUnload", function () {
59
65
  if (_this.hasDirtyData()) {
66
+ // 序列化列方案和查询方案
67
+ var serializedColumnSchemes = {};
68
+ Object.entries(_this.allData.columnSchemes).forEach(function (_ref) {
69
+ var _ref2 = _slicedToArray(_ref, 2),
70
+ gridId = _ref2[0],
71
+ schemes = _ref2[1];
72
+ serializedColumnSchemes[gridId] = schemes.map(function (scheme) {
73
+ return _objectSpread(_objectSpread({}, scheme), {}, {
74
+ columnState: JSON.stringify(scheme.columnState)
75
+ });
76
+ });
77
+ });
78
+ var serializedQuerySchemes = {};
79
+ Object.entries(_this.allData.querySchemes).forEach(function (_ref3) {
80
+ var _ref4 = _slicedToArray(_ref3, 2),
81
+ gridId = _ref4[0],
82
+ schemes = _ref4[1];
83
+ serializedQuerySchemes[gridId] = schemes.map(function (scheme) {
84
+ return _objectSpread(_objectSpread({}, scheme), {}, {
85
+ itemsOrder: JSON.stringify(scheme.itemsOrder)
86
+ });
87
+ });
88
+ });
89
+
60
90
  // 使用 Beacon API 发送数据(不阻塞页面卸载)
61
91
  var requestData = {
62
92
  clientSyncTime: _this.lastSyncTime,
63
- columnSchemes: _this.allData.columnSchemes,
64
- querySchemes: _this.allData.querySchemes,
93
+ columnSchemes: serializedColumnSchemes,
94
+ querySchemes: serializedQuerySchemes,
65
95
  currentSchemes: _this.allData.currentSchemes
66
96
  };
67
97
  var blob = new Blob([JSON.stringify(requestData)], {
@@ -117,7 +147,7 @@ export var SchemeSyncManager = /*#__PURE__*/function () {
117
147
  key: "initialize",
118
148
  value: (function () {
119
149
  var _initialize = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
120
- var response, data;
150
+ var response, responseData, allSchemesData;
121
151
  return _regeneratorRuntime().wrap(function _callee$(_context) {
122
152
  while (1) switch (_context.prev = _context.next) {
123
153
  case 0:
@@ -141,15 +171,35 @@ export var SchemeSyncManager = /*#__PURE__*/function () {
141
171
  _context.next = 9;
142
172
  return response.json();
143
173
  case 9:
144
- data = _context.sent;
145
- if (data.success) {
146
- _context.next = 12;
174
+ responseData = _context.sent;
175
+ if (!(responseData.success !== undefined)) {
176
+ _context.next = 16;
177
+ break;
178
+ }
179
+ if (responseData.success) {
180
+ _context.next = 13;
147
181
  break;
148
182
  }
149
183
  throw new Error('初始化失败:服务器返回错误');
150
- case 12:
151
- this.allData = data.data;
152
- this.lastSyncTime = data.data.syncTime;
184
+ case 13:
185
+ allSchemesData = responseData.data;
186
+ _context.next = 21;
187
+ break;
188
+ case 16:
189
+ if (!(responseData.columnSchemes !== undefined)) {
190
+ _context.next = 20;
191
+ break;
192
+ }
193
+ // 格式2: 直接返回 AllSchemesData
194
+ allSchemesData = responseData;
195
+ _context.next = 21;
196
+ break;
197
+ case 20:
198
+ throw new Error('初始化失败:服务器返回的数据格式不正确');
199
+ case 21:
200
+ // 反序列化从后端接收的数据
201
+ this.allData = this.deserializeSchemesData(allSchemesData);
202
+ this.lastSyncTime = allSchemesData.syncTime || 0;
153
203
  this.initialized = true;
154
204
 
155
205
  // 启动后台同步
@@ -161,18 +211,18 @@ export var SchemeSyncManager = /*#__PURE__*/function () {
161
211
  querySchemes: Object.keys(this.allData.querySchemes).length,
162
212
  syncTime: new Date(this.lastSyncTime).toISOString()
163
213
  });
164
- _context.next = 23;
214
+ _context.next = 32;
165
215
  break;
166
- case 19:
167
- _context.prev = 19;
216
+ case 28:
217
+ _context.prev = 28;
168
218
  _context.t0 = _context["catch"](3);
169
219
  console.error('[SchemeSyncManager] 初始化失败:', _context.t0);
170
220
  throw _context.t0;
171
- case 23:
221
+ case 32:
172
222
  case "end":
173
223
  return _context.stop();
174
224
  }
175
- }, _callee, this, [[3, 19]]);
225
+ }, _callee, this, [[3, 28]]);
176
226
  }));
177
227
  function initialize() {
178
228
  return _initialize.apply(this, arguments);
@@ -350,7 +400,7 @@ export var SchemeSyncManager = /*#__PURE__*/function () {
350
400
  var _this$events$onSyncSt,
351
401
  _this$events,
352
402
  _this4 = this;
353
- var _this$events$onSyncSu, _this$events3, _result$conflicts, requestData, dirtyColumnGrids, dirtyQueryGrids, dirtyCurrentGrids, response, result, _this$events$onConfli, _this$events2, _this$events$onSyncEr, _this$events4;
403
+ var _this$events$onSyncSu, _this$events3, _syncResult$conflicts, requestData, dirtyColumnGrids, dirtyQueryGrids, dirtyCurrentGrids, response, responseData, syncResult, _this$events$onConfli, _this$events2, _this$events$onSyncEr, _this$events4;
354
404
  return _regeneratorRuntime().wrap(function _callee2$(_context2) {
355
405
  while (1) switch (_context2.prev = _context2.next) {
356
406
  case 0:
@@ -384,19 +434,31 @@ export var SchemeSyncManager = /*#__PURE__*/function () {
384
434
  if (types.has('current')) dirtyCurrentGrids.add(gridId);
385
435
  });
386
436
 
387
- // 添加列方案数据
437
+ // 添加列方案数据(将 columnState 序列化为 JSON 字符串)
388
438
  if (dirtyColumnGrids.size > 0) {
389
439
  requestData.columnSchemes = {};
390
440
  dirtyColumnGrids.forEach(function (gridId) {
391
- requestData.columnSchemes[gridId] = _this4.allData.columnSchemes[gridId] || [];
441
+ var schemes = _this4.allData.columnSchemes[gridId] || [];
442
+ // 将每个方案的 columnState 从数组转换为 JSON 字符串
443
+ requestData.columnSchemes[gridId] = schemes.map(function (scheme) {
444
+ return _objectSpread(_objectSpread({}, scheme), {}, {
445
+ columnState: JSON.stringify(scheme.columnState)
446
+ });
447
+ });
392
448
  });
393
449
  }
394
450
 
395
- // 添加查询方案数据
451
+ // 添加查询方案数据(将 itemsOrder 序列化为 JSON 字符串)
396
452
  if (dirtyQueryGrids.size > 0) {
397
453
  requestData.querySchemes = {};
398
454
  dirtyQueryGrids.forEach(function (gridId) {
399
- requestData.querySchemes[gridId] = _this4.allData.querySchemes[gridId] || [];
455
+ var schemes = _this4.allData.querySchemes[gridId] || [];
456
+ // 将每个方案的 itemsOrder 从数组转换为 JSON 字符串
457
+ requestData.querySchemes[gridId] = schemes.map(function (scheme) {
458
+ return _objectSpread(_objectSpread({}, scheme), {}, {
459
+ itemsOrder: JSON.stringify(scheme.itemsOrder)
460
+ });
461
+ });
400
462
  });
401
463
  }
402
464
 
@@ -422,23 +484,46 @@ export var SchemeSyncManager = /*#__PURE__*/function () {
422
484
  _context2.next = 22;
423
485
  return response.json();
424
486
  case 22:
425
- result = _context2.sent;
426
- if (result.success) {
427
- _context2.next = 25;
487
+ responseData = _context2.sent;
488
+ if (!(responseData.success !== undefined)) {
489
+ _context2.next = 29;
490
+ break;
491
+ }
492
+ if (responseData.success) {
493
+ _context2.next = 26;
494
+ break;
495
+ }
496
+ throw new Error(responseData.error || '同步失败');
497
+ case 26:
498
+ syncResult = responseData;
499
+ _context2.next = 34;
500
+ break;
501
+ case 29:
502
+ if (!(responseData.syncTime !== undefined)) {
503
+ _context2.next = 33;
428
504
  break;
429
505
  }
430
- throw new Error(result.error || '同步失败');
431
- case 25:
506
+ // 格式2: 直接返回数据格式,构造一个兼容的结果对象
507
+ syncResult = {
508
+ success: true,
509
+ syncTime: responseData.syncTime,
510
+ conflicts: responseData.conflicts
511
+ };
512
+ _context2.next = 34;
513
+ break;
514
+ case 33:
515
+ throw new Error('同步失败:服务器返回的数据格式不正确');
516
+ case 34:
432
517
  // 处理冲突
433
- if (result.conflicts && result.conflicts.length > 0) {
434
- this.handleConflicts(result.conflicts);
435
- (_this$events$onConfli = (_this$events2 = this.events).onConflict) === null || _this$events$onConfli === void 0 || _this$events$onConfli.call(_this$events2, result.conflicts);
518
+ if (syncResult.conflicts && syncResult.conflicts.length > 0) {
519
+ this.handleConflicts(syncResult.conflicts);
520
+ (_this$events$onConfli = (_this$events2 = this.events).onConflict) === null || _this$events$onConfli === void 0 || _this$events$onConfli.call(_this$events2, syncResult.conflicts);
436
521
  }
437
522
 
438
523
  // 更新同步时间
439
- if (result.syncTime) {
440
- this.lastSyncTime = result.syncTime;
441
- this.allData.syncTime = result.syncTime;
524
+ if (syncResult.syncTime) {
525
+ this.lastSyncTime = syncResult.syncTime;
526
+ this.allData.syncTime = syncResult.syncTime;
442
527
  }
443
528
 
444
529
  // 清除脏数据标记
@@ -446,25 +531,25 @@ export var SchemeSyncManager = /*#__PURE__*/function () {
446
531
  (_this$events$onSyncSu = (_this$events3 = this.events).onSyncSuccess) === null || _this$events$onSyncSu === void 0 || _this$events$onSyncSu.call(_this$events3, this.lastSyncTime);
447
532
  console.log('[SchemeSyncManager] 同步成功:', {
448
533
  syncTime: new Date(this.lastSyncTime).toISOString(),
449
- conflicts: ((_result$conflicts = result.conflicts) === null || _result$conflicts === void 0 ? void 0 : _result$conflicts.length) || 0
534
+ conflicts: ((_syncResult$conflicts = syncResult.conflicts) === null || _syncResult$conflicts === void 0 ? void 0 : _syncResult$conflicts.length) || 0
450
535
  });
451
- _context2.next = 37;
536
+ _context2.next = 46;
452
537
  break;
453
- case 32:
454
- _context2.prev = 32;
538
+ case 41:
539
+ _context2.prev = 41;
455
540
  _context2.t0 = _context2["catch"](8);
456
541
  console.error('[SchemeSyncManager] 同步失败:', _context2.t0);
457
542
  (_this$events$onSyncEr = (_this$events4 = this.events).onSyncError) === null || _this$events$onSyncEr === void 0 || _this$events$onSyncEr.call(_this$events4, _context2.t0);
458
543
  throw _context2.t0;
459
- case 37:
460
- _context2.prev = 37;
544
+ case 46:
545
+ _context2.prev = 46;
461
546
  this.syncing = false;
462
- return _context2.finish(37);
463
- case 40:
547
+ return _context2.finish(46);
548
+ case 49:
464
549
  case "end":
465
550
  return _context2.stop();
466
551
  }
467
- }, _callee2, this, [[8, 32, 37, 40]]);
552
+ }, _callee2, this, [[8, 41, 46, 49]]);
468
553
  }));
469
554
  function syncNow() {
470
555
  return _syncNow.apply(this, arguments);
@@ -526,6 +611,48 @@ export var SchemeSyncManager = /*#__PURE__*/function () {
526
611
  type: type
527
612
  });
528
613
  }
614
+
615
+ /**
616
+ * 反序列化从后端接收的方案数据
617
+ * 将 columnState 和 itemsOrder 从 JSON 字符串转换为数组
618
+ */
619
+ }, {
620
+ key: "deserializeSchemesData",
621
+ value: function deserializeSchemesData(data) {
622
+ var result = _objectSpread(_objectSpread({}, data), {}, {
623
+ columnSchemes: {},
624
+ querySchemes: {}
625
+ });
626
+
627
+ // 反序列化列方案
628
+ Object.entries(data.columnSchemes || {}).forEach(function (_ref5) {
629
+ var _ref6 = _slicedToArray(_ref5, 2),
630
+ gridId = _ref6[0],
631
+ schemes = _ref6[1];
632
+ result.columnSchemes[gridId] = schemes.map(function (scheme) {
633
+ // 如果 columnState 是字符串,则解析为数组
634
+ var columnState = typeof scheme.columnState === 'string' ? JSON.parse(scheme.columnState) : scheme.columnState;
635
+ return _objectSpread(_objectSpread({}, scheme), {}, {
636
+ columnState: columnState
637
+ });
638
+ });
639
+ });
640
+
641
+ // 反序列化查询方案
642
+ Object.entries(data.querySchemes || {}).forEach(function (_ref7) {
643
+ var _ref8 = _slicedToArray(_ref7, 2),
644
+ gridId = _ref8[0],
645
+ schemes = _ref8[1];
646
+ result.querySchemes[gridId] = schemes.map(function (scheme) {
647
+ // 如果 itemsOrder 是字符串,则解析为数组
648
+ var itemsOrder = typeof scheme.itemsOrder === 'string' ? JSON.parse(scheme.itemsOrder) : scheme.itemsOrder;
649
+ return _objectSpread(_objectSpread({}, scheme), {}, {
650
+ itemsOrder: itemsOrder
651
+ });
652
+ });
653
+ });
654
+ return result;
655
+ }
529
656
  }, {
530
657
  key: "fetchWithRetry",
531
658
  value: (