@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
+ }
@@ -16,8 +16,11 @@ var _arrayAddBtn = _interopRequireDefault(require("./arrayAddBtn"));
16
16
  var _preview = _interopRequireDefault(require("./preview"));
17
17
  var _antd = require("antd");
18
18
  var _setting = _interopRequireDefault(require("../ag-grid-plus/setting"));
19
- var _useGridPlusColumnState = require("../ag-grid-plus/hooks/useGridPlusColumnState");
20
- var _useColumnSchemes = require("../ag-grid-plus/schemes/hooks/useColumnSchemes");
19
+ var _gridContext = require("../ag-grid-plus/context/gridContext");
20
+ var _useSchemeManager = require("../ag-grid-plus/context/useSchemeManager");
21
+ var _localStorageAdapter = require("../ag-grid-plus/shared/storage/localStorageAdapter");
22
+ var _columnGroupUtils = require("../ag-grid-plus/setting/columnGroupUtils");
23
+ var _theme = require("../ag-grid-plus/theme");
21
24
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
22
25
  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); }
23
26
  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,9 +35,9 @@ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructur
32
35
  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); }
33
36
  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; }
34
37
  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; } }
35
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
38
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } // 导入 AG-Grid v33 主题
36
39
  //@ts-ignore
37
- var ArrayTable = (0, _react2.observer)(function (props) {
40
+ var ArrayTableInner = (0, _react2.observer)(function (props) {
38
41
  var height = props.height;
39
42
  var _useState = (0, _react.useState)(false),
40
43
  _useState2 = _slicedToArray(_useState, 2),
@@ -60,18 +63,6 @@ var ArrayTable = (0, _react2.observer)(function (props) {
60
63
  onMoveUp = props.onMoveUp;
61
64
  var addition = (0, _utils.useAddition)();
62
65
 
63
- // 尝试从 Context 获取列状态管理(如果被 Provider 包裹)
64
- var contextColumnState = (0, _useGridPlusColumnState.useGridPlusColumnState)();
65
-
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;
74
-
75
66
  // 使用自定义 hooks
76
67
  var _useCellFocus = (0, _hooks.useCellFocus)(),
77
68
  focusInputInCell = _useCellFocus.focusInputInCell;
@@ -80,46 +71,138 @@ var ArrayTable = (0, _react2.observer)(function (props) {
80
71
  var _useRowDrag = (0, _hooks.useRowDrag)(field),
81
72
  handleRowDragMove = _useRowDrag.handleRowDragMove;
82
73
 
83
- // 恢复列状态(从方案系统)
74
+ // 从 Context 获取方案管理相关的状态和方法
75
+ var _useContext = (0, _react.useContext)(_gridContext.GridPlusContext),
76
+ currentSchemes = _useContext.currentSchemes,
77
+ columnSchemes = _useContext.columnSchemes;
78
+
79
+ // 获取当前表格的激活方案
80
+ var currentScheme = (0, _react.useMemo)(function () {
81
+ var _currentSchemes$props;
82
+ if (!props.gridKey || !currentSchemes || !columnSchemes) return null;
83
+ var currentSchemeId = (_currentSchemes$props = currentSchemes[props.gridKey]) === null || _currentSchemes$props === void 0 ? void 0 : _currentSchemes$props.columnSchemeId;
84
+ if (!currentSchemeId) return null;
85
+ var schemes = columnSchemes[props.gridKey] || [];
86
+ return schemes.find(function (s) {
87
+ return s.id === currentSchemeId;
88
+ });
89
+ }, [props.gridKey, currentSchemes, columnSchemes]);
90
+
91
+ // 使用 ref 记录上次应用的方案 ID 和配置哈希,避免重复应用
92
+ var lastAppliedRef = (0, _react.useRef)({
93
+ schemeId: null,
94
+ configHash: null
95
+ });
96
+
97
+ /**
98
+ * 【关键修复】在页面刷新或切换方案时自动恢复列方案
99
+ *
100
+ * 监听 currentScheme 和 gridApiState 的变化,当方案和 Grid API 都准备好时,
101
+ * 自动应用方案中保存的列状态(列顺序、宽度、隐藏等)
102
+ *
103
+ * 关键优化:使用 ref 记录上次应用的配置哈希,避免保存配置后重复应用旧数据
104
+ */
84
105
  (0, _react.useEffect)(function () {
85
- if (!props.gridKey || !gridApiState || !schemeManager) {
106
+ var _currentScheme$column;
107
+ // 检查必要条件
108
+ if (!props.gridKey || !gridApiState || !currentScheme) return;
109
+ if (!currentScheme.columnConfig || currentScheme.columnConfig.length === 0) return;
110
+
111
+ // 计算当前配置的简单哈希(用于检测配置是否真正变化)
112
+ var configHash = JSON.stringify({
113
+ id: currentScheme.id,
114
+ columnCount: currentScheme.columnConfig.length,
115
+ firstCol: (_currentScheme$column = currentScheme.columnConfig[0]) === null || _currentScheme$column === void 0 ? void 0 : _currentScheme$column.field,
116
+ updatedAt: currentScheme.updatedAt
117
+ });
118
+ console.log('[ArrayTable] 方案恢复检查:', {
119
+ schemeId: currentScheme === null || currentScheme === void 0 ? void 0 : currentScheme.id,
120
+ schemeName: currentScheme === null || currentScheme === void 0 ? void 0 : currentScheme.name,
121
+ configHash: configHash,
122
+ lastHash: lastAppliedRef.current.configHash,
123
+ shouldApply: configHash !== lastAppliedRef.current.configHash
124
+ });
125
+
126
+ // 【关键】检查配置是否真正变化,避免重复应用
127
+ if (configHash === lastAppliedRef.current.configHash) {
128
+ console.log('[ArrayTable] 配置未变化,跳过应用');
86
129
  return;
87
130
  }
88
131
 
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) {
97
- return {
98
- colId: item.field,
99
- width: item.width,
100
- hide: item.hide,
101
- pinned: item.pinned === 'notPinned' ? null : item.pinned,
102
- flex: item.flex
103
- };
132
+ // 【提取函数】应用列状态和过滤器
133
+ var applyColumnStateAndFilter = function applyColumnStateAndFilter() {
134
+ if (!currentScheme || !gridApiState) return;
135
+
136
+ // 将扁平化的列配置转换为 AG-Grid 列状态
137
+ var columnState = (0, _columnGroupUtils.flatConfigToColumnState)(currentScheme.columnConfig);
138
+
139
+ // 应用列状态(包括列顺序、宽度、隐藏等)
140
+ gridApiState.applyColumnState({
141
+ state: columnState,
142
+ applyOrder: true // 强制应用列顺序
104
143
  });
105
- setTimeout(function () {
106
- gridApiState.applyColumnState({
107
- state: columnState,
108
- applyOrder: true
144
+ console.log('[ArrayTable] 方案已成功应用');
145
+
146
+ // 如果方案中包含过滤器配置,也一并应用
147
+ if (currentScheme.filterModel) {
148
+ gridApiState.setFilterModel(currentScheme.filterModel);
149
+ console.log('[ArrayTable] 过滤器已应用');
150
+ }
151
+
152
+ // 记录本次应用的配置哈希
153
+ lastAppliedRef.current = {
154
+ schemeId: currentScheme.id,
155
+ configHash: configHash
156
+ };
157
+ };
158
+
159
+ // 使用 requestAnimationFrame 延迟应用
160
+ var rafId = requestAnimationFrame(function () {
161
+ try {
162
+ console.log('[ArrayTable] 正在应用方案:', currentScheme.name);
163
+
164
+ // 【关键检测】检查是否包含分组配置
165
+ var hasGroups = currentScheme.columnConfig.some(function (item) {
166
+ return item.type === 'group';
109
167
  });
110
- }, 100);
111
- }
112
- }, [props.gridKey, gridApiState, schemeManager === null || schemeManager === void 0 ? void 0 : schemeManager.currentScheme]);
168
+ console.log('[ArrayTable] 是否包含分组:', hasGroups);
169
+
170
+ // 【条件更新】只有在包含分组时才更新 columnDefs
171
+ // 原因:array-table 的列是动态生成的,无分组时不应该覆盖动态列定义
172
+ if (hasGroups) {
173
+ var gridColumnDefs = (0, _columnGroupUtils.flatConfigToGridState)(currentScheme.columnConfig);
174
+ console.log('[ArrayTable] 检测到分组,更新 columnDefs');
175
+ gridApiState.setGridOption('columnDefs', gridColumnDefs);
176
+
177
+ // 等待 columnDefs 更新完成后再应用列状态
178
+ setTimeout(function () {
179
+ try {
180
+ applyColumnStateAndFilter();
181
+ } catch (error) {
182
+ console.error('[ArrayTable] 应用列状态失败:', error);
183
+ }
184
+ }, 100);
185
+ } else {
186
+ // 无分组时,直接应用列状态即可
187
+ console.log('[ArrayTable] 无分组,仅应用列状态');
188
+ applyColumnStateAndFilter();
189
+ }
190
+ } catch (error) {
191
+ console.error('[ArrayTable] 应用方案失败:', error);
192
+ }
193
+ });
194
+
195
+ // 清理函数:取消待执行的 RAF
196
+ return function () {
197
+ cancelAnimationFrame(rafId);
198
+ };
199
+ }, [props.gridKey, gridApiState, currentScheme === null || currentScheme === void 0 ? void 0 : currentScheme.id, currentScheme === null || currentScheme === void 0 ? void 0 : currentScheme.updatedAt]);
113
200
 
114
201
  //@ts-ignore
115
202
  if (columns.length > 0) {
116
203
  //@ts-ignore
117
204
  columns[0].rowDrag = props.onRowDrag ? true : false;
118
205
  }
119
-
120
- // 不再需要 onColumnStateChanged 回调
121
- // 保存逻辑统一由 ColumnSetting 通过 schemeManager 处理
122
-
123
206
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
124
207
  ref: ref,
125
208
  style: {
@@ -166,14 +249,15 @@ var ArrayTable = (0, _react2.observer)(function (props) {
166
249
  gridKey: props.gridKey,
167
250
  gridApi: apiRef.current,
168
251
  gridApiState: gridApiState,
169
- type: 'formArrayTable',
170
- schemeManager: schemeManager
252
+ allColDefs: columns,
253
+ showQueryScheme: false
171
254
  })), /*#__PURE__*/_react.default.createElement("div", {
172
255
  style: {
173
256
  flex: 1,
174
257
  minHeight: 0
175
258
  }
176
259
  }, /*#__PURE__*/_react.default.createElement(_agGridReact.AgGridReact, {
260
+ theme: _theme.agGridTheme,
177
261
  onGridReady: function onGridReady(params) {
178
262
  params.api.hidePopupMenu();
179
263
  apiRef.current = params.api;
@@ -188,7 +272,8 @@ var ArrayTable = (0, _react2.observer)(function (props) {
188
272
  suppressCopyRowsToClipboard: true,
189
273
  suppressCopySingleCellRanges: true,
190
274
  enterNavigatesVertically: true,
191
- enterNavigatesVerticallyAfterEdit: true
275
+ enterNavigatesVerticallyAfterEdit: true,
276
+ columnHoverHighlight: true
192
277
  },
193
278
  onCellKeyDown: handleCellKeyDown,
194
279
  onCellClicked: function onCellClicked(event) {
@@ -215,7 +300,6 @@ var ArrayTable = (0, _react2.observer)(function (props) {
215
300
  suppressClipboardPaste: true,
216
301
  preventDefaultOnContextMenu: true,
217
302
  enableCellTextSelection: true,
218
- className: "ag-theme-alpine",
219
303
  defaultColDef: {
220
304
  resizable: true,
221
305
  headerComponentParams: {
@@ -259,6 +343,46 @@ var ArrayTable = (0, _react2.observer)(function (props) {
259
343
  });
260
344
  }))));
261
345
  });
346
+ ArrayTableInner.displayName = "ArrayTableInner";
347
+
348
+ /**
349
+ * ArrayTable 组件 - 带 GridPlusContext Provider 包装
350
+ *
351
+ * 提供完整的列方案管理功能支持
352
+ */
353
+ //@ts-ignore
354
+ var ArrayTable = (0, _react2.observer)(function (props) {
355
+ // 创建 LocalStorage 适配器实例 (使用 useMemo 避免重复创建)
356
+ var adapter = (0, _react.useMemo)(function () {
357
+ return new _localStorageAdapter.LocalStorageSchemeAdapter({
358
+ storageKey: "array-table-schemes-".concat(props.gridKey || 'default'),
359
+ enableDebugLog: false
360
+ });
361
+ }, [props.gridKey]);
362
+
363
+ // 初始化方案管理器
364
+ var schemeManager = (0, _useSchemeManager.useSchemeManager)({
365
+ adapter: adapter,
366
+ autoLoad: true,
367
+ showErrorMessage: true
368
+ });
369
+
370
+ // 构建 Context Value
371
+ var contextValue = (0, _react.useMemo)(function () {
372
+ return _objectSpread({
373
+ extensibleColumns: [],
374
+ columnState: undefined,
375
+ onSaveColumnState: function onSaveColumnState() {},
376
+ applyToGlobal: function applyToGlobal() {},
377
+ resetCurrent: function resetCurrent() {},
378
+ resetAll: function resetAll() {},
379
+ queryFormItems: []
380
+ }, schemeManager);
381
+ }, [schemeManager]);
382
+ return /*#__PURE__*/_react.default.createElement(_gridContext.GridPlusContext.Provider, {
383
+ value: contextValue
384
+ }, /*#__PURE__*/_react.default.createElement(ArrayTableInner, props));
385
+ });
262
386
  ArrayTable.displayName = "ArrayTable";
263
387
  ArrayTable.Column = function () {
264
388
  return /*#__PURE__*/_react.default.createElement(_react.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
  */
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.default = void 0;
8
- var _icons = require("@ant-design/icons");
9
8
  var _antd = require("antd");
10
9
  var _react = _interopRequireWildcard(require("react"));
11
10
  var _reactDraggable = _interopRequireDefault(require("react-draggable"));
@@ -24,7 +23,7 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
24
23
  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; } }
25
24
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
26
25
  /**
27
- * 可拖拽Modal - 支持拖拽、全屏切换和缩放
26
+ * 可拖拽Modal - 支持拖拽和调整大小
28
27
  * @param props
29
28
  * @returns
30
29
  */
@@ -43,38 +42,30 @@ var DraggableModal = function DraggableModal(props) {
43
42
  bounds = _useState4[0],
44
43
  setBounds = _useState4[1];
45
44
  var draggleRef = (0, _react.useRef)(null);
45
+
46
+ // 调整大小相关状态
46
47
  var _useState5 = (0, _react.useState)(false),
47
48
  _useState6 = _slicedToArray(_useState5, 2),
48
- fullScreen = _useState6[0],
49
- setFullScreen = _useState6[1];
50
- var _useState7 = (0, _react.useState)('normal'),
49
+ isResizing = _useState6[0],
50
+ setIsResizing = _useState6[1];
51
+ var _useState7 = (0, _react.useState)(''),
51
52
  _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)({
53
+ resizeDirection = _useState8[0],
54
+ setResizeDirection = _useState8[1];
55
+ var _useState9 = (0, _react.useState)({
65
56
  width: 0,
66
57
  height: 0
67
58
  }),
68
- _useState14 = _slicedToArray(_useState13, 2),
69
- modalSize = _useState14[0],
70
- setModalSize = _useState14[1];
71
- var _useState15 = (0, _react.useState)({
59
+ _useState10 = _slicedToArray(_useState9, 2),
60
+ modalSize = _useState10[0],
61
+ setModalSize = _useState10[1];
62
+ var _useState11 = (0, _react.useState)({
72
63
  x: 0,
73
64
  y: 0
74
65
  }),
75
- _useState16 = _slicedToArray(_useState15, 2),
76
- modalPosition = _useState16[0],
77
- setModalPosition = _useState16[1];
66
+ _useState12 = _slicedToArray(_useState11, 2),
67
+ modalPosition = _useState12[0],
68
+ setModalPosition = _useState12[1];
78
69
 
79
70
  // 解构 props,分离出 wrapClassName
80
71
  var propsWrapClassName = props.wrapClassName,
@@ -96,30 +87,12 @@ var DraggableModal = function DraggableModal(props) {
96
87
  bottom: clientHeight - (targetRect.bottom - uiData.y)
97
88
  });
98
89
  };
99
- var toggleFullScreen = function toggleFullScreen() {
100
- setFullScreen(!fullScreen);
101
- };
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
90
 
117
91
  // 拖动调整大小的处理函数
118
92
  var handleResizeMouseDown = function handleResizeMouseDown(e, direction) {
119
93
  var _draggleRef$current2;
120
94
  e.preventDefault();
121
95
  e.stopPropagation();
122
- if (fullScreen) return;
123
96
 
124
97
  // 查找.ant-modal,它在draggleRef的父级
125
98
  var modal = (_draggleRef$current2 = draggleRef.current) === null || _draggleRef$current2 === void 0 ? void 0 : _draggleRef$current2.closest('.ant-modal');
@@ -206,10 +179,8 @@ var DraggableModal = function DraggableModal(props) {
206
179
  };
207
180
 
208
181
  // 合并类名
209
- var zoomClass = !fullScreen && zoom !== 'normal' ? "modal-wrap-zoom-".concat(zoom) : '';
210
- var fullScreenClass = fullScreen ? 'modal-wrap-fullscreen' : '';
211
182
  var resizingClass = isResizing ? 'modal-wrap-resizing' : '';
212
- var mergedWrapClassName = [propsWrapClassName, fullScreenClass, zoomClass, resizingClass].filter(Boolean).join(' ');
183
+ var mergedWrapClassName = [propsWrapClassName, resizingClass].filter(Boolean).join(' ');
213
184
  return /*#__PURE__*/_react.default.createElement(_antd.Modal, _extends({
214
185
  maskClosable: false,
215
186
  width: width
@@ -218,63 +189,22 @@ var DraggableModal = function DraggableModal(props) {
218
189
  title: /*#__PURE__*/_react.default.createElement("div", {
219
190
  style: {
220
191
  width: '100%',
221
- cursor: fullScreen ? 'default' : 'move'
192
+ cursor: 'move'
222
193
  },
223
194
  onMouseOver: function onMouseOver() {
224
- if (!fullScreen && disabled) {
195
+ if (disabled) {
225
196
  setDisabled(false);
226
197
  }
227
198
  },
228
199
  onMouseOut: function onMouseOut() {
229
- if (!fullScreen) {
230
- setDisabled(true);
231
- }
200
+ setDisabled(true);
232
201
  },
233
202
  onFocus: function onFocus() {},
234
203
  onBlur: function onBlur() {}
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)))),
204
+ }, props.title),
275
205
  modalRender: function modalRender(modal) {
276
206
  return /*#__PURE__*/_react.default.createElement(_reactDraggable.default, {
277
- disabled: disabled || fullScreen,
207
+ disabled: disabled,
278
208
  bounds: bounds,
279
209
  nodeRef: draggleRef,
280
210
  onStart: function onStart(event, uiData) {
@@ -294,7 +224,7 @@ var DraggableModal = function DraggableModal(props) {
294
224
  height: '100%',
295
225
  width: '100%'
296
226
  }
297
- }, modal, !fullScreen && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
227
+ }, modal, /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
298
228
  className: "resize-handle resize-handle-e",
299
229
  onMouseDown: function onMouseDown(e) {
300
230
  return handleResizeMouseDown(e, 'e');