@nokecy/qc-ui 1.0.82 → 1.0.84

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 (85) hide show
  1. package/dist/cjs/ag-grid-plus/_utils/processColumnGroups.d.ts +9 -0
  2. package/dist/cjs/ag-grid-plus/_utils/processColumnGroups.js +43 -0
  3. package/dist/cjs/ag-grid-plus/ag-gridPlus.js +252 -121
  4. package/dist/cjs/ag-grid-plus/querySchemes/components/QuerySchemesManager.js +19 -9
  5. package/dist/cjs/ag-grid-plus/querySchemes/hooks/useQuerySchemes.js +25 -3
  6. package/dist/cjs/ag-grid-plus/schemes/components/SchemeSelector.d.ts +1 -1
  7. package/dist/cjs/ag-grid-plus/schemes/components/SchemeSelector.js +1 -1
  8. package/dist/cjs/ag-grid-plus/schemes/hooks/useColumnSchemes.js +60 -14
  9. package/dist/cjs/ag-grid-plus/schemes/storage/localStorageAdapter.js +12 -26
  10. package/dist/cjs/ag-grid-plus/schemes/types.d.ts +8 -5
  11. package/dist/cjs/ag-grid-plus/schemes/utils/validator.js +14 -18
  12. package/dist/cjs/ag-grid-plus/setting/ColumnConfigForm.d.ts +16 -0
  13. package/dist/cjs/ag-grid-plus/setting/ColumnConfigForm.js +348 -0
  14. package/dist/cjs/ag-grid-plus/setting/ColumnConfigTable.d.ts +20 -0
  15. package/dist/cjs/ag-grid-plus/setting/ColumnConfigTable.js +940 -0
  16. package/dist/cjs/ag-grid-plus/setting/ColumnSetting.js +208 -248
  17. package/dist/cjs/ag-grid-plus/setting/MoveNodeModal.d.ts +15 -0
  18. package/dist/cjs/ag-grid-plus/setting/MoveNodeModal.js +160 -0
  19. package/dist/cjs/ag-grid-plus/setting/NameColumnRenderer.d.ts +18 -0
  20. package/dist/cjs/ag-grid-plus/setting/NameColumnRenderer.js +94 -0
  21. package/dist/cjs/ag-grid-plus/setting/columnGroupTypes.d.ts +59 -0
  22. package/dist/cjs/ag-grid-plus/setting/columnGroupTypes.js +5 -0
  23. package/dist/cjs/ag-grid-plus/setting/columnGroupUtils.d.ts +75 -0
  24. package/dist/cjs/ag-grid-plus/setting/columnGroupUtils.js +281 -0
  25. package/dist/cjs/ag-grid-plus/setting/index.d.ts +2 -1
  26. package/dist/cjs/ag-grid-plus/setting/index.js +4 -2
  27. package/dist/cjs/ag-grid-plus/storage/SchemeSyncManager.d.ts +2 -1
  28. package/dist/cjs/ag-grid-plus/storage/SchemeSyncManager.js +11 -8
  29. package/dist/cjs/ag-grid-plus/types.d.ts +2 -0
  30. package/dist/cjs/array-table/index.js +30 -118
  31. package/dist/cjs/draggableModal/index.d.ts +1 -1
  32. package/dist/cjs/draggableModal/index.js +253 -25
  33. package/dist/cjs/draggableModal/style.less +185 -12
  34. package/dist/esm/ag-grid-plus/_utils/processColumnGroups.d.ts +9 -0
  35. package/dist/esm/ag-grid-plus/_utils/processColumnGroups.js +44 -0
  36. package/dist/esm/ag-grid-plus/ag-gridPlus.js +252 -121
  37. package/dist/esm/ag-grid-plus/querySchemes/components/QuerySchemesManager.js +19 -10
  38. package/dist/esm/ag-grid-plus/querySchemes/hooks/useQuerySchemes.js +25 -3
  39. package/dist/esm/ag-grid-plus/schemes/components/SchemeSelector.d.ts +1 -1
  40. package/dist/esm/ag-grid-plus/schemes/components/SchemeSelector.js +1 -1
  41. package/dist/esm/ag-grid-plus/schemes/hooks/useColumnSchemes.js +60 -14
  42. package/dist/esm/ag-grid-plus/schemes/storage/localStorageAdapter.js +13 -27
  43. package/dist/esm/ag-grid-plus/schemes/types.d.ts +8 -5
  44. package/dist/esm/ag-grid-plus/schemes/utils/validator.js +14 -18
  45. package/dist/esm/ag-grid-plus/setting/ColumnConfigForm.d.ts +16 -0
  46. package/dist/esm/ag-grid-plus/setting/ColumnConfigForm.js +338 -0
  47. package/dist/esm/ag-grid-plus/setting/ColumnConfigTable.d.ts +20 -0
  48. package/dist/esm/ag-grid-plus/setting/ColumnConfigTable.js +932 -0
  49. package/dist/esm/ag-grid-plus/setting/ColumnSetting.js +207 -247
  50. package/dist/esm/ag-grid-plus/setting/MoveNodeModal.d.ts +15 -0
  51. package/dist/esm/ag-grid-plus/setting/MoveNodeModal.js +150 -0
  52. package/dist/esm/ag-grid-plus/setting/NameColumnRenderer.d.ts +18 -0
  53. package/dist/esm/ag-grid-plus/setting/NameColumnRenderer.js +87 -0
  54. package/dist/esm/ag-grid-plus/setting/columnGroupTypes.d.ts +59 -0
  55. package/dist/esm/ag-grid-plus/setting/columnGroupTypes.js +1 -0
  56. package/dist/esm/ag-grid-plus/setting/columnGroupUtils.d.ts +75 -0
  57. package/dist/esm/ag-grid-plus/setting/columnGroupUtils.js +265 -0
  58. package/dist/esm/ag-grid-plus/setting/index.d.ts +2 -1
  59. package/dist/esm/ag-grid-plus/setting/index.js +4 -2
  60. package/dist/esm/ag-grid-plus/storage/SchemeSyncManager.d.ts +2 -1
  61. package/dist/esm/ag-grid-plus/storage/SchemeSyncManager.js +11 -8
  62. package/dist/esm/ag-grid-plus/types.d.ts +2 -0
  63. package/dist/esm/array-table/index.js +31 -119
  64. package/dist/esm/draggableModal/index.d.ts +1 -1
  65. package/dist/esm/draggableModal/index.js +254 -27
  66. package/dist/esm/draggableModal/style.less +185 -12
  67. package/dist/umd/qc-ui.min.css +1 -1
  68. package/dist/umd/qc-ui.min.js +1 -1
  69. package/package.json +1 -1
  70. package/dist/cjs/ag-grid-plus/gridManager/index.d.ts +0 -7
  71. package/dist/cjs/ag-grid-plus/gridManager/index.js +0 -40
  72. package/dist/cjs/ag-grid-plus/querySchemes/hooks/useQuerySchemes.refactored.d.ts +0 -7
  73. package/dist/cjs/ag-grid-plus/querySchemes/hooks/useQuerySchemes.refactored.js +0 -32
  74. package/dist/cjs/ag-grid-plus/schemes/hooks/useColumnSchemes.refactored.d.ts +0 -7
  75. package/dist/cjs/ag-grid-plus/schemes/hooks/useColumnSchemes.refactored.js +0 -32
  76. package/dist/cjs/ag-grid-plus/setting/diySetting/index.d.ts +0 -10
  77. package/dist/cjs/ag-grid-plus/setting/diySetting/index.js +0 -268
  78. package/dist/esm/ag-grid-plus/gridManager/index.d.ts +0 -7
  79. package/dist/esm/ag-grid-plus/gridManager/index.js +0 -35
  80. package/dist/esm/ag-grid-plus/querySchemes/hooks/useQuerySchemes.refactored.d.ts +0 -7
  81. package/dist/esm/ag-grid-plus/querySchemes/hooks/useQuerySchemes.refactored.js +0 -27
  82. package/dist/esm/ag-grid-plus/schemes/hooks/useColumnSchemes.refactored.d.ts +0 -7
  83. package/dist/esm/ag-grid-plus/schemes/hooks/useColumnSchemes.refactored.js +0 -27
  84. package/dist/esm/ag-grid-plus/setting/diySetting/index.d.ts +0 -10
  85. package/dist/esm/ag-grid-plus/setting/diySetting/index.js +0 -259
