@nokecy/qc-ui 1.1.30 → 1.1.32
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 +68 -9
- package/dist/cjs/ag-grid-plus/context/gridContext.d.ts +22 -0
- package/dist/cjs/ag-grid-plus/context/useSchemeManager.d.ts +3 -0
- package/dist/cjs/ag-grid-plus/context/useSchemeManager.js +160 -1
- package/dist/cjs/ag-grid-plus/index.d.ts +1 -0
- package/dist/cjs/ag-grid-plus/setting/ColumnSetting.js +192 -50
- package/dist/cjs/ag-grid-plus/shared/permissions/globalConfigPermissions.d.ts +22 -0
- package/dist/cjs/ag-grid-plus/shared/permissions/globalConfigPermissions.js +5 -0
- package/dist/cjs/ag-grid-plus/shared/storage/localStorageAdapter.d.ts +18 -0
- package/dist/cjs/ag-grid-plus/shared/storage/localStorageAdapter.js +114 -0
- package/dist/cjs/ag-grid-plus/shared/storage/schemeStorageAdapter.d.ts +25 -0
- package/dist/cjs/index.d.ts +1 -1
- package/dist/esm/ag-grid-plus/ag-gridPlus.js +68 -9
- package/dist/esm/ag-grid-plus/context/gridContext.d.ts +22 -0
- package/dist/esm/ag-grid-plus/context/useSchemeManager.d.ts +3 -0
- package/dist/esm/ag-grid-plus/context/useSchemeManager.js +160 -1
- package/dist/esm/ag-grid-plus/index.d.ts +1 -0
- package/dist/esm/ag-grid-plus/index.js +2 -0
- package/dist/esm/ag-grid-plus/setting/ColumnSetting.js +195 -51
- package/dist/esm/ag-grid-plus/shared/permissions/globalConfigPermissions.d.ts +22 -0
- package/dist/esm/ag-grid-plus/shared/permissions/globalConfigPermissions.js +1 -0
- package/dist/esm/ag-grid-plus/shared/storage/localStorageAdapter.d.ts +18 -0
- package/dist/esm/ag-grid-plus/shared/storage/localStorageAdapter.js +114 -0
- package/dist/esm/ag-grid-plus/shared/storage/schemeStorageAdapter.d.ts +25 -0
- package/dist/esm/index.d.ts +1 -1
- package/dist/umd/qc-ui.min.js +1 -1
- package/package.json +1 -1
|
@@ -25,7 +25,9 @@ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" !=
|
|
|
25
25
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
26
26
|
import React, { useState, useCallback, useMemo, useEffect } from 'react';
|
|
27
27
|
import { Modal, Tabs, Space, Button, Input, message, Popconfirm, Tag, Tooltip, Empty } from 'antd';
|
|
28
|
-
import { SaveOutlined, ReloadOutlined, EditOutlined, DeleteOutlined, StarOutlined, StarFilled, SearchOutlined
|
|
28
|
+
import { SaveOutlined, ReloadOutlined, EditOutlined, DeleteOutlined, StarOutlined, StarFilled, SearchOutlined,
|
|
29
|
+
// 全局配置相关图标
|
|
30
|
+
GlobalOutlined, RollbackOutlined, ClearOutlined, ExclamationCircleOutlined } from '@ant-design/icons';
|
|
29
31
|
import { AgGridReact } from 'ag-grid-react';
|
|
30
32
|
import { agGridTheme } from "../theme";
|
|
31
33
|
import { localeText } from "../locale";
|
|
@@ -41,7 +43,7 @@ var TextArea = Input.TextArea;
|
|
|
41
43
|
* 列方案管理组件 - 集成列配置和列方案管理
|
|
42
44
|
*/
|
|
43
45
|
var ColumnSetting = function ColumnSetting(_ref) {
|
|
44
|
-
var _currentSchemes$gridK4;
|
|
46
|
+
var _globalConfigPermissi, _globalConfigPermissi2, _currentSchemes$gridK4;
|
|
45
47
|
var gridKey = _ref.gridKey,
|
|
46
48
|
gridApi = _ref.gridApi,
|
|
47
49
|
visible = _ref.visible,
|
|
@@ -55,7 +57,15 @@ var ColumnSetting = function ColumnSetting(_ref) {
|
|
|
55
57
|
initialColumnDefs = _useGridSchemes.initialColumnDefs,
|
|
56
58
|
saveColumnScheme = _useGridSchemes.saveColumnScheme,
|
|
57
59
|
deleteColumnScheme = _useGridSchemes.deleteColumnScheme,
|
|
58
|
-
setCurrentColumnScheme = _useGridSchemes.setCurrentColumnScheme
|
|
60
|
+
setCurrentColumnScheme = _useGridSchemes.setCurrentColumnScheme,
|
|
61
|
+
applySchemeToGlobal = _useGridSchemes.applySchemeToGlobal,
|
|
62
|
+
resetToGlobal = _useGridSchemes.resetToGlobal,
|
|
63
|
+
resetAllUsers = _useGridSchemes.resetAllUsers,
|
|
64
|
+
globalConfigPermissions = _useGridSchemes.globalConfigPermissions;
|
|
65
|
+
|
|
66
|
+
// 解构权限信息
|
|
67
|
+
var canApplyToGlobal = (_globalConfigPermissi = globalConfigPermissions === null || globalConfigPermissions === void 0 ? void 0 : globalConfigPermissions.canApplyToGlobal) !== null && _globalConfigPermissi !== void 0 ? _globalConfigPermissi : false;
|
|
68
|
+
var canResetAllUsers = (_globalConfigPermissi2 = globalConfigPermissions === null || globalConfigPermissions === void 0 ? void 0 : globalConfigPermissions.canResetAllUsers) !== null && _globalConfigPermissi2 !== void 0 ? _globalConfigPermissi2 : false;
|
|
59
69
|
|
|
60
70
|
// 获取当前表格的方案列表
|
|
61
71
|
var schemes = (columnSchemes === null || columnSchemes === void 0 ? void 0 : columnSchemes[gridKey]) || [];
|
|
@@ -505,9 +515,16 @@ var ColumnSetting = function ColumnSetting(_ref) {
|
|
|
505
515
|
_context2.prev = 8;
|
|
506
516
|
filterModel = gridApi.getFilterModel();
|
|
507
517
|
if (!currentScheme) {
|
|
508
|
-
_context2.next =
|
|
518
|
+
_context2.next = 21;
|
|
519
|
+
break;
|
|
520
|
+
}
|
|
521
|
+
if (!(currentScheme.isGlobal && !canApplyToGlobal)) {
|
|
522
|
+
_context2.next = 14;
|
|
509
523
|
break;
|
|
510
524
|
}
|
|
525
|
+
message.error('没有权限修改全局方案');
|
|
526
|
+
return _context2.abrupt("return");
|
|
527
|
+
case 14:
|
|
511
528
|
// 如果有激活的方案,更新该方案
|
|
512
529
|
createdAt = currentScheme.createdAt, updatedAt = currentScheme.updatedAt, schemeWithoutTimestamps = _objectWithoutProperties(currentScheme, _excluded);
|
|
513
530
|
savedScheme = _objectSpread(_objectSpread({}, schemeWithoutTimestamps), {}, {
|
|
@@ -515,21 +532,28 @@ var ColumnSetting = function ColumnSetting(_ref) {
|
|
|
515
532
|
filterModel: filterModel
|
|
516
533
|
// createdAt 和 updatedAt 由存储适配器自动生成
|
|
517
534
|
});
|
|
518
|
-
_context2.next =
|
|
535
|
+
_context2.next = 18;
|
|
519
536
|
return saveColumnScheme === null || saveColumnScheme === void 0 ? void 0 : saveColumnScheme(gridKey, savedScheme);
|
|
520
|
-
case
|
|
537
|
+
case 18:
|
|
521
538
|
message.success('列配置已保存到方案');
|
|
522
|
-
_context2.next =
|
|
539
|
+
_context2.next = 37;
|
|
523
540
|
break;
|
|
524
|
-
case
|
|
541
|
+
case 21:
|
|
525
542
|
// 如果没有激活的方案,自动创建或更新默认方案
|
|
526
543
|
defaultScheme = schemes.find(function (s) {
|
|
527
544
|
return s.isDefault;
|
|
528
545
|
});
|
|
529
546
|
if (!defaultScheme) {
|
|
530
|
-
_context2.next =
|
|
547
|
+
_context2.next = 33;
|
|
548
|
+
break;
|
|
549
|
+
}
|
|
550
|
+
if (!(defaultScheme.isGlobal && !canApplyToGlobal)) {
|
|
551
|
+
_context2.next = 26;
|
|
531
552
|
break;
|
|
532
553
|
}
|
|
554
|
+
message.error('没有权限修改全局方案');
|
|
555
|
+
return _context2.abrupt("return");
|
|
556
|
+
case 26:
|
|
533
557
|
// 更新默认方案
|
|
534
558
|
_createdAt = defaultScheme.createdAt, _updatedAt = defaultScheme.updatedAt, _schemeWithoutTimestamps = _objectWithoutProperties(defaultScheme, _excluded2);
|
|
535
559
|
savedScheme = _objectSpread(_objectSpread({}, _schemeWithoutTimestamps), {}, {
|
|
@@ -537,13 +561,13 @@ var ColumnSetting = function ColumnSetting(_ref) {
|
|
|
537
561
|
filterModel: filterModel
|
|
538
562
|
// createdAt 和 updatedAt 由存储适配器自动生成
|
|
539
563
|
});
|
|
540
|
-
_context2.next =
|
|
564
|
+
_context2.next = 30;
|
|
541
565
|
return saveColumnScheme === null || saveColumnScheme === void 0 ? void 0 : saveColumnScheme(gridKey, savedScheme);
|
|
542
|
-
case
|
|
566
|
+
case 30:
|
|
543
567
|
message.success('列配置已保存到默认方案');
|
|
544
|
-
_context2.next =
|
|
568
|
+
_context2.next = 37;
|
|
545
569
|
break;
|
|
546
|
-
case
|
|
570
|
+
case 33:
|
|
547
571
|
// 创建新的默认方案
|
|
548
572
|
savedScheme = {
|
|
549
573
|
id: uuidv4(),
|
|
@@ -555,25 +579,25 @@ var ColumnSetting = function ColumnSetting(_ref) {
|
|
|
555
579
|
isSystem: false
|
|
556
580
|
// createdAt 和 updatedAt 由存储适配器自动生成
|
|
557
581
|
};
|
|
558
|
-
_context2.next =
|
|
582
|
+
_context2.next = 36;
|
|
559
583
|
return saveColumnScheme === null || saveColumnScheme === void 0 ? void 0 : saveColumnScheme(gridKey, savedScheme);
|
|
560
|
-
case
|
|
584
|
+
case 36:
|
|
561
585
|
message.success('已创建并保存到默认方案');
|
|
562
|
-
case
|
|
563
|
-
_context2.next =
|
|
586
|
+
case 37:
|
|
587
|
+
_context2.next = 39;
|
|
564
588
|
return new Promise(function (resolve) {
|
|
565
589
|
return setTimeout(resolve, 100);
|
|
566
590
|
});
|
|
567
|
-
case
|
|
591
|
+
case 39:
|
|
568
592
|
gridColumnDefs = flatConfigToGridState(savedScheme.columnConfig, allColDefs);
|
|
569
593
|
gridApi.setGridOption('columnDefs', gridColumnDefs);
|
|
570
594
|
|
|
571
595
|
// 等待 columnDefs 更新完成
|
|
572
|
-
_context2.next =
|
|
596
|
+
_context2.next = 43;
|
|
573
597
|
return new Promise(function (resolve) {
|
|
574
598
|
return setTimeout(resolve, 100);
|
|
575
599
|
});
|
|
576
|
-
case
|
|
600
|
+
case 43:
|
|
577
601
|
columnState = flatConfigToColumnState(savedScheme.columnConfig);
|
|
578
602
|
gridApi.applyColumnState({
|
|
579
603
|
state: columnState,
|
|
@@ -587,31 +611,31 @@ var ColumnSetting = function ColumnSetting(_ref) {
|
|
|
587
611
|
|
|
588
612
|
// 4. 设置为当前方案(如果不是当前方案)
|
|
589
613
|
if (!(!currentScheme || savedScheme.id !== currentScheme.id)) {
|
|
590
|
-
_context2.next =
|
|
614
|
+
_context2.next = 49;
|
|
591
615
|
break;
|
|
592
616
|
}
|
|
593
|
-
_context2.next =
|
|
617
|
+
_context2.next = 49;
|
|
594
618
|
return setCurrentColumnScheme === null || setCurrentColumnScheme === void 0 ? void 0 : setCurrentColumnScheme(gridKey, savedScheme.id);
|
|
595
|
-
case
|
|
596
|
-
_context2.next =
|
|
619
|
+
case 49:
|
|
620
|
+
_context2.next = 51;
|
|
597
621
|
return new Promise(function (resolve) {
|
|
598
622
|
return setTimeout(resolve, 50);
|
|
599
623
|
});
|
|
600
|
-
case
|
|
624
|
+
case 51:
|
|
601
625
|
// 5. 关闭弹窗
|
|
602
626
|
onClose();
|
|
603
|
-
_context2.next =
|
|
627
|
+
_context2.next = 58;
|
|
604
628
|
break;
|
|
605
|
-
case
|
|
606
|
-
_context2.prev =
|
|
629
|
+
case 54:
|
|
630
|
+
_context2.prev = 54;
|
|
607
631
|
_context2.t0 = _context2["catch"](8);
|
|
608
632
|
console.error('保存列配置到方案失败:', _context2.t0);
|
|
609
633
|
message.error('保存列配置失败');
|
|
610
|
-
case
|
|
634
|
+
case 58:
|
|
611
635
|
case "end":
|
|
612
636
|
return _context2.stop();
|
|
613
637
|
}
|
|
614
|
-
}, _callee2, null, [[8,
|
|
638
|
+
}, _callee2, null, [[8, 54]]);
|
|
615
639
|
})), [form, gridApi, saveColumnScheme, setCurrentColumnScheme, currentScheme, schemes, gridKey, allColDefs, onClose]);
|
|
616
640
|
|
|
617
641
|
// 保存为新方案
|
|
@@ -819,28 +843,127 @@ var ColumnSetting = function ColumnSetting(_ref) {
|
|
|
819
843
|
setEditingDescription(scheme.description || '');
|
|
820
844
|
}, []);
|
|
821
845
|
|
|
846
|
+
// ========== 全局配置操作处理函数 ==========
|
|
847
|
+
|
|
848
|
+
/**
|
|
849
|
+
* 创建带确认弹窗的操作处理器
|
|
850
|
+
* @author nokecy
|
|
851
|
+
*/
|
|
852
|
+
var createConfirmHandler = useCallback(function (config) {
|
|
853
|
+
return function () {
|
|
854
|
+
Modal.confirm({
|
|
855
|
+
title: config.title,
|
|
856
|
+
icon: /*#__PURE__*/React.createElement(ExclamationCircleOutlined, null),
|
|
857
|
+
content: config.content,
|
|
858
|
+
okText: config.okText || '确定',
|
|
859
|
+
okButtonProps: config.danger ? {
|
|
860
|
+
danger: true
|
|
861
|
+
} : undefined,
|
|
862
|
+
cancelText: '取消',
|
|
863
|
+
onOk: function () {
|
|
864
|
+
var _onOk = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6() {
|
|
865
|
+
var _config$onSuccess;
|
|
866
|
+
return _regeneratorRuntime().wrap(function _callee6$(_context6) {
|
|
867
|
+
while (1) switch (_context6.prev = _context6.next) {
|
|
868
|
+
case 0:
|
|
869
|
+
_context6.prev = 0;
|
|
870
|
+
_context6.next = 3;
|
|
871
|
+
return config.action();
|
|
872
|
+
case 3:
|
|
873
|
+
(_config$onSuccess = config.onSuccess) === null || _config$onSuccess === void 0 || _config$onSuccess.call(config);
|
|
874
|
+
_context6.next = 8;
|
|
875
|
+
break;
|
|
876
|
+
case 6:
|
|
877
|
+
_context6.prev = 6;
|
|
878
|
+
_context6.t0 = _context6["catch"](0);
|
|
879
|
+
case 8:
|
|
880
|
+
case "end":
|
|
881
|
+
return _context6.stop();
|
|
882
|
+
}
|
|
883
|
+
}, _callee6, null, [[0, 6]]);
|
|
884
|
+
}));
|
|
885
|
+
function onOk() {
|
|
886
|
+
return _onOk.apply(this, arguments);
|
|
887
|
+
}
|
|
888
|
+
return onOk;
|
|
889
|
+
}()
|
|
890
|
+
});
|
|
891
|
+
};
|
|
892
|
+
}, []);
|
|
893
|
+
|
|
894
|
+
// 应用到全局
|
|
895
|
+
var handleApplyToGlobal = useCallback(function (schemeId) {
|
|
896
|
+
return createConfirmHandler({
|
|
897
|
+
title: '应用到全局',
|
|
898
|
+
content: '确定要将此方案应用为全局默认配置吗?这将影响所有没有个人配置的用户。',
|
|
899
|
+
action: function action() {
|
|
900
|
+
var _applySchemeToGlobal;
|
|
901
|
+
return (_applySchemeToGlobal = applySchemeToGlobal === null || applySchemeToGlobal === void 0 ? void 0 : applySchemeToGlobal(gridKey, schemeId)) !== null && _applySchemeToGlobal !== void 0 ? _applySchemeToGlobal : Promise.resolve();
|
|
902
|
+
}
|
|
903
|
+
})();
|
|
904
|
+
}, [createConfirmHandler, applySchemeToGlobal, gridKey]);
|
|
905
|
+
|
|
906
|
+
// 重置为全局配置
|
|
907
|
+
var handleResetToGlobal = useCallback(function () {
|
|
908
|
+
return createConfirmHandler({
|
|
909
|
+
title: '重置为全局配置',
|
|
910
|
+
content: '确定要删除您的个人配置,使用全局默认配置吗?',
|
|
911
|
+
action: function action() {
|
|
912
|
+
var _resetToGlobal;
|
|
913
|
+
return (_resetToGlobal = resetToGlobal === null || resetToGlobal === void 0 ? void 0 : resetToGlobal(gridKey)) !== null && _resetToGlobal !== void 0 ? _resetToGlobal : Promise.resolve();
|
|
914
|
+
},
|
|
915
|
+
onSuccess: onClose
|
|
916
|
+
})();
|
|
917
|
+
}, [createConfirmHandler, resetToGlobal, gridKey, onClose]);
|
|
918
|
+
|
|
919
|
+
// 重置所有用户配置
|
|
920
|
+
var handleResetAllUsers = useCallback(function () {
|
|
921
|
+
return createConfirmHandler({
|
|
922
|
+
title: '重置所有用户配置',
|
|
923
|
+
content: /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("p", {
|
|
924
|
+
style: {
|
|
925
|
+
color: '#ff4d4f',
|
|
926
|
+
fontWeight: 'bold'
|
|
927
|
+
}
|
|
928
|
+
}, "\u6B64\u64CD\u4F5C\u4E0D\u53EF\u6062\u590D\uFF01"), /*#__PURE__*/React.createElement("p", null, "\u786E\u5B9A\u8981\u5220\u9664\u6240\u6709\u7528\u6237\u7684\u4E2A\u4EBA\u5217\u914D\u7F6E\u5417\uFF1F"), /*#__PURE__*/React.createElement("p", null, "\u6267\u884C\u540E\uFF0C\u6240\u6709\u7528\u6237\u5C06\u4F7F\u7528\u5168\u5C40\u9ED8\u8BA4\u914D\u7F6E\u3002")),
|
|
929
|
+
okText: '确定重置',
|
|
930
|
+
danger: true,
|
|
931
|
+
action: function action() {
|
|
932
|
+
var _resetAllUsers;
|
|
933
|
+
return (_resetAllUsers = resetAllUsers === null || resetAllUsers === void 0 ? void 0 : resetAllUsers(gridKey)) !== null && _resetAllUsers !== void 0 ? _resetAllUsers : Promise.resolve();
|
|
934
|
+
}
|
|
935
|
+
})();
|
|
936
|
+
}, [createConfirmHandler, resetAllUsers, gridKey]);
|
|
937
|
+
|
|
938
|
+
// 判断是否存在用户个人方案
|
|
939
|
+
var hasUserSchemes = useMemo(function () {
|
|
940
|
+
return schemes.some(function (s) {
|
|
941
|
+
return !s.isGlobal;
|
|
942
|
+
});
|
|
943
|
+
}, [schemes]);
|
|
944
|
+
|
|
822
945
|
// 保存编辑
|
|
823
|
-
var handleSaveEdit = useCallback( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function
|
|
946
|
+
var handleSaveEdit = useCallback( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7() {
|
|
824
947
|
var scheme, createdAt, updatedAt, schemeWithoutTimestamps;
|
|
825
|
-
return _regeneratorRuntime().wrap(function
|
|
826
|
-
while (1) switch (
|
|
948
|
+
return _regeneratorRuntime().wrap(function _callee7$(_context7) {
|
|
949
|
+
while (1) switch (_context7.prev = _context7.next) {
|
|
827
950
|
case 0:
|
|
828
951
|
if (editingId) {
|
|
829
|
-
|
|
952
|
+
_context7.next = 2;
|
|
830
953
|
break;
|
|
831
954
|
}
|
|
832
|
-
return
|
|
955
|
+
return _context7.abrupt("return");
|
|
833
956
|
case 2:
|
|
834
|
-
|
|
957
|
+
_context7.prev = 2;
|
|
835
958
|
scheme = schemes.find(function (s) {
|
|
836
959
|
return s.id === editingId;
|
|
837
960
|
});
|
|
838
961
|
if (!scheme) {
|
|
839
|
-
|
|
962
|
+
_context7.next = 10;
|
|
840
963
|
break;
|
|
841
964
|
}
|
|
842
965
|
createdAt = scheme.createdAt, updatedAt = scheme.updatedAt, schemeWithoutTimestamps = _objectWithoutProperties(scheme, _excluded3);
|
|
843
|
-
|
|
966
|
+
_context7.next = 8;
|
|
844
967
|
return saveColumnScheme === null || saveColumnScheme === void 0 ? void 0 : saveColumnScheme(gridKey, _objectSpread(_objectSpread({}, schemeWithoutTimestamps), {}, {
|
|
845
968
|
name: editingName.trim(),
|
|
846
969
|
description: editingDescription.trim() || undefined
|
|
@@ -850,17 +973,17 @@ var ColumnSetting = function ColumnSetting(_ref) {
|
|
|
850
973
|
message.success('更新成功');
|
|
851
974
|
setEditingId(null);
|
|
852
975
|
case 10:
|
|
853
|
-
|
|
976
|
+
_context7.next = 15;
|
|
854
977
|
break;
|
|
855
978
|
case 12:
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
message.error(
|
|
979
|
+
_context7.prev = 12;
|
|
980
|
+
_context7.t0 = _context7["catch"](2);
|
|
981
|
+
message.error(_context7.t0.message || '更新失败');
|
|
859
982
|
case 15:
|
|
860
983
|
case "end":
|
|
861
|
-
return
|
|
984
|
+
return _context7.stop();
|
|
862
985
|
}
|
|
863
|
-
},
|
|
986
|
+
}, _callee7, null, [[2, 12]]);
|
|
864
987
|
})), [schemes, saveColumnScheme, gridKey, editingId, editingName, editingDescription]);
|
|
865
988
|
|
|
866
989
|
// 筛选方案列表
|
|
@@ -899,7 +1022,11 @@ var ColumnSetting = function ColumnSetting(_ref) {
|
|
|
899
1022
|
}
|
|
900
1023
|
return /*#__PURE__*/React.createElement(Space, {
|
|
901
1024
|
size: "small"
|
|
902
|
-
}, /*#__PURE__*/React.createElement("span", null, record.name), record.
|
|
1025
|
+
}, /*#__PURE__*/React.createElement("span", null, record.name), record.isGlobal ? /*#__PURE__*/React.createElement(Tag, {
|
|
1026
|
+
color: "purple"
|
|
1027
|
+
}, "\u5168\u5C40") : /*#__PURE__*/React.createElement(Tag, {
|
|
1028
|
+
color: "cyan"
|
|
1029
|
+
}, "\u4E2A\u4EBA"), record.isDefault && /*#__PURE__*/React.createElement(Tag, {
|
|
903
1030
|
color: "blue"
|
|
904
1031
|
}, "\u9ED8\u8BA4"), record.id === (currentSchemes === null || currentSchemes === void 0 || (_currentSchemes$gridK3 = currentSchemes[gridKey]) === null || _currentSchemes$gridK3 === void 0 ? void 0 : _currentSchemes$gridK3.columnSchemeId) && /*#__PURE__*/React.createElement(Tag, {
|
|
905
1032
|
color: "green"
|
|
@@ -939,7 +1066,8 @@ var ColumnSetting = function ColumnSetting(_ref) {
|
|
|
939
1066
|
}, {
|
|
940
1067
|
headerName: '操作',
|
|
941
1068
|
colId: 'actions',
|
|
942
|
-
width:
|
|
1069
|
+
width: 280,
|
|
1070
|
+
// 加宽以容纳新按钮
|
|
943
1071
|
cellRenderer: function cellRenderer(params) {
|
|
944
1072
|
var record = params.data;
|
|
945
1073
|
if (!record) return null;
|
|
@@ -978,7 +1106,16 @@ var ColumnSetting = function ColumnSetting(_ref) {
|
|
|
978
1106
|
onClick: function onClick() {
|
|
979
1107
|
return handleSetDefault(record.id);
|
|
980
1108
|
}
|
|
981
|
-
})), /*#__PURE__*/React.createElement(Tooltip, {
|
|
1109
|
+
})), !record.isGlobal && canApplyToGlobal && /*#__PURE__*/React.createElement(Tooltip, {
|
|
1110
|
+
title: "\u5E94\u7528\u5230\u5168\u5C40"
|
|
1111
|
+
}, /*#__PURE__*/React.createElement(Button, {
|
|
1112
|
+
type: "link",
|
|
1113
|
+
size: "small",
|
|
1114
|
+
icon: /*#__PURE__*/React.createElement(GlobalOutlined, null),
|
|
1115
|
+
onClick: function onClick() {
|
|
1116
|
+
return handleApplyToGlobal(record.id);
|
|
1117
|
+
}
|
|
1118
|
+
})), (!record.isGlobal || canApplyToGlobal) && /*#__PURE__*/React.createElement(Tooltip, {
|
|
982
1119
|
title: "\u7F16\u8F91"
|
|
983
1120
|
}, /*#__PURE__*/React.createElement(Button, {
|
|
984
1121
|
type: "link",
|
|
@@ -987,8 +1124,8 @@ var ColumnSetting = function ColumnSetting(_ref) {
|
|
|
987
1124
|
onClick: function onClick() {
|
|
988
1125
|
return handleEditScheme(record);
|
|
989
1126
|
}
|
|
990
|
-
})), /*#__PURE__*/React.createElement(Popconfirm, {
|
|
991
|
-
title:
|
|
1127
|
+
})), (!record.isGlobal || canApplyToGlobal) && /*#__PURE__*/React.createElement(Popconfirm, {
|
|
1128
|
+
title: record.isGlobal ? "确定要删除此全局方案吗?这将影响所有用户!" : "确定要删除此方案吗?",
|
|
992
1129
|
onConfirm: function onConfirm() {
|
|
993
1130
|
return handleDeleteScheme(record.id, record.name);
|
|
994
1131
|
},
|
|
@@ -1037,13 +1174,20 @@ var ColumnSetting = function ColumnSetting(_ref) {
|
|
|
1037
1174
|
onClick: function onClick() {
|
|
1038
1175
|
return setSaveSchemeVisible(true);
|
|
1039
1176
|
}
|
|
1040
|
-
}, "\u53E6\u5B58\u4E3A\u65B9\u6848")) : /*#__PURE__*/React.createElement(Button, {
|
|
1177
|
+
}, "\u53E6\u5B58\u4E3A\u65B9\u6848")) : /*#__PURE__*/React.createElement(Space, null, hasUserSchemes && /*#__PURE__*/React.createElement(Button, {
|
|
1178
|
+
icon: /*#__PURE__*/React.createElement(RollbackOutlined, null),
|
|
1179
|
+
onClick: handleResetToGlobal
|
|
1180
|
+
}, "\u91CD\u7F6E\u4E3A\u5168\u5C40\u914D\u7F6E"), canResetAllUsers && /*#__PURE__*/React.createElement(Button, {
|
|
1181
|
+
danger: true,
|
|
1182
|
+
icon: /*#__PURE__*/React.createElement(ClearOutlined, null),
|
|
1183
|
+
onClick: handleResetAllUsers
|
|
1184
|
+
}, "\u91CD\u7F6E\u6240\u6709\u7528\u6237"), /*#__PURE__*/React.createElement(Button, {
|
|
1041
1185
|
type: "primary",
|
|
1042
1186
|
icon: /*#__PURE__*/React.createElement(SaveOutlined, null),
|
|
1043
1187
|
onClick: function onClick() {
|
|
1044
1188
|
return setSaveSchemeVisible(true);
|
|
1045
1189
|
}
|
|
1046
|
-
}, "\u4FDD\u5B58\u4E3A\u65B0\u65B9\u6848")
|
|
1190
|
+
}, "\u4FDD\u5B58\u4E3A\u65B0\u65B9\u6848"))
|
|
1047
1191
|
}, /*#__PURE__*/React.createElement(TabPane, {
|
|
1048
1192
|
tab: "\u5217\u914D\u7F6E",
|
|
1049
1193
|
key: "columns"
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 全局配置权限信息
|
|
3
|
+
* 由使用端(业务应用)统一传入,而非从后端 API 获取
|
|
4
|
+
* @author nokecy
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```tsx
|
|
8
|
+
* <GridPlusContext.Provider value={{
|
|
9
|
+
* ...schemeManager,
|
|
10
|
+
* globalConfigPermissions: {
|
|
11
|
+
* canApplyToGlobal: currentUser.hasPermission('TableScheme.ManageGlobalConfig'),
|
|
12
|
+
* canResetAllUsers: currentUser.hasPermission('TableScheme.ManageGlobalConfig'),
|
|
13
|
+
* }
|
|
14
|
+
* }}>
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export interface GlobalConfigPermissions {
|
|
18
|
+
/** 是否可以应用到全局 */
|
|
19
|
+
canApplyToGlobal: boolean;
|
|
20
|
+
/** 是否可以重置所有用户配置 */
|
|
21
|
+
canResetAllUsers: boolean;
|
|
22
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -42,6 +42,24 @@ export declare class LocalStorageSchemeAdapter implements SchemeStorageAdapter {
|
|
|
42
42
|
saveQueryScheme(gridId: string, scheme: QueryScheme): Promise<QueryScheme>;
|
|
43
43
|
deleteQueryScheme(gridId: string, schemeId: string): Promise<void>;
|
|
44
44
|
setCurrentScheme(gridId: string, columnSchemeId: string | null, querySchemeId: string | null): Promise<void>;
|
|
45
|
+
/**
|
|
46
|
+
* 将方案应用到全局
|
|
47
|
+
* LocalStorage 实现: 将方案标记为 isGlobal=true
|
|
48
|
+
* @author nokecy
|
|
49
|
+
*/
|
|
50
|
+
applyToGlobal(gridId: string, schemeId: string): Promise<string>;
|
|
51
|
+
/**
|
|
52
|
+
* 重置为全局配置
|
|
53
|
+
* LocalStorage 实现: 清除当前方案选择,让其回退到全局方案
|
|
54
|
+
* @author nokecy
|
|
55
|
+
*/
|
|
56
|
+
resetToGlobal(gridId: string): Promise<void>;
|
|
57
|
+
/**
|
|
58
|
+
* 重置所有用户配置
|
|
59
|
+
* LocalStorage 实现: 删除所有非全局方案,清除当前方案选择
|
|
60
|
+
* @author nokecy
|
|
61
|
+
*/
|
|
62
|
+
resetAllUsers(gridId: string): Promise<void>;
|
|
45
63
|
/**
|
|
46
64
|
* 清除所有数据
|
|
47
65
|
*/
|
|
@@ -320,10 +320,124 @@ export var LocalStorageSchemeAdapter = /*#__PURE__*/function () {
|
|
|
320
320
|
return _setCurrentScheme.apply(this, arguments);
|
|
321
321
|
}
|
|
322
322
|
return setCurrentScheme;
|
|
323
|
+
}() // ========== 全局配置操作(模拟实现) ==========
|
|
324
|
+
/**
|
|
325
|
+
* 将方案应用到全局
|
|
326
|
+
* LocalStorage 实现: 将方案标记为 isGlobal=true
|
|
327
|
+
* @author nokecy
|
|
328
|
+
*/
|
|
329
|
+
}, {
|
|
330
|
+
key: "applyToGlobal",
|
|
331
|
+
value: function () {
|
|
332
|
+
var _applyToGlobal = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7(gridId, schemeId) {
|
|
333
|
+
var data, schemes, scheme;
|
|
334
|
+
return _regeneratorRuntime().wrap(function _callee7$(_context7) {
|
|
335
|
+
while (1) switch (_context7.prev = _context7.next) {
|
|
336
|
+
case 0:
|
|
337
|
+
data = this.readData();
|
|
338
|
+
schemes = data.columnSchemes[gridId] || [];
|
|
339
|
+
scheme = schemes.find(function (s) {
|
|
340
|
+
return s.id === schemeId;
|
|
341
|
+
});
|
|
342
|
+
if (scheme) {
|
|
343
|
+
_context7.next = 5;
|
|
344
|
+
break;
|
|
345
|
+
}
|
|
346
|
+
throw new Error("\u65B9\u6848\u4E0D\u5B58\u5728: ".concat(schemeId));
|
|
347
|
+
case 5:
|
|
348
|
+
// 先将所有方案的 isGlobal 设为 false
|
|
349
|
+
schemes.forEach(function (s) {
|
|
350
|
+
s.isGlobal = false;
|
|
351
|
+
});
|
|
352
|
+
|
|
353
|
+
// 将目标方案标记为全局方案
|
|
354
|
+
scheme.isGlobal = true;
|
|
355
|
+
scheme.updatedAt = Date.now();
|
|
356
|
+
this.log("\u5E94\u7528\u5230\u5168\u5C40: ".concat(gridId, " - ").concat(scheme.name));
|
|
357
|
+
this.writeData(data);
|
|
358
|
+
return _context7.abrupt("return", schemeId);
|
|
359
|
+
case 11:
|
|
360
|
+
case "end":
|
|
361
|
+
return _context7.stop();
|
|
362
|
+
}
|
|
363
|
+
}, _callee7, this);
|
|
364
|
+
}));
|
|
365
|
+
function applyToGlobal(_x12, _x13) {
|
|
366
|
+
return _applyToGlobal.apply(this, arguments);
|
|
367
|
+
}
|
|
368
|
+
return applyToGlobal;
|
|
369
|
+
}()
|
|
370
|
+
/**
|
|
371
|
+
* 重置为全局配置
|
|
372
|
+
* LocalStorage 实现: 清除当前方案选择,让其回退到全局方案
|
|
373
|
+
* @author nokecy
|
|
374
|
+
*/
|
|
375
|
+
}, {
|
|
376
|
+
key: "resetToGlobal",
|
|
377
|
+
value: (function () {
|
|
378
|
+
var _resetToGlobal = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee8(gridId) {
|
|
379
|
+
var data;
|
|
380
|
+
return _regeneratorRuntime().wrap(function _callee8$(_context8) {
|
|
381
|
+
while (1) switch (_context8.prev = _context8.next) {
|
|
382
|
+
case 0:
|
|
383
|
+
data = this.readData(); // 清除当前用户的列方案选择
|
|
384
|
+
if (data.currentSchemes[gridId]) {
|
|
385
|
+
data.currentSchemes[gridId].columnSchemeId = null;
|
|
386
|
+
}
|
|
387
|
+
this.log("\u91CD\u7F6E\u4E3A\u5168\u5C40\u914D\u7F6E: ".concat(gridId));
|
|
388
|
+
this.writeData(data);
|
|
389
|
+
case 4:
|
|
390
|
+
case "end":
|
|
391
|
+
return _context8.stop();
|
|
392
|
+
}
|
|
393
|
+
}, _callee8, this);
|
|
394
|
+
}));
|
|
395
|
+
function resetToGlobal(_x14) {
|
|
396
|
+
return _resetToGlobal.apply(this, arguments);
|
|
397
|
+
}
|
|
398
|
+
return resetToGlobal;
|
|
399
|
+
}()
|
|
400
|
+
/**
|
|
401
|
+
* 重置所有用户配置
|
|
402
|
+
* LocalStorage 实现: 删除所有非全局方案,清除当前方案选择
|
|
403
|
+
* @author nokecy
|
|
404
|
+
*/
|
|
405
|
+
)
|
|
406
|
+
}, {
|
|
407
|
+
key: "resetAllUsers",
|
|
408
|
+
value: (function () {
|
|
409
|
+
var _resetAllUsers = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee9(gridId) {
|
|
410
|
+
var data, schemes;
|
|
411
|
+
return _regeneratorRuntime().wrap(function _callee9$(_context9) {
|
|
412
|
+
while (1) switch (_context9.prev = _context9.next) {
|
|
413
|
+
case 0:
|
|
414
|
+
data = this.readData();
|
|
415
|
+
schemes = data.columnSchemes[gridId] || []; // 只保留全局方案
|
|
416
|
+
data.columnSchemes[gridId] = schemes.filter(function (s) {
|
|
417
|
+
return s.isGlobal;
|
|
418
|
+
});
|
|
419
|
+
|
|
420
|
+
// 清除当前方案选择
|
|
421
|
+
if (data.currentSchemes[gridId]) {
|
|
422
|
+
data.currentSchemes[gridId].columnSchemeId = null;
|
|
423
|
+
}
|
|
424
|
+
this.log("\u91CD\u7F6E\u6240\u6709\u7528\u6237\u914D\u7F6E: ".concat(gridId, "\uFF0C\u4FDD\u7559 ").concat(data.columnSchemes[gridId].length, " \u4E2A\u5168\u5C40\u65B9\u6848"));
|
|
425
|
+
this.writeData(data);
|
|
426
|
+
case 6:
|
|
427
|
+
case "end":
|
|
428
|
+
return _context9.stop();
|
|
429
|
+
}
|
|
430
|
+
}, _callee9, this);
|
|
431
|
+
}));
|
|
432
|
+
function resetAllUsers(_x15) {
|
|
433
|
+
return _resetAllUsers.apply(this, arguments);
|
|
434
|
+
}
|
|
435
|
+
return resetAllUsers;
|
|
323
436
|
}() // ========== 工具方法 ==========
|
|
324
437
|
/**
|
|
325
438
|
* 清除所有数据
|
|
326
439
|
*/
|
|
440
|
+
)
|
|
327
441
|
}, {
|
|
328
442
|
key: "clearAll",
|
|
329
443
|
value: function clearAll() {
|
|
@@ -101,6 +101,8 @@ export interface ColumnScheme {
|
|
|
101
101
|
updatedAt?: number;
|
|
102
102
|
/** 创建用户ID(可选) */
|
|
103
103
|
createdBy?: string;
|
|
104
|
+
/** 方案来源标识(便于前端区分展示,由前端计算) */
|
|
105
|
+
isGlobal?: boolean;
|
|
104
106
|
}
|
|
105
107
|
/**
|
|
106
108
|
* 方案同步数据结构
|
|
@@ -172,6 +174,29 @@ export interface SchemeStorageAdapter {
|
|
|
172
174
|
* @param querySchemeId 查询方案ID (null 表示清除)
|
|
173
175
|
*/
|
|
174
176
|
setCurrentScheme(gridId: string, columnSchemeId: string | null, querySchemeId: string | null): Promise<void>;
|
|
177
|
+
/**
|
|
178
|
+
* 将方案应用到全局(管理员操作)
|
|
179
|
+
* 将指定的用户方案复制为 UserId=null 的全局方案
|
|
180
|
+
* @param gridId 表格标识
|
|
181
|
+
* @param schemeId 源方案ID(用户的方案)
|
|
182
|
+
* @returns 全局方案ID
|
|
183
|
+
* @throws 403 - 无权限
|
|
184
|
+
* @throws 404 - 源方案不存在
|
|
185
|
+
*/
|
|
186
|
+
applyToGlobal?(gridId: string, schemeId: string): Promise<string>;
|
|
187
|
+
/**
|
|
188
|
+
* 重置当前用户配置,回退到全局配置
|
|
189
|
+
* 删除当前用户在指定表格的所有个人方案
|
|
190
|
+
* @param gridId 表格标识
|
|
191
|
+
*/
|
|
192
|
+
resetToGlobal?(gridId: string): Promise<void>;
|
|
193
|
+
/**
|
|
194
|
+
* 重置所有用户配置(管理员操作)
|
|
195
|
+
* 删除指定表格下所有用户的个人方案,保留全局方案
|
|
196
|
+
* @param gridId 表格标识
|
|
197
|
+
* @throws 403 - 无权限
|
|
198
|
+
*/
|
|
199
|
+
resetAllUsers?(gridId: string): Promise<void>;
|
|
175
200
|
}
|
|
176
201
|
/**
|
|
177
202
|
* 适配器配置基类
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -29,5 +29,5 @@ export type * from "./importModal";
|
|
|
29
29
|
export type * from "./fullScreenAlert";
|
|
30
30
|
export type * from "./RuleBuilder";
|
|
31
31
|
export type { ColumnConfig } from "./array-table/columnHelper";
|
|
32
|
-
export type { CentralizedColumnScheme, QueryScheme, SchemeStorageAdapter, SchemeSyncDataDto, CurrentSchemeDto, SchemeStorageConfig, LocalStorageAdapterConfig, BackendApiAdapterConfig, UseSchemeManagerConfig, GridPlusContextValue, } from "./ag-grid-plus";
|
|
32
|
+
export type { CentralizedColumnScheme, QueryScheme, SchemeStorageAdapter, SchemeSyncDataDto, CurrentSchemeDto, SchemeStorageConfig, LocalStorageAdapterConfig, BackendApiAdapterConfig, UseSchemeManagerConfig, GridPlusContextValue, GlobalConfigPermissions, } from "./ag-grid-plus";
|
|
33
33
|
export type { ParseResult as RegexParseResult, ValidationResult as RegexValidationResult, RegexError, ComplexityMetrics, ASTNode, AstRegExp, RegexTemplate, TestResult as RegexTestResult, CodeMirrorWrapperProps, RegexEditorProps, RegexFlags, MatchResult, RegexTesterProps, FlagsSelectorProps, MatchItemProps, RegexRailroadDiagramProps, } from "./components/RegexEditor";
|