@nokecy/qc-ui 1.0.94 → 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 (150) hide show
  1. package/dist/cjs/ag-grid-plus/ag-gridPlus.js +252 -173
  2. package/dist/cjs/ag-grid-plus/context/gridContext.d.ts +77 -19
  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 -2
  11. package/dist/cjs/ag-grid-plus/index.js +11 -93
  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 +279 -145
  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} +193 -108
  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/{schemes → shared}/storage/localStorageAdapter.js +253 -271
  24. package/dist/cjs/ag-grid-plus/shared/storage/schemeStorageAdapter.d.ts +132 -0
  25. package/dist/cjs/array-table/index.js +167 -45
  26. package/dist/cjs/index.d.ts +3 -3
  27. package/dist/cjs/index.js +14 -86
  28. package/dist/esm/ag-grid-plus/ag-gridPlus.js +252 -173
  29. package/dist/esm/ag-grid-plus/context/gridContext.d.ts +77 -19
  30. package/dist/esm/ag-grid-plus/context/gridContext.js +0 -4
  31. package/dist/esm/ag-grid-plus/context/useSchemeDataFlow.d.ts +88 -0
  32. package/dist/esm/ag-grid-plus/context/useSchemeDataFlow.js +165 -0
  33. package/dist/esm/ag-grid-plus/context/useSchemeManager.d.ts +78 -0
  34. package/dist/esm/ag-grid-plus/{querySchemes/hooks/useQuerySchemes.js → context/useSchemeManager.js} +420 -449
  35. package/dist/esm/ag-grid-plus/hooks/useAgGridCalculation.d.ts +1 -1
  36. package/dist/esm/ag-grid-plus/hooks/useAgGridData.d.ts +2 -2
  37. package/dist/esm/ag-grid-plus/index.d.ts +7 -2
  38. package/dist/esm/ag-grid-plus/index.js +9 -5
  39. package/dist/esm/ag-grid-plus/interface.d.ts +0 -31
  40. package/dist/esm/ag-grid-plus/interface.js +2 -0
  41. package/dist/esm/ag-grid-plus/setting/ColumnSetting.d.ts +0 -3
  42. package/dist/esm/ag-grid-plus/setting/ColumnSetting.js +281 -147
  43. package/dist/esm/ag-grid-plus/setting/QuerySchemeManager.d.ts +11 -0
  44. package/dist/esm/ag-grid-plus/{querySchemes/components/QuerySchemesManager.js → setting/QuerySchemeManager.js} +192 -107
  45. package/dist/esm/ag-grid-plus/setting/index.d.ts +2 -2
  46. package/dist/esm/ag-grid-plus/setting/index.js +33 -48
  47. package/dist/esm/ag-grid-plus/shared/storage/backendApiAdapter.d.ts +58 -0
  48. package/dist/esm/ag-grid-plus/shared/storage/backendApiAdapter.js +444 -0
  49. package/dist/esm/ag-grid-plus/shared/storage/localStorageAdapter.d.ts +57 -0
  50. package/dist/esm/ag-grid-plus/{schemes → shared}/storage/localStorageAdapter.js +252 -271
  51. package/dist/esm/ag-grid-plus/shared/storage/schemeStorageAdapter.d.ts +132 -0
  52. package/dist/esm/array-table/index.js +168 -46
  53. package/dist/esm/index.d.ts +3 -3
  54. package/dist/esm/index.js +11 -11
  55. package/dist/esm/standardFormDialog/useStandardFormSchema.d.ts +1 -1
  56. package/dist/umd/qc-ui.min.css +1 -1
  57. package/dist/umd/qc-ui.min.js +1 -1
  58. package/package.json +1 -1
  59. package/dist/cjs/ag-grid-plus/querySchemes/components/QuerySchemesManager.d.ts +0 -21
  60. package/dist/cjs/ag-grid-plus/querySchemes/components/QuerySchemesManager.less +0 -86
  61. package/dist/cjs/ag-grid-plus/querySchemes/components/index.d.ts +0 -5
  62. package/dist/cjs/ag-grid-plus/querySchemes/components/index.js +0 -12
  63. package/dist/cjs/ag-grid-plus/querySchemes/constants.d.ts +0 -17
  64. package/dist/cjs/ag-grid-plus/querySchemes/constants.js +0 -30
  65. package/dist/cjs/ag-grid-plus/querySchemes/hooks/useQueryOrderManager.d.ts +0 -10
  66. package/dist/cjs/ag-grid-plus/querySchemes/hooks/useQueryOrderManager.js +0 -65
  67. package/dist/cjs/ag-grid-plus/querySchemes/hooks/useQuerySchemes.d.ts +0 -6
  68. package/dist/cjs/ag-grid-plus/querySchemes/index.d.ts +0 -11
  69. package/dist/cjs/ag-grid-plus/querySchemes/index.js +0 -113
  70. package/dist/cjs/ag-grid-plus/querySchemes/storage/localStorageAdapter.d.ts +0 -44
  71. package/dist/cjs/ag-grid-plus/querySchemes/storage/localStorageAdapter.js +0 -261
  72. package/dist/cjs/ag-grid-plus/querySchemes/types.d.ts +0 -145
  73. package/dist/cjs/ag-grid-plus/querySchemes/utils/validator.d.ts +0 -36
  74. package/dist/cjs/ag-grid-plus/querySchemes/utils/validator.js +0 -155
  75. package/dist/cjs/ag-grid-plus/schemes/components/SchemeManager.d.ts +0 -16
  76. package/dist/cjs/ag-grid-plus/schemes/components/SchemeManager.js +0 -342
  77. package/dist/cjs/ag-grid-plus/schemes/components/SchemeManager.less +0 -35
  78. package/dist/cjs/ag-grid-plus/schemes/components/SchemeSelector.d.ts +0 -20
  79. package/dist/cjs/ag-grid-plus/schemes/components/SchemeSelector.js +0 -289
  80. package/dist/cjs/ag-grid-plus/schemes/components/SchemeSelector.less +0 -39
  81. package/dist/cjs/ag-grid-plus/schemes/components/index.d.ts +0 -4
  82. package/dist/cjs/ag-grid-plus/schemes/components/index.js +0 -19
  83. package/dist/cjs/ag-grid-plus/schemes/constants.d.ts +0 -23
  84. package/dist/cjs/ag-grid-plus/schemes/constants.js +0 -39
  85. package/dist/cjs/ag-grid-plus/schemes/hooks/useColumnSchemes.d.ts +0 -6
  86. package/dist/cjs/ag-grid-plus/schemes/hooks/useColumnSchemes.js +0 -617
  87. package/dist/cjs/ag-grid-plus/schemes/index.d.ts +0 -23
  88. package/dist/cjs/ag-grid-plus/schemes/index.js +0 -164
  89. package/dist/cjs/ag-grid-plus/schemes/storage/configMerger.d.ts +0 -10
  90. package/dist/cjs/ag-grid-plus/schemes/storage/configMerger.js +0 -34
  91. package/dist/cjs/ag-grid-plus/schemes/storage/localStorageAdapter.d.ts +0 -79
  92. package/dist/cjs/ag-grid-plus/schemes/storage/priorityStorageAdapter.d.ts +0 -122
  93. package/dist/cjs/ag-grid-plus/schemes/storage/priorityStorageAdapter.js +0 -476
  94. package/dist/cjs/ag-grid-plus/schemes/storage/remoteStorageAdapter.d.ts +0 -139
  95. package/dist/cjs/ag-grid-plus/schemes/storage/remoteStorageAdapter.js +0 -746
  96. package/dist/cjs/ag-grid-plus/schemes/storage/useRemoteStorage.d.ts +0 -29
  97. package/dist/cjs/ag-grid-plus/schemes/storage/useRemoteStorage.js +0 -45
  98. package/dist/cjs/ag-grid-plus/schemes/types.d.ts +0 -131
  99. package/dist/cjs/ag-grid-plus/schemes/types.js +0 -5
  100. package/dist/cjs/ag-grid-plus/schemes/utils/validator.d.ts +0 -27
  101. package/dist/cjs/ag-grid-plus/schemes/utils/validator.js +0 -109
  102. package/dist/cjs/ag-grid-plus/storage/index.d.ts +0 -13
  103. package/dist/cjs/ag-grid-plus/storage/index.js +0 -5
  104. package/dist/esm/ag-grid-plus/querySchemes/components/QuerySchemesManager.d.ts +0 -21
  105. package/dist/esm/ag-grid-plus/querySchemes/components/QuerySchemesManager.less +0 -86
  106. package/dist/esm/ag-grid-plus/querySchemes/components/index.d.ts +0 -5
  107. package/dist/esm/ag-grid-plus/querySchemes/components/index.js +0 -5
  108. package/dist/esm/ag-grid-plus/querySchemes/constants.d.ts +0 -17
  109. package/dist/esm/ag-grid-plus/querySchemes/constants.js +0 -24
  110. package/dist/esm/ag-grid-plus/querySchemes/hooks/useQueryOrderManager.d.ts +0 -10
  111. package/dist/esm/ag-grid-plus/querySchemes/hooks/useQueryOrderManager.js +0 -60
  112. package/dist/esm/ag-grid-plus/querySchemes/hooks/useQuerySchemes.d.ts +0 -6
  113. package/dist/esm/ag-grid-plus/querySchemes/index.d.ts +0 -11
  114. package/dist/esm/ag-grid-plus/querySchemes/index.js +0 -20
  115. package/dist/esm/ag-grid-plus/querySchemes/storage/localStorageAdapter.d.ts +0 -44
  116. package/dist/esm/ag-grid-plus/querySchemes/storage/localStorageAdapter.js +0 -256
  117. package/dist/esm/ag-grid-plus/querySchemes/types.d.ts +0 -145
  118. package/dist/esm/ag-grid-plus/querySchemes/utils/validator.d.ts +0 -36
  119. package/dist/esm/ag-grid-plus/querySchemes/utils/validator.js +0 -144
  120. package/dist/esm/ag-grid-plus/schemes/components/SchemeManager.d.ts +0 -16
  121. package/dist/esm/ag-grid-plus/schemes/components/SchemeManager.js +0 -334
  122. package/dist/esm/ag-grid-plus/schemes/components/SchemeManager.less +0 -35
  123. package/dist/esm/ag-grid-plus/schemes/components/SchemeSelector.d.ts +0 -20
  124. package/dist/esm/ag-grid-plus/schemes/components/SchemeSelector.js +0 -281
  125. package/dist/esm/ag-grid-plus/schemes/components/SchemeSelector.less +0 -39
  126. package/dist/esm/ag-grid-plus/schemes/components/index.d.ts +0 -4
  127. package/dist/esm/ag-grid-plus/schemes/components/index.js +0 -2
  128. package/dist/esm/ag-grid-plus/schemes/constants.d.ts +0 -23
  129. package/dist/esm/ag-grid-plus/schemes/constants.js +0 -33
  130. package/dist/esm/ag-grid-plus/schemes/hooks/useColumnSchemes.d.ts +0 -6
  131. package/dist/esm/ag-grid-plus/schemes/hooks/useColumnSchemes.js +0 -612
  132. package/dist/esm/ag-grid-plus/schemes/index.d.ts +0 -23
  133. package/dist/esm/ag-grid-plus/schemes/index.js +0 -30
  134. package/dist/esm/ag-grid-plus/schemes/storage/configMerger.d.ts +0 -10
  135. package/dist/esm/ag-grid-plus/schemes/storage/configMerger.js +0 -28
  136. package/dist/esm/ag-grid-plus/schemes/storage/localStorageAdapter.d.ts +0 -79
  137. package/dist/esm/ag-grid-plus/schemes/storage/priorityStorageAdapter.d.ts +0 -122
  138. package/dist/esm/ag-grid-plus/schemes/storage/priorityStorageAdapter.js +0 -471
  139. package/dist/esm/ag-grid-plus/schemes/storage/remoteStorageAdapter.d.ts +0 -139
  140. package/dist/esm/ag-grid-plus/schemes/storage/remoteStorageAdapter.js +0 -746
  141. package/dist/esm/ag-grid-plus/schemes/storage/useRemoteStorage.d.ts +0 -29
  142. package/dist/esm/ag-grid-plus/schemes/storage/useRemoteStorage.js +0 -40
  143. package/dist/esm/ag-grid-plus/schemes/types.d.ts +0 -131
  144. package/dist/esm/ag-grid-plus/schemes/types.js +0 -1
  145. package/dist/esm/ag-grid-plus/schemes/utils/validator.d.ts +0 -27
  146. package/dist/esm/ag-grid-plus/schemes/utils/validator.js +0 -100
  147. package/dist/esm/ag-grid-plus/storage/index.d.ts +0 -13
  148. package/dist/esm/ag-grid-plus/storage/index.js +0 -17
  149. /package/dist/cjs/ag-grid-plus/{querySchemes/types.js → shared/storage/schemeStorageAdapter.js} +0 -0
  150. /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,14 +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";
