@nokecy/qc-ui 1.1.86 → 1.1.88
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.js +148 -144
- package/dist/cjs/ag-grid-plus/context/useSchemeDataFlow.js +4 -4
- package/dist/cjs/ag-grid-plus/errors/types.d.ts +9 -0
- package/dist/cjs/ag-grid-plus/errors/types.js +20 -0
- package/dist/cjs/ag-grid-plus/interface.d.ts +2 -0
- package/dist/cjs/ag-grid-plus/locale.d.ts +413 -1
- package/dist/cjs/ag-grid-plus/locale.js +14 -3
- package/dist/cjs/ag-grid-plus/queryForm/index.d.ts +2 -0
- package/dist/cjs/ag-grid-plus/queryForm/index.js +47 -51
- package/dist/cjs/ag-grid-plus/queryForm/queryColumns.d.ts +8 -0
- package/dist/cjs/ag-grid-plus/queryForm/queryColumns.js +52 -0
- package/dist/cjs/ag-grid-plus/queryForm/schemaKey.d.ts +15 -8
- package/dist/cjs/ag-grid-plus/queryForm/schemaKey.js +64 -12
- package/dist/cjs/ag-grid-plus/setting/ColumnConfigForm.js +3 -0
- package/dist/cjs/ag-grid-plus/setting/ColumnSetting.js +69 -106
- package/dist/cjs/ag-grid-plus/setting/QuerySchemeManager.js +3 -1
- package/dist/cjs/ag-grid-plus/setting/columnGroupTypes.d.ts +2 -0
- package/dist/cjs/ag-grid-plus/setting/columnGroupUtils.d.ts +14 -0
- package/dist/cjs/ag-grid-plus/setting/columnGroupUtils.js +98 -110
- package/dist/cjs/ag-grid-plus/types.d.ts +6 -0
- package/dist/cjs/array-table/batchRemove.d.ts +36 -0
- package/dist/cjs/array-table/batchRemove.js +299 -0
- package/dist/cjs/array-table/cellFocusScope.js +58 -7
- package/dist/cjs/array-table/cellInteractionLock.d.ts +13 -0
- package/dist/cjs/array-table/cellInteractionLock.js +26 -0
- package/dist/cjs/array-table/hooks.d.ts +11 -6
- package/dist/cjs/array-table/hooks.js +138 -88
- package/dist/cjs/array-table/index.d.ts +8 -2
- package/dist/cjs/array-table/index.js +55 -32
- package/dist/cjs/array-table/indexColumn.d.ts +1 -1
- package/dist/cjs/array-table/indexColumn.js +3 -2
- package/dist/cjs/array-table/interface.d.ts +13 -1
- package/dist/cjs/array-table/preview.js +8 -0
- package/dist/cjs/array-table/readOnlyFormatters.d.ts +9 -1
- package/dist/cjs/array-table/readOnlyFormatters.js +41 -13
- package/dist/cjs/array-table/rowIdentity.d.ts +17 -0
- package/dist/cjs/array-table/rowIdentity.js +43 -0
- package/dist/cjs/array-table/sorting.d.ts +3 -0
- package/dist/cjs/array-table/sorting.js +46 -0
- package/dist/cjs/array-table/utils.js +146 -67
- package/dist/cjs/dialogSelect/index.d.ts +3 -0
- package/dist/cjs/dialogSelect/index.js +13 -3
- package/dist/cjs/editable/index.js +101 -139
- package/dist/cjs/index.d.ts +2 -2
- package/dist/cjs/index.js +14 -0
- package/dist/cjs/readPretty/arrayTable.js +29 -14
- package/dist/cjs/readPretty/formily.d.ts +1 -0
- package/dist/cjs/readPretty/formily.js +7 -0
- package/dist/cjs/readPretty/index.d.ts +1 -0
- package/dist/cjs/readPretty/index.js +7 -0
- package/dist/cjs/readPretty/schemaScope.d.ts +2 -0
- package/dist/cjs/readPretty/schemaScope.js +49 -0
- package/dist/cjs/standardList/emptyState.js +9 -0
- package/dist/esm/ag-grid-plus/ag-gridPlus.js +148 -144
- package/dist/esm/ag-grid-plus/context/useSchemeDataFlow.js +4 -4
- package/dist/esm/ag-grid-plus/errors/types.d.ts +9 -0
- package/dist/esm/ag-grid-plus/errors/types.js +20 -0
- package/dist/esm/ag-grid-plus/interface.d.ts +2 -0
- package/dist/esm/ag-grid-plus/locale.d.ts +413 -1
- package/dist/esm/ag-grid-plus/locale.js +15 -3
- package/dist/esm/ag-grid-plus/queryForm/index.d.ts +2 -0
- package/dist/esm/ag-grid-plus/queryForm/index.js +47 -52
- package/dist/esm/ag-grid-plus/queryForm/queryColumns.d.ts +8 -0
- package/dist/esm/ag-grid-plus/queryForm/queryColumns.js +46 -0
- package/dist/esm/ag-grid-plus/queryForm/schemaKey.d.ts +15 -8
- package/dist/esm/ag-grid-plus/queryForm/schemaKey.js +64 -12
- package/dist/esm/ag-grid-plus/setting/ColumnConfigForm.js +3 -0
- package/dist/esm/ag-grid-plus/setting/ColumnSetting.js +70 -107
- package/dist/esm/ag-grid-plus/setting/QuerySchemeManager.js +3 -1
- package/dist/esm/ag-grid-plus/setting/columnGroupTypes.d.ts +2 -0
- package/dist/esm/ag-grid-plus/setting/columnGroupUtils.d.ts +14 -0
- package/dist/esm/ag-grid-plus/setting/columnGroupUtils.js +95 -110
- package/dist/esm/ag-grid-plus/types.d.ts +6 -0
- package/dist/esm/array-table/batchRemove.d.ts +36 -0
- package/dist/esm/array-table/batchRemove.js +289 -0
- package/dist/esm/array-table/cellFocusScope.js +59 -8
- package/dist/esm/array-table/cellInteractionLock.d.ts +13 -0
- package/dist/esm/array-table/cellInteractionLock.js +21 -0
- package/dist/esm/array-table/hooks.d.ts +11 -6
- package/dist/esm/array-table/hooks.js +139 -89
- package/dist/esm/array-table/index.d.ts +8 -2
- package/dist/esm/array-table/index.js +55 -32
- package/dist/esm/array-table/indexColumn.d.ts +1 -1
- package/dist/esm/array-table/indexColumn.js +3 -2
- package/dist/esm/array-table/interface.d.ts +13 -1
- package/dist/esm/array-table/preview.js +8 -0
- package/dist/esm/array-table/readOnlyFormatters.d.ts +9 -1
- package/dist/esm/array-table/readOnlyFormatters.js +41 -12
- package/dist/esm/array-table/rowIdentity.d.ts +17 -0
- package/dist/esm/array-table/rowIdentity.js +37 -0
- package/dist/esm/array-table/sorting.d.ts +3 -0
- package/dist/esm/array-table/sorting.js +40 -0
- package/dist/esm/array-table/utils.js +147 -68
- package/dist/esm/dialogSelect/index.d.ts +3 -0
- package/dist/esm/dialogSelect/index.js +13 -3
- package/dist/esm/editable/index.js +102 -140
- package/dist/esm/index.d.ts +2 -2
- package/dist/esm/index.js +1 -1
- package/dist/esm/readPretty/arrayTable.js +30 -13
- package/dist/esm/readPretty/formily.d.ts +1 -0
- package/dist/esm/readPretty/formily.js +1 -0
- package/dist/esm/readPretty/index.d.ts +1 -0
- package/dist/esm/readPretty/index.js +1 -0
- package/dist/esm/readPretty/schemaScope.d.ts +2 -0
- package/dist/esm/readPretty/schemaScope.js +42 -0
- package/dist/esm/standardList/emptyState.js +9 -0
- package/dist/umd/qc-ui.min.js +1 -1
- package/package.json +3 -1
|
@@ -85,6 +85,7 @@ function useDeepCompareStable(value) {
|
|
|
85
85
|
return ref.current;
|
|
86
86
|
}
|
|
87
87
|
function AgGridPlus(props) {
|
|
88
|
+
var _ref;
|
|
88
89
|
var gridTheme = (0, _theme.useAgGridTheme)();
|
|
89
90
|
var _theme$useToken = _antd.theme.useToken(),
|
|
90
91
|
token = _theme$useToken.token; // 高级筛选入口跟随主题及客户主色。@author nokecy
|
|
@@ -236,35 +237,6 @@ function AgGridPlus(props) {
|
|
|
236
237
|
_useState28 = _slicedToArray(_useState27, 2),
|
|
237
238
|
advancedQueryRules = _useState28[0],
|
|
238
239
|
setAdvancedQueryRules = _useState28[1];
|
|
239
|
-
|
|
240
|
-
/**
|
|
241
|
-
* 【P1 架构优化】使用单向数据流架构
|
|
242
|
-
*
|
|
243
|
-
* 数据流层次:
|
|
244
|
-
* 1. Source of Truth: useSchemeDataFlow (Scheme State)
|
|
245
|
-
* 2. Derived State: derivedColumnDefs/derivedColumnState (只读派生)
|
|
246
|
-
* 3. UI State: Context State (仅用于 UI 交互)
|
|
247
|
-
*
|
|
248
|
-
* 优势:
|
|
249
|
-
* - 清晰的数据流向(单向可追踪)
|
|
250
|
-
* - 消除状态同步冲突(单一数据源)
|
|
251
|
-
* - 架构清晰度 +60%,Bug -40%
|
|
252
|
-
*/
|
|
253
|
-
var schemeDataFlow = (0, _useSchemeDataFlow.useSchemeDataFlow)(gridKey || '', allColDefsRef.current, {
|
|
254
|
-
columnSchemes: columnSchemes,
|
|
255
|
-
querySchemes: querySchemes,
|
|
256
|
-
currentSchemes: currentSchemes
|
|
257
|
-
});
|
|
258
|
-
|
|
259
|
-
// 解构单向数据流的数据
|
|
260
|
-
var currentColumnSchemes = schemeDataFlow.columnSchemes,
|
|
261
|
-
currentColumnScheme = schemeDataFlow.currentColumnScheme,
|
|
262
|
-
currentQuerySchemes = schemeDataFlow.querySchemes,
|
|
263
|
-
currentQueryScheme = schemeDataFlow.currentQueryScheme,
|
|
264
|
-
derivedColumnDefs = schemeDataFlow.derivedColumnDefs,
|
|
265
|
-
derivedColumnState = schemeDataFlow.derivedColumnState,
|
|
266
|
-
isUsingGlobalFallback = schemeDataFlow.isUsingGlobalFallback,
|
|
267
|
-
isUsingGlobalQueryFallback = schemeDataFlow.isUsingGlobalQueryFallback;
|
|
268
240
|
(0, _react.useImperativeHandle)(propsGridRef, function () {
|
|
269
241
|
return gridRef.current;
|
|
270
242
|
});
|
|
@@ -321,117 +293,6 @@ function AgGridPlus(props) {
|
|
|
321
293
|
|
|
322
294
|
// 用于列类型推断的首行数据。为什么必须是 state 而不是 ref,见该 hook 的注释。@author nokecy
|
|
323
295
|
var typeInferenceRow = (0, _useTypeInferenceRow.useTypeInferenceRow)(rowData);
|
|
324
|
-
|
|
325
|
-
/**
|
|
326
|
-
* 【P0 + P1 优化】使用派生状态应用方案(单向数据流)
|
|
327
|
-
*
|
|
328
|
-
* 优势:
|
|
329
|
-
* 1. 使用已派生的状态,避免重复计算
|
|
330
|
-
* 2. 单向数据流,状态同步更可靠
|
|
331
|
-
* 3. 性能提升 67%,代码更清晰
|
|
332
|
-
* 4. 使用 Promise 链和 requestAnimationFrame 解决竞态条件
|
|
333
|
-
*/
|
|
334
|
-
(0, _react.useEffect)(function () {
|
|
335
|
-
if (!gridKey || !apiRef.current) return;
|
|
336
|
-
|
|
337
|
-
// 使用 Promise 链确保顺序执行,避免竞态条件
|
|
338
|
-
var cancelled = false;
|
|
339
|
-
Promise.resolve().then(function () {
|
|
340
|
-
if (cancelled || !apiRef.current) return;
|
|
341
|
-
|
|
342
|
-
// 1. 应用派生的列状态(使用 applyColumnState API)
|
|
343
|
-
if (derivedColumnState && derivedColumnState.length > 0) {
|
|
344
|
-
// 使用 applyColumnState 而不是 setGridOption("columnDefs")
|
|
345
|
-
apiRef.current.applyColumnState({
|
|
346
|
-
state: derivedColumnState,
|
|
347
|
-
applyOrder: true // 应用列顺序
|
|
348
|
-
});
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
// 2. 应用派生的列样式
|
|
352
|
-
if (derivedColumnState) {
|
|
353
|
-
setColumnCellClass(handelgridPlusColumnState(derivedColumnState));
|
|
354
|
-
}
|
|
355
|
-
}).then(function () {
|
|
356
|
-
// 等待 Grid 状态稳定(使用 requestAnimationFrame 而非固定延迟)
|
|
357
|
-
return new Promise(function (resolve) {
|
|
358
|
-
if (cancelled) {
|
|
359
|
-
resolve();
|
|
360
|
-
return;
|
|
361
|
-
}
|
|
362
|
-
requestAnimationFrame(function () {
|
|
363
|
-
// 双重 RAF 确保渲染完成
|
|
364
|
-
requestAnimationFrame(function () {
|
|
365
|
-
return resolve();
|
|
366
|
-
});
|
|
367
|
-
});
|
|
368
|
-
});
|
|
369
|
-
}).then(function () {
|
|
370
|
-
if (cancelled || !apiRef.current) return;
|
|
371
|
-
|
|
372
|
-
// 3. 应用过滤器(在列状态稳定后执行)
|
|
373
|
-
if (currentColumnScheme !== null && currentColumnScheme !== void 0 && currentColumnScheme.filterModel) {
|
|
374
|
-
apiRef.current.setFilterModel(currentColumnScheme.filterModel);
|
|
375
|
-
}
|
|
376
|
-
}).catch(function (error) {
|
|
377
|
-
if (!cancelled) {
|
|
378
|
-
console.error('[AgGridPlus] 应用方案失败:', error);
|
|
379
|
-
_logger.logger.error('[AgGridPlus] 应用方案失败', error);
|
|
380
|
-
}
|
|
381
|
-
});
|
|
382
|
-
|
|
383
|
-
// 清理函数:取消进行中的操作
|
|
384
|
-
return function () {
|
|
385
|
-
cancelled = true;
|
|
386
|
-
};
|
|
387
|
-
}, [gridKey, currentColumnScheme === null || currentColumnScheme === void 0 ? void 0 : currentColumnScheme.id, derivedColumnState, ready // 添加 ready 依赖,确保 Grid 初始化完成后再应用方案
|
|
388
|
-
]);
|
|
389
|
-
|
|
390
|
-
/**
|
|
391
|
-
* 【新增】监听当前方案 ID 变化,当方案被删除时重置列状态
|
|
392
|
-
*
|
|
393
|
-
* 场景:
|
|
394
|
-
* - 用户删除当前正在使用的方案
|
|
395
|
-
* - currentColumnScheme?.id 从有值变为 null
|
|
396
|
-
*
|
|
397
|
-
* 行为:
|
|
398
|
-
* - 重置列状态为初始状态(默认顺序、宽度等)
|
|
399
|
-
* - 清除所有过滤器
|
|
400
|
-
* - 清除列样式配置
|
|
401
|
-
*
|
|
402
|
-
* 优势:
|
|
403
|
-
* - 符合单向数据流架构
|
|
404
|
-
* - 适用于所有方案切换场景(删除/取消选择)
|
|
405
|
-
* - 用户体验好,自动恢复到初始状态
|
|
406
|
-
*/
|
|
407
|
-
var prevSchemeIdRef = (0, _react.useRef)(currentColumnScheme === null || currentColumnScheme === void 0 ? void 0 : currentColumnScheme.id);
|
|
408
|
-
(0, _react.useEffect)(function () {
|
|
409
|
-
if (!gridKey || !apiRef.current || !ready) return;
|
|
410
|
-
var prevSchemeId = prevSchemeIdRef.current;
|
|
411
|
-
var currentSchemeId = currentColumnScheme === null || currentColumnScheme === void 0 ? void 0 : currentColumnScheme.id;
|
|
412
|
-
|
|
413
|
-
// 检测方案被删除:从有值变为 null/undefined
|
|
414
|
-
if (prevSchemeId && !currentSchemeId) {
|
|
415
|
-
Promise.resolve().then(function () {
|
|
416
|
-
if (!apiRef.current) return;
|
|
417
|
-
|
|
418
|
-
// 1. 重置列状态为初始状态
|
|
419
|
-
apiRef.current.resetColumnState();
|
|
420
|
-
|
|
421
|
-
// 2. 清除所有过滤器
|
|
422
|
-
apiRef.current.setFilterModel(null);
|
|
423
|
-
|
|
424
|
-
// 3. 清除列样式配置
|
|
425
|
-
setColumnCellClass({});
|
|
426
|
-
}).catch(function (error) {
|
|
427
|
-
console.error('[AgGridPlus] 重置列状态失败:', error);
|
|
428
|
-
_logger.logger.error('[AgGridPlus] 重置列状态失败', error);
|
|
429
|
-
});
|
|
430
|
-
}
|
|
431
|
-
|
|
432
|
-
// 更新引用
|
|
433
|
-
prevSchemeIdRef.current = currentSchemeId;
|
|
434
|
-
}, [gridKey, currentColumnScheme === null || currentColumnScheme === void 0 ? void 0 : currentColumnScheme.id, ready]);
|
|
435
296
|
(0, _react.useEffect)(function () {
|
|
436
297
|
setRowData(dataSource || propRowData || []);
|
|
437
298
|
}, [dataSource, propRowData]);
|
|
@@ -570,6 +431,147 @@ function AgGridPlus(props) {
|
|
|
570
431
|
return cols;
|
|
571
432
|
}, [_react.default.Children.count(children), props.columnDefs, extensibleColumns, gridKey, entityType, hostEntityExtensions, typeInferenceRow, valueEnumContrast ? token.colorBgContainer : undefined]);
|
|
572
433
|
|
|
434
|
+
// 方案派生依赖本轮源码列,避免读取尚未更新的 ref 快照。@author nokecy
|
|
435
|
+
/**
|
|
436
|
+
* 【P1 架构优化】使用单向数据流架构
|
|
437
|
+
*
|
|
438
|
+
* 数据流层次:
|
|
439
|
+
* 1. Source of Truth: useSchemeDataFlow (Scheme State)
|
|
440
|
+
* 2. Derived State: derivedColumnDefs/derivedColumnState (只读派生)
|
|
441
|
+
* 3. UI State: Context State (仅用于 UI 交互)
|
|
442
|
+
*
|
|
443
|
+
* 优势:
|
|
444
|
+
* - 清晰的数据流向(单向可追踪)
|
|
445
|
+
* - 消除状态同步冲突(单一数据源)
|
|
446
|
+
* - 架构清晰度 +60%,Bug -40%
|
|
447
|
+
*/
|
|
448
|
+
var schemeDataFlow = (0, _useSchemeDataFlow.useSchemeDataFlow)(gridKey || '', allColDefs, {
|
|
449
|
+
columnSchemes: columnSchemes,
|
|
450
|
+
querySchemes: querySchemes,
|
|
451
|
+
currentSchemes: currentSchemes
|
|
452
|
+
});
|
|
453
|
+
|
|
454
|
+
// 解构单向数据流的数据
|
|
455
|
+
var currentColumnSchemes = schemeDataFlow.columnSchemes,
|
|
456
|
+
currentColumnScheme = schemeDataFlow.currentColumnScheme,
|
|
457
|
+
currentQuerySchemes = schemeDataFlow.querySchemes,
|
|
458
|
+
currentQueryScheme = schemeDataFlow.currentQueryScheme,
|
|
459
|
+
derivedColumnDefs = schemeDataFlow.derivedColumnDefs,
|
|
460
|
+
derivedColumnState = schemeDataFlow.derivedColumnState,
|
|
461
|
+
isUsingGlobalFallback = schemeDataFlow.isUsingGlobalFallback,
|
|
462
|
+
isUsingGlobalQueryFallback = schemeDataFlow.isUsingGlobalQueryFallback;
|
|
463
|
+
|
|
464
|
+
/**
|
|
465
|
+
* 【P0 + P1 优化】使用派生状态应用方案(单向数据流)
|
|
466
|
+
*
|
|
467
|
+
* 优势:
|
|
468
|
+
* 1. 使用已派生的状态,避免重复计算
|
|
469
|
+
* 2. 单向数据流,状态同步更可靠
|
|
470
|
+
* 3. 性能提升 67%,代码更清晰
|
|
471
|
+
* 4. 使用 Promise 链和 requestAnimationFrame 解决竞态条件
|
|
472
|
+
*/
|
|
473
|
+
(0, _react.useEffect)(function () {
|
|
474
|
+
if (!gridKey || !apiRef.current) return;
|
|
475
|
+
|
|
476
|
+
// 使用 Promise 链确保顺序执行,避免竞态条件
|
|
477
|
+
var cancelled = false;
|
|
478
|
+
Promise.resolve().then(function () {
|
|
479
|
+
if (cancelled || !apiRef.current) return;
|
|
480
|
+
|
|
481
|
+
// 1. 应用派生的列状态(使用 applyColumnState API)
|
|
482
|
+
if (derivedColumnState && derivedColumnState.length > 0) {
|
|
483
|
+
// 使用 applyColumnState 而不是 setGridOption("columnDefs")
|
|
484
|
+
apiRef.current.applyColumnState({
|
|
485
|
+
state: derivedColumnState,
|
|
486
|
+
applyOrder: true // 应用列顺序
|
|
487
|
+
});
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
// 2. 应用派生的列样式
|
|
491
|
+
if (derivedColumnState) {
|
|
492
|
+
setColumnCellClass(handelgridPlusColumnState(derivedColumnState));
|
|
493
|
+
}
|
|
494
|
+
}).then(function () {
|
|
495
|
+
// 等待 Grid 状态稳定(使用 requestAnimationFrame 而非固定延迟)
|
|
496
|
+
return new Promise(function (resolve) {
|
|
497
|
+
if (cancelled) {
|
|
498
|
+
resolve();
|
|
499
|
+
return;
|
|
500
|
+
}
|
|
501
|
+
requestAnimationFrame(function () {
|
|
502
|
+
// 双重 RAF 确保渲染完成
|
|
503
|
+
requestAnimationFrame(function () {
|
|
504
|
+
return resolve();
|
|
505
|
+
});
|
|
506
|
+
});
|
|
507
|
+
});
|
|
508
|
+
}).then(function () {
|
|
509
|
+
if (cancelled || !apiRef.current) return;
|
|
510
|
+
|
|
511
|
+
// 3. 应用过滤器(在列状态稳定后执行)
|
|
512
|
+
if (currentColumnScheme !== null && currentColumnScheme !== void 0 && currentColumnScheme.filterModel) {
|
|
513
|
+
apiRef.current.setFilterModel(currentColumnScheme.filterModel);
|
|
514
|
+
}
|
|
515
|
+
}).catch(function (error) {
|
|
516
|
+
if (!cancelled) {
|
|
517
|
+
console.error('[AgGridPlus] 应用方案失败:', error);
|
|
518
|
+
_logger.logger.error('[AgGridPlus] 应用方案失败', error);
|
|
519
|
+
}
|
|
520
|
+
});
|
|
521
|
+
|
|
522
|
+
// 清理函数:取消进行中的操作
|
|
523
|
+
return function () {
|
|
524
|
+
cancelled = true;
|
|
525
|
+
};
|
|
526
|
+
}, [gridKey, currentColumnScheme === null || currentColumnScheme === void 0 ? void 0 : currentColumnScheme.id, derivedColumnState, ready // 添加 ready 依赖,确保 Grid 初始化完成后再应用方案
|
|
527
|
+
]);
|
|
528
|
+
|
|
529
|
+
/**
|
|
530
|
+
* 【新增】监听当前方案 ID 变化,当方案被删除时重置列状态
|
|
531
|
+
*
|
|
532
|
+
* 场景:
|
|
533
|
+
* - 用户删除当前正在使用的方案
|
|
534
|
+
* - currentColumnScheme?.id 从有值变为 null
|
|
535
|
+
*
|
|
536
|
+
* 行为:
|
|
537
|
+
* - 重置列状态为初始状态(默认顺序、宽度等)
|
|
538
|
+
* - 清除所有过滤器
|
|
539
|
+
* - 清除列样式配置
|
|
540
|
+
*
|
|
541
|
+
* 优势:
|
|
542
|
+
* - 符合单向数据流架构
|
|
543
|
+
* - 适用于所有方案切换场景(删除/取消选择)
|
|
544
|
+
* - 用户体验好,自动恢复到初始状态
|
|
545
|
+
*/
|
|
546
|
+
var prevSchemeIdRef = (0, _react.useRef)(currentColumnScheme === null || currentColumnScheme === void 0 ? void 0 : currentColumnScheme.id);
|
|
547
|
+
(0, _react.useEffect)(function () {
|
|
548
|
+
if (!gridKey || !apiRef.current || !ready) return;
|
|
549
|
+
var prevSchemeId = prevSchemeIdRef.current;
|
|
550
|
+
var currentSchemeId = currentColumnScheme === null || currentColumnScheme === void 0 ? void 0 : currentColumnScheme.id;
|
|
551
|
+
|
|
552
|
+
// 检测方案被删除:从有值变为 null/undefined
|
|
553
|
+
if (prevSchemeId && !currentSchemeId) {
|
|
554
|
+
Promise.resolve().then(function () {
|
|
555
|
+
if (!apiRef.current) return;
|
|
556
|
+
|
|
557
|
+
// 1. 重置列状态为初始状态
|
|
558
|
+
apiRef.current.resetColumnState();
|
|
559
|
+
|
|
560
|
+
// 2. 清除所有过滤器
|
|
561
|
+
apiRef.current.setFilterModel(null);
|
|
562
|
+
|
|
563
|
+
// 3. 清除列样式配置
|
|
564
|
+
setColumnCellClass({});
|
|
565
|
+
}).catch(function (error) {
|
|
566
|
+
console.error('[AgGridPlus] 重置列状态失败:', error);
|
|
567
|
+
_logger.logger.error('[AgGridPlus] 重置列状态失败', error);
|
|
568
|
+
});
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
// 更新引用
|
|
572
|
+
prevSchemeIdRef.current = currentSchemeId;
|
|
573
|
+
}, [gridKey, currentColumnScheme === null || currentColumnScheme === void 0 ? void 0 : currentColumnScheme.id, ready]);
|
|
574
|
+
|
|
573
575
|
// 稳定化 gridParams 和 sortColumn 的引用(深比较,内容不变即复用旧引用)
|
|
574
576
|
var stableGridParams = useDeepCompareStable(gridParams);
|
|
575
577
|
var stableSortColumn = useDeepCompareStable(sortColumn);
|
|
@@ -1018,10 +1020,11 @@ function AgGridPlus(props) {
|
|
|
1018
1020
|
|
|
1019
1021
|
// 构建查询表单项(带 order 属性)
|
|
1020
1022
|
var queryFormItems = (0, _react.useMemo)(function () {
|
|
1021
|
-
var
|
|
1022
|
-
|
|
1023
|
+
var _flattenColumnState;
|
|
1024
|
+
// 查询方案按叶列排序和隐藏,分组本身不作为查询字段。@author nokecy
|
|
1025
|
+
var items = ((_flattenColumnState = (0, _processFormColumnState.default)(allColDefs)) === null || _flattenColumnState === void 0 || (_flattenColumnState = _flattenColumnState.filter(function (col) {
|
|
1023
1026
|
return col.filter !== false && !col.hideInSearch;
|
|
1024
|
-
})) === null ||
|
|
1027
|
+
})) === null || _flattenColumnState === void 0 ? void 0 : _flattenColumnState.map(function (col) {
|
|
1025
1028
|
var _col$queryField, _col$searchSort;
|
|
1026
1029
|
return _objectSpread({
|
|
1027
1030
|
field: (_col$queryField = col.queryField) !== null && _col$queryField !== void 0 ? _col$queryField : col.field,
|
|
@@ -1153,8 +1156,9 @@ function AgGridPlus(props) {
|
|
|
1153
1156
|
}
|
|
1154
1157
|
}, search == false ? null : /*#__PURE__*/_react.default.createElement(_queryForm.default, {
|
|
1155
1158
|
colDefs: (0, _processFormColumnState.default)(visibleFormItems),
|
|
1159
|
+
effectiveColDefs: (0, _processFormColumnState.default)(colDefs),
|
|
1156
1160
|
defaultRows: queryDefaultRows,
|
|
1157
|
-
columnStates: columnState
|
|
1161
|
+
columnStates: (_ref = derivedColumnState !== null && derivedColumnState !== void 0 ? derivedColumnState : columnState) !== null && _ref !== void 0 ? _ref : [],
|
|
1158
1162
|
defaultExpand: defaultSearchExpand,
|
|
1159
1163
|
gridApi: apiRef.current,
|
|
1160
1164
|
onQuery: function onQuery(formValues) {
|
|
@@ -179,8 +179,8 @@ function useDerivedGridState(currentScheme, allColDefs) {
|
|
|
179
179
|
console.error('[useDerivedGridState] 转换失败:', error);
|
|
180
180
|
return null;
|
|
181
181
|
}
|
|
182
|
-
}, [//
|
|
183
|
-
currentScheme === null || currentScheme === void 0 ? void 0 : currentScheme.id, allColDefs]);
|
|
182
|
+
}, [// 同一方案的内容修改也要重新派生,保持表格与查询区使用相同快照。@author nokecy
|
|
183
|
+
currentScheme === null || currentScheme === void 0 ? void 0 : currentScheme.id, currentScheme === null || currentScheme === void 0 ? void 0 : currentScheme.columnConfig, allColDefs]);
|
|
184
184
|
}
|
|
185
185
|
|
|
186
186
|
/**
|
|
@@ -215,8 +215,8 @@ function useDerivedColumnState(currentScheme, allColDefs) {
|
|
|
215
215
|
console.error('[useDerivedColumnState] 转换失败:', error);
|
|
216
216
|
return null;
|
|
217
217
|
}
|
|
218
|
-
}, [//
|
|
219
|
-
currentScheme === null || currentScheme === void 0 ? void 0 : currentScheme.id, allColDefs]);
|
|
218
|
+
}, [// 同一方案保存后 columnConfig 会更新,不能只比较方案 ID。@author nokecy
|
|
219
|
+
currentScheme === null || currentScheme === void 0 ? void 0 : currentScheme.id, currentScheme === null || currentScheme === void 0 ? void 0 : currentScheme.columnConfig, allColDefs]);
|
|
220
220
|
}
|
|
221
221
|
|
|
222
222
|
/**
|
|
@@ -51,6 +51,15 @@ export declare class GridPlusError extends Error {
|
|
|
51
51
|
* 获取用户友好的错误消息
|
|
52
52
|
*/
|
|
53
53
|
getUserMessage(): string;
|
|
54
|
+
/**
|
|
55
|
+
* 获取 ABP 远程服务返回的业务错误,供提示和列表空态保留准确原因。
|
|
56
|
+
*
|
|
57
|
+
* @author nokecy
|
|
58
|
+
*/
|
|
59
|
+
getRemoteServiceError(): {
|
|
60
|
+
code?: string;
|
|
61
|
+
message?: string;
|
|
62
|
+
} | undefined;
|
|
54
63
|
/**
|
|
55
64
|
* 获取错误详情(用于日志)
|
|
56
65
|
*/
|
|
@@ -87,6 +87,12 @@ var GridPlusError = exports.GridPlusError = /*#__PURE__*/function (_Error) {
|
|
|
87
87
|
_createClass(GridPlusError, [{
|
|
88
88
|
key: "getUserMessage",
|
|
89
89
|
value: function getUserMessage() {
|
|
90
|
+
var _this$getRemoteServic;
|
|
91
|
+
var remoteMessage = (_this$getRemoteServic = this.getRemoteServiceError()) === null || _this$getRemoteServic === void 0 ? void 0 : _this$getRemoteServic.message;
|
|
92
|
+
if (remoteMessage) {
|
|
93
|
+
return remoteMessage;
|
|
94
|
+
}
|
|
95
|
+
|
|
90
96
|
// 在生产环境下,返回更友好的消息
|
|
91
97
|
if (process.env.NODE_ENV === 'production') {
|
|
92
98
|
switch (this.type) {
|
|
@@ -109,6 +115,20 @@ var GridPlusError = exports.GridPlusError = /*#__PURE__*/function (_Error) {
|
|
|
109
115
|
return this.message;
|
|
110
116
|
}
|
|
111
117
|
|
|
118
|
+
/**
|
|
119
|
+
* 获取 ABP 远程服务返回的业务错误,供提示和列表空态保留准确原因。
|
|
120
|
+
*
|
|
121
|
+
* @author nokecy
|
|
122
|
+
*/
|
|
123
|
+
}, {
|
|
124
|
+
key: "getRemoteServiceError",
|
|
125
|
+
value: function getRemoteServiceError() {
|
|
126
|
+
var _this$context$origina, _this$context, _response;
|
|
127
|
+
var originalError = (_this$context$origina = (_this$context = this.context) === null || _this$context === void 0 ? void 0 : _this$context.originalError) !== null && _this$context$origina !== void 0 ? _this$context$origina : this.originalError;
|
|
128
|
+
var remoteError = originalError === null || originalError === void 0 || (_response = originalError.response) === null || _response === void 0 || (_response = _response.data) === null || _response === void 0 ? void 0 : _response.error;
|
|
129
|
+
return remoteError && _typeof(remoteError) === 'object' ? remoteError : undefined;
|
|
130
|
+
}
|
|
131
|
+
|
|
112
132
|
/**
|
|
113
133
|
* 获取错误详情(用于日志)
|
|
114
134
|
*/
|