@@ -5,6 +5,7 @@ declare const Setting: (props: {
5
5
  gridApi?: GridApi<any> | undefined;
6
6
  gridApiState?: GridApi<any> | undefined;
7
7
  type?: string | undefined;
8
- onSaveColumnState: (state: any) => void;
8
+ onSaveColumnState?: ((state: any) => void) | undefined;
9
+ schemeManager?: any;
9
10
  }) => React.JSX.Element | null;
10
11
  export default Setting;
@@ -26,7 +26,8 @@ var Setting = function Setting(props) {
26
26
  gridApiState = props.gridApiState,
27
27
  onSaveColumnState = props.onSaveColumnState;
28
28
  var gridPlusContext = (0, _react.useContext)(_gridContext.GridPlusContext);
29
- var schemeManager = gridPlusContext === null || gridPlusContext === void 0 ? void 0 : gridPlusContext.schemeManager;
29
+ // 优先使用外部传入的 schemeManager,否则使用 Context 中的
30
+ var schemeManager = props.schemeManager || (gridPlusContext === null || gridPlusContext === void 0 ? void 0 : gridPlusContext.schemeManager);
30
31
  var querySchemeManager = gridPlusContext === null || gridPlusContext === void 0 ? void 0 : gridPlusContext.querySchemeManager;
31
32
  var currentQueryOrder = (gridPlusContext === null || gridPlusContext === void 0 ? void 0 : gridPlusContext.currentQueryOrder) || [];
32
33
  var updateQueryOrder = gridPlusContext === null || gridPlusContext === void 0 ? void 0 : gridPlusContext.updateQueryOrder;
@@ -86,7 +87,8 @@ var Setting = function Setting(props) {
86
87
  onClose: function onClose() {
87
88
  return setColumnSettingVisible(false);
88
89
  },
89
- onSaveColumnState: onSaveColumnState,
90
+ onSaveColumnState: onSaveColumnState || function () {} // 保留兼容性,但 formArrayTable 不再使用
91
+ ,
90
92
  schemeManager: schemeManager,
91
93
  type: props.type
92
94
  }), querySchemeManager && gridApi && updateQueryOrder && /*#__PURE__*/_react.default.createElement(_QuerySchemesManager.QuerySchemesManager, {
@@ -116,7 +116,8 @@ export declare class SchemeSyncManager {
116
116
  private applyServerVersion;
117
117
  /**
118
118
  * 反序列化从后端接收的方案数据
119
- * 将 columnState 和 itemsOrder 从 JSON 字符串转换为数组
119
+ * 将 columnState(后端字段) 映射为 columnConfig 并从 JSON 字符串转换为数组
120
+ * 将 itemsOrder 从 JSON 字符串转换为数组
120
121
  */
121
122
  private deserializeSchemesData;
122
123
  /**
@@ -79,7 +79,7 @@ var SchemeSyncManager = exports.SchemeSyncManager = /*#__PURE__*/function () {
79
79
  schemes = _ref2[1];
80
80
  serializedColumnSchemes[gridId] = schemes.map(function (scheme) {
81
81
  return _objectSpread(_objectSpread({}, scheme), {}, {
82
- columnState: JSON.stringify(scheme.columnState)
82
+ columnState: JSON.stringify(scheme.columnConfig)
83
83
  });
84
84
  });
85
85
  });
@@ -599,15 +599,15 @@ var SchemeSyncManager = exports.SchemeSyncManager = /*#__PURE__*/function () {
599
599
  if (types.has('current')) dirtyCurrentGrids.add(gridId);
600
600
  });
601
601
 
602
- // 添加列方案数据(将 columnState 序列化为 JSON 字符串)
602
+ // 添加列方案数据(将 columnConfig 序列化为 JSON 字符串并映射到 columnState 字段)
603
603
  if (dirtyColumnGrids.size > 0) {
604
604
  requestData.columnSchemes = {};
605
605
  dirtyColumnGrids.forEach(function (gridId) {
606
606
  var schemes = _this4.allData.columnSchemes[gridId] || [];
607
- // 将每个方案的 columnState 从数组转换为 JSON 字符串
607
+ // 将每个方案的 columnConfig 从数组转换为 JSON 字符串,并映射到 columnState 字段
608
608
  requestData.columnSchemes[gridId] = schemes.map(function (scheme) {
609
609
  return _objectSpread(_objectSpread({}, scheme), {}, {
610
- columnState: JSON.stringify(scheme.columnState)
610
+ columnState: JSON.stringify(scheme.columnConfig)
611
611
  });
612
612
  });
613
613
  });
@@ -777,7 +777,8 @@ var SchemeSyncManager = exports.SchemeSyncManager = /*#__PURE__*/function () {
777
777
 
778
778
  /**
779
779
  * 反序列化从后端接收的方案数据
780
- * 将 columnState 和 itemsOrder 从 JSON 字符串转换为数组
780
+ * 将 columnState(后端字段) 映射为 columnConfig 并从 JSON 字符串转换为数组
781
+ * 将 itemsOrder 从 JSON 字符串转换为数组
781
782
  */
782
783
  }, {
783
784
  key: "deserializeSchemesData",
@@ -793,10 +794,12 @@ var SchemeSyncManager = exports.SchemeSyncManager = /*#__PURE__*/function () {
793
794
  gridId = _ref6[0],
794
795
  schemes = _ref6[1];
795
796
  result.columnSchemes[gridId] = schemes.map(function (scheme) {
796
- // 如果 columnState 是字符串,则解析为数组
797
- var columnState = typeof scheme.columnState === 'string' ? JSON.parse(scheme.columnState) : scheme.columnState;
797
+ // 后端返回的数据中,columnState 字段存储的是 columnConfig 的 JSON 字符串
798
+ // 需要将其解析为数组并映射到 columnConfig 字段
799
+ var schemeWithState = scheme; // 类型断言处理后端数据
800
+ var columnConfig = typeof schemeWithState.columnState === 'string' ? JSON.parse(schemeWithState.columnState) : schemeWithState.columnState;
798
801
  return _objectSpread(_objectSpread({}, scheme), {}, {
799
- columnState: columnState
802
+ columnConfig: columnConfig
800
803
  });
801
804
  });
802
805
  });
@@ -146,6 +146,8 @@ export interface ExtendedColDef extends ColDef {
146
146
  formatWithCommas?: boolean;
147
147
  /** 自定义单元格渲染器 (用于跳过计算) */
148
148
  customCellRenderer?: (params: any) => any;
149
+ /** 列分组的子列 (支持列分组功能) */
150
+ children?: ExtendedColDef[];
149
151
  }
150
152
  /**
151
153
  * 扩展的列状态 (包含 AG-Grid 列状态 + 自定义属性)
@@ -17,6 +17,7 @@ var _preview = _interopRequireDefault(require("./preview"));
17
17
  var _antd = require("antd");
18
18
  var _setting = _interopRequireDefault(require("../ag-grid-plus/setting"));
19
19
  var _useGridPlusColumnState = require("../ag-grid-plus/hooks/useGridPlusColumnState");
20
+ var _useColumnSchemes = require("../ag-grid-plus/schemes/hooks/useColumnSchemes");
20
21
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
22
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
22
23
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
@@ -32,47 +33,6 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
32
33
  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; }
33
34
  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; } }
34
35
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
35
- /**
36
- * ArrayTable 内置的列状态管理 Hook
37
- * 使用 localStorage 进行持久化存储
38
- */
39
- var useArrayTableColumnState = function useArrayTableColumnState(gridKey) {
40
- var STORAGE_KEY = 'array-table-column-state';
41
-
42
- // 从 localStorage 读取所有列状态
43
- var getColumnStateFromStorage = (0, _react.useCallback)(function () {
44
- try {
45
- var stored = localStorage.getItem(STORAGE_KEY);
46
- return stored ? JSON.parse(stored) : {};
47
- } catch (error) {
48
- console.error('Failed to read column state from localStorage:', error);
49
- return {};
50
- }
51
- }, []);
52
-
53
- // 保存列状态到 localStorage
54
- var saveColumnStateToStorage = (0, _react.useCallback)(function (key, state) {
55
- try {
56
- var allStates = getColumnStateFromStorage();
57
- allStates[key] = state;
58
- localStorage.setItem(STORAGE_KEY, JSON.stringify(allStates));
59
- } catch (error) {
60
- console.error('Failed to save column state to localStorage:', error);
61
- }
62
- }, [getColumnStateFromStorage]);
63
-
64
- // 获取指定 gridKey 的列状态
65
- var getColumnState = (0, _react.useCallback)(function (key) {
66
- if (!key) return undefined;
67
- var allStates = getColumnStateFromStorage();
68
- return allStates[key];
69
- }, [getColumnStateFromStorage]);
70
- return {
71
- getColumnState: getColumnState,
72
- saveColumnState: saveColumnStateToStorage
73
- };
74
- };
75
-
76
36
  //@ts-ignore
77
37
  var ArrayTable = (0, _react2.observer)(function (props) {
78
38
  var height = props.height;
@@ -103,10 +63,14 @@ var ArrayTable = (0, _react2.observer)(function (props) {
103
63
  // 尝试从 Context 获取列状态管理(如果被 Provider 包裹)
104
64
  var contextColumnState = (0, _useGridPlusColumnState.useGridPlusColumnState)();
105
65
 
106
- // 使用内置的列状态管理作为后备方案
107
- var _useArrayTableColumnS = useArrayTableColumnState(props.gridKey),
108
- getColumnState = _useArrayTableColumnS.getColumnState,
109
- saveColumnState = _useArrayTableColumnS.saveColumnState;
66
+ // ArrayTable 内部集成列方案管理(统一使用 AgGridPlus 的方案系统)
67
+ var internalSchemeManager = (0, _useColumnSchemes.useColumnSchemes)({
68
+ gridId: props.gridKey || 'array-table-default',
69
+ enableAutoSave: false // 手动控制保存时机
70
+ });
71
+
72
+ // 使用 Context 的 schemeManager 或内部的 schemeManager
73
+ var schemeManager = (contextColumnState === null || contextColumnState === void 0 ? void 0 : contextColumnState.schemeManager) || internalSchemeManager;
110
74
 
111
75
  // 使用自定义 hooks
112
76
  var _useCellFocus = (0, _hooks.useCellFocus)(),
@@ -116,45 +80,36 @@ var ArrayTable = (0, _react2.observer)(function (props) {
116
80
  var _useRowDrag = (0, _hooks.useRowDrag)(field),
117
81
  handleRowDragMove = _useRowDrag.handleRowDragMove;
118
82
 
119
- // 恢复列状态(优先使用 Context,否则使用内置的 localStorage)
83
+ // 恢复列状态(从方案系统)
120
84
  (0, _react.useEffect)(function () {
121
- var _contextColumnState$c;
122
- if (!props.gridKey || !gridApiState) {
85
+ if (!props.gridKey || !gridApiState || !schemeManager) {
123
86
  return;
124
87
  }
125
- var stateToApply = null;
126
- var hasRealProvider = (contextColumnState === null || contextColumnState === void 0 ? void 0 : contextColumnState.columnState) !== undefined;
127
88
 
128
- // 优先使用 Context 中的列状态(但只有在有真正的 Provider 时)
129
- if (hasRealProvider && contextColumnState !== null && contextColumnState !== void 0 && (_contextColumnState$c = contextColumnState.columnState) !== null && _contextColumnState$c !== void 0 && _contextColumnState$c[props.gridKey]) {
130
- stateToApply = contextColumnState.columnState[props.gridKey];
131
- }
132
- // 后备方案:使用内置的 localStorage 列状态
133
- else {
134
- stateToApply = getColumnState(props.gridKey);
135
- }
136
- if (stateToApply && Array.isArray(stateToApply)) {
137
- // 转换为 AG-Grid 需要的格式
138
- var formattedState = stateToApply.map(function (col) {
89
+ // 使用方案系统恢复列状态
90
+ // schemeManager 会自动加载默认方案或最后使用的方案
91
+ var currentScheme = schemeManager.currentScheme;
92
+ if (currentScheme && currentScheme.columnConfig) {
93
+ // 从 columnConfig (FlatColumnItem[]) 提取列状态
94
+ var columnState = currentScheme.columnConfig.filter(function (item) {
95
+ return item.type === 'column' && item.field;
96
+ }).map(function (item) {
139
97
  return {
140
- colId: col.colId || col.field,
141
- width: col.width,
142
- hide: col.hide,
143
- pinned: col.pinned === 'notPinned' ? null : col.pinned,
144
- sort: col.sort,
145
- sortIndex: col.sortIndex,
146
- aggFunc: col.aggFunc,
147
- flex: col.flex
98
+ colId: item.field,
99
+ width: item.width,
100
+ hide: item.hide,
101
+ pinned: item.pinned === 'notPinned' ? null : item.pinned,
102
+ flex: item.flex
148
103
  };
149
104
  });
150
105
  setTimeout(function () {
151
106
  gridApiState.applyColumnState({
152
- state: formattedState,
107
+ state: columnState,
153
108
  applyOrder: true
154
109
  });
155
110
  }, 100);
156
111
  }
157
- }, [props.gridKey, gridApiState, contextColumnState === null || contextColumnState === void 0 ? void 0 : contextColumnState.columnState, getColumnState]);
112
+ }, [props.gridKey, gridApiState, schemeManager === null || schemeManager === void 0 ? void 0 : schemeManager.currentScheme]);
158
113
 
159
114
  //@ts-ignore
160
115
  if (columns.length > 0) {
@@ -162,22 +117,9 @@ var ArrayTable = (0, _react2.observer)(function (props) {
162
117
  columns[0].rowDrag = props.onRowDrag ? true : false;
163
118
  }
164
119
 
165
- // 保存列状态(优先使用 Context,否则使用内置的 localStorage)
166
- var onColumnStateChanged = function onColumnStateChanged(columnState) {
167
- if (!props.gridKey) return;
120
+ // 不再需要 onColumnStateChanged 回调
121
+ // 保存逻辑统一由 ColumnSetting 通过 schemeManager 处理
168
122
 
169
- // 判断是否有真正的 Provider:检查 columnState 是否不是 undefined(默认值)
170
- var hasRealProvider = (contextColumnState === null || contextColumnState === void 0 ? void 0 : contextColumnState.columnState) !== undefined;
171
-
172
- // 优先使用 Context 的保存方法(但只有在有真正的 Provider 时)
173
- if (hasRealProvider && contextColumnState !== null && contextColumnState !== void 0 && contextColumnState.onSaveColumnState) {
174
- contextColumnState.onSaveColumnState(props.gridKey, columnState);
175
- }
176
- // 后备方案:使用内置的 localStorage 保存
177
- else {
178
- saveColumnState(props.gridKey, columnState);
179
- }
180
- };
181
123
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
182
124
  ref: ref,
183
125
  style: {
@@ -225,7 +167,7 @@ var ArrayTable = (0, _react2.observer)(function (props) {
225
167
  gridApi: apiRef.current,
226
168
  gridApiState: gridApiState,
227
169
  type: 'formArrayTable',
228
- onSaveColumnState: onColumnStateChanged
170
+ schemeManager: schemeManager
229
171
  })), /*#__PURE__*/_react.default.createElement("div", {
230
172
  style: {
231
173
  flex: 1,
@@ -237,37 +179,7 @@ var ArrayTable = (0, _react2.observer)(function (props) {
237
179
  apiRef.current = params.api;
238
180
  setGridApiState(params.api);
239
181
 
240
- // 立即尝试恢复列状态
241
- if (props.gridKey) {
242
- var _contextColumnState$c2;
243
- var hasRealProvider = (contextColumnState === null || contextColumnState === void 0 ? void 0 : contextColumnState.columnState) !== undefined;
244
- var stateToApply = null;
245
- if (hasRealProvider && contextColumnState !== null && contextColumnState !== void 0 && (_contextColumnState$c2 = contextColumnState.columnState) !== null && _contextColumnState$c2 !== void 0 && _contextColumnState$c2[props.gridKey]) {
246
- stateToApply = contextColumnState.columnState[props.gridKey];
247
- } else {
248
- stateToApply = getColumnState(props.gridKey);
249
- }
250
- if (stateToApply && Array.isArray(stateToApply)) {
251
- var formattedState = stateToApply.map(function (col) {
252
- return {
253
- colId: col.colId || col.field,
254
- width: col.width,
255
- hide: col.hide,
256
- pinned: col.pinned === 'notPinned' ? null : col.pinned,
257
- sort: col.sort,
258
- sortIndex: col.sortIndex,
259
- aggFunc: col.aggFunc,
260
- flex: col.flex
261
- };
262
- });
263
- setTimeout(function () {
264
- params.api.applyColumnState({
265
- state: formattedState,
266
- applyOrder: true
267
- });
268
- }, 50);
269
- }
270
- }
182
+ // 恢复列状态将由 useEffect 处理(使用方案系统)
271
183
  },
272
184
  suppressColumnVirtualisation: true,
273
185
  gridOptions: {
@@ -2,7 +2,7 @@ import { ModalProps } from 'antd/lib/modal';
2
2
  import React from 'react';
3
3
  import "./style.less";
4
4
  /**
5
- * 可拖拽Modal
5
+ * 可拖拽Modal - 支持拖拽、全屏切换和缩放
6
6
  * @param props
7
7
  * @returns
8
8
  */
@@ -10,10 +10,13 @@ var _antd = require("antd");
10
10
  var _react = _interopRequireWildcard(require("react"));
11
11
  var _reactDraggable = _interopRequireDefault(require("react-draggable"));
12
12
  require("./style.less");
13
+ var _excluded = ["wrapClassName", "width"];
13
14
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
15
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
15
16
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
16
17
  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); }
18
+ 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; }
19
+ 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; }
17
20
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
18
21
  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."); }
19
22
  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); }
@@ -21,9 +24,9 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
21
24
  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; } }
22
25
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
23
26
  /**
24
- * 可拖拽Modal
25
- * @param props
26
- * @returns
27
+ * 可拖拽Modal - 支持拖拽、全屏切换和缩放
28
+ * @param props
29
+ * @returns
27
30
  */
28
31
  var DraggableModal = function DraggableModal(props) {
29
32
  var _useState = (0, _react.useState)(true),
@@ -44,6 +47,39 @@ var DraggableModal = function DraggableModal(props) {
44
47
  _useState6 = _slicedToArray(_useState5, 2),
45
48
  fullScreen = _useState6[0],
46
49
  setFullScreen = _useState6[1];
50
+ var _useState7 = (0, _react.useState)('normal'),
51
+ _useState8 = _slicedToArray(_useState7, 2),
52
+ zoom = _useState8[0],
53
+ setZoom = _useState8[1];
54
+
55
+ // 调整大小相关状态
56
+ var _useState9 = (0, _react.useState)(false),
57
+ _useState10 = _slicedToArray(_useState9, 2),
58
+ isResizing = _useState10[0],
59
+ setIsResizing = _useState10[1];
60
+ var _useState11 = (0, _react.useState)(''),
61
+ _useState12 = _slicedToArray(_useState11, 2),
62
+ resizeDirection = _useState12[0],
63
+ setResizeDirection = _useState12[1];
64
+ var _useState13 = (0, _react.useState)({
65
+ width: 0,
66
+ height: 0
67
+ }),
68
+ _useState14 = _slicedToArray(_useState13, 2),
69
+ modalSize = _useState14[0],
70
+ setModalSize = _useState14[1];
71
+ var _useState15 = (0, _react.useState)({
72
+ x: 0,
73
+ y: 0
74
+ }),
75
+ _useState16 = _slicedToArray(_useState15, 2),
76
+ modalPosition = _useState16[0],
77
+ setModalPosition = _useState16[1];
78
+
79
+ // 解构 props,分离出 wrapClassName
80
+ var propsWrapClassName = props.wrapClassName,
81
+ width = props.width,
82
+ restProps = _objectWithoutProperties(props, _excluded);
47
83
  var _onStart = function onStart(_event, uiData) {
48
84
  var _draggleRef$current;
49
85
  var _window$document$docu = window.document.documentElement,
@@ -63,50 +99,242 @@ var DraggableModal = function DraggableModal(props) {
63
99
  var toggleFullScreen = function toggleFullScreen() {
64
100
  setFullScreen(!fullScreen);
65
101
  };
66
- var titleRender = function titleRender() {
67
- var title = props.title;
68
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, title, /*#__PURE__*/_react.default.createElement("button", {
69
- type: "button",
70
- className: "ant-modal-close",
71
- style: {
72
- right: 42
73
- },
74
- onClick: toggleFullScreen
75
- }, /*#__PURE__*/_react.default.createElement("span", {
76
- className: "ant-modal-close-x"
77
- }, fullScreen ? /*#__PURE__*/_react.default.createElement(_icons.ShrinkOutlined, null) : /*#__PURE__*/_react.default.createElement(_icons.ArrowsAltOutlined, null))));
102
+ var handleZoomIn = function handleZoomIn() {
103
+ if (zoom === 'small') {
104
+ setZoom('normal');
105
+ } else if (zoom === 'normal') {
106
+ setZoom('large');
107
+ }
108
+ };
109
+ var handleZoomOut = function handleZoomOut() {
110
+ if (zoom === 'large') {
111
+ setZoom('normal');
112
+ } else if (zoom === 'normal') {
113
+ setZoom('small');
114
+ }
115
+ };
116
+
117
+ // 拖动调整大小的处理函数
118
+ var handleResizeMouseDown = function handleResizeMouseDown(e, direction) {
119
+ var _draggleRef$current2;
120
+ e.preventDefault();
121
+ e.stopPropagation();
122
+ if (fullScreen) return;
123
+
124
+ // 查找.ant-modal,它在draggleRef的父级
125
+ var modal = (_draggleRef$current2 = draggleRef.current) === null || _draggleRef$current2 === void 0 ? void 0 : _draggleRef$current2.closest('.ant-modal');
126
+ if (!modal) {
127
+ return;
128
+ }
129
+ var rect = modal.getBoundingClientRect();
130
+ setModalSize({
131
+ width: rect.width,
132
+ height: rect.height
133
+ });
134
+ setModalPosition({
135
+ x: rect.left,
136
+ y: rect.top
137
+ });
138
+ setResizeDirection(direction);
139
+ setIsResizing(true);
140
+ var startX = e.clientX;
141
+ var startY = e.clientY;
142
+ var startWidth = rect.width;
143
+ var startHeight = rect.height;
144
+ var startLeft = rect.left;
145
+ var startTop = rect.top;
146
+ var handleMouseMove = function handleMouseMove(moveEvent) {
147
+ var deltaX = moveEvent.clientX - startX;
148
+ var deltaY = moveEvent.clientY - startY;
149
+ var newWidth = startWidth;
150
+ var newHeight = startHeight;
151
+ var newLeft = startLeft;
152
+ var newTop = startTop;
153
+
154
+ // 根据方向计算新尺寸
155
+ if (direction.includes('e')) {
156
+ newWidth = Math.max(400, startWidth + deltaX);
157
+ }
158
+ if (direction.includes('w')) {
159
+ newWidth = Math.max(400, startWidth - deltaX);
160
+ newLeft = startLeft + (startWidth - newWidth);
161
+ }
162
+ if (direction.includes('s')) {
163
+ newHeight = Math.max(300, startHeight + deltaY);
164
+ }
165
+ if (direction.includes('n')) {
166
+ newHeight = Math.max(300, startHeight - deltaY);
167
+ newTop = startTop + (startHeight - newHeight);
168
+ }
169
+
170
+ // 限制最大尺寸
171
+ var maxWidth = window.innerWidth * 0.95;
172
+ var maxHeight = window.innerHeight * 0.95;
173
+ newWidth = Math.min(newWidth, maxWidth);
174
+ newHeight = Math.min(newHeight, maxHeight);
175
+
176
+ // 直接更新DOM以实现实时效果
177
+ modal.style.width = "".concat(newWidth, "px");
178
+ modal.style.height = "".concat(newHeight, "px");
179
+
180
+ // 同时更新 modal-content 的高度
181
+ var modalContent = modal.querySelector('.ant-modal-content');
182
+ if (modalContent) {
183
+ modalContent.style.height = "".concat(newHeight, "px");
184
+ modalContent.style.display = 'flex';
185
+ modalContent.style.flexDirection = 'column';
186
+ }
187
+
188
+ // 仍然更新state以保持React状态同步
189
+ setModalSize({
190
+ width: newWidth,
191
+ height: newHeight
192
+ });
193
+ setModalPosition({
194
+ x: newLeft,
195
+ y: newTop
196
+ });
197
+ };
198
+ var handleMouseUp = function handleMouseUp() {
199
+ setIsResizing(false);
200
+ setResizeDirection('');
201
+ document.removeEventListener('mousemove', handleMouseMove);
202
+ document.removeEventListener('mouseup', handleMouseUp);
203
+ };
204
+ document.addEventListener('mousemove', handleMouseMove);
205
+ document.addEventListener('mouseup', handleMouseUp);
78
206
  };
207
+
208
+ // 合并类名
209
+ var zoomClass = !fullScreen && zoom !== 'normal' ? "modal-wrap-zoom-".concat(zoom) : '';
210
+ var fullScreenClass = fullScreen ? 'modal-wrap-fullscreen' : '';
211
+ var resizingClass = isResizing ? 'modal-wrap-resizing' : '';
212
+ var mergedWrapClassName = [propsWrapClassName, fullScreenClass, zoomClass, resizingClass].filter(Boolean).join(' ');
79
213
  return /*#__PURE__*/_react.default.createElement(_antd.Modal, _extends({
80
214
  maskClosable: false,
81
- wrapClassName: "".concat(fullScreen ? 'modal-wrap-fullscreen' : '')
82
- }, props, {
215
+ width: width
216
+ }, restProps, {
217
+ wrapClassName: mergedWrapClassName,
83
218
  title: /*#__PURE__*/_react.default.createElement("div", {
84
219
  style: {
85
220
  width: '100%',
86
- cursor: 'move'
221
+ cursor: fullScreen ? 'default' : 'move'
87
222
  },
88
223
  onMouseOver: function onMouseOver() {
89
- if (disabled) {
224
+ if (!fullScreen && disabled) {
90
225
  setDisabled(false);
91
226
  }
92
227
  },
93
228
  onMouseOut: function onMouseOut() {
94
- setDisabled(true);
229
+ if (!fullScreen) {
230
+ setDisabled(true);
231
+ }
95
232
  },
96
233
  onFocus: function onFocus() {},
97
234
  onBlur: function onBlur() {}
98
- }, titleRender()),
235
+ }, props.title, !fullScreen && zoom !== 'large' && /*#__PURE__*/_react.default.createElement("button", {
236
+ type: "button",
237
+ className: "ant-modal-close",
238
+ style: {
239
+ right: 106
240
+ },
241
+ onClick: function onClick(e) {
242
+ e.stopPropagation();
243
+ handleZoomIn();
244
+ },
245
+ title: "\u653E\u5927"
246
+ }, /*#__PURE__*/_react.default.createElement("span", {
247
+ className: "ant-modal-close-x"
248
+ }, /*#__PURE__*/_react.default.createElement(_icons.ZoomInOutlined, null))), !fullScreen && zoom !== 'small' && /*#__PURE__*/_react.default.createElement("button", {
249
+ type: "button",
250
+ className: "ant-modal-close",
251
+ style: {
252
+ right: 74
253
+ },
254
+ onClick: function onClick(e) {
255
+ e.stopPropagation();
256
+ handleZoomOut();
257
+ },
258
+ title: "\u7F29\u5C0F"
259
+ }, /*#__PURE__*/_react.default.createElement("span", {
260
+ className: "ant-modal-close-x"
261
+ }, /*#__PURE__*/_react.default.createElement(_icons.ZoomOutOutlined, null))), /*#__PURE__*/_react.default.createElement("button", {
262
+ type: "button",
263
+ className: "ant-modal-close",
264
+ style: {
265
+ right: 42
266
+ },
267
+ onClick: function onClick(e) {
268
+ e.stopPropagation();
269
+ toggleFullScreen();
270
+ },
271
+ title: fullScreen ? '退出全屏' : '全屏'
272
+ }, /*#__PURE__*/_react.default.createElement("span", {
273
+ className: "ant-modal-close-x"
274
+ }, fullScreen ? /*#__PURE__*/_react.default.createElement(_icons.ShrinkOutlined, null) : /*#__PURE__*/_react.default.createElement(_icons.ArrowsAltOutlined, null)))),
99
275
  modalRender: function modalRender(modal) {
100
276
  return /*#__PURE__*/_react.default.createElement(_reactDraggable.default, {
101
- disabled: disabled,
277
+ disabled: disabled || fullScreen,
102
278
  bounds: bounds,
103
279
  nodeRef: draggleRef,
104
280
  onStart: function onStart(event, uiData) {
105
281
  return _onStart(event, uiData);
106
- }
282
+ },
283
+ cancel: ".resize-handle"
107
284
  }, /*#__PURE__*/_react.default.createElement("div", {
108
- ref: draggleRef
109
- }, modal));
285
+ ref: draggleRef,
286
+ style: isResizing && modalSize.width > 0 ? {
287
+ position: 'relative',
288
+ height: '100%',
289
+ width: "".concat(modalSize.width, "px"),
290
+ '--modal-width': "".concat(modalSize.width, "px"),
291
+ '--modal-height': "".concat(modalSize.height, "px")
292
+ } : {
293
+ position: 'relative',
294
+ height: '100%',
295
+ width: '100%'
296
+ }
297
+ }, modal, !fullScreen && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
298
+ className: "resize-handle resize-handle-e",
299
+ onMouseDown: function onMouseDown(e) {
300
+ return handleResizeMouseDown(e, 'e');
301
+ }
302
+ }), /*#__PURE__*/_react.default.createElement("div", {
303
+ className: "resize-handle resize-handle-s",
304
+ onMouseDown: function onMouseDown(e) {
305
+ return handleResizeMouseDown(e, 's');
306
+ }
307
+ }), /*#__PURE__*/_react.default.createElement("div", {
308
+ className: "resize-handle resize-handle-w",
309
+ onMouseDown: function onMouseDown(e) {
310
+ return handleResizeMouseDown(e, 'w');
311
+ }
312
+ }), /*#__PURE__*/_react.default.createElement("div", {
313
+ className: "resize-handle resize-handle-n",
314
+ onMouseDown: function onMouseDown(e) {
315
+ return handleResizeMouseDown(e, 'n');
316
+ }
317
+ }), /*#__PURE__*/_react.default.createElement("div", {
318
+ className: "resize-handle resize-handle-se",
319
+ onMouseDown: function onMouseDown(e) {
320
+ return handleResizeMouseDown(e, 'se');
321
+ }
322
+ }), /*#__PURE__*/_react.default.createElement("div", {
323
+ className: "resize-handle resize-handle-sw",
324
+ onMouseDown: function onMouseDown(e) {
325
+ return handleResizeMouseDown(e, 'sw');
326
+ }
327
+ }), /*#__PURE__*/_react.default.createElement("div", {
328
+ className: "resize-handle resize-handle-ne",
329
+ onMouseDown: function onMouseDown(e) {
330
+ return handleResizeMouseDown(e, 'ne');
331
+ }
332
+ }), /*#__PURE__*/_react.default.createElement("div", {
333
+ className: "resize-handle resize-handle-nw",
334
+ onMouseDown: function onMouseDown(e) {
335
+ return handleResizeMouseDown(e, 'nw');
336
+ }
337
+ }))));
110
338
  }
111
339
  }));
112
340
  };