@nokecy/qc-ui 1.0.82 → 1.0.84
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/ag-grid-plus/_utils/processColumnGroups.d.ts +9 -0
- package/dist/cjs/ag-grid-plus/_utils/processColumnGroups.js +43 -0
- package/dist/cjs/ag-grid-plus/ag-gridPlus.js +252 -121
- package/dist/cjs/ag-grid-plus/querySchemes/components/QuerySchemesManager.js +19 -9
- package/dist/cjs/ag-grid-plus/querySchemes/hooks/useQuerySchemes.js +25 -3
- package/dist/cjs/ag-grid-plus/schemes/components/SchemeSelector.d.ts +1 -1
- package/dist/cjs/ag-grid-plus/schemes/components/SchemeSelector.js +1 -1
- package/dist/cjs/ag-grid-plus/schemes/hooks/useColumnSchemes.js +60 -14
- package/dist/cjs/ag-grid-plus/schemes/storage/localStorageAdapter.js +12 -26
- package/dist/cjs/ag-grid-plus/schemes/types.d.ts +8 -5
- package/dist/cjs/ag-grid-plus/schemes/utils/validator.js +14 -18
- package/dist/cjs/ag-grid-plus/setting/ColumnConfigForm.d.ts +16 -0
- package/dist/cjs/ag-grid-plus/setting/ColumnConfigForm.js +348 -0
- package/dist/cjs/ag-grid-plus/setting/ColumnConfigTable.d.ts +20 -0
- package/dist/cjs/ag-grid-plus/setting/ColumnConfigTable.js +940 -0
- package/dist/cjs/ag-grid-plus/setting/ColumnSetting.js +208 -248
- package/dist/cjs/ag-grid-plus/setting/MoveNodeModal.d.ts +15 -0
- package/dist/cjs/ag-grid-plus/setting/MoveNodeModal.js +160 -0
- package/dist/cjs/ag-grid-plus/setting/NameColumnRenderer.d.ts +18 -0
- package/dist/cjs/ag-grid-plus/setting/NameColumnRenderer.js +94 -0
- package/dist/cjs/ag-grid-plus/setting/columnGroupTypes.d.ts +59 -0
- package/dist/cjs/ag-grid-plus/setting/columnGroupTypes.js +5 -0
- package/dist/cjs/ag-grid-plus/setting/columnGroupUtils.d.ts +75 -0
- package/dist/cjs/ag-grid-plus/setting/columnGroupUtils.js +281 -0
- package/dist/cjs/ag-grid-plus/setting/index.d.ts +2 -1
- package/dist/cjs/ag-grid-plus/setting/index.js +4 -2
- package/dist/cjs/ag-grid-plus/storage/SchemeSyncManager.d.ts +2 -1
- package/dist/cjs/ag-grid-plus/storage/SchemeSyncManager.js +11 -8
- package/dist/cjs/ag-grid-plus/types.d.ts +2 -0
- package/dist/cjs/array-table/index.js +30 -118
- package/dist/cjs/draggableModal/index.d.ts +1 -1
- package/dist/cjs/draggableModal/index.js +253 -25
- package/dist/cjs/draggableModal/style.less +185 -12
- package/dist/esm/ag-grid-plus/_utils/processColumnGroups.d.ts +9 -0
- package/dist/esm/ag-grid-plus/_utils/processColumnGroups.js +44 -0
- package/dist/esm/ag-grid-plus/ag-gridPlus.js +252 -121
- package/dist/esm/ag-grid-plus/querySchemes/components/QuerySchemesManager.js +19 -10
- package/dist/esm/ag-grid-plus/querySchemes/hooks/useQuerySchemes.js +25 -3
- package/dist/esm/ag-grid-plus/schemes/components/SchemeSelector.d.ts +1 -1
- package/dist/esm/ag-grid-plus/schemes/components/SchemeSelector.js +1 -1
- package/dist/esm/ag-grid-plus/schemes/hooks/useColumnSchemes.js +60 -14
- package/dist/esm/ag-grid-plus/schemes/storage/localStorageAdapter.js +13 -27
- package/dist/esm/ag-grid-plus/schemes/types.d.ts +8 -5
- package/dist/esm/ag-grid-plus/schemes/utils/validator.js +14 -18
- package/dist/esm/ag-grid-plus/setting/ColumnConfigForm.d.ts +16 -0
- package/dist/esm/ag-grid-plus/setting/ColumnConfigForm.js +338 -0
- package/dist/esm/ag-grid-plus/setting/ColumnConfigTable.d.ts +20 -0
- package/dist/esm/ag-grid-plus/setting/ColumnConfigTable.js +932 -0
- package/dist/esm/ag-grid-plus/setting/ColumnSetting.js +207 -247
- package/dist/esm/ag-grid-plus/setting/MoveNodeModal.d.ts +15 -0
- package/dist/esm/ag-grid-plus/setting/MoveNodeModal.js +150 -0
- package/dist/esm/ag-grid-plus/setting/NameColumnRenderer.d.ts +18 -0
- package/dist/esm/ag-grid-plus/setting/NameColumnRenderer.js +87 -0
- package/dist/esm/ag-grid-plus/setting/columnGroupTypes.d.ts +59 -0
- package/dist/esm/ag-grid-plus/setting/columnGroupTypes.js +1 -0
- package/dist/esm/ag-grid-plus/setting/columnGroupUtils.d.ts +75 -0
- package/dist/esm/ag-grid-plus/setting/columnGroupUtils.js +265 -0
- package/dist/esm/ag-grid-plus/setting/index.d.ts +2 -1
- package/dist/esm/ag-grid-plus/setting/index.js +4 -2
- package/dist/esm/ag-grid-plus/storage/SchemeSyncManager.d.ts +2 -1
- package/dist/esm/ag-grid-plus/storage/SchemeSyncManager.js +11 -8
- package/dist/esm/ag-grid-plus/types.d.ts +2 -0
- package/dist/esm/array-table/index.js +31 -119
- package/dist/esm/draggableModal/index.d.ts +1 -1
- package/dist/esm/draggableModal/index.js +254 -27
- package/dist/esm/draggableModal/style.less +185 -12
- package/dist/umd/qc-ui.min.css +1 -1
- package/dist/umd/qc-ui.min.js +1 -1
- package/package.json +1 -1
- package/dist/cjs/ag-grid-plus/gridManager/index.d.ts +0 -7
- package/dist/cjs/ag-grid-plus/gridManager/index.js +0 -40
- package/dist/cjs/ag-grid-plus/querySchemes/hooks/useQuerySchemes.refactored.d.ts +0 -7
- package/dist/cjs/ag-grid-plus/querySchemes/hooks/useQuerySchemes.refactored.js +0 -32
- package/dist/cjs/ag-grid-plus/schemes/hooks/useColumnSchemes.refactored.d.ts +0 -7
- package/dist/cjs/ag-grid-plus/schemes/hooks/useColumnSchemes.refactored.js +0 -32
- package/dist/cjs/ag-grid-plus/setting/diySetting/index.d.ts +0 -10
- package/dist/cjs/ag-grid-plus/setting/diySetting/index.js +0 -268
- package/dist/esm/ag-grid-plus/gridManager/index.d.ts +0 -7
- package/dist/esm/ag-grid-plus/gridManager/index.js +0 -35
- package/dist/esm/ag-grid-plus/querySchemes/hooks/useQuerySchemes.refactored.d.ts +0 -7
- package/dist/esm/ag-grid-plus/querySchemes/hooks/useQuerySchemes.refactored.js +0 -27
- package/dist/esm/ag-grid-plus/schemes/hooks/useColumnSchemes.refactored.d.ts +0 -7
- package/dist/esm/ag-grid-plus/schemes/hooks/useColumnSchemes.refactored.js +0 -27
- package/dist/esm/ag-grid-plus/setting/diySetting/index.d.ts +0 -10
- package/dist/esm/ag-grid-plus/setting/diySetting/index.js +0 -259
|
@@ -73,7 +73,7 @@ export var SchemeSyncManager = /*#__PURE__*/function () {
|
|
|
73
73
|
schemes = _ref2[1];
|
|
74
74
|
serializedColumnSchemes[gridId] = schemes.map(function (scheme) {
|
|
75
75
|
return _objectSpread(_objectSpread({}, scheme), {}, {
|
|
76
|
-
columnState: JSON.stringify(scheme.
|
|
76
|
+
columnState: JSON.stringify(scheme.columnConfig)
|
|
77
77
|
});
|
|
78
78
|
});
|
|
79
79
|
});
|
|
@@ -593,15 +593,15 @@ export var SchemeSyncManager = /*#__PURE__*/function () {
|
|
|
593
593
|
if (types.has('current')) dirtyCurrentGrids.add(gridId);
|
|
594
594
|
});
|
|
595
595
|
|
|
596
|
-
// 添加列方案数据(将
|
|
596
|
+
// 添加列方案数据(将 columnConfig 序列化为 JSON 字符串并映射到 columnState 字段)
|
|
597
597
|
if (dirtyColumnGrids.size > 0) {
|
|
598
598
|
requestData.columnSchemes = {};
|
|
599
599
|
dirtyColumnGrids.forEach(function (gridId) {
|
|
600
600
|
var schemes = _this4.allData.columnSchemes[gridId] || [];
|
|
601
|
-
// 将每个方案的
|
|
601
|
+
// 将每个方案的 columnConfig 从数组转换为 JSON 字符串,并映射到 columnState 字段
|
|
602
602
|
requestData.columnSchemes[gridId] = schemes.map(function (scheme) {
|
|
603
603
|
return _objectSpread(_objectSpread({}, scheme), {}, {
|
|
604
|
-
columnState: JSON.stringify(scheme.
|
|
604
|
+
columnState: JSON.stringify(scheme.columnConfig)
|
|
605
605
|
});
|
|
606
606
|
});
|
|
607
607
|
});
|
|
@@ -771,7 +771,8 @@ export var SchemeSyncManager = /*#__PURE__*/function () {
|
|
|
771
771
|
|
|
772
772
|
/**
|
|
773
773
|
* 反序列化从后端接收的方案数据
|
|
774
|
-
* 将 columnState
|
|
774
|
+
* 将 columnState(后端字段) 映射为 columnConfig 并从 JSON 字符串转换为数组
|
|
775
|
+
* 将 itemsOrder 从 JSON 字符串转换为数组
|
|
775
776
|
*/
|
|
776
777
|
}, {
|
|
777
778
|
key: "deserializeSchemesData",
|
|
@@ -787,10 +788,12 @@ export var SchemeSyncManager = /*#__PURE__*/function () {
|
|
|
787
788
|
gridId = _ref6[0],
|
|
788
789
|
schemes = _ref6[1];
|
|
789
790
|
result.columnSchemes[gridId] = schemes.map(function (scheme) {
|
|
790
|
-
//
|
|
791
|
-
|
|
791
|
+
// 后端返回的数据中,columnState 字段存储的是 columnConfig 的 JSON 字符串
|
|
792
|
+
// 需要将其解析为数组并映射到 columnConfig 字段
|
|
793
|
+
var schemeWithState = scheme; // 类型断言处理后端数据
|
|
794
|
+
var columnConfig = typeof schemeWithState.columnState === 'string' ? JSON.parse(schemeWithState.columnState) : schemeWithState.columnState;
|
|
792
795
|
return _objectSpread(_objectSpread({}, scheme), {}, {
|
|
793
|
-
|
|
796
|
+
columnConfig: columnConfig
|
|
794
797
|
});
|
|
795
798
|
});
|
|
796
799
|
});
|
|
@@ -146,6 +146,8 @@ export interface ExtendedColDef extends ColDef {
|
|
|
146
146
|
formatWithCommas?: boolean;
|
|
147
147
|
/** 自定义单元格渲染器 (用于跳过计算) */
|
|
148
148
|
customCellRenderer?: (params: any) => any;
|
|
149
|
+
/** 列分组的子列 (支持列分组功能) */
|
|
150
|
+
children?: ExtendedColDef[];
|
|
149
151
|
}
|
|
150
152
|
/**
|
|
151
153
|
* 扩展的列状态 (包含 AG-Grid 列状态 + 自定义属性)
|
|
@@ -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
|
|
14
|
+
import React, { Fragment, useEffect, useRef, useState } 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";
|
|
@@ -25,47 +25,7 @@ import PreviewArrayTable from "./preview";
|
|
|
25
25
|
import { Space } from "antd";
|
|
26
26
|
import Setting from "../ag-grid-plus/setting";
|
|
27
27
|
import { useGridPlusColumnState } from "../ag-grid-plus/hooks/useGridPlusColumnState";
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* ArrayTable 内置的列状态管理 Hook
|
|
31
|
-
* 使用 localStorage 进行持久化存储
|
|
32
|
-
*/
|
|
33
|
-
var useArrayTableColumnState = function useArrayTableColumnState(gridKey) {
|
|
34
|
-
var STORAGE_KEY = 'array-table-column-state';
|
|
35
|
-
|
|
36
|
-
// 从 localStorage 读取所有列状态
|
|
37
|
-
var getColumnStateFromStorage = useCallback(function () {
|
|
38
|
-
try {
|
|
39
|
-
var stored = localStorage.getItem(STORAGE_KEY);
|
|
40
|
-
return stored ? JSON.parse(stored) : {};
|
|
41
|
-
} catch (error) {
|
|
42
|
-
console.error('Failed to read column state from localStorage:', error);
|
|
43
|
-
return {};
|
|
44
|
-
}
|
|
45
|
-
}, []);
|
|
46
|
-
|
|
47
|
-
// 保存列状态到 localStorage
|
|
48
|
-
var saveColumnStateToStorage = useCallback(function (key, state) {
|
|
49
|
-
try {
|
|
50
|
-
var allStates = getColumnStateFromStorage();
|
|
51
|
-
allStates[key] = state;
|
|
52
|
-
localStorage.setItem(STORAGE_KEY, JSON.stringify(allStates));
|
|
53
|
-
} catch (error) {
|
|
54
|
-
console.error('Failed to save column state to localStorage:', error);
|
|
55
|
-
}
|
|
56
|
-
}, [getColumnStateFromStorage]);
|
|
57
|
-
|
|
58
|
-
// 获取指定 gridKey 的列状态
|
|
59
|
-
var getColumnState = useCallback(function (key) {
|
|
60
|
-
if (!key) return undefined;
|
|
61
|
-
var allStates = getColumnStateFromStorage();
|
|
62
|
-
return allStates[key];
|
|
63
|
-
}, [getColumnStateFromStorage]);
|
|
64
|
-
return {
|
|
65
|
-
getColumnState: getColumnState,
|
|
66
|
-
saveColumnState: saveColumnStateToStorage
|
|
67
|
-
};
|
|
68
|
-
};
|
|
28
|
+
import { useColumnSchemes } from "../ag-grid-plus/schemes/hooks/useColumnSchemes";
|
|
69
29
|
|
|
70
30
|
//@ts-ignore
|
|
71
31
|
var ArrayTable = observer(function (props) {
|
|
@@ -97,10 +57,14 @@ var ArrayTable = observer(function (props) {
|
|
|
97
57
|
// 尝试从 Context 获取列状态管理(如果被 Provider 包裹)
|
|
98
58
|
var contextColumnState = useGridPlusColumnState();
|
|
99
59
|
|
|
100
|
-
//
|
|
101
|
-
var
|
|
102
|
-
|
|
103
|
-
|
|
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;
|
|
104
68
|
|
|
105
69
|
// 使用自定义 hooks
|
|
106
70
|
var _useCellFocus = useCellFocus(),
|
|
@@ -110,45 +74,36 @@ var ArrayTable = observer(function (props) {
|
|
|
110
74
|
var _useRowDrag = useRowDrag(field),
|
|
111
75
|
handleRowDragMove = _useRowDrag.handleRowDragMove;
|
|
112
76
|
|
|
113
|
-
//
|
|
77
|
+
// 恢复列状态(从方案系统)
|
|
114
78
|
useEffect(function () {
|
|
115
|
-
|
|
116
|
-
if (!props.gridKey || !gridApiState) {
|
|
79
|
+
if (!props.gridKey || !gridApiState || !schemeManager) {
|
|
117
80
|
return;
|
|
118
81
|
}
|
|
119
|
-
var stateToApply = null;
|
|
120
|
-
var hasRealProvider = (contextColumnState === null || contextColumnState === void 0 ? void 0 : contextColumnState.columnState) !== undefined;
|
|
121
82
|
|
|
122
|
-
//
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
if (stateToApply && Array.isArray(stateToApply)) {
|
|
131
|
-
// 转换为 AG-Grid 需要的格式
|
|
132
|
-
var formattedState = stateToApply.map(function (col) {
|
|
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) {
|
|
133
91
|
return {
|
|
134
|
-
colId:
|
|
135
|
-
width:
|
|
136
|
-
hide:
|
|
137
|
-
pinned:
|
|
138
|
-
|
|
139
|
-
sortIndex: col.sortIndex,
|
|
140
|
-
aggFunc: col.aggFunc,
|
|
141
|
-
flex: col.flex
|
|
92
|
+
colId: item.field,
|
|
93
|
+
width: item.width,
|
|
94
|
+
hide: item.hide,
|
|
95
|
+
pinned: item.pinned === 'notPinned' ? null : item.pinned,
|
|
96
|
+
flex: item.flex
|
|
142
97
|
};
|
|
143
98
|
});
|
|
144
99
|
setTimeout(function () {
|
|
145
100
|
gridApiState.applyColumnState({
|
|
146
|
-
state:
|
|
101
|
+
state: columnState,
|
|
147
102
|
applyOrder: true
|
|
148
103
|
});
|
|
149
104
|
}, 100);
|
|
150
105
|
}
|
|
151
|
-
}, [props.gridKey, gridApiState,
|
|
106
|
+
}, [props.gridKey, gridApiState, schemeManager === null || schemeManager === void 0 ? void 0 : schemeManager.currentScheme]);
|
|
152
107
|
|
|
153
108
|
//@ts-ignore
|
|
154
109
|
if (columns.length > 0) {
|
|
@@ -156,22 +111,9 @@ var ArrayTable = observer(function (props) {
|
|
|
156
111
|
columns[0].rowDrag = props.onRowDrag ? true : false;
|
|
157
112
|
}
|
|
158
113
|
|
|
159
|
-
//
|
|
160
|
-
|
|
161
|
-
if (!props.gridKey) return;
|
|
114
|
+
// 不再需要 onColumnStateChanged 回调
|
|
115
|
+
// 保存逻辑统一由 ColumnSetting 通过 schemeManager 处理
|
|
162
116
|
|
|
163
|
-
// 判断是否有真正的 Provider:检查 columnState 是否不是 undefined(默认值)
|
|
164
|
-
var hasRealProvider = (contextColumnState === null || contextColumnState === void 0 ? void 0 : contextColumnState.columnState) !== undefined;
|
|
165
|
-
|
|
166
|
-
// 优先使用 Context 的保存方法(但只有在有真正的 Provider 时)
|
|
167
|
-
if (hasRealProvider && contextColumnState !== null && contextColumnState !== void 0 && contextColumnState.onSaveColumnState) {
|
|
168
|
-
contextColumnState.onSaveColumnState(props.gridKey, columnState);
|
|
169
|
-
}
|
|
170
|
-
// 后备方案:使用内置的 localStorage 保存
|
|
171
|
-
else {
|
|
172
|
-
saveColumnState(props.gridKey, columnState);
|
|
173
|
-
}
|
|
174
|
-
};
|
|
175
117
|
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
|
176
118
|
ref: ref,
|
|
177
119
|
style: {
|
|
@@ -219,7 +161,7 @@ var ArrayTable = observer(function (props) {
|
|
|
219
161
|
gridApi: apiRef.current,
|
|
220
162
|
gridApiState: gridApiState,
|
|
221
163
|
type: 'formArrayTable',
|
|
222
|
-
|
|
164
|
+
schemeManager: schemeManager
|
|
223
165
|
})), /*#__PURE__*/React.createElement("div", {
|
|
224
166
|
style: {
|
|
225
167
|
flex: 1,
|
|
@@ -231,37 +173,7 @@ var ArrayTable = observer(function (props) {
|
|
|
231
173
|
apiRef.current = params.api;
|
|
232
174
|
setGridApiState(params.api);
|
|
233
175
|
|
|
234
|
-
//
|
|
235
|
-
if (props.gridKey) {
|
|
236
|
-
var _contextColumnState$c2;
|
|
237
|
-
var hasRealProvider = (contextColumnState === null || contextColumnState === void 0 ? void 0 : contextColumnState.columnState) !== undefined;
|
|
238
|
-
var stateToApply = null;
|
|
239
|
-
if (hasRealProvider && contextColumnState !== null && contextColumnState !== void 0 && (_contextColumnState$c2 = contextColumnState.columnState) !== null && _contextColumnState$c2 !== void 0 && _contextColumnState$c2[props.gridKey]) {
|
|
240
|
-
stateToApply = contextColumnState.columnState[props.gridKey];
|
|
241
|
-
} else {
|
|
242
|
-
stateToApply = getColumnState(props.gridKey);
|
|
243
|
-
}
|
|
244
|
-
if (stateToApply && Array.isArray(stateToApply)) {
|
|
245
|
-
var formattedState = stateToApply.map(function (col) {
|
|
246
|
-
return {
|
|
247
|
-
colId: col.colId || col.field,
|
|
248
|
-
width: col.width,
|
|
249
|
-
hide: col.hide,
|
|
250
|
-
pinned: col.pinned === 'notPinned' ? null : col.pinned,
|
|
251
|
-
sort: col.sort,
|
|
252
|
-
sortIndex: col.sortIndex,
|
|
253
|
-
aggFunc: col.aggFunc,
|
|
254
|
-
flex: col.flex
|
|
255
|
-
};
|
|
256
|
-
});
|
|
257
|
-
setTimeout(function () {
|
|
258
|
-
params.api.applyColumnState({
|
|
259
|
-
state: formattedState,
|
|
260
|
-
applyOrder: true
|
|
261
|
-
});
|
|
262
|
-
}, 50);
|
|
263
|
-
}
|
|
264
|
-
}
|
|
176
|
+
// 恢复列状态将由 useEffect 处理(使用方案系统)
|
|
265
177
|
},
|
|
266
178
|
suppressColumnVirtualisation: true,
|
|
267
179
|
gridOptions: {
|
|
@@ -1,20 +1,22 @@
|
|
|
1
|
+
var _excluded = ["wrapClassName", "width"];
|
|
1
2
|
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
3
|
+
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
4
|
+
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
2
5
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
3
6
|
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
4
7
|
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); }
|
|
5
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; }
|
|
6
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; } }
|
|
7
10
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
8
|
-
import { ShrinkOutlined, ArrowsAltOutlined } from '@ant-design/icons';
|
|
11
|
+
import { ShrinkOutlined, ArrowsAltOutlined, ZoomInOutlined, ZoomOutOutlined } from '@ant-design/icons';
|
|
9
12
|
import { Modal } from 'antd';
|
|
10
13
|
import React, { useRef, useState } from 'react';
|
|
11
14
|
import Draggable from 'react-draggable';
|
|
12
15
|
import "./style.less";
|
|
13
|
-
|
|
14
16
|
/**
|
|
15
|
-
* 可拖拽Modal
|
|
16
|
-
* @param props
|
|
17
|
-
* @returns
|
|
17
|
+
* 可拖拽Modal - 支持拖拽、全屏切换和缩放
|
|
18
|
+
* @param props
|
|
19
|
+
* @returns
|
|
18
20
|
*/
|
|
19
21
|
var DraggableModal = function DraggableModal(props) {
|
|
20
22
|
var _useState = useState(true),
|
|
@@ -35,6 +37,39 @@ var DraggableModal = function DraggableModal(props) {
|
|
|
35
37
|
_useState6 = _slicedToArray(_useState5, 2),
|
|
36
38
|
fullScreen = _useState6[0],
|
|
37
39
|
setFullScreen = _useState6[1];
|
|
40
|
+
var _useState7 = useState('normal'),
|
|
41
|
+
_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({
|
|
55
|
+
width: 0,
|
|
56
|
+
height: 0
|
|
57
|
+
}),
|
|
58
|
+
_useState14 = _slicedToArray(_useState13, 2),
|
|
59
|
+
modalSize = _useState14[0],
|
|
60
|
+
setModalSize = _useState14[1];
|
|
61
|
+
var _useState15 = useState({
|
|
62
|
+
x: 0,
|
|
63
|
+
y: 0
|
|
64
|
+
}),
|
|
65
|
+
_useState16 = _slicedToArray(_useState15, 2),
|
|
66
|
+
modalPosition = _useState16[0],
|
|
67
|
+
setModalPosition = _useState16[1];
|
|
68
|
+
|
|
69
|
+
// 解构 props,分离出 wrapClassName
|
|
70
|
+
var propsWrapClassName = props.wrapClassName,
|
|
71
|
+
width = props.width,
|
|
72
|
+
restProps = _objectWithoutProperties(props, _excluded);
|
|
38
73
|
var _onStart = function onStart(_event, uiData) {
|
|
39
74
|
var _draggleRef$current;
|
|
40
75
|
var _window$document$docu = window.document.documentElement,
|
|
@@ -54,50 +89,242 @@ var DraggableModal = function DraggableModal(props) {
|
|
|
54
89
|
var toggleFullScreen = function toggleFullScreen() {
|
|
55
90
|
setFullScreen(!fullScreen);
|
|
56
91
|
};
|
|
57
|
-
var
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
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
|
+
}
|
|
69
105
|
};
|
|
106
|
+
|
|
107
|
+
// 拖动调整大小的处理函数
|
|
108
|
+
var handleResizeMouseDown = function handleResizeMouseDown(e, direction) {
|
|
109
|
+
var _draggleRef$current2;
|
|
110
|
+
e.preventDefault();
|
|
111
|
+
e.stopPropagation();
|
|
112
|
+
if (fullScreen) return;
|
|
113
|
+
|
|
114
|
+
// 查找.ant-modal,它在draggleRef的父级
|
|
115
|
+
var modal = (_draggleRef$current2 = draggleRef.current) === null || _draggleRef$current2 === void 0 ? void 0 : _draggleRef$current2.closest('.ant-modal');
|
|
116
|
+
if (!modal) {
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
var rect = modal.getBoundingClientRect();
|
|
120
|
+
setModalSize({
|
|
121
|
+
width: rect.width,
|
|
122
|
+
height: rect.height
|
|
123
|
+
});
|
|
124
|
+
setModalPosition({
|
|
125
|
+
x: rect.left,
|
|
126
|
+
y: rect.top
|
|
127
|
+
});
|
|
128
|
+
setResizeDirection(direction);
|
|
129
|
+
setIsResizing(true);
|
|
130
|
+
var startX = e.clientX;
|
|
131
|
+
var startY = e.clientY;
|
|
132
|
+
var startWidth = rect.width;
|
|
133
|
+
var startHeight = rect.height;
|
|
134
|
+
var startLeft = rect.left;
|
|
135
|
+
var startTop = rect.top;
|
|
136
|
+
var handleMouseMove = function handleMouseMove(moveEvent) {
|
|
137
|
+
var deltaX = moveEvent.clientX - startX;
|
|
138
|
+
var deltaY = moveEvent.clientY - startY;
|
|
139
|
+
var newWidth = startWidth;
|
|
140
|
+
var newHeight = startHeight;
|
|
141
|
+
var newLeft = startLeft;
|
|
142
|
+
var newTop = startTop;
|
|
143
|
+
|
|
144
|
+
// 根据方向计算新尺寸
|
|
145
|
+
if (direction.includes('e')) {
|
|
146
|
+
newWidth = Math.max(400, startWidth + deltaX);
|
|
147
|
+
}
|
|
148
|
+
if (direction.includes('w')) {
|
|
149
|
+
newWidth = Math.max(400, startWidth - deltaX);
|
|
150
|
+
newLeft = startLeft + (startWidth - newWidth);
|
|
151
|
+
}
|
|
152
|
+
if (direction.includes('s')) {
|
|
153
|
+
newHeight = Math.max(300, startHeight + deltaY);
|
|
154
|
+
}
|
|
155
|
+
if (direction.includes('n')) {
|
|
156
|
+
newHeight = Math.max(300, startHeight - deltaY);
|
|
157
|
+
newTop = startTop + (startHeight - newHeight);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// 限制最大尺寸
|
|
161
|
+
var maxWidth = window.innerWidth * 0.95;
|
|
162
|
+
var maxHeight = window.innerHeight * 0.95;
|
|
163
|
+
newWidth = Math.min(newWidth, maxWidth);
|
|
164
|
+
newHeight = Math.min(newHeight, maxHeight);
|
|
165
|
+
|
|
166
|
+
// 直接更新DOM以实现实时效果
|
|
167
|
+
modal.style.width = "".concat(newWidth, "px");
|
|
168
|
+
modal.style.height = "".concat(newHeight, "px");
|
|
169
|
+
|
|
170
|
+
// 同时更新 modal-content 的高度
|
|
171
|
+
var modalContent = modal.querySelector('.ant-modal-content');
|
|
172
|
+
if (modalContent) {
|
|
173
|
+
modalContent.style.height = "".concat(newHeight, "px");
|
|
174
|
+
modalContent.style.display = 'flex';
|
|
175
|
+
modalContent.style.flexDirection = 'column';
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
// 仍然更新state以保持React状态同步
|
|
179
|
+
setModalSize({
|
|
180
|
+
width: newWidth,
|
|
181
|
+
height: newHeight
|
|
182
|
+
});
|
|
183
|
+
setModalPosition({
|
|
184
|
+
x: newLeft,
|
|
185
|
+
y: newTop
|
|
186
|
+
});
|
|
187
|
+
};
|
|
188
|
+
var handleMouseUp = function handleMouseUp() {
|
|
189
|
+
setIsResizing(false);
|
|
190
|
+
setResizeDirection('');
|
|
191
|
+
document.removeEventListener('mousemove', handleMouseMove);
|
|
192
|
+
document.removeEventListener('mouseup', handleMouseUp);
|
|
193
|
+
};
|
|
194
|
+
document.addEventListener('mousemove', handleMouseMove);
|
|
195
|
+
document.addEventListener('mouseup', handleMouseUp);
|
|
196
|
+
};
|
|
197
|
+
|
|
198
|
+
// 合并类名
|
|
199
|
+
var zoomClass = !fullScreen && zoom !== 'normal' ? "modal-wrap-zoom-".concat(zoom) : '';
|
|
200
|
+
var fullScreenClass = fullScreen ? 'modal-wrap-fullscreen' : '';
|
|
201
|
+
var resizingClass = isResizing ? 'modal-wrap-resizing' : '';
|
|
202
|
+
var mergedWrapClassName = [propsWrapClassName, fullScreenClass, zoomClass, resizingClass].filter(Boolean).join(' ');
|
|
70
203
|
return /*#__PURE__*/React.createElement(Modal, _extends({
|
|
71
204
|
maskClosable: false,
|
|
72
|
-
|
|
73
|
-
},
|
|
205
|
+
width: width
|
|
206
|
+
}, restProps, {
|
|
207
|
+
wrapClassName: mergedWrapClassName,
|
|
74
208
|
title: /*#__PURE__*/React.createElement("div", {
|
|
75
209
|
style: {
|
|
76
210
|
width: '100%',
|
|
77
|
-
cursor: 'move'
|
|
211
|
+
cursor: fullScreen ? 'default' : 'move'
|
|
78
212
|
},
|
|
79
213
|
onMouseOver: function onMouseOver() {
|
|
80
|
-
if (disabled) {
|
|
214
|
+
if (!fullScreen && disabled) {
|
|
81
215
|
setDisabled(false);
|
|
82
216
|
}
|
|
83
217
|
},
|
|
84
218
|
onMouseOut: function onMouseOut() {
|
|
85
|
-
|
|
219
|
+
if (!fullScreen) {
|
|
220
|
+
setDisabled(true);
|
|
221
|
+
}
|
|
86
222
|
},
|
|
87
223
|
onFocus: function onFocus() {},
|
|
88
224
|
onBlur: function onBlur() {}
|
|
89
|
-
},
|
|
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)))),
|
|
90
265
|
modalRender: function modalRender(modal) {
|
|
91
266
|
return /*#__PURE__*/React.createElement(Draggable, {
|
|
92
|
-
disabled: disabled,
|
|
267
|
+
disabled: disabled || fullScreen,
|
|
93
268
|
bounds: bounds,
|
|
94
269
|
nodeRef: draggleRef,
|
|
95
270
|
onStart: function onStart(event, uiData) {
|
|
96
271
|
return _onStart(event, uiData);
|
|
97
|
-
}
|
|
272
|
+
},
|
|
273
|
+
cancel: ".resize-handle"
|
|
98
274
|
}, /*#__PURE__*/React.createElement("div", {
|
|
99
|
-
ref: draggleRef
|
|
100
|
-
|
|
275
|
+
ref: draggleRef,
|
|
276
|
+
style: isResizing && modalSize.width > 0 ? {
|
|
277
|
+
position: 'relative',
|
|
278
|
+
height: '100%',
|
|
279
|
+
width: "".concat(modalSize.width, "px"),
|
|
280
|
+
'--modal-width': "".concat(modalSize.width, "px"),
|
|
281
|
+
'--modal-height': "".concat(modalSize.height, "px")
|
|
282
|
+
} : {
|
|
283
|
+
position: 'relative',
|
|
284
|
+
height: '100%',
|
|
285
|
+
width: '100%'
|
|
286
|
+
}
|
|
287
|
+
}, modal, !fullScreen && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
|
288
|
+
className: "resize-handle resize-handle-e",
|
|
289
|
+
onMouseDown: function onMouseDown(e) {
|
|
290
|
+
return handleResizeMouseDown(e, 'e');
|
|
291
|
+
}
|
|
292
|
+
}), /*#__PURE__*/React.createElement("div", {
|
|
293
|
+
className: "resize-handle resize-handle-s",
|
|
294
|
+
onMouseDown: function onMouseDown(e) {
|
|
295
|
+
return handleResizeMouseDown(e, 's');
|
|
296
|
+
}
|
|
297
|
+
}), /*#__PURE__*/React.createElement("div", {
|
|
298
|
+
className: "resize-handle resize-handle-w",
|
|
299
|
+
onMouseDown: function onMouseDown(e) {
|
|
300
|
+
return handleResizeMouseDown(e, 'w');
|
|
301
|
+
}
|
|
302
|
+
}), /*#__PURE__*/React.createElement("div", {
|
|
303
|
+
className: "resize-handle resize-handle-n",
|
|
304
|
+
onMouseDown: function onMouseDown(e) {
|
|
305
|
+
return handleResizeMouseDown(e, 'n');
|
|
306
|
+
}
|
|
307
|
+
}), /*#__PURE__*/React.createElement("div", {
|
|
308
|
+
className: "resize-handle resize-handle-se",
|
|
309
|
+
onMouseDown: function onMouseDown(e) {
|
|
310
|
+
return handleResizeMouseDown(e, 'se');
|
|
311
|
+
}
|
|
312
|
+
}), /*#__PURE__*/React.createElement("div", {
|
|
313
|
+
className: "resize-handle resize-handle-sw",
|
|
314
|
+
onMouseDown: function onMouseDown(e) {
|
|
315
|
+
return handleResizeMouseDown(e, 'sw');
|
|
316
|
+
}
|
|
317
|
+
}), /*#__PURE__*/React.createElement("div", {
|
|
318
|
+
className: "resize-handle resize-handle-ne",
|
|
319
|
+
onMouseDown: function onMouseDown(e) {
|
|
320
|
+
return handleResizeMouseDown(e, 'ne');
|
|
321
|
+
}
|
|
322
|
+
}), /*#__PURE__*/React.createElement("div", {
|
|
323
|
+
className: "resize-handle resize-handle-nw",
|
|
324
|
+
onMouseDown: function onMouseDown(e) {
|
|
325
|
+
return handleResizeMouseDown(e, 'nw');
|
|
326
|
+
}
|
|
327
|
+
}))));
|
|
101
328
|
}
|
|
102
329
|
}));
|
|
103
330
|
};
|