29
31
 
30
32
  // 导入 AG-Grid v33 主题
31
33
  import { agGridTheme } from "../ag-grid-plus/theme";
32
34
 
33
35
  //@ts-ignore
34
- var ArrayTable = observer(function (props) {
36
+ var ArrayTableInner = observer(function (props) {
35
37
  var height = props.height;
36
38
  var _useState = useState(false),
37
39
  _useState2 = _slicedToArray(_useState, 2),
@@ -57,18 +59,6 @@ var ArrayTable = observer(function (props) {
57
59
  onMoveUp = props.onMoveUp;
58
60
  var addition = useAddition();
59
61
 
60
- // 尝试从 Context 获取列状态管理(如果被 Provider 包裹)
61
- var contextColumnState = useGridPlusColumnState();
62
-
63
- // ArrayTable 内部集成列方案管理(统一使用 AgGridPlus 的方案系统)
64
- var internalSchemeManager = useColumnSchemes({
65
- gridId: props.gridKey || 'array-table-default',
66
- enableAutoSave: false // 手动控制保存时机
67
- });
68
-
69
- // 使用 Context 的 schemeManager 或内部的 schemeManager
70
- var schemeManager = (contextColumnState === null || contextColumnState === void 0 ? void 0 : contextColumnState.schemeManager) || internalSchemeManager;
71
-
72
62
  // 使用自定义 hooks
73
63
  var _useCellFocus = useCellFocus(),
74
64
  focusInputInCell = _useCellFocus.focusInputInCell;
@@ -77,46 +67,138 @@ var ArrayTable = observer(function (props) {
77
67
  var _useRowDrag = useRowDrag(field),
78
68
  handleRowDragMove = _useRowDrag.handleRowDragMove;
79
69
 
80
- // 恢复列状态(从方案系统)
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
+ */
81
101
  useEffect(function () {
82
- 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] 配置未变化,跳过应用');
83
125
  return;
84
126
  }
85
127
 
86
- // 使用方案系统恢复列状态
87
- // schemeManager 会自动加载默认方案或最后使用的方案
88
- var currentScheme = schemeManager.currentScheme;
89
- if (currentScheme && currentScheme.columnConfig) {
90
- // 从 columnConfig (FlatColumnItem[]) 提取列状态
91
- var columnState = currentScheme.columnConfig.filter(function (item) {
92
- return item.type === 'column' && item.field;
93
- }).map(function (item) {
94
- return {
95
- colId: item.field,
96
- width: item.width,
97
- hide: item.hide,
98
- pinned: item.pinned === 'notPinned' ? null : item.pinned,
99
- flex: item.flex
100
- };
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 // 强制应用列顺序
101
139
  });
102
- setTimeout(function () {
103
- gridApiState.applyColumnState({
104
- state: columnState,
105
- 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';
106
163
  });
107
- }, 100);
108
- }
109
- }, [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]);
110
196
 
111
197
  //@ts-ignore
112
198
  if (columns.length > 0) {
113
199
  //@ts-ignore
114
200
  columns[0].rowDrag = props.onRowDrag ? true : false;
115
201
  }
116
-
117
- // 不再需要 onColumnStateChanged 回调
118
- // 保存逻辑统一由 ColumnSetting 通过 schemeManager 处理
119
-
120
202
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
121
203
  ref: ref,
122
204
  style: {
@@ -163,8 +245,8 @@ var ArrayTable = observer(function (props) {
163
245
  gridKey: props.gridKey,
164
246
  gridApi: apiRef.current,
165
247
  gridApiState: gridApiState,
166
- type: 'formArrayTable',
167
- schemeManager: schemeManager
248
+ allColDefs: columns,
249
+ showQueryScheme: false
168
250
  })), /*#__PURE__*/React.createElement("div", {
169
251
  style: {
170
252
  flex: 1,
@@ -257,6 +339,46 @@ var ArrayTable = observer(function (props) {
257
339
  });
258
340
  }))));
259
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
+ });
260
382
  ArrayTable.displayName = "ArrayTable";
261
383
  ArrayTable.Column = function () {
262
384
  return /*#__PURE__*/React.createElement(Fragment, null);
@@ -1,4 +1,4 @@
1
- import { AgGridColumn, AgGridPlus, flattenTreeDeep, GridPlusContext, useGridPlusColumnState, useColumnSchemes, SchemeSelector, SchemeManager, LocalStorageAdapter, defaultStorageAdapter, useRemoteStorage, mergeRemoteStorageConfig, validateScheme, validateSchemeName, validateSchemeDescription, checkDuplicateName, generateUniqueName, STORAGE_PREFIX, DEFAULT_SCHEME_NAME, MAX_SCHEMES_PER_GRID, MAX_SCHEME_NAME_LENGTH } from "./ag-grid-plus";
1
+ import { AgGridColumn, AgGridPlus, flattenTreeDeep, GridPlusContext, useGridPlusColumnState, useSchemeManager, useGridSchemes, LocalStorageSchemeAdapter, BackendApiSchemeAdapter } from "./ag-grid-plus";
2
2
  import ArrayTable from "./array-table";
3
3
  import ArrayTableIndex from "./array-table-index";
4
4
  import { ColumnPresets } from "./array-table/columnHelper";
@@ -21,7 +21,7 @@ import { StandardFormDialog, withStandardForm, FieldCreators, createSelectField,
21
21
  import DeleteConfirm from "./deleteConfirm";
22
22
  import { RuleBuilder } from "./RuleBuilder";
23
23
  import { RegexEditor, useRegexValidation, useTemplateManager, TemplateSelector, TemplateCategory, RegexTester, FlagsSelector, MatchItem, RegexRailroadDiagram } from "./components/RegexEditor";
24
- export { AgGridColumn, AgGridPlus, ArrayTable, ArrayTableIndex, ColumnPresets, Card, Dashboard, DialogSelect, DraggableModal, Editable, ExtensibleGrid, flattenTreeDeep, FormDesigner, FormProContext, FormProLayout, GridPlusContext, useGridPlusColumnState, ImportModal, QueryBuilder, ToolBar, FullScreenAlert, ConfirmPro, GeneratedListPage, StandardFormDialog, withStandardForm, FieldCreators, createSelectField, createCascaderField, DeleteConfirm, RuleBuilder, RegexEditor, useRegexValidation, useTemplateManager, TemplateSelector, TemplateCategory, RegexTester, FlagsSelector, MatchItem, RegexRailroadDiagram, useColumnSchemes, SchemeSelector, SchemeManager, LocalStorageAdapter, defaultStorageAdapter, useRemoteStorage, mergeRemoteStorageConfig, validateScheme, validateSchemeName, validateSchemeDescription, checkDuplicateName, generateUniqueName, STORAGE_PREFIX, DEFAULT_SCHEME_NAME, MAX_SCHEMES_PER_GRID, MAX_SCHEME_NAME_LENGTH, };
24
+ export { AgGridColumn, AgGridPlus, ArrayTable, ArrayTableIndex, ColumnPresets, Card, Dashboard, DialogSelect, DraggableModal, Editable, ExtensibleGrid, flattenTreeDeep, FormDesigner, FormProContext, FormProLayout, GridPlusContext, useGridPlusColumnState, ImportModal, QueryBuilder, ToolBar, FullScreenAlert, ConfirmPro, GeneratedListPage, StandardFormDialog, withStandardForm, FieldCreators, createSelectField, createCascaderField, DeleteConfirm, RuleBuilder, RegexEditor, useRegexValidation, useTemplateManager, TemplateSelector, TemplateCategory, RegexTester, FlagsSelector, MatchItem, RegexRailroadDiagram, useSchemeManager, useGridSchemes, LocalStorageSchemeAdapter, BackendApiSchemeAdapter, };
25
25
  export type * from "./generatedListPage";
26
26
  export type * from "./standardFormDialog";
27
27
  export type * from "./deleteConfirm";
@@ -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 { ColumnScheme, SchemeManagerConfig, StorageAdapter, SchemeValidationResult, UseColumnSchemesReturn, SchemeSelectorProps, SchemeManagerProps, GridPlusContextValue, } from "./ag-grid-plus";
32
+ export type { CentralizedColumnScheme, QueryScheme, SchemeStorageAdapter, SchemeSyncDataDto, CurrentSchemeDto, SchemeStorageConfig, LocalStorageAdapterConfig, BackendApiAdapterConfig, UseSchemeManagerConfig, GridPlusContextValue, } 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";
package/dist/esm/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { AgGridColumn, AgGridPlus, flattenTreeDeep, GridPlusContext, useGridPlusColumnState,
2
- // 列配置方案管理
3
- useColumnSchemes, SchemeSelector, SchemeManager, LocalStorageAdapter, defaultStorageAdapter, useRemoteStorage, mergeRemoteStorageConfig, validateScheme, validateSchemeName, validateSchemeDescription, checkDuplicateName, generateUniqueName, STORAGE_PREFIX, DEFAULT_SCHEME_NAME, MAX_SCHEMES_PER_GRID, MAX_SCHEME_NAME_LENGTH
4
- // 注意: 全局方案同步管理功能已废弃,相关导出已移除
5
- // 请使用 RemoteStorageAdapter 替代
2
+ // 集中式方案管理
3
+ useSchemeManager, useGridSchemes, LocalStorageSchemeAdapter, BackendApiSchemeAdapter
4
+ // 注意: 旧的方案管理API已废弃
5
+ // 请使用 useSchemeManager/useGridSchemes 替代
6
6
  } from "./ag-grid-plus";
7
7
  import ArrayTable from "./array-table";
8
8
  import ArrayTableIndex from "./array-table-index";
@@ -27,17 +27,17 @@ import DeleteConfirm from "./deleteConfirm";
27
27
  import { RuleBuilder } from "./RuleBuilder";
28
28
  import { RegexEditor, useRegexValidation, useTemplateManager, TemplateSelector, TemplateCategory, RegexTester, FlagsSelector, MatchItem, RegexRailroadDiagram } from "./components/RegexEditor";
29
29
  export { AgGridColumn, AgGridPlus, ArrayTable, ArrayTableIndex, ColumnPresets, Card, Dashboard, DialogSelect, DraggableModal, Editable, ExtensibleGrid, flattenTreeDeep, FormDesigner, FormProContext, FormProLayout, GridPlusContext, useGridPlusColumnState, ImportModal, QueryBuilder, ToolBar, FullScreenAlert, ConfirmPro, GeneratedListPage, StandardFormDialog, withStandardForm, FieldCreators, createSelectField, createCascaderField, DeleteConfirm, RuleBuilder, RegexEditor, useRegexValidation, useTemplateManager, TemplateSelector, TemplateCategory, RegexTester, FlagsSelector, MatchItem, RegexRailroadDiagram,
30
- // 列配置方案管理
31
- useColumnSchemes, SchemeSelector, SchemeManager, LocalStorageAdapter, defaultStorageAdapter, useRemoteStorage, mergeRemoteStorageConfig, validateScheme, validateSchemeName, validateSchemeDescription, checkDuplicateName, generateUniqueName, STORAGE_PREFIX, DEFAULT_SCHEME_NAME, MAX_SCHEMES_PER_GRID, MAX_SCHEME_NAME_LENGTH
32
- // 注意: 全局方案同步管理功能已废弃,相关导出已移除
33
- // 请使用 RemoteStorageAdapter 替代
30
+ // 集中式方案管理
31
+ useSchemeManager, useGridSchemes, LocalStorageSchemeAdapter, BackendApiSchemeAdapter
32
+ // 注意: 旧的方案管理API已废弃
33
+ // 请使用 useSchemeManager/useGridSchemes 替代
34
34
  };
35
35
 
36
36
  // 导出类型定义
37
37
 
38
- // 列配置方案管理类型
38
+ // 集中式方案管理类型
39
39
 
40
- // 注意: 全局方案同步管理类型已废弃,相关导出已移除
41
- // 请使用 RemoteStorageAdapter 和相关类型
40
+ // 注意: 旧的方案管理类型已废弃
41
+ // 请使用集中式方案管理类型
42
42
 
43
43
  // RegexEditor 类型定义 - 使用命名导出避免冲突
@@ -32,7 +32,7 @@ export declare const createSelectField: (title: string, options: Array<{
32
32
  required?: boolean | undefined;
33
33
  placeholder?: string | undefined;
34
34
  gridSpan?: number | undefined;
35
- mode?: "tags" | "multiple" | undefined;
35
+ mode?: "multiple" | "tags" | undefined;
36
36
  } | undefined) => any;
37
37
  /**
38
38
  * 快速创建常用字段的工具函数集合