@nokecy/qc-ui 1.0.93 → 1.0.95

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 (156) hide show
  1. package/dist/cjs/ag-grid-plus/ag-gridPlus.js +262 -177
  2. package/dist/cjs/ag-grid-plus/context/gridContext.d.ts +79 -15
  3. package/dist/cjs/ag-grid-plus/context/gridContext.js +0 -4
  4. package/dist/cjs/ag-grid-plus/context/useSchemeDataFlow.d.ts +88 -0
  5. package/dist/cjs/ag-grid-plus/context/useSchemeDataFlow.js +173 -0
  6. package/dist/cjs/ag-grid-plus/context/useSchemeManager.d.ts +78 -0
  7. package/dist/cjs/ag-grid-plus/{querySchemes/hooks/useQuerySchemes.js → context/useSchemeManager.js} +421 -449
  8. package/dist/cjs/ag-grid-plus/hooks/useAgGridCalculation.d.ts +1 -1
  9. package/dist/cjs/ag-grid-plus/hooks/useAgGridData.d.ts +2 -2
  10. package/dist/cjs/ag-grid-plus/index.d.ts +7 -4
  11. package/dist/cjs/ag-grid-plus/index.js +11 -154
  12. package/dist/cjs/ag-grid-plus/interface.d.ts +0 -31
  13. package/dist/cjs/ag-grid-plus/interface.js +3 -0
  14. package/dist/cjs/ag-grid-plus/setting/ColumnSetting.d.ts +0 -3
  15. package/dist/cjs/ag-grid-plus/setting/ColumnSetting.js +430 -412
  16. package/dist/cjs/ag-grid-plus/setting/QuerySchemeManager.d.ts +11 -0
  17. package/dist/cjs/ag-grid-plus/{querySchemes/components/QuerySchemesManager.js → setting/QuerySchemeManager.js} +304 -202
  18. package/dist/cjs/ag-grid-plus/setting/index.d.ts +2 -2
  19. package/dist/cjs/ag-grid-plus/setting/index.js +33 -48
  20. package/dist/cjs/ag-grid-plus/shared/storage/backendApiAdapter.d.ts +58 -0
  21. package/dist/cjs/ag-grid-plus/shared/storage/backendApiAdapter.js +446 -0
  22. package/dist/cjs/ag-grid-plus/shared/storage/localStorageAdapter.d.ts +57 -0
  23. package/dist/cjs/ag-grid-plus/{storage/MemoryStorageAdapter.js → shared/storage/localStorageAdapter.js} +264 -184
  24. package/dist/cjs/ag-grid-plus/shared/storage/schemeStorageAdapter.d.ts +132 -0
  25. package/dist/cjs/array-table/index.js +172 -48
  26. package/dist/cjs/draggableModal/index.d.ts +1 -1
  27. package/dist/cjs/draggableModal/index.js +23 -93
  28. package/dist/cjs/draggableModal/style.less +0 -73
  29. package/dist/cjs/index.d.ts +3 -4
  30. package/dist/cjs/index.js +16 -160
  31. package/dist/esm/ag-grid-plus/ag-gridPlus.js +262 -177
  32. package/dist/esm/ag-grid-plus/context/gridContext.d.ts +79 -15
  33. package/dist/esm/ag-grid-plus/context/gridContext.js +0 -4
  34. package/dist/esm/ag-grid-plus/context/useSchemeDataFlow.d.ts +88 -0
  35. package/dist/esm/ag-grid-plus/context/useSchemeDataFlow.js +165 -0
  36. package/dist/esm/ag-grid-plus/context/useSchemeManager.d.ts +78 -0
  37. package/dist/esm/ag-grid-plus/{querySchemes/hooks/useQuerySchemes.js → context/useSchemeManager.js} +420 -449
  38. package/dist/esm/ag-grid-plus/errors/ErrorBoundary.d.ts +1 -1
  39. package/dist/esm/ag-grid-plus/hooks/useAgGridCalculation.d.ts +1 -1
  40. package/dist/esm/ag-grid-plus/hooks/useAgGridData.d.ts +2 -2
  41. package/dist/esm/ag-grid-plus/index.d.ts +7 -4
  42. package/dist/esm/ag-grid-plus/index.js +10 -4
  43. package/dist/esm/ag-grid-plus/interface.d.ts +0 -31
  44. package/dist/esm/ag-grid-plus/interface.js +2 -0
  45. package/dist/esm/ag-grid-plus/setting/ColumnSetting.d.ts +0 -3
  46. package/dist/esm/ag-grid-plus/setting/ColumnSetting.js +434 -416
  47. package/dist/esm/ag-grid-plus/setting/QuerySchemeManager.d.ts +11 -0
  48. package/dist/esm/ag-grid-plus/{querySchemes/components/QuerySchemesManager.js → setting/QuerySchemeManager.js} +304 -202
  49. package/dist/esm/ag-grid-plus/setting/index.d.ts +2 -2
  50. package/dist/esm/ag-grid-plus/setting/index.js +33 -48
  51. package/dist/esm/ag-grid-plus/shared/storage/backendApiAdapter.d.ts +58 -0
  52. package/dist/esm/ag-grid-plus/shared/storage/backendApiAdapter.js +444 -0
  53. package/dist/esm/ag-grid-plus/shared/storage/localStorageAdapter.d.ts +57 -0
  54. package/dist/esm/ag-grid-plus/{storage/MemoryStorageAdapter.js → shared/storage/localStorageAdapter.js} +263 -184
  55. package/dist/esm/ag-grid-plus/shared/storage/schemeStorageAdapter.d.ts +132 -0
  56. package/dist/esm/array-table/index.js +174 -48
  57. package/dist/esm/draggableModal/index.d.ts +1 -1
  58. package/dist/esm/draggableModal/index.js +24 -93
  59. package/dist/esm/draggableModal/style.less +0 -73
  60. package/dist/esm/index.d.ts +3 -4
  61. package/dist/esm/index.js +13 -10
  62. package/dist/umd/qc-ui.min.css +1 -1
  63. package/dist/umd/qc-ui.min.js +1 -1
  64. package/package.json +1 -1
  65. package/dist/cjs/ag-grid-plus/querySchemes/components/QuerySchemesManager.d.ts +0 -21
  66. package/dist/cjs/ag-grid-plus/querySchemes/components/QuerySchemesManager.less +0 -86
  67. package/dist/cjs/ag-grid-plus/querySchemes/components/index.d.ts +0 -5
  68. package/dist/cjs/ag-grid-plus/querySchemes/components/index.js +0 -12
  69. package/dist/cjs/ag-grid-plus/querySchemes/constants.d.ts +0 -17
  70. package/dist/cjs/ag-grid-plus/querySchemes/constants.js +0 -30
  71. package/dist/cjs/ag-grid-plus/querySchemes/hooks/useQueryOrderManager.d.ts +0 -10
  72. package/dist/cjs/ag-grid-plus/querySchemes/hooks/useQueryOrderManager.js +0 -65
  73. package/dist/cjs/ag-grid-plus/querySchemes/hooks/useQuerySchemes.d.ts +0 -6
  74. package/dist/cjs/ag-grid-plus/querySchemes/index.d.ts +0 -11
  75. package/dist/cjs/ag-grid-plus/querySchemes/index.js +0 -113
  76. package/dist/cjs/ag-grid-plus/querySchemes/storage/localStorageAdapter.d.ts +0 -44
  77. package/dist/cjs/ag-grid-plus/querySchemes/storage/localStorageAdapter.js +0 -261
  78. package/dist/cjs/ag-grid-plus/querySchemes/types.d.ts +0 -143
  79. package/dist/cjs/ag-grid-plus/querySchemes/utils/validator.d.ts +0 -36
  80. package/dist/cjs/ag-grid-plus/querySchemes/utils/validator.js +0 -155
  81. package/dist/cjs/ag-grid-plus/schemes/components/SchemeManager.d.ts +0 -16
  82. package/dist/cjs/ag-grid-plus/schemes/components/SchemeManager.js +0 -342
  83. package/dist/cjs/ag-grid-plus/schemes/components/SchemeManager.less +0 -35
  84. package/dist/cjs/ag-grid-plus/schemes/components/SchemeSelector.d.ts +0 -20
  85. package/dist/cjs/ag-grid-plus/schemes/components/SchemeSelector.js +0 -289
  86. package/dist/cjs/ag-grid-plus/schemes/components/SchemeSelector.less +0 -39
  87. package/dist/cjs/ag-grid-plus/schemes/components/index.d.ts +0 -4
  88. package/dist/cjs/ag-grid-plus/schemes/components/index.js +0 -19
  89. package/dist/cjs/ag-grid-plus/schemes/constants.d.ts +0 -23
  90. package/dist/cjs/ag-grid-plus/schemes/constants.js +0 -39
  91. package/dist/cjs/ag-grid-plus/schemes/hooks/useColumnSchemes.d.ts +0 -6
  92. package/dist/cjs/ag-grid-plus/schemes/hooks/useColumnSchemes.js +0 -617
  93. package/dist/cjs/ag-grid-plus/schemes/index.d.ts +0 -16
  94. package/dist/cjs/ag-grid-plus/schemes/index.js +0 -124
  95. package/dist/cjs/ag-grid-plus/schemes/storage/localStorageAdapter.d.ts +0 -64
  96. package/dist/cjs/ag-grid-plus/schemes/storage/localStorageAdapter.js +0 -354
  97. package/dist/cjs/ag-grid-plus/schemes/types.d.ts +0 -131
  98. package/dist/cjs/ag-grid-plus/schemes/types.js +0 -5
  99. package/dist/cjs/ag-grid-plus/schemes/utils/validator.d.ts +0 -27
  100. package/dist/cjs/ag-grid-plus/schemes/utils/validator.js +0 -109
  101. package/dist/cjs/ag-grid-plus/storage/MemoryStorageAdapter.d.ts +0 -76
  102. package/dist/cjs/ag-grid-plus/storage/SchemeSyncManager.d.ts +0 -141
  103. package/dist/cjs/ag-grid-plus/storage/SchemeSyncManager.js +0 -902
  104. package/dist/cjs/ag-grid-plus/storage/globalSyncManager.d.ts +0 -106
  105. package/dist/cjs/ag-grid-plus/storage/globalSyncManager.js +0 -364
  106. package/dist/cjs/ag-grid-plus/storage/index.d.ts +0 -8
  107. package/dist/cjs/ag-grid-plus/storage/index.js +0 -49
  108. package/dist/cjs/ag-grid-plus/storage/types.d.ts +0 -150
  109. package/dist/cjs/ag-grid-plus/storage/types.js +0 -5
  110. package/dist/esm/ag-grid-plus/querySchemes/components/QuerySchemesManager.d.ts +0 -21
  111. package/dist/esm/ag-grid-plus/querySchemes/components/QuerySchemesManager.less +0 -86
  112. package/dist/esm/ag-grid-plus/querySchemes/components/index.d.ts +0 -5
  113. package/dist/esm/ag-grid-plus/querySchemes/components/index.js +0 -5
  114. package/dist/esm/ag-grid-plus/querySchemes/constants.d.ts +0 -17
  115. package/dist/esm/ag-grid-plus/querySchemes/constants.js +0 -24
  116. package/dist/esm/ag-grid-plus/querySchemes/hooks/useQueryOrderManager.d.ts +0 -10
  117. package/dist/esm/ag-grid-plus/querySchemes/hooks/useQueryOrderManager.js +0 -60
  118. package/dist/esm/ag-grid-plus/querySchemes/hooks/useQuerySchemes.d.ts +0 -6
  119. package/dist/esm/ag-grid-plus/querySchemes/index.d.ts +0 -11
  120. package/dist/esm/ag-grid-plus/querySchemes/index.js +0 -20
  121. package/dist/esm/ag-grid-plus/querySchemes/storage/localStorageAdapter.d.ts +0 -44
  122. package/dist/esm/ag-grid-plus/querySchemes/storage/localStorageAdapter.js +0 -256
  123. package/dist/esm/ag-grid-plus/querySchemes/types.d.ts +0 -143
  124. package/dist/esm/ag-grid-plus/querySchemes/utils/validator.d.ts +0 -36
  125. package/dist/esm/ag-grid-plus/querySchemes/utils/validator.js +0 -144
  126. package/dist/esm/ag-grid-plus/schemes/components/SchemeManager.d.ts +0 -16
  127. package/dist/esm/ag-grid-plus/schemes/components/SchemeManager.js +0 -334
  128. package/dist/esm/ag-grid-plus/schemes/components/SchemeManager.less +0 -35
  129. package/dist/esm/ag-grid-plus/schemes/components/SchemeSelector.d.ts +0 -20
  130. package/dist/esm/ag-grid-plus/schemes/components/SchemeSelector.js +0 -281
  131. package/dist/esm/ag-grid-plus/schemes/components/SchemeSelector.less +0 -39
  132. package/dist/esm/ag-grid-plus/schemes/components/index.d.ts +0 -4
  133. package/dist/esm/ag-grid-plus/schemes/components/index.js +0 -2
  134. package/dist/esm/ag-grid-plus/schemes/constants.d.ts +0 -23
  135. package/dist/esm/ag-grid-plus/schemes/constants.js +0 -33
  136. package/dist/esm/ag-grid-plus/schemes/hooks/useColumnSchemes.d.ts +0 -6
  137. package/dist/esm/ag-grid-plus/schemes/hooks/useColumnSchemes.js +0 -612
  138. package/dist/esm/ag-grid-plus/schemes/index.d.ts +0 -16
  139. package/dist/esm/ag-grid-plus/schemes/index.js +0 -25
  140. package/dist/esm/ag-grid-plus/schemes/storage/localStorageAdapter.d.ts +0 -64
  141. package/dist/esm/ag-grid-plus/schemes/storage/localStorageAdapter.js +0 -349
  142. package/dist/esm/ag-grid-plus/schemes/types.d.ts +0 -131
  143. package/dist/esm/ag-grid-plus/schemes/types.js +0 -1
  144. package/dist/esm/ag-grid-plus/schemes/utils/validator.d.ts +0 -27
  145. package/dist/esm/ag-grid-plus/schemes/utils/validator.js +0 -100
  146. package/dist/esm/ag-grid-plus/storage/MemoryStorageAdapter.d.ts +0 -76
  147. package/dist/esm/ag-grid-plus/storage/SchemeSyncManager.d.ts +0 -141
  148. package/dist/esm/ag-grid-plus/storage/SchemeSyncManager.js +0 -896
  149. package/dist/esm/ag-grid-plus/storage/globalSyncManager.d.ts +0 -106
  150. package/dist/esm/ag-grid-plus/storage/globalSyncManager.js +0 -350
  151. package/dist/esm/ag-grid-plus/storage/index.d.ts +0 -8
  152. package/dist/esm/ag-grid-plus/storage/index.js +0 -9
  153. package/dist/esm/ag-grid-plus/storage/types.d.ts +0 -150
  154. package/dist/esm/ag-grid-plus/storage/types.js +0 -1
  155. /package/dist/cjs/ag-grid-plus/{querySchemes/types.js → shared/storage/schemeStorageAdapter.js} +0 -0
  156. /package/dist/esm/ag-grid-plus/{querySchemes/types.js → shared/storage/schemeStorageAdapter.js} +0 -0
