@nokecy/qc-ui 1.1.2 → 1.1.4
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/ag-gridPlus.js +9 -6
- package/dist/cjs/ag-grid-plus/setting/ColumnSetting.js +16 -4
- package/dist/cjs/ag-grid-plus/setting/QuerySchemeManager.js +43 -40
- package/dist/cjs/ag-grid-plus/setting/columnGroupUtils.js +3 -0
- package/dist/cjs/ag-grid-plus/shared/storage/backendApiAdapter.js +8 -24
- package/dist/cjs/ag-grid-plus/shared/storage/schemeStorageAdapter.d.ts +20 -6
- package/dist/cjs/ag-grid-plus/shared/utils/schemeDataMigration.d.ts +27 -0
- package/dist/cjs/ag-grid-plus/shared/utils/schemeDataMigration.js +63 -0
- package/dist/cjs/draggableModal/index.js +0 -1
- package/dist/esm/ag-grid-plus/ag-gridPlus.js +9 -6
- package/dist/esm/ag-grid-plus/setting/ColumnSetting.js +16 -4
- package/dist/esm/ag-grid-plus/setting/QuerySchemeManager.js +43 -40
- package/dist/esm/ag-grid-plus/setting/columnGroupUtils.js +3 -0
- package/dist/esm/ag-grid-plus/shared/storage/backendApiAdapter.js +8 -24
- package/dist/esm/ag-grid-plus/shared/storage/schemeStorageAdapter.d.ts +20 -6
- package/dist/esm/ag-grid-plus/shared/utils/schemeDataMigration.d.ts +27 -0
- package/dist/esm/ag-grid-plus/shared/utils/schemeDataMigration.js +54 -0
- package/dist/esm/draggableModal/index.js +0 -1
- package/dist/umd/qc-ui.min.js +1 -1
- package/package.json +1 -1
|
@@ -29,6 +29,7 @@ var _locale = require("./locale");
|
|
|
29
29
|
var _gridContext = require("./context/gridContext");
|
|
30
30
|
var _useSchemeManager = require("./context/useSchemeManager");
|
|
31
31
|
var _useSchemeDataFlow = require("./context/useSchemeDataFlow");
|
|
32
|
+
var _schemeDataMigration = require("./shared/utils/schemeDataMigration");
|
|
32
33
|
var _sanitize = require("./utils/sanitize");
|
|
33
34
|
var _errors = require("./errors");
|
|
34
35
|
var _logger = require("./utils/logger");
|
|
@@ -1063,7 +1064,8 @@ function AgGridPlus(props) {
|
|
|
1063
1064
|
|
|
1064
1065
|
// 使用顺序管理器处理排序
|
|
1065
1066
|
var orderedFormItems = (0, _react.useMemo)(function () {
|
|
1066
|
-
|
|
1067
|
+
// 从查询方案提取字段顺序
|
|
1068
|
+
var itemsOrder = currentQueryScheme ? (0, _schemeDataMigration.extractItemsOrder)(currentQueryScheme) : queryItemsOrder;
|
|
1067
1069
|
if (!itemsOrder || itemsOrder.length === 0) {
|
|
1068
1070
|
return queryFormItems;
|
|
1069
1071
|
}
|
|
@@ -1078,18 +1080,19 @@ function AgGridPlus(props) {
|
|
|
1078
1080
|
return indexA - indexB;
|
|
1079
1081
|
});
|
|
1080
1082
|
return ordered;
|
|
1081
|
-
}, [queryFormItems, currentQueryScheme
|
|
1083
|
+
}, [queryFormItems, currentQueryScheme, queryItemsOrder]);
|
|
1082
1084
|
|
|
1083
1085
|
// 根据方案的隐藏字段过滤表单项
|
|
1084
1086
|
var visibleFormItems = (0, _react.useMemo)(function () {
|
|
1085
|
-
|
|
1087
|
+
// 从查询方案提取隐藏字段
|
|
1088
|
+
var hiddenFields = currentQueryScheme ? (0, _schemeDataMigration.extractHiddenFields)(currentQueryScheme) : [];
|
|
1086
1089
|
if (hiddenFields.length === 0) {
|
|
1087
1090
|
return orderedFormItems;
|
|
1088
1091
|
}
|
|
1089
1092
|
return orderedFormItems.filter(function (item) {
|
|
1090
1093
|
return !hiddenFields.includes(item.field);
|
|
1091
1094
|
});
|
|
1092
|
-
}, [orderedFormItems, currentQueryScheme
|
|
1095
|
+
}, [orderedFormItems, currentQueryScheme]);
|
|
1093
1096
|
(0, _react.useEffect)(function () {
|
|
1094
1097
|
calculateSum();
|
|
1095
1098
|
}, [calculateSum]);
|
|
@@ -1119,7 +1122,7 @@ function AgGridPlus(props) {
|
|
|
1119
1122
|
applyToGlobal: applyToGlobal,
|
|
1120
1123
|
resetCurrent: resetCurrent,
|
|
1121
1124
|
resetAll: resetAll,
|
|
1122
|
-
currentQueryOrder:
|
|
1125
|
+
currentQueryOrder: currentQueryScheme ? (0, _schemeDataMigration.extractItemsOrder)(currentQueryScheme) : queryItemsOrder,
|
|
1123
1126
|
updateQueryOrder: setQueryItemsOrder,
|
|
1124
1127
|
queryFormItems: queryFormItems,
|
|
1125
1128
|
// ========== 方案管理 API(透传给子组件) ==========
|
|
@@ -1141,7 +1144,7 @@ function AgGridPlus(props) {
|
|
|
1141
1144
|
};
|
|
1142
1145
|
}, [extensibleColumns, gridPlusColumnState, allColDefsRef.current,
|
|
1143
1146
|
// 【修复】添加到依赖数组
|
|
1144
|
-
onSaveColumnState, applyToGlobal, resetCurrent, resetAll, currentQueryScheme
|
|
1147
|
+
onSaveColumnState, applyToGlobal, resetCurrent, resetAll, currentQueryScheme, queryItemsOrder, queryFormItems,
|
|
1145
1148
|
// 方案管理依赖
|
|
1146
1149
|
columnSchemes, querySchemes, currentSchemes, schemesLoading, lastSyncTime, saveColumnScheme, deleteColumnScheme, saveQueryScheme, deleteQueryScheme, setCurrentColumnScheme, setCurrentQueryScheme, refreshSchemes, getColumnSchemes, getQuerySchemes, getCurrentScheme]);
|
|
1147
1150
|
return /*#__PURE__*/_react.default.createElement(_gridContext.GridPlusContext.Provider, {
|
|
@@ -225,7 +225,7 @@ var ColumnSetting = function ColumnSetting(_ref) {
|
|
|
225
225
|
* 将扁平化配置转换回 Grid State 并应用到 AG-Grid
|
|
226
226
|
*/
|
|
227
227
|
var handleSaveColumns = (0, _react.useCallback)( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
|
|
228
|
-
var values, flatConfig, configToSave, gridColumnDefs, columnState;
|
|
228
|
+
var values, flatConfig, configToSave, invalidColumns, gridColumnDefs, columnState;
|
|
229
229
|
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
230
230
|
while (1) switch (_context2.prev = _context2.next) {
|
|
231
231
|
case 0:
|
|
@@ -243,16 +243,28 @@ var ColumnSetting = function ColumnSetting(_ref) {
|
|
|
243
243
|
_antd.message.info('检测到旧版本配置,已自动迁移到新格式');
|
|
244
244
|
}
|
|
245
245
|
|
|
246
|
+
// 【修复】验证数据完整性,过滤掉无效的列配置
|
|
247
|
+
invalidColumns = configToSave.filter(function (item) {
|
|
248
|
+
return item.type === 'column' && !item.field;
|
|
249
|
+
});
|
|
250
|
+
if (invalidColumns.length > 0) {
|
|
251
|
+
_antd.message.warning("\u68C0\u6D4B\u5230 ".concat(invalidColumns.length, " \u4E2A\u5217\u7F3A\u5C11 field \u5B57\u6BB5\uFF0C\u5DF2\u81EA\u52A8\u8FC7\u6EE4"));
|
|
252
|
+
console.warn('[ColumnSetting] 无效的列配置:', invalidColumns);
|
|
253
|
+
configToSave = configToSave.filter(function (item) {
|
|
254
|
+
return item.type === 'group' || item.type === 'column' && item.field;
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
|
|
246
258
|
// 【修复】转换为 AG-Grid 的列定义,传入原始列定义以保留自定义属性
|
|
247
259
|
gridColumnDefs = (0, _columnGroupUtils.flatConfigToGridState)(configToSave, originalColumnDefs); // 【关键修复】先更新 columnDefs(处理分组结构变化)
|
|
248
260
|
gridApi.setGridOption('columnDefs', gridColumnDefs);
|
|
249
261
|
|
|
250
262
|
// 等待 columnDefs 更新完成
|
|
251
|
-
_context2.next =
|
|
263
|
+
_context2.next = 12;
|
|
252
264
|
return new Promise(function (resolve) {
|
|
253
265
|
return setTimeout(resolve, 100);
|
|
254
266
|
});
|
|
255
|
-
case
|
|
267
|
+
case 12:
|
|
256
268
|
// 【修复】然后应用列状态(宽度、隐藏、顺序等)
|
|
257
269
|
columnState = (0, _columnGroupUtils.flatConfigToColumnState)(configToSave);
|
|
258
270
|
gridApi.applyColumnState({
|
|
@@ -344,7 +356,7 @@ var ColumnSetting = function ColumnSetting(_ref) {
|
|
|
344
356
|
|
|
345
357
|
// message.success 已经在上面的逻辑中处理了
|
|
346
358
|
onClose();
|
|
347
|
-
case
|
|
359
|
+
case 17:
|
|
348
360
|
case "end":
|
|
349
361
|
return _context2.stop();
|
|
350
362
|
}
|
|
@@ -14,6 +14,7 @@ var _reactDndHtml5Backend = require("react-dnd-html5-backend");
|
|
|
14
14
|
var _useSchemeManager = require("../context/useSchemeManager");
|
|
15
15
|
var _gridContext = require("../context/gridContext");
|
|
16
16
|
var _uuid = require("uuid");
|
|
17
|
+
var _schemeDataMigration = require("../shared/utils/schemeDataMigration");
|
|
17
18
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
18
19
|
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); }
|
|
19
20
|
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; }
|
|
@@ -195,8 +196,8 @@ var QuerySchemeManager = function QuerySchemeManager(_ref2) {
|
|
|
195
196
|
setEditingOrder(defaultOrder);
|
|
196
197
|
}
|
|
197
198
|
|
|
198
|
-
// 初始化隐藏字段
|
|
199
|
-
setHiddenFields(
|
|
199
|
+
// 初始化隐藏字段 - 使用新格式提取器
|
|
200
|
+
setHiddenFields(currentScheme ? (0, _schemeDataMigration.extractHiddenFields)(currentScheme) : []);
|
|
200
201
|
}
|
|
201
202
|
}, [visible, currentQueryOrder, queryFormItems, currentScheme]);
|
|
202
203
|
|
|
@@ -244,68 +245,67 @@ var QuerySchemeManager = function QuerySchemeManager(_ref2) {
|
|
|
244
245
|
* 应用当前顺序和隐藏设置
|
|
245
246
|
*/
|
|
246
247
|
var handleApplyOrder = (0, _react.useCallback)( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
|
|
247
|
-
var newScheme;
|
|
248
|
+
var queryConfig, newScheme;
|
|
248
249
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
249
250
|
while (1) switch (_context.prev = _context.next) {
|
|
250
251
|
case 0:
|
|
251
252
|
_context.prev = 0;
|
|
253
|
+
// 构建新格式的配置
|
|
254
|
+
queryConfig = (0, _schemeDataMigration.buildQueryConfig)(editingOrder, hiddenFields); // 如果有当前方案,更新方案
|
|
252
255
|
if (!currentScheme) {
|
|
253
|
-
_context.next =
|
|
256
|
+
_context.next = 8;
|
|
254
257
|
break;
|
|
255
258
|
}
|
|
256
|
-
_context.next =
|
|
259
|
+
_context.next = 5;
|
|
257
260
|
return saveQueryScheme === null || saveQueryScheme === void 0 ? void 0 : saveQueryScheme(gridKey, _objectSpread(_objectSpread({}, currentScheme), {}, {
|
|
258
|
-
|
|
259
|
-
hiddenFields: hiddenFields,
|
|
261
|
+
queryConfig: queryConfig,
|
|
260
262
|
updatedAt: Date.now()
|
|
261
263
|
}));
|
|
262
|
-
case
|
|
264
|
+
case 5:
|
|
263
265
|
_antd.message.success('已应用新配置');
|
|
264
|
-
_context.next =
|
|
266
|
+
_context.next = 14;
|
|
265
267
|
break;
|
|
266
|
-
case
|
|
268
|
+
case 8:
|
|
267
269
|
// 创建新方案
|
|
268
270
|
newScheme = {
|
|
269
271
|
id: (0, _uuid.v4)(),
|
|
270
272
|
name: '默认方案',
|
|
271
273
|
description: '自动创建的默认查询方案',
|
|
272
|
-
|
|
273
|
-
hiddenFields: hiddenFields,
|
|
274
|
-
formValues: {},
|
|
274
|
+
queryConfig: queryConfig,
|
|
275
275
|
isDefault: true,
|
|
276
276
|
isSystem: false,
|
|
277
277
|
createdAt: Date.now(),
|
|
278
278
|
updatedAt: Date.now()
|
|
279
279
|
};
|
|
280
|
-
_context.next =
|
|
280
|
+
_context.next = 11;
|
|
281
281
|
return saveQueryScheme === null || saveQueryScheme === void 0 ? void 0 : saveQueryScheme(gridKey, newScheme);
|
|
282
|
-
case
|
|
283
|
-
_context.next =
|
|
282
|
+
case 11:
|
|
283
|
+
_context.next = 13;
|
|
284
284
|
return setCurrentQueryScheme === null || setCurrentQueryScheme === void 0 ? void 0 : setCurrentQueryScheme(gridKey, newScheme.id);
|
|
285
|
-
case 12:
|
|
286
|
-
_antd.message.success('已自动创建并应用默认方案');
|
|
287
285
|
case 13:
|
|
286
|
+
_antd.message.success('已自动创建并应用默认方案');
|
|
287
|
+
case 14:
|
|
288
288
|
// 应用顺序到表单
|
|
289
289
|
updateQueryOrder === null || updateQueryOrder === void 0 || updateQueryOrder(editingOrder);
|
|
290
290
|
onClose();
|
|
291
|
-
_context.next =
|
|
291
|
+
_context.next = 21;
|
|
292
292
|
break;
|
|
293
|
-
case
|
|
294
|
-
_context.prev =
|
|
293
|
+
case 18:
|
|
294
|
+
_context.prev = 18;
|
|
295
295
|
_context.t0 = _context["catch"](0);
|
|
296
296
|
_antd.message.error(_context.t0.message || '应用失败');
|
|
297
|
-
case
|
|
297
|
+
case 21:
|
|
298
298
|
case "end":
|
|
299
299
|
return _context.stop();
|
|
300
300
|
}
|
|
301
|
-
}, _callee, null, [[0,
|
|
301
|
+
}, _callee, null, [[0, 18]]);
|
|
302
302
|
})), [editingOrder, hiddenFields, currentScheme, saveQueryScheme, gridKey, updateQueryOrder, onClose, setCurrentQueryScheme]);
|
|
303
303
|
|
|
304
304
|
/**
|
|
305
305
|
* 保存为新方案
|
|
306
306
|
*/
|
|
307
307
|
var handleSaveAsNew = (0, _react.useCallback)( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
|
|
308
|
-
var newScheme;
|
|
308
|
+
var queryConfig, newScheme;
|
|
309
309
|
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
310
310
|
while (1) switch (_context2.prev = _context2.next) {
|
|
311
311
|
case 0:
|
|
@@ -317,34 +317,34 @@ var QuerySchemeManager = function QuerySchemeManager(_ref2) {
|
|
|
317
317
|
return _context2.abrupt("return");
|
|
318
318
|
case 3:
|
|
319
319
|
_context2.prev = 3;
|
|
320
|
+
// 构建新格式的配置
|
|
321
|
+
queryConfig = (0, _schemeDataMigration.buildQueryConfig)(editingOrder, hiddenFields);
|
|
320
322
|
newScheme = {
|
|
321
323
|
id: (0, _uuid.v4)(),
|
|
322
324
|
name: schemeName.trim(),
|
|
323
325
|
description: '',
|
|
324
|
-
|
|
325
|
-
hiddenFields: hiddenFields,
|
|
326
|
-
formValues: {},
|
|
326
|
+
queryConfig: queryConfig,
|
|
327
327
|
isDefault: false,
|
|
328
328
|
isSystem: false,
|
|
329
329
|
createdAt: Date.now(),
|
|
330
330
|
updatedAt: Date.now()
|
|
331
331
|
};
|
|
332
|
-
_context2.next =
|
|
332
|
+
_context2.next = 8;
|
|
333
333
|
return saveQueryScheme === null || saveQueryScheme === void 0 ? void 0 : saveQueryScheme(gridKey, newScheme);
|
|
334
|
-
case
|
|
334
|
+
case 8:
|
|
335
335
|
_antd.message.success('保存成功');
|
|
336
336
|
setSchemeName('');
|
|
337
|
-
_context2.next =
|
|
337
|
+
_context2.next = 15;
|
|
338
338
|
break;
|
|
339
|
-
case
|
|
340
|
-
_context2.prev =
|
|
339
|
+
case 12:
|
|
340
|
+
_context2.prev = 12;
|
|
341
341
|
_context2.t0 = _context2["catch"](3);
|
|
342
342
|
_antd.message.error(_context2.t0.message || '保存失败');
|
|
343
|
-
case
|
|
343
|
+
case 15:
|
|
344
344
|
case "end":
|
|
345
345
|
return _context2.stop();
|
|
346
346
|
}
|
|
347
|
-
}, _callee2, null, [[3,
|
|
347
|
+
}, _callee2, null, [[3, 12]]);
|
|
348
348
|
})), [schemeName, editingOrder, hiddenFields, saveQueryScheme, gridKey]);
|
|
349
349
|
|
|
350
350
|
/**
|
|
@@ -523,7 +523,7 @@ var QuerySchemeManager = function QuerySchemeManager(_ref2) {
|
|
|
523
523
|
*/
|
|
524
524
|
var handleApply = (0, _react.useCallback)( /*#__PURE__*/function () {
|
|
525
525
|
var _ref8 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6(schemeId) {
|
|
526
|
-
var scheme;
|
|
526
|
+
var scheme, itemsOrder;
|
|
527
527
|
return _regeneratorRuntime().wrap(function _callee6$(_context6) {
|
|
528
528
|
while (1) switch (_context6.prev = _context6.next) {
|
|
529
529
|
case 0:
|
|
@@ -534,9 +534,13 @@ var QuerySchemeManager = function QuerySchemeManager(_ref2) {
|
|
|
534
534
|
scheme = schemes.find(function (s) {
|
|
535
535
|
return s.id === schemeId;
|
|
536
536
|
});
|
|
537
|
-
if (scheme
|
|
538
|
-
|
|
539
|
-
|
|
537
|
+
if (scheme) {
|
|
538
|
+
// 使用新格式提取器获取顺序
|
|
539
|
+
itemsOrder = (0, _schemeDataMigration.extractItemsOrder)(scheme);
|
|
540
|
+
if (itemsOrder.length > 0) {
|
|
541
|
+
updateQueryOrder === null || updateQueryOrder === void 0 || updateQueryOrder(itemsOrder);
|
|
542
|
+
_antd.message.success('方案已应用');
|
|
543
|
+
}
|
|
540
544
|
}
|
|
541
545
|
_context6.next = 10;
|
|
542
546
|
break;
|
|
@@ -646,7 +650,6 @@ var QuerySchemeManager = function QuerySchemeManager(_ref2) {
|
|
|
646
650
|
children: /*#__PURE__*/_react.default.createElement(_antd.List, {
|
|
647
651
|
dataSource: schemes,
|
|
648
652
|
renderItem: function renderItem(scheme) {
|
|
649
|
-
var _scheme$itemsOrder;
|
|
650
653
|
return /*#__PURE__*/_react.default.createElement(_antd.List.Item, {
|
|
651
654
|
actions: [/*#__PURE__*/_react.default.createElement(_antd.Button, {
|
|
652
655
|
key: "apply",
|
|
@@ -734,7 +737,7 @@ var QuerySchemeManager = function QuerySchemeManager(_ref2) {
|
|
|
734
737
|
}, "\u5F53\u524D"), scheme.isSystem && /*#__PURE__*/_react.default.createElement(_antd.Tag, {
|
|
735
738
|
color: "default"
|
|
736
739
|
}, "\u7CFB\u7EDF")),
|
|
737
|
-
description: scheme.description || "".concat((
|
|
740
|
+
description: scheme.description || "".concat((0, _schemeDataMigration.extractItemsOrder)(scheme).length || 0, " \u4E2A\u67E5\u8BE2\u9879")
|
|
738
741
|
}));
|
|
739
742
|
}
|
|
740
743
|
})
|
|
@@ -322,6 +322,9 @@ function flatConfigToColumnState(flatConfig) {
|
|
|
322
322
|
return flatConfig.filter(function (item) {
|
|
323
323
|
return item.type === 'column';
|
|
324
324
|
}) // 只处理列节点,分组不在 columnState 中
|
|
325
|
+
.filter(function (item) {
|
|
326
|
+
return item.field;
|
|
327
|
+
}) // 【修复】过滤掉没有 field 的列,防止 colId 为 undefined
|
|
325
328
|
.sort(function (a, b) {
|
|
326
329
|
return a.order - b.order;
|
|
327
330
|
}) // 按 order 字段排序
|
|
@@ -210,19 +210,13 @@ var BackendApiSchemeAdapter = exports.BackendApiSchemeAdapter = /*#__PURE__*/fun
|
|
|
210
210
|
});
|
|
211
211
|
}
|
|
212
212
|
|
|
213
|
-
//
|
|
213
|
+
// 将所有查询方案的 queryConfig 字段从字符串解析为对象
|
|
214
214
|
if (response.querySchemes) {
|
|
215
215
|
Object.keys(response.querySchemes).forEach(function (gridId) {
|
|
216
216
|
response.querySchemes[gridId] = response.querySchemes[gridId].map(function (scheme) {
|
|
217
217
|
var parsedScheme = _objectSpread({}, scheme);
|
|
218
|
-
if (typeof parsedScheme.
|
|
219
|
-
parsedScheme.
|
|
220
|
-
}
|
|
221
|
-
if (typeof parsedScheme.hiddenFields === 'string') {
|
|
222
|
-
parsedScheme.hiddenFields = JSON.parse(parsedScheme.hiddenFields);
|
|
223
|
-
}
|
|
224
|
-
if (typeof parsedScheme.formValues === 'string') {
|
|
225
|
-
parsedScheme.formValues = JSON.parse(parsedScheme.formValues);
|
|
218
|
+
if (typeof parsedScheme.queryConfig === 'string') {
|
|
219
|
+
parsedScheme.queryConfig = JSON.parse(parsedScheme.queryConfig);
|
|
226
220
|
}
|
|
227
221
|
return parsedScheme;
|
|
228
222
|
});
|
|
@@ -361,11 +355,9 @@ var BackendApiSchemeAdapter = exports.BackendApiSchemeAdapter = /*#__PURE__*/fun
|
|
|
361
355
|
_context5.prev = 0;
|
|
362
356
|
this.log("\u4FDD\u5B58\u67E5\u8BE2\u65B9\u6848: ".concat(gridId, " - ").concat(scheme.name));
|
|
363
357
|
|
|
364
|
-
//
|
|
358
|
+
// 将 queryConfig 对象字段转换为 JSON 字符串
|
|
365
359
|
schemeForBackend = _objectSpread(_objectSpread({}, scheme), {}, {
|
|
366
|
-
|
|
367
|
-
hiddenFields: scheme.hiddenFields ? JSON.stringify(scheme.hiddenFields) : undefined,
|
|
368
|
-
formValues: scheme.formValues ? JSON.stringify(scheme.formValues) : undefined
|
|
360
|
+
queryConfig: scheme.queryConfig ? JSON.stringify(scheme.queryConfig) : undefined
|
|
369
361
|
});
|
|
370
362
|
url = "".concat(this.config.apiBaseUrl, "/api/extra-object/table-scheme/save-query-scheme");
|
|
371
363
|
_context5.next = 6;
|
|
@@ -384,18 +376,10 @@ var BackendApiSchemeAdapter = exports.BackendApiSchemeAdapter = /*#__PURE__*/fun
|
|
|
384
376
|
}
|
|
385
377
|
throw new Error(response.message || '保存失败');
|
|
386
378
|
case 9:
|
|
387
|
-
//
|
|
379
|
+
// 将返回的 queryConfig 字符串字段解析为对象
|
|
388
380
|
savedScheme = response.scheme;
|
|
389
|
-
if (savedScheme) {
|
|
390
|
-
|
|
391
|
-
savedScheme.itemsOrder = JSON.parse(savedScheme.itemsOrder);
|
|
392
|
-
}
|
|
393
|
-
if (typeof savedScheme.hiddenFields === 'string') {
|
|
394
|
-
savedScheme.hiddenFields = JSON.parse(savedScheme.hiddenFields);
|
|
395
|
-
}
|
|
396
|
-
if (typeof savedScheme.formValues === 'string') {
|
|
397
|
-
savedScheme.formValues = JSON.parse(savedScheme.formValues);
|
|
398
|
-
}
|
|
381
|
+
if (savedScheme && typeof savedScheme.queryConfig === 'string') {
|
|
382
|
+
savedScheme.queryConfig = JSON.parse(savedScheme.queryConfig);
|
|
399
383
|
}
|
|
400
384
|
this.log('保存成功', savedScheme);
|
|
401
385
|
return _context5.abrupt("return", savedScheme);
|
|
@@ -1,4 +1,22 @@
|
|
|
1
1
|
import type { FlatColumnItem } from '../../setting/columnGroupTypes';
|
|
2
|
+
/**
|
|
3
|
+
* 查询项配置
|
|
4
|
+
*/
|
|
5
|
+
export interface QueryItem {
|
|
6
|
+
/** 字段名 */
|
|
7
|
+
field: string;
|
|
8
|
+
/** 是否隐藏 */
|
|
9
|
+
hidden?: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* 查询配置结构
|
|
13
|
+
*/
|
|
14
|
+
export interface QueryConfig {
|
|
15
|
+
/** 查询项配置列表 (按顺序排列) */
|
|
16
|
+
items: QueryItem[];
|
|
17
|
+
/** 查询表单默认值 */
|
|
18
|
+
defaultValues?: Record<string, any>;
|
|
19
|
+
}
|
|
2
20
|
/**
|
|
3
21
|
* 查询方案
|
|
4
22
|
*/
|
|
@@ -9,12 +27,8 @@ export interface QueryScheme {
|
|
|
9
27
|
name: string;
|
|
10
28
|
/** 方案描述 */
|
|
11
29
|
description?: string;
|
|
12
|
-
/**
|
|
13
|
-
|
|
14
|
-
/** 隐藏的字段列表 */
|
|
15
|
-
hiddenFields?: string[];
|
|
16
|
-
/** 查询表单值 */
|
|
17
|
-
formValues?: Record<string, any>;
|
|
30
|
+
/** 查询配置 */
|
|
31
|
+
queryConfig: QueryConfig;
|
|
18
32
|
/** 是否为默认方案 */
|
|
19
33
|
isDefault: boolean;
|
|
20
34
|
/** 是否为系统方案(不可删除) */
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { QueryScheme, QueryConfig } from '../storage/schemeStorageAdapter';
|
|
2
|
+
/**
|
|
3
|
+
* 从查询方案提取字段顺序数组
|
|
4
|
+
* @param scheme 查询方案对象
|
|
5
|
+
* @returns 字段顺序数组
|
|
6
|
+
*/
|
|
7
|
+
export declare function extractItemsOrder(scheme: QueryScheme): string[];
|
|
8
|
+
/**
|
|
9
|
+
* 从查询方案提取隐藏字段数组
|
|
10
|
+
* @param scheme 查询方案对象
|
|
11
|
+
* @returns 隐藏字段数组
|
|
12
|
+
*/
|
|
13
|
+
export declare function extractHiddenFields(scheme: QueryScheme): string[];
|
|
14
|
+
/**
|
|
15
|
+
* 从查询方案提取表单默认值
|
|
16
|
+
* @param scheme 查询方案对象
|
|
17
|
+
* @returns 表单默认值对象
|
|
18
|
+
*/
|
|
19
|
+
export declare function extractFormValues(scheme: QueryScheme): Record<string, any>;
|
|
20
|
+
/**
|
|
21
|
+
* 构建 QueryConfig 对象
|
|
22
|
+
* @param itemsOrder 字段顺序数组
|
|
23
|
+
* @param hiddenFields 隐藏字段数组
|
|
24
|
+
* @param formValues 表单默认值
|
|
25
|
+
* @returns QueryConfig 对象
|
|
26
|
+
*/
|
|
27
|
+
export declare function buildQueryConfig(itemsOrder: string[], hiddenFields?: string[], formValues?: Record<string, any>): QueryConfig;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.buildQueryConfig = buildQueryConfig;
|
|
7
|
+
exports.extractFormValues = extractFormValues;
|
|
8
|
+
exports.extractHiddenFields = extractHiddenFields;
|
|
9
|
+
exports.extractItemsOrder = extractItemsOrder;
|
|
10
|
+
/**
|
|
11
|
+
* 从查询方案提取字段顺序数组
|
|
12
|
+
* @param scheme 查询方案对象
|
|
13
|
+
* @returns 字段顺序数组
|
|
14
|
+
*/
|
|
15
|
+
function extractItemsOrder(scheme) {
|
|
16
|
+
return scheme.queryConfig.items.map(function (item) {
|
|
17
|
+
return item.field;
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* 从查询方案提取隐藏字段数组
|
|
23
|
+
* @param scheme 查询方案对象
|
|
24
|
+
* @returns 隐藏字段数组
|
|
25
|
+
*/
|
|
26
|
+
function extractHiddenFields(scheme) {
|
|
27
|
+
return scheme.queryConfig.items.filter(function (item) {
|
|
28
|
+
return item.hidden;
|
|
29
|
+
}).map(function (item) {
|
|
30
|
+
return item.field;
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* 从查询方案提取表单默认值
|
|
36
|
+
* @param scheme 查询方案对象
|
|
37
|
+
* @returns 表单默认值对象
|
|
38
|
+
*/
|
|
39
|
+
function extractFormValues(scheme) {
|
|
40
|
+
return scheme.queryConfig.defaultValues || {};
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* 构建 QueryConfig 对象
|
|
45
|
+
* @param itemsOrder 字段顺序数组
|
|
46
|
+
* @param hiddenFields 隐藏字段数组
|
|
47
|
+
* @param formValues 表单默认值
|
|
48
|
+
* @returns QueryConfig 对象
|
|
49
|
+
*/
|
|
50
|
+
function buildQueryConfig(itemsOrder) {
|
|
51
|
+
var hiddenFields = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
52
|
+
var formValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
53
|
+
var items = itemsOrder.map(function (field) {
|
|
54
|
+
return {
|
|
55
|
+
field: field,
|
|
56
|
+
hidden: hiddenFields.includes(field)
|
|
57
|
+
};
|
|
58
|
+
});
|
|
59
|
+
return {
|
|
60
|
+
items: items,
|
|
61
|
+
defaultValues: Object.keys(formValues).length > 0 ? formValues : undefined
|
|
62
|
+
};
|
|
63
|
+
}
|
|
@@ -42,7 +42,6 @@ var DraggableModal = function DraggableModal(props) {
|
|
|
42
42
|
bounds = _useState4[0],
|
|
43
43
|
setBounds = _useState4[1];
|
|
44
44
|
var draggleRef = (0, _react.useRef)(null);
|
|
45
|
-
var modalContentRef = (0, _react.useRef)(null);
|
|
46
45
|
|
|
47
46
|
// 调整大小相关状态
|
|
48
47
|
var _useState5 = (0, _react.useState)(false),
|
|
@@ -48,6 +48,7 @@ import { localeText } from "./locale";
|
|
|
48
48
|
import { GridPlusContext } from "./context/gridContext";
|
|
49
49
|
import { useGridSchemes } from "./context/useSchemeManager";
|
|
50
50
|
import { useSchemeDataFlow } from "./context/useSchemeDataFlow";
|
|
51
|
+
import { extractItemsOrder, extractHiddenFields } from "./shared/utils/schemeDataMigration";
|
|
51
52
|
import { createSafeHtmlTemplate } from "./utils/sanitize";
|
|
52
53
|
import { GridPlusError, ErrorType, ErrorSeverity } from "./errors";
|
|
53
54
|
import { logger } from "./utils/logger";
|
|
@@ -1055,7 +1056,8 @@ function AgGridPlus(props) {
|
|
|
1055
1056
|
|
|
1056
1057
|
// 使用顺序管理器处理排序
|
|
1057
1058
|
var orderedFormItems = useMemo(function () {
|
|
1058
|
-
|
|
1059
|
+
// 从查询方案提取字段顺序
|
|
1060
|
+
var itemsOrder = currentQueryScheme ? extractItemsOrder(currentQueryScheme) : queryItemsOrder;
|
|
1059
1061
|
if (!itemsOrder || itemsOrder.length === 0) {
|
|
1060
1062
|
return queryFormItems;
|
|
1061
1063
|
}
|
|
@@ -1070,18 +1072,19 @@ function AgGridPlus(props) {
|
|
|
1070
1072
|
return indexA - indexB;
|
|
1071
1073
|
});
|
|
1072
1074
|
return ordered;
|
|
1073
|
-
}, [queryFormItems, currentQueryScheme
|
|
1075
|
+
}, [queryFormItems, currentQueryScheme, queryItemsOrder]);
|
|
1074
1076
|
|
|
1075
1077
|
// 根据方案的隐藏字段过滤表单项
|
|
1076
1078
|
var visibleFormItems = useMemo(function () {
|
|
1077
|
-
|
|
1079
|
+
// 从查询方案提取隐藏字段
|
|
1080
|
+
var hiddenFields = currentQueryScheme ? extractHiddenFields(currentQueryScheme) : [];
|
|
1078
1081
|
if (hiddenFields.length === 0) {
|
|
1079
1082
|
return orderedFormItems;
|
|
1080
1083
|
}
|
|
1081
1084
|
return orderedFormItems.filter(function (item) {
|
|
1082
1085
|
return !hiddenFields.includes(item.field);
|
|
1083
1086
|
});
|
|
1084
|
-
}, [orderedFormItems, currentQueryScheme
|
|
1087
|
+
}, [orderedFormItems, currentQueryScheme]);
|
|
1085
1088
|
useEffect(function () {
|
|
1086
1089
|
calculateSum();
|
|
1087
1090
|
}, [calculateSum]);
|
|
@@ -1111,7 +1114,7 @@ function AgGridPlus(props) {
|
|
|
1111
1114
|
applyToGlobal: applyToGlobal,
|
|
1112
1115
|
resetCurrent: resetCurrent,
|
|
1113
1116
|
resetAll: resetAll,
|
|
1114
|
-
currentQueryOrder:
|
|
1117
|
+
currentQueryOrder: currentQueryScheme ? extractItemsOrder(currentQueryScheme) : queryItemsOrder,
|
|
1115
1118
|
updateQueryOrder: setQueryItemsOrder,
|
|
1116
1119
|
queryFormItems: queryFormItems,
|
|
1117
1120
|
// ========== 方案管理 API(透传给子组件) ==========
|
|
@@ -1133,7 +1136,7 @@ function AgGridPlus(props) {
|
|
|
1133
1136
|
};
|
|
1134
1137
|
}, [extensibleColumns, gridPlusColumnState, allColDefsRef.current,
|
|
1135
1138
|
// 【修复】添加到依赖数组
|
|
1136
|
-
onSaveColumnState, applyToGlobal, resetCurrent, resetAll, currentQueryScheme
|
|
1139
|
+
onSaveColumnState, applyToGlobal, resetCurrent, resetAll, currentQueryScheme, queryItemsOrder, queryFormItems,
|
|
1137
1140
|
// 方案管理依赖
|
|
1138
1141
|
columnSchemes, querySchemes, currentSchemes, schemesLoading, lastSyncTime, saveColumnScheme, deleteColumnScheme, saveQueryScheme, deleteQueryScheme, setCurrentColumnScheme, setCurrentQueryScheme, refreshSchemes, getColumnSchemes, getQuerySchemes, getCurrentScheme]);
|
|
1139
1142
|
return /*#__PURE__*/React.createElement(GridPlusContext.Provider, {
|
|
@@ -216,7 +216,7 @@ var ColumnSetting = function ColumnSetting(_ref) {
|
|
|
216
216
|
* 将扁平化配置转换回 Grid State 并应用到 AG-Grid
|
|
217
217
|
*/
|
|
218
218
|
var handleSaveColumns = useCallback( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
|
|
219
|
-
var values, flatConfig, configToSave, gridColumnDefs, columnState;
|
|
219
|
+
var values, flatConfig, configToSave, invalidColumns, gridColumnDefs, columnState;
|
|
220
220
|
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
221
221
|
while (1) switch (_context2.prev = _context2.next) {
|
|
222
222
|
case 0:
|
|
@@ -234,16 +234,28 @@ var ColumnSetting = function ColumnSetting(_ref) {
|
|
|
234
234
|
message.info('检测到旧版本配置,已自动迁移到新格式');
|
|
235
235
|
}
|
|
236
236
|
|
|
237
|
+
// 【修复】验证数据完整性,过滤掉无效的列配置
|
|
238
|
+
invalidColumns = configToSave.filter(function (item) {
|
|
239
|
+
return item.type === 'column' && !item.field;
|
|
240
|
+
});
|
|
241
|
+
if (invalidColumns.length > 0) {
|
|
242
|
+
message.warning("\u68C0\u6D4B\u5230 ".concat(invalidColumns.length, " \u4E2A\u5217\u7F3A\u5C11 field \u5B57\u6BB5\uFF0C\u5DF2\u81EA\u52A8\u8FC7\u6EE4"));
|
|
243
|
+
console.warn('[ColumnSetting] 无效的列配置:', invalidColumns);
|
|
244
|
+
configToSave = configToSave.filter(function (item) {
|
|
245
|
+
return item.type === 'group' || item.type === 'column' && item.field;
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
|
|
237
249
|
// 【修复】转换为 AG-Grid 的列定义,传入原始列定义以保留自定义属性
|
|
238
250
|
gridColumnDefs = flatConfigToGridState(configToSave, originalColumnDefs); // 【关键修复】先更新 columnDefs(处理分组结构变化)
|
|
239
251
|
gridApi.setGridOption('columnDefs', gridColumnDefs);
|
|
240
252
|
|
|
241
253
|
// 等待 columnDefs 更新完成
|
|
242
|
-
_context2.next =
|
|
254
|
+
_context2.next = 12;
|
|
243
255
|
return new Promise(function (resolve) {
|
|
244
256
|
return setTimeout(resolve, 100);
|
|
245
257
|
});
|
|
246
|
-
case
|
|
258
|
+
case 12:
|
|
247
259
|
// 【修复】然后应用列状态(宽度、隐藏、顺序等)
|
|
248
260
|
columnState = flatConfigToColumnState(configToSave);
|
|
249
261
|
gridApi.applyColumnState({
|
|
@@ -335,7 +347,7 @@ var ColumnSetting = function ColumnSetting(_ref) {
|
|
|
335
347
|
|
|
336
348
|
// message.success 已经在上面的逻辑中处理了
|
|
337
349
|
onClose();
|
|
338
|
-
case
|
|
350
|
+
case 17:
|
|
339
351
|
case "end":
|
|
340
352
|
return _context2.stop();
|
|
341
353
|
}
|