@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.
- package/dist/cjs/ag-grid-plus/ag-gridPlus.d.ts +0 -1
- package/dist/cjs/ag-grid-plus/ag-gridPlus.js +57 -3
- package/dist/cjs/ag-grid-plus/interface.d.ts +19 -0
- package/dist/cjs/ag-grid-plus/storage/SchemeSyncManager.d.ts +5 -0
- package/dist/cjs/ag-grid-plus/storage/SchemeSyncManager.js +166 -39
- package/dist/esm/ag-grid-plus/ag-gridPlus.d.ts +0 -1
- package/dist/esm/ag-grid-plus/ag-gridPlus.js +58 -3
- package/dist/esm/ag-grid-plus/interface.d.ts +19 -0
- package/dist/esm/ag-grid-plus/storage/SchemeSyncManager.d.ts +5 -0
- package/dist/esm/ag-grid-plus/storage/SchemeSyncManager.js +166 -39
- package/dist/umd/qc-ui.min.js +1 -1
- package/package.json +4 -4
|
@@ -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
|
/**
|
|
@@ -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:
|
|
64
|
-
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,
|
|
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
|
-
|
|
145
|
-
if (
|
|
146
|
-
_context.next =
|
|
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
|
|
151
|
-
|
|
152
|
-
|
|
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 =
|
|
214
|
+
_context.next = 32;
|
|
165
215
|
break;
|
|
166
|
-
case
|
|
167
|
-
_context.prev =
|
|
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
|
|
221
|
+
case 32:
|
|
172
222
|
case "end":
|
|
173
223
|
return _context.stop();
|
|
174
224
|
}
|
|
175
|
-
}, _callee, this, [[3,
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
426
|
-
if (
|
|
427
|
-
_context2.next =
|
|
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
|
-
|
|
431
|
-
|
|
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 (
|
|
434
|
-
this.handleConflicts(
|
|
435
|
-
(_this$events$onConfli = (_this$events2 = this.events).onConflict) === null || _this$events$onConfli === void 0 || _this$events$onConfli.call(_this$events2,
|
|
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 (
|
|
440
|
-
this.lastSyncTime =
|
|
441
|
-
this.allData.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: ((
|
|
534
|
+
conflicts: ((_syncResult$conflicts = syncResult.conflicts) === null || _syncResult$conflicts === void 0 ? void 0 : _syncResult$conflicts.length) || 0
|
|
450
535
|
});
|
|
451
|
-
_context2.next =
|
|
536
|
+
_context2.next = 46;
|
|
452
537
|
break;
|
|
453
|
-
case
|
|
454
|
-
_context2.prev =
|
|
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
|
|
460
|
-
_context2.prev =
|
|
544
|
+
case 46:
|
|
545
|
+
_context2.prev = 46;
|
|
461
546
|
this.syncing = false;
|
|
462
|
-
return _context2.finish(
|
|
463
|
-
case
|
|
547
|
+
return _context2.finish(46);
|
|
548
|
+
case 49:
|
|
464
549
|
case "end":
|
|
465
550
|
return _context2.stop();
|
|
466
551
|
}
|
|
467
|
-
}, _callee2, this, [[8,
|
|
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: (
|