@@ -0,0 +1,132 @@
1
+ import type { FlatColumnItem } from '../../setting/columnGroupTypes';
2
+ /**
3
+ * 查询方案
4
+ */
5
+ export interface QueryScheme {
6
+ /** 方案唯一标识 */
7
+ id: string;
8
+ /** 方案名称 */
9
+ name: string;
10
+ /** 方案描述 */
11
+ description?: string;
12
+ /** 查询表单字段排序 */
13
+ itemsOrder?: string[];
14
+ /** 隐藏的字段列表 */
15
+ hiddenFields?: string[];
16
+ /** 查询表单值 */
17
+ formValues?: Record<string, any>;
18
+ /** 是否为默认方案 */
19
+ isDefault: boolean;
20
+ /** 是否为系统方案(不可删除) */
21
+ isSystem: boolean;
22
+ /** 创建时间戳 */
23
+ createdAt: number;
24
+ /** 最后更新时间戳 */
25
+ updatedAt: number;
26
+ /** 创建用户ID(可选) */
27
+ createdBy?: string;
28
+ }
29
+ /**
30
+ * 列方案(集中式 API 使用)
31
+ * 使用扩展的列配置格式,包含分组层级结构
32
+ */
33
+ export interface ColumnScheme {
34
+ /** 方案唯一标识 */
35
+ id: string;
36
+ /** 方案名称 */
37
+ name: string;
38
+ /** 方案描述 */
39
+ description?: string;
40
+ /** 完整的列配置数据(包含分组层级结构) */
41
+ columnConfig: FlatColumnItem[];
42
+ /** AG-Grid 过滤器模型数据(可选) */
43
+ filterModel?: any;
44
+ /** 是否为默认方案 */
45
+ isDefault: boolean;
46
+ /** 是否为系统方案(不可删除) */
47
+ isSystem: boolean;
48
+ /** 创建时间戳 */
49
+ createdAt: number;
50
+ /** 最后更新时间戳 */
51
+ updatedAt: number;
52
+ /** 创建用户ID(可选) */
53
+ createdBy?: string;
54
+ }
55
+ /**
56
+ * 方案同步数据结构
57
+ */
58
+ export interface SchemeSyncDataDto {
59
+ /** 列方案,按 GridId 分组 */
60
+ columnSchemes: Record<string, ColumnScheme[]>;
61
+ /** 查询方案,按 GridId 分组 */
62
+ querySchemes: Record<string, QueryScheme[]>;
63
+ /** 当前激活方案,Key 为 GridId */
64
+ currentSchemes: Record<string, CurrentSchemeDto>;
65
+ /** 服务器当前时间戳(毫秒) */
66
+ syncTime: number;
67
+ /** 数据版本号 */
68
+ version: number;
69
+ }
70
+ /**
71
+ * 当前方案 DTO
72
+ */
73
+ export interface CurrentSchemeDto {
74
+ /** 列方案ID */
75
+ columnSchemeId?: string | null;
76
+ /** 查询方案ID */
77
+ querySchemeId?: string | null;
78
+ }
79
+ /**
80
+ * 方案存储适配器接口
81
+ *
82
+ * 支持两种实现:
83
+ * - LocalStorageAdapter: 本地存储
84
+ * - BackendApiAdapter: 远程 API
85
+ */
86
+ export interface SchemeStorageAdapter {
87
+ /**
88
+ * 获取用户所有方案数据 (初始化时调用一次)
89
+ * @returns 所有表格的方案数据
90
+ */
91
+ loadAllSchemes(): Promise<SchemeSyncDataDto>;
92
+ /**
93
+ * 保存/更新列方案
94
+ * @param gridId 表格ID
95
+ * @param scheme 方案对象 (id 存在表示更新,不存在表示新增)
96
+ * @returns 保存后的方案对象
97
+ */
98
+ saveColumnScheme(gridId: string, scheme: ColumnScheme): Promise<ColumnScheme>;
99
+ /**
100
+ * 删除列方案
101
+ * @param gridId 表格ID
102
+ * @param schemeId 方案ID
103
+ */
104
+ deleteColumnScheme(gridId: string, schemeId: string): Promise<void>;
105
+ /**
106
+ * 保存/更新查询方案
107
+ * @param gridId 表格ID
108
+ * @param scheme 方案对象
109
+ * @returns 保存后的方案对象
110
+ */
111
+ saveQueryScheme(gridId: string, scheme: QueryScheme): Promise<QueryScheme>;
112
+ /**
113
+ * 删除查询方案
114
+ * @param gridId 表格ID
115
+ * @param schemeId 方案ID
116
+ */
117
+ deleteQueryScheme(gridId: string, schemeId: string): Promise<void>;
118
+ /**
119
+ * 设置当前方案
120
+ * @param gridId 表格ID
121
+ * @param columnSchemeId 列方案ID (null 表示清除)
122
+ * @param querySchemeId 查询方案ID (null 表示清除)
123
+ */
124
+ setCurrentScheme(gridId: string, columnSchemeId: string | null, querySchemeId: string | null): Promise<void>;
125
+ }
126
+ /**
127
+ * 适配器配置基类
128
+ */
129
+ export interface SchemeStorageConfig {
130
+ /** 是否启用调试日志 */
131
+ enableDebugLog?: boolean;
132
+ }
@@ -11,7 +11,7 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
11
11
  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; }
12
12
  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; } }
13
13
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
14
- import React, { Fragment, useEffect, useRef, useState } from "react";
14
+ import React, { Fragment, useEffect, useRef, useState, useMemo, useContext } from "react";
15
15
  import { AgGridReact } from "ag-grid-react";
16
16
  import { useField, observer, RecursionField } from "@formily/react";
17
17
  import { useFieldSchema } from "@formily/react";
@@ -24,11 +24,16 @@ import ArrayAddBtn from "./arrayAddBtn";
24
24
  import PreviewArrayTable from "./preview";
25
25
  import { Space } from "antd";
26
26
  import Setting from "../ag-grid-plus/setting";
27
- import { useGridPlusColumnState } from "../ag-grid-plus/hooks/useGridPlusColumnState";
28
- import { useColumnSchemes } from "../ag-grid-plus/schemes/hooks/useColumnSchemes";
27
+ import { GridPlusContext } from "../ag-grid-plus/context/gridContext";
28
+ import { useSchemeManager } from "../ag-grid-plus/context/useSchemeManager";
29
+ import { LocalStorageSchemeAdapter } from "../ag-grid-plus/shared/storage/localStorageAdapter";
30
+ import { flatConfigToColumnState, flatConfigToGridState } from "../ag-grid-plus/setting/columnGroupUtils";
31
+
32
+ // 导入 AG-Grid v33 主题
33
+ import { agGridTheme } from "../ag-grid-plus/theme";
29
34
 
30
35
  //@ts-ignore
31
- var ArrayTable = observer(function (props) {
36
+ var ArrayTableInner = observer(function (props) {
32
37
  var height = props.height;
33
38
  var _useState = useState(false),
34
39
  _useState2 = _slicedToArray(_useState, 2),
@@ -54,18 +59,6 @@ var ArrayTable = observer(function (props) {
54
59
  onMoveUp = props.onMoveUp;
55
60
  var addition = useAddition();
56
61
 
57
- // 尝试从 Context 获取列状态管理(如果被 Provider 包裹)
58
- var contextColumnState = useGridPlusColumnState();
59
-
60
- // ArrayTable 内部集成列方案管理(统一使用 AgGridPlus 的方案系统)
61
- var internalSchemeManager = useColumnSchemes({
62
- gridId: props.gridKey || 'array-table-default',
63
- enableAutoSave: false // 手动控制保存时机
64
- });
65
-
66
- // 使用 Context 的 schemeManager 或内部的 schemeManager
67
- var schemeManager = (contextColumnState === null || contextColumnState === void 0 ? void 0 : contextColumnState.schemeManager) || internalSchemeManager;
68
-
69
62
  // 使用自定义 hooks
70
63
  var _useCellFocus = useCellFocus(),
71
64
  focusInputInCell = _useCellFocus.focusInputInCell;
@@ -74,46 +67,138 @@ var ArrayTable = observer(function (props) {
74
67
  var _useRowDrag = useRowDrag(field),
75
68
  handleRowDragMove = _useRowDrag.handleRowDragMove;
76
69
 
77
- // 恢复列状态(从方案系统)
70
+ // 从 Context 获取方案管理相关的状态和方法
71
+ var _useContext = useContext(GridPlusContext),
72
+ currentSchemes = _useContext.currentSchemes,
73
+ columnSchemes = _useContext.columnSchemes;
74
+
75
+ // 获取当前表格的激活方案
76
+ var currentScheme = useMemo(function () {
77
+ var _currentSchemes$props;
78
+ if (!props.gridKey || !currentSchemes || !columnSchemes) return null;
79
+ var currentSchemeId = (_currentSchemes$props = currentSchemes[props.gridKey]) === null || _currentSchemes$props === void 0 ? void 0 : _currentSchemes$props.columnSchemeId;
80
+ if (!currentSchemeId) return null;
81
+ var schemes = columnSchemes[props.gridKey] || [];
82
+ return schemes.find(function (s) {
83
+ return s.id === currentSchemeId;
84
+ });
85
+ }, [props.gridKey, currentSchemes, columnSchemes]);
86
+
87
+ // 使用 ref 记录上次应用的方案 ID 和配置哈希,避免重复应用
88
+ var lastAppliedRef = useRef({
89
+ schemeId: null,
90
+ configHash: null
91
+ });
92
+
93
+ /**
94
+ * 【关键修复】在页面刷新或切换方案时自动恢复列方案
95
+ *
96
+ * 监听 currentScheme 和 gridApiState 的变化,当方案和 Grid API 都准备好时,
97
+ * 自动应用方案中保存的列状态(列顺序、宽度、隐藏等)
98
+ *
99
+ * 关键优化:使用 ref 记录上次应用的配置哈希,避免保存配置后重复应用旧数据
100
+ */
78
101
  useEffect(function () {
79
- if (!props.gridKey || !gridApiState || !schemeManager) {
102
+ var _currentScheme$column;
103
+ // 检查必要条件
104
+ if (!props.gridKey || !gridApiState || !currentScheme) return;
105
+ if (!currentScheme.columnConfig || currentScheme.columnConfig.length === 0) return;
106
+
107
+ // 计算当前配置的简单哈希(用于检测配置是否真正变化)
108
+ var configHash = JSON.stringify({
109
+ id: currentScheme.id,
110
+ columnCount: currentScheme.columnConfig.length,
111
+ firstCol: (_currentScheme$column = currentScheme.columnConfig[0]) === null || _currentScheme$column === void 0 ? void 0 : _currentScheme$column.field,
112
+ updatedAt: currentScheme.updatedAt
113
+ });
114
+ console.log('[ArrayTable] 方案恢复检查:', {
115
+ schemeId: currentScheme === null || currentScheme === void 0 ? void 0 : currentScheme.id,
116
+ schemeName: currentScheme === null || currentScheme === void 0 ? void 0 : currentScheme.name,
117
+ configHash: configHash,
118
+ lastHash: lastAppliedRef.current.configHash,
119
+ shouldApply: configHash !== lastAppliedRef.current.configHash
120
+ });
121
+
122
+ // 【关键】检查配置是否真正变化,避免重复应用
123
+ if (configHash === lastAppliedRef.current.configHash) {
124
+ console.log('[ArrayTable] 配置未变化,跳过应用');
80
125
  return;
81
126
  }
82
127
 
83
- // 使用方案系统恢复列状态
84
- // schemeManager 会自动加载默认方案或最后使用的方案
85
- var currentScheme = schemeManager.currentScheme;
86
- if (currentScheme && currentScheme.columnConfig) {
87
- // 从 columnConfig (FlatColumnItem[]) 提取列状态
88
- var columnState = currentScheme.columnConfig.filter(function (item) {
89
- return item.type === 'column' && item.field;
90
- }).map(function (item) {
91
- return {
92
- colId: item.field,
93
- width: item.width,
94
- hide: item.hide,
95
- pinned: item.pinned === 'notPinned' ? null : item.pinned,
96
- flex: item.flex
97
- };
128
+ // 【提取函数】应用列状态和过滤器
129
+ var applyColumnStateAndFilter = function applyColumnStateAndFilter() {
130
+ if (!currentScheme || !gridApiState) return;
131
+
132
+ // 将扁平化的列配置转换为 AG-Grid 列状态
133
+ var columnState = flatConfigToColumnState(currentScheme.columnConfig);
134
+
135
+ // 应用列状态(包括列顺序、宽度、隐藏等)
136
+ gridApiState.applyColumnState({
137
+ state: columnState,
138
+ applyOrder: true // 强制应用列顺序
98
139
  });
99
- setTimeout(function () {
100
- gridApiState.applyColumnState({
101
- state: columnState,
102
- applyOrder: true
140
+ console.log('[ArrayTable] 方案已成功应用');
141
+
142
+ // 如果方案中包含过滤器配置,也一并应用
143
+ if (currentScheme.filterModel) {
144
+ gridApiState.setFilterModel(currentScheme.filterModel);
145
+ console.log('[ArrayTable] 过滤器已应用');
146
+ }
147
+
148
+ // 记录本次应用的配置哈希
149
+ lastAppliedRef.current = {
150
+ schemeId: currentScheme.id,
151
+ configHash: configHash
152
+ };
153
+ };
154
+
155
+ // 使用 requestAnimationFrame 延迟应用
156
+ var rafId = requestAnimationFrame(function () {
157
+ try {
158
+ console.log('[ArrayTable] 正在应用方案:', currentScheme.name);
159
+
160
+ // 【关键检测】检查是否包含分组配置
161
+ var hasGroups = currentScheme.columnConfig.some(function (item) {
162
+ return item.type === 'group';
103
163
  });
104
- }, 100);
105
- }
106
- }, [props.gridKey, gridApiState, schemeManager === null || schemeManager === void 0 ? void 0 : schemeManager.currentScheme]);
164
+ console.log('[ArrayTable] 是否包含分组:', hasGroups);
165
+
166
+ // 【条件更新】只有在包含分组时才更新 columnDefs
167
+ // 原因:array-table 的列是动态生成的,无分组时不应该覆盖动态列定义
168
+ if (hasGroups) {
169
+ var gridColumnDefs = flatConfigToGridState(currentScheme.columnConfig);
170
+ console.log('[ArrayTable] 检测到分组,更新 columnDefs');
171
+ gridApiState.setGridOption('columnDefs', gridColumnDefs);
172
+
173
+ // 等待 columnDefs 更新完成后再应用列状态
174
+ setTimeout(function () {
175
+ try {
176
+ applyColumnStateAndFilter();
177
+ } catch (error) {
178
+ console.error('[ArrayTable] 应用列状态失败:', error);
179
+ }
180
+ }, 100);
181
+ } else {
182
+ // 无分组时,直接应用列状态即可
183
+ console.log('[ArrayTable] 无分组,仅应用列状态');
184
+ applyColumnStateAndFilter();
185
+ }
186
+ } catch (error) {
187
+ console.error('[ArrayTable] 应用方案失败:', error);
188
+ }
189
+ });
190
+
191
+ // 清理函数:取消待执行的 RAF
192
+ return function () {
193
+ cancelAnimationFrame(rafId);
194
+ };
195
+ }, [props.gridKey, gridApiState, currentScheme === null || currentScheme === void 0 ? void 0 : currentScheme.id, currentScheme === null || currentScheme === void 0 ? void 0 : currentScheme.updatedAt]);
107
196
 
108
197
  //@ts-ignore
109
198
  if (columns.length > 0) {
110
199
  //@ts-ignore
111
200
  columns[0].rowDrag = props.onRowDrag ? true : false;
112
201
  }
113
-
114
- // 不再需要 onColumnStateChanged 回调
115
- // 保存逻辑统一由 ColumnSetting 通过 schemeManager 处理
116
-
117
202
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
118
203
  ref: ref,
119
204
  style: {
@@ -160,14 +245,15 @@ var ArrayTable = observer(function (props) {
160
245
  gridKey: props.gridKey,
161
246
  gridApi: apiRef.current,
162
247
  gridApiState: gridApiState,
163
- type: 'formArrayTable',
164
- schemeManager: schemeManager
248
+ allColDefs: columns,
249
+ showQueryScheme: false
165
250
  })), /*#__PURE__*/React.createElement("div", {
166
251
  style: {
167
252
  flex: 1,
168
253
  minHeight: 0
169
254
  }
170
255
  }, /*#__PURE__*/React.createElement(AgGridReact, {
256
+ theme: agGridTheme,
171
257
  onGridReady: function onGridReady(params) {
172
258
  params.api.hidePopupMenu();
173
259
  apiRef.current = params.api;
@@ -182,7 +268,8 @@ var ArrayTable = observer(function (props) {
182
268
  suppressCopyRowsToClipboard: true,
183
269
  suppressCopySingleCellRanges: true,
184
270
  enterNavigatesVertically: true,
185
- enterNavigatesVerticallyAfterEdit: true
271
+ enterNavigatesVerticallyAfterEdit: true,
272
+ columnHoverHighlight: true
186
273
  },
187
274
  onCellKeyDown: handleCellKeyDown,
188
275
  onCellClicked: function onCellClicked(event) {
@@ -209,7 +296,6 @@ var ArrayTable = observer(function (props) {
209
296
  suppressClipboardPaste: true,
210
297
  preventDefaultOnContextMenu: true,
211
298
  enableCellTextSelection: true,
212
- className: "ag-theme-alpine",
213
299
  defaultColDef: {
214
300
  resizable: true,
215
301
  headerComponentParams: {
@@ -253,6 +339,46 @@ var ArrayTable = observer(function (props) {
253
339
  });
254
340
  }))));
255
341
  });
342
+ ArrayTableInner.displayName = "ArrayTableInner";
343
+
344
+ /**
345
+ * ArrayTable 组件 - 带 GridPlusContext Provider 包装
346
+ *
347
+ * 提供完整的列方案管理功能支持
348
+ */
349
+ //@ts-ignore
350
+ var ArrayTable = observer(function (props) {
351
+ // 创建 LocalStorage 适配器实例 (使用 useMemo 避免重复创建)
352
+ var adapter = useMemo(function () {
353
+ return new LocalStorageSchemeAdapter({
354
+ storageKey: "array-table-schemes-".concat(props.gridKey || 'default'),
355
+ enableDebugLog: false
356
+ });
357
+ }, [props.gridKey]);
358
+
359
+ // 初始化方案管理器
360
+ var schemeManager = useSchemeManager({
361
+ adapter: adapter,
362
+ autoLoad: true,
363
+ showErrorMessage: true
364
+ });
365
+
366
+ // 构建 Context Value
367
+ var contextValue = useMemo(function () {
368
+ return _objectSpread({
369
+ extensibleColumns: [],
370
+ columnState: undefined,
371
+ onSaveColumnState: function onSaveColumnState() {},
372
+ applyToGlobal: function applyToGlobal() {},
373
+ resetCurrent: function resetCurrent() {},
374
+ resetAll: function resetAll() {},
375
+ queryFormItems: []
376
+ }, schemeManager);
377
+ }, [schemeManager]);
378
+ return /*#__PURE__*/React.createElement(GridPlusContext.Provider, {
379
+ value: contextValue
380
+ }, /*#__PURE__*/React.createElement(ArrayTableInner, props));
381
+ });
256
382
  ArrayTable.displayName = "ArrayTable";
257
383
  ArrayTable.Column = function () {
258
384
  return /*#__PURE__*/React.createElement(Fragment, null);
@@ -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
  */
@@ -8,13 +8,13 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
8
8
  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; }
9
9
  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; } }
10
10
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
11
- import { ShrinkOutlined, ArrowsAltOutlined, ZoomInOutlined, ZoomOutOutlined } from '@ant-design/icons';
12
11
  import { Modal } from 'antd';
13
12
  import React, { useRef, useState } from 'react';
14
13
  import Draggable from 'react-draggable';
15
14
  import "./style.less";
15
+
16
16
  /**
17
- * 可拖拽Modal - 支持拖拽、全屏切换和缩放
17
+ * 可拖拽Modal - 支持拖拽和调整大小
18
18
  * @param props
19
19
  * @returns
20
20
  */
@@ -33,38 +33,30 @@ var DraggableModal = function DraggableModal(props) {
33
33
  bounds = _useState4[0],
34
34
  setBounds = _useState4[1];
35
35
  var draggleRef = useRef(null);
36
+
37
+ // 调整大小相关状态
36
38
  var _useState5 = useState(false),
37
39
  _useState6 = _slicedToArray(_useState5, 2),
38
- fullScreen = _useState6[0],
39
- setFullScreen = _useState6[1];
40
- var _useState7 = useState('normal'),
40
+ isResizing = _useState6[0],
41
+ setIsResizing = _useState6[1];
42
+ var _useState7 = useState(''),
41
43
  _useState8 = _slicedToArray(_useState7, 2),
42
- zoom = _useState8[0],
43
- setZoom = _useState8[1];
44
-
45
- // 调整大小相关状态
46
- var _useState9 = useState(false),
47
- _useState10 = _slicedToArray(_useState9, 2),
48
- isResizing = _useState10[0],
49
- setIsResizing = _useState10[1];
50
- var _useState11 = useState(''),
51
- _useState12 = _slicedToArray(_useState11, 2),
52
- resizeDirection = _useState12[0],
53
- setResizeDirection = _useState12[1];
54
- var _useState13 = useState({
44
+ resizeDirection = _useState8[0],
45
+ setResizeDirection = _useState8[1];
46
+ var _useState9 = useState({
55
47
  width: 0,
56
48
  height: 0
57
49
  }),
58
- _useState14 = _slicedToArray(_useState13, 2),
59
- modalSize = _useState14[0],
60
- setModalSize = _useState14[1];
61
- var _useState15 = useState({
50
+ _useState10 = _slicedToArray(_useState9, 2),
51
+ modalSize = _useState10[0],
52
+ setModalSize = _useState10[1];
53
+ var _useState11 = useState({
62
54
  x: 0,
63
55
  y: 0
64
56
  }),
65
- _useState16 = _slicedToArray(_useState15, 2),
66
- modalPosition = _useState16[0],
67
- setModalPosition = _useState16[1];
57
+ _useState12 = _slicedToArray(_useState11, 2),
58
+ modalPosition = _useState12[0],
59
+ setModalPosition = _useState12[1];
68
60
 
69
61
  // 解构 props,分离出 wrapClassName
70
62
  var propsWrapClassName = props.wrapClassName,
@@ -86,30 +78,12 @@ var DraggableModal = function DraggableModal(props) {
86
78
  bottom: clientHeight - (targetRect.bottom - uiData.y)
87
79
  });
88
80
  };
89
- var toggleFullScreen = function toggleFullScreen() {
90
- setFullScreen(!fullScreen);
91
- };
92
- var handleZoomIn = function handleZoomIn() {
93
- if (zoom === 'small') {
94
- setZoom('normal');
95
- } else if (zoom === 'normal') {
96
- setZoom('large');
97
- }
98
- };
99
- var handleZoomOut = function handleZoomOut() {
100
- if (zoom === 'large') {
101
- setZoom('normal');
102
- } else if (zoom === 'normal') {
103
- setZoom('small');
104
- }
105
- };
106
81
 
107
82
  // 拖动调整大小的处理函数
108
83
  var handleResizeMouseDown = function handleResizeMouseDown(e, direction) {
109
84
  var _draggleRef$current2;
110
85
  e.preventDefault();
111
86
  e.stopPropagation();
112
- if (fullScreen) return;
113
87
 
114
88
  // 查找.ant-modal,它在draggleRef的父级
115
89
  var modal = (_draggleRef$current2 = draggleRef.current) === null || _draggleRef$current2 === void 0 ? void 0 : _draggleRef$current2.closest('.ant-modal');
@@ -196,10 +170,8 @@ var DraggableModal = function DraggableModal(props) {
196
170
  };
197
171
 
198
172
  // 合并类名
199
- var zoomClass = !fullScreen && zoom !== 'normal' ? "modal-wrap-zoom-".concat(zoom) : '';
200
- var fullScreenClass = fullScreen ? 'modal-wrap-fullscreen' : '';
201
173
  var resizingClass = isResizing ? 'modal-wrap-resizing' : '';
202
- var mergedWrapClassName = [propsWrapClassName, fullScreenClass, zoomClass, resizingClass].filter(Boolean).join(' ');
174
+ var mergedWrapClassName = [propsWrapClassName, resizingClass].filter(Boolean).join(' ');
203
175
  return /*#__PURE__*/React.createElement(Modal, _extends({
204
176
  maskClosable: false,
205
177
  width: width
@@ -208,63 +180,22 @@ var DraggableModal = function DraggableModal(props) {
208
180
  title: /*#__PURE__*/React.createElement("div", {
209
181
  style: {
210
182
  width: '100%',
211
- cursor: fullScreen ? 'default' : 'move'
183
+ cursor: 'move'
212
184
  },
213
185
  onMouseOver: function onMouseOver() {
214
- if (!fullScreen && disabled) {
186
+ if (disabled) {
215
187
  setDisabled(false);
216
188
  }
217
189
  },
218
190
  onMouseOut: function onMouseOut() {
219
- if (!fullScreen) {
220
- setDisabled(true);
221
- }
191
+ setDisabled(true);
222
192
  },
223
193
  onFocus: function onFocus() {},
224
194
  onBlur: function onBlur() {}
225
- }, props.title, !fullScreen && zoom !== 'large' && /*#__PURE__*/React.createElement("button", {
226
- type: "button",
227
- className: "ant-modal-close",
228
- style: {
229
- right: 106
230
- },
231
- onClick: function onClick(e) {
232
- e.stopPropagation();
233
- handleZoomIn();
234
- },
235
- title: "\u653E\u5927"
236
- }, /*#__PURE__*/React.createElement("span", {
237
- className: "ant-modal-close-x"
238
- }, /*#__PURE__*/React.createElement(ZoomInOutlined, null))), !fullScreen && zoom !== 'small' && /*#__PURE__*/React.createElement("button", {
239
- type: "button",
240
- className: "ant-modal-close",
241
- style: {
242
- right: 74
243
- },
244
- onClick: function onClick(e) {
245
- e.stopPropagation();
246
- handleZoomOut();
247
- },
248
- title: "\u7F29\u5C0F"
249
- }, /*#__PURE__*/React.createElement("span", {
250
- className: "ant-modal-close-x"
251
- }, /*#__PURE__*/React.createElement(ZoomOutOutlined, null))), /*#__PURE__*/React.createElement("button", {
252
- type: "button",
253
- className: "ant-modal-close",
254
- style: {
255
- right: 42
256
- },
257
- onClick: function onClick(e) {
258
- e.stopPropagation();
259
- toggleFullScreen();
260
- },
261
- title: fullScreen ? '退出全屏' : '全屏'
262
- }, /*#__PURE__*/React.createElement("span", {
263
- className: "ant-modal-close-x"
264
- }, fullScreen ? /*#__PURE__*/React.createElement(ShrinkOutlined, null) : /*#__PURE__*/React.createElement(ArrowsAltOutlined, null)))),
195
+ }, props.title),
265
196
  modalRender: function modalRender(modal) {
266
197
  return /*#__PURE__*/React.createElement(Draggable, {
267
- disabled: disabled || fullScreen,
198
+ disabled: disabled,
268
199
  bounds: bounds,
269
200
  nodeRef: draggleRef,
270
201
  onStart: function onStart(event, uiData) {
@@ -284,7 +215,7 @@ var DraggableModal = function DraggableModal(props) {
284
215
  height: '100%',
285
216
  width: '100%'
286
217
  }
287
- }, modal, !fullScreen && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
218
+ }, modal, /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
288
219
  className: "resize-handle resize-handle-e",
289
220
  onMouseDown: function onMouseDown(e) {
290
221
  return handleResizeMouseDown(e, 'e');