@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.
Files changed (85) hide show
  1. package/dist/cjs/ag-grid-plus/_utils/processColumnGroups.d.ts +9 -0
  2. package/dist/cjs/ag-grid-plus/_utils/processColumnGroups.js +43 -0
  3. package/dist/cjs/ag-grid-plus/ag-gridPlus.js +252 -121
  4. package/dist/cjs/ag-grid-plus/querySchemes/components/QuerySchemesManager.js +19 -9
  5. package/dist/cjs/ag-grid-plus/querySchemes/hooks/useQuerySchemes.js +25 -3
  6. package/dist/cjs/ag-grid-plus/schemes/components/SchemeSelector.d.ts +1 -1
  7. package/dist/cjs/ag-grid-plus/schemes/components/SchemeSelector.js +1 -1
  8. package/dist/cjs/ag-grid-plus/schemes/hooks/useColumnSchemes.js +60 -14
  9. package/dist/cjs/ag-grid-plus/schemes/storage/localStorageAdapter.js +12 -26
  10. package/dist/cjs/ag-grid-plus/schemes/types.d.ts +8 -5
  11. package/dist/cjs/ag-grid-plus/schemes/utils/validator.js +14 -18
  12. package/dist/cjs/ag-grid-plus/setting/ColumnConfigForm.d.ts +16 -0
  13. package/dist/cjs/ag-grid-plus/setting/ColumnConfigForm.js +348 -0
  14. package/dist/cjs/ag-grid-plus/setting/ColumnConfigTable.d.ts +20 -0
  15. package/dist/cjs/ag-grid-plus/setting/ColumnConfigTable.js +940 -0
  16. package/dist/cjs/ag-grid-plus/setting/ColumnSetting.js +208 -248
  17. package/dist/cjs/ag-grid-plus/setting/MoveNodeModal.d.ts +15 -0
  18. package/dist/cjs/ag-grid-plus/setting/MoveNodeModal.js +160 -0
  19. package/dist/cjs/ag-grid-plus/setting/NameColumnRenderer.d.ts +18 -0
  20. package/dist/cjs/ag-grid-plus/setting/NameColumnRenderer.js +94 -0
  21. package/dist/cjs/ag-grid-plus/setting/columnGroupTypes.d.ts +59 -0
  22. package/dist/cjs/ag-grid-plus/setting/columnGroupTypes.js +5 -0
  23. package/dist/cjs/ag-grid-plus/setting/columnGroupUtils.d.ts +75 -0
  24. package/dist/cjs/ag-grid-plus/setting/columnGroupUtils.js +281 -0
  25. package/dist/cjs/ag-grid-plus/setting/index.d.ts +2 -1
  26. package/dist/cjs/ag-grid-plus/setting/index.js +4 -2
  27. package/dist/cjs/ag-grid-plus/storage/SchemeSyncManager.d.ts +2 -1
  28. package/dist/cjs/ag-grid-plus/storage/SchemeSyncManager.js +11 -8
  29. package/dist/cjs/ag-grid-plus/types.d.ts +2 -0
  30. package/dist/cjs/array-table/index.js +30 -118
  31. package/dist/cjs/draggableModal/index.d.ts +1 -1
  32. package/dist/cjs/draggableModal/index.js +253 -25
  33. package/dist/cjs/draggableModal/style.less +185 -12
  34. package/dist/esm/ag-grid-plus/_utils/processColumnGroups.d.ts +9 -0
  35. package/dist/esm/ag-grid-plus/_utils/processColumnGroups.js +44 -0
  36. package/dist/esm/ag-grid-plus/ag-gridPlus.js +252 -121
  37. package/dist/esm/ag-grid-plus/querySchemes/components/QuerySchemesManager.js +19 -10
  38. package/dist/esm/ag-grid-plus/querySchemes/hooks/useQuerySchemes.js +25 -3
  39. package/dist/esm/ag-grid-plus/schemes/components/SchemeSelector.d.ts +1 -1
  40. package/dist/esm/ag-grid-plus/schemes/components/SchemeSelector.js +1 -1
  41. package/dist/esm/ag-grid-plus/schemes/hooks/useColumnSchemes.js +60 -14
  42. package/dist/esm/ag-grid-plus/schemes/storage/localStorageAdapter.js +13 -27
  43. package/dist/esm/ag-grid-plus/schemes/types.d.ts +8 -5
  44. package/dist/esm/ag-grid-plus/schemes/utils/validator.js +14 -18
  45. package/dist/esm/ag-grid-plus/setting/ColumnConfigForm.d.ts +16 -0
  46. package/dist/esm/ag-grid-plus/setting/ColumnConfigForm.js +338 -0
  47. package/dist/esm/ag-grid-plus/setting/ColumnConfigTable.d.ts +20 -0
  48. package/dist/esm/ag-grid-plus/setting/ColumnConfigTable.js +932 -0
  49. package/dist/esm/ag-grid-plus/setting/ColumnSetting.js +207 -247
  50. package/dist/esm/ag-grid-plus/setting/MoveNodeModal.d.ts +15 -0
  51. package/dist/esm/ag-grid-plus/setting/MoveNodeModal.js +150 -0
  52. package/dist/esm/ag-grid-plus/setting/NameColumnRenderer.d.ts +18 -0
  53. package/dist/esm/ag-grid-plus/setting/NameColumnRenderer.js +87 -0
  54. package/dist/esm/ag-grid-plus/setting/columnGroupTypes.d.ts +59 -0
  55. package/dist/esm/ag-grid-plus/setting/columnGroupTypes.js +1 -0
  56. package/dist/esm/ag-grid-plus/setting/columnGroupUtils.d.ts +75 -0
  57. package/dist/esm/ag-grid-plus/setting/columnGroupUtils.js +265 -0
  58. package/dist/esm/ag-grid-plus/setting/index.d.ts +2 -1
  59. package/dist/esm/ag-grid-plus/setting/index.js +4 -2
  60. package/dist/esm/ag-grid-plus/storage/SchemeSyncManager.d.ts +2 -1
  61. package/dist/esm/ag-grid-plus/storage/SchemeSyncManager.js +11 -8
  62. package/dist/esm/ag-grid-plus/types.d.ts +2 -0
  63. package/dist/esm/array-table/index.js +31 -119
  64. package/dist/esm/draggableModal/index.d.ts +1 -1
  65. package/dist/esm/draggableModal/index.js +254 -27
  66. package/dist/esm/draggableModal/style.less +185 -12
  67. package/dist/umd/qc-ui.min.css +1 -1
  68. package/dist/umd/qc-ui.min.js +1 -1
  69. package/package.json +1 -1
  70. package/dist/cjs/ag-grid-plus/gridManager/index.d.ts +0 -7
  71. package/dist/cjs/ag-grid-plus/gridManager/index.js +0 -40
  72. package/dist/cjs/ag-grid-plus/querySchemes/hooks/useQuerySchemes.refactored.d.ts +0 -7
  73. package/dist/cjs/ag-grid-plus/querySchemes/hooks/useQuerySchemes.refactored.js +0 -32
  74. package/dist/cjs/ag-grid-plus/schemes/hooks/useColumnSchemes.refactored.d.ts +0 -7
  75. package/dist/cjs/ag-grid-plus/schemes/hooks/useColumnSchemes.refactored.js +0 -32
  76. package/dist/cjs/ag-grid-plus/setting/diySetting/index.d.ts +0 -10
  77. package/dist/cjs/ag-grid-plus/setting/diySetting/index.js +0 -268
  78. package/dist/esm/ag-grid-plus/gridManager/index.d.ts +0 -7
  79. package/dist/esm/ag-grid-plus/gridManager/index.js +0 -35
  80. package/dist/esm/ag-grid-plus/querySchemes/hooks/useQuerySchemes.refactored.d.ts +0 -7
  81. package/dist/esm/ag-grid-plus/querySchemes/hooks/useQuerySchemes.refactored.js +0 -27
  82. package/dist/esm/ag-grid-plus/schemes/hooks/useColumnSchemes.refactored.d.ts +0 -7
  83. package/dist/esm/ag-grid-plus/schemes/hooks/useColumnSchemes.refactored.js +0 -27
  84. package/dist/esm/ag-grid-plus/setting/diySetting/index.d.ts +0 -10
  85. package/dist/esm/ag-grid-plus/setting/diySetting/index.js +0 -259
@@ -1,5 +1,4 @@
1
1
  function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
- import _uniqueId from "lodash/uniqueId";
3
2
  function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
4
3
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
5
4
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
@@ -17,26 +16,13 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
17
16
  import React, { useState, useCallback, useMemo, useEffect } from 'react';
18
17
  import { Modal, Tabs, Space, Button, Input, message, Popconfirm, Table, Tag, Tooltip, Card, Row, Col, Empty, Radio } from 'antd';
19
18
  import { SaveOutlined, ReloadOutlined, EditOutlined, DeleteOutlined, StarOutlined, StarFilled, AppstoreOutlined, UnorderedListOutlined, SearchOutlined } from '@ant-design/icons';
20
- import { FormGrid, FormItem, FormLayout, Input as FormilyInput, Select, NumberPicker, Switch, Form } from '@formily/antd-v5';
21
- import { createSchemaField } from '@formily/react';
22
19
  import { createForm, onFormInit } from '@formily/core';
23
- import ArrayTable from "../../array-table";
20
+ import { gridStateToFlatConfig, flatConfigToGridState, isOldSchemeData, migrateOldScheme } from "./columnGroupUtils";
21
+ import ColumnConfigTable from "./ColumnConfigTable";
24
22
  import processColumnGroups from "../_utils/processColumnGroups";
23
+ import DraggableModal from "../../draggableModal";
25
24
  var TabPane = Tabs.TabPane;
26
25
  var TextArea = Input.TextArea;
27
- var SchemaField = createSchemaField({
28
- components: {
29
- FormItem: FormItem,
30
- FormGrid: FormGrid,
31
- Space: Space,
32
- Input: FormilyInput,
33
- Select: Select,
34
- ArrayTable: ArrayTable,
35
- NumberPicker: NumberPicker,
36
- Switch: Switch
37
- }
38
- });
39
-
40
26
  /**
41
27
  * 列方案管理组件 - 集成列配置和列方案管理
42
28
  */
@@ -89,39 +75,66 @@ var ColumnSetting = function ColumnSetting(_ref) {
89
75
  viewMode = _useState18[0],
90
76
  setViewMode = _useState18[1];
91
77
 
92
- // 获取列数据 - 优先从当前方案获取,否则从 Grid 当前状态获取
78
+ // 保存原始列定义,用于取消时恢复
79
+ var _useState19 = useState(null),
80
+ _useState20 = _slicedToArray(_useState19, 2),
81
+ originalColumnDefs = _useState20[0],
82
+ setOriginalColumnDefs = _useState20[1];
83
+
84
+ /**
85
+ * 获取列数据 - 将 Grid 的列定义转换为扁平化配置
86
+ * 新版本使用树形结构,兼容旧版本的 groupName 结构
87
+ */
93
88
  var getColumnData = useCallback(function () {
94
89
  var _schemeManager$curren;
95
- // 优先使用当前方案的列状态,如果没有则使用 Grid 当前状态
96
- var columnStates = (schemeManager === null || schemeManager === void 0 || (_schemeManager$curren = schemeManager.currentScheme) === null || _schemeManager$curren === void 0 ? void 0 : _schemeManager$curren.columnState) || gridApi.getColumnState();
90
+ // 优先使用当前方案中保存的完整列配置(包含分组结构)
91
+ if (schemeManager !== null && schemeManager !== void 0 && (_schemeManager$curren = schemeManager.currentScheme) !== null && _schemeManager$curren !== void 0 && _schemeManager$curren.columnConfig) {
92
+ console.log('[ColumnSetting] 使用方案中保存的 columnConfig:', schemeManager.currentScheme.columnConfig);
93
+ return schemeManager.currentScheme.columnConfig;
94
+ }
95
+
96
+ // 如果方案中没有 columnConfig,则从 Grid 读取
97
97
  var columnDefs = gridApi.getColumnDefs() || [];
98
- var columnRowData = [];
99
- var processColumns = function processColumns(columns, parentGroup) {
100
- columns.forEach(function (column) {
101
- if (column.children && column.children.length > 0) {
102
- processColumns(column.children, column.headerName);
103
- } else {
104
- var columnState = columnStates.find(function (state) {
105
- return state.colId === column.field;
106
- });
107
- if (columnState) {
108
- columnRowData.push(_objectSpread({
109
- id: _uniqueId(),
110
- field: column.field,
111
- headerName: column.headerName,
112
- width: columnState.width,
113
- hide: columnState.hide,
114
- cellClass: column.cellClass,
115
- suppressHeaderFilterButton: !column.suppressHeaderFilterButton,
116
- groupName: parentGroup
117
- }, columnState));
98
+ var columnStates = gridApi.getColumnState();
99
+ console.log('[ColumnSetting] 从 Grid 读取列配置:', {
100
+ columnDefs: columnDefs,
101
+ columnStates: columnStates
102
+ });
103
+
104
+ // 将 Grid 状态转换为扁平化配置
105
+ var flatConfig = gridStateToFlatConfig(columnDefs);
106
+
107
+ // 同步列状态(宽度、隐藏等)
108
+ flatConfig = flatConfig.map(function (item) {
109
+ if (item.type === 'column' && item.field) {
110
+ var _state = columnStates.find(function (s) {
111
+ return s.colId === item.field;
112
+ });
113
+ if (_state) {
114
+ // 处理 pinned: 可能是 true/false/null/'left'/'right'
115
+ var pinnedValue = 'notPinned';
116
+ if (_state.pinned === 'left') {
117
+ pinnedValue = 'left';
118
+ } else if (_state.pinned === 'right') {
119
+ pinnedValue = 'right';
120
+ } else if (_state.pinned === true) {
121
+ // true 表示左固定
122
+ pinnedValue = 'left';
118
123
  }
124
+ // null, false, undefined 都表示不固定,默认值已经是 'notPinned'
125
+
126
+ return _objectSpread(_objectSpread({}, item), {}, {
127
+ width: _state.width,
128
+ hide: _state.hide === true,
129
+ // 转换为 boolean
130
+ pinned: pinnedValue
131
+ });
119
132
  }
120
- });
121
- };
122
- processColumns(columnDefs);
123
- return columnRowData;
124
- }, [gridApi, schemeManager === null || schemeManager === void 0 ? void 0 : schemeManager.currentScheme]);
133
+ }
134
+ return item;
135
+ });
136
+ return flatConfig;
137
+ }, [gridApi, schemeManager]);
125
138
 
126
139
  // 创建 Formily Form 实例
127
140
  var form = useMemo(function () {
@@ -144,9 +157,56 @@ var ColumnSetting = function ColumnSetting(_ref) {
144
157
  }
145
158
  }, [schemeManager === null || schemeManager === void 0 ? void 0 : schemeManager.currentScheme, visible, form, getColumnData]);
146
159
 
147
- // 保存列配置
160
+ // 弹窗打开时保存原始列定义,用于取消时恢复
161
+ useEffect(function () {
162
+ if (visible) {
163
+ var currentDefs = gridApi.getColumnDefs();
164
+ setOriginalColumnDefs(currentDefs);
165
+ }
166
+ }, [visible, gridApi]);
167
+
168
+ /**
169
+ * 列配置变更处理 - 实时预览
170
+ * 当用户在配置表格中进行操作时,立即应用到 AG-Grid 以提供实时预览
171
+ */
172
+ var handleColumnChange = useCallback(function (newItems) {
173
+ // 1. 更新表单数据
174
+ form.setValues({
175
+ items: newItems
176
+ });
177
+
178
+ // 2. 转换为 AG-Grid 列定义
179
+ var gridColumnDefs = flatConfigToGridState(newItems);
180
+
181
+ // 3. 立即应用到 Grid(实时预览,不保存到方案)
182
+ if (type !== 'formArrayTable') {
183
+ gridApi.setGridOption("columnDefs", gridColumnDefs);
184
+ }
185
+ }, [form, gridApi, type]);
186
+
187
+ /**
188
+ * 关闭弹窗处理 - 取消时恢复原始状态
189
+ * 如果用户取消操作,恢复到打开弹窗前的列定义状态
190
+ */
191
+ var handleClose = useCallback(function () {
192
+ // 如果有保存的原始状态,恢复它
193
+ if (originalColumnDefs && type !== 'formArrayTable') {
194
+ gridApi.setGridOption("columnDefs", originalColumnDefs);
195
+ }
196
+
197
+ // 清空备份
198
+ setOriginalColumnDefs(null);
199
+
200
+ // 调用父组件的 onClose
201
+ onClose();
202
+ }, [originalColumnDefs, gridApi, type, onClose]);
203
+
204
+ /**
205
+ * 保存列配置
206
+ * 将扁平化配置转换回 Grid State 并应用到 AG-Grid
207
+ */
148
208
  var handleSaveColumns = useCallback( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
149
- var values, processedColumns;
209
+ var values, flatConfig, configToSave, gridColumnDefs;
150
210
  return _regeneratorRuntime().wrap(function _callee2$(_context2) {
151
211
  while (1) switch (_context2.prev = _context2.next) {
152
212
  case 0:
@@ -157,87 +217,122 @@ var ColumnSetting = function ColumnSetting(_ref) {
157
217
  return _context2.abrupt("return");
158
218
  case 2:
159
219
  values = form.values;
160
- onSaveColumnState && onSaveColumnState(values.items);
161
- processedColumns = processColumnGroups(values.items); // 先应用列配置到 Grid
162
- if (type !== 'formArrayTable') {
163
- gridApi.setGridOption("columnDefs", processedColumns);
220
+ flatConfig = values.items || []; // 检查是否是旧版本数据,如果是则先迁移
221
+ configToSave = flatConfig;
222
+ if (isOldSchemeData(flatConfig)) {
223
+ configToSave = migrateOldScheme(flatConfig);
224
+ message.info('检测到旧版本配置,已自动迁移到新格式');
164
225
  }
165
226
 
166
- // 应用列状态(包括顺序、宽度、隐藏等)
167
- gridApi.applyColumnState({
168
- state: processedColumns,
169
- applyOrder: true
227
+ // 转换为 AG-Grid 的列定义
228
+ gridColumnDefs = flatConfigToGridState(configToSave);
229
+ console.log('[ColumnSetting] 保存列配置:', {
230
+ flatConfig: configToSave,
231
+ gridColumnDefs: gridColumnDefs
170
232
  });
171
233
 
234
+ // 先应用列配置到 Grid
235
+ if (type !== 'formArrayTable') {
236
+ gridApi.setGridOption("columnDefs", gridColumnDefs);
237
+ }
238
+
239
+ // 应用列状态(应用列定义后,Grid 会自动更新状态)
240
+
172
241
  // 等待 Grid 状态更新完成后再保存到方案
173
242
  setTimeout( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
174
- var updatedState, defaultScheme, newScheme;
243
+ var updatedState, filterModel, defaultScheme, newScheme;
175
244
  return _regeneratorRuntime().wrap(function _callee$(_context) {
176
245
  while (1) switch (_context.prev = _context.next) {
177
246
  case 0:
178
247
  if (!(schemeManager && gridKey)) {
179
- _context.next = 26;
248
+ _context.next = 28;
180
249
  break;
181
250
  }
182
251
  _context.prev = 1;
183
- // 从 Grid 获取应用后的最新列状态
252
+ // 从 Grid 获取应用后的最新列状态和过滤器状态
184
253
  updatedState = gridApi.getColumnState();
254
+ filterModel = gridApi.getFilterModel();
255
+ console.log('[ColumnSetting] 准备保存到方案:', {
256
+ columnConfig: configToSave,
257
+ columnConfigLength: configToSave.length,
258
+ columnConfigDetail: configToSave.map(function (item, idx) {
259
+ return {
260
+ index: idx,
261
+ type: item.type,
262
+ headerName: item.headerName,
263
+ field: item.field,
264
+ order: item.order,
265
+ parentId: item.parentId
266
+ };
267
+ }),
268
+ filterModel: filterModel
269
+ });
185
270
  if (!schemeManager.currentScheme) {
186
- _context.next = 8;
271
+ _context.next = 10;
187
272
  break;
188
273
  }
189
- _context.next = 6;
274
+ _context.next = 8;
190
275
  return schemeManager.saveScheme({
191
- columnState: updatedState
276
+ columnConfig: configToSave,
277
+ // 保存完整的列配置(包含分组结构)
278
+ filterModel: filterModel
192
279
  });
193
- case 6:
194
- _context.next = 21;
195
- break;
196
280
  case 8:
281
+ _context.next = 23;
282
+ break;
283
+ case 10:
197
284
  // 如果没有激活的方案,查找或创建"默认配置"方案
198
285
  defaultScheme = schemeManager.schemes.find(function (s) {
199
286
  return s.isDefault;
200
287
  });
201
288
  if (!defaultScheme) {
202
- _context.next = 16;
289
+ _context.next = 18;
203
290
  break;
204
291
  }
205
- _context.next = 12;
206
- return schemeManager.loadScheme(defaultScheme.id);
207
- case 12:
208
292
  _context.next = 14;
293
+ return schemeManager.loadScheme(defaultScheme.id);
294
+ case 14:
295
+ _context.next = 16;
209
296
  return schemeManager.saveScheme({
210
- columnState: updatedState
297
+ columnConfig: configToSave,
298
+ // 保存完整的列配置(包含分组结构)
299
+ filterModel: filterModel
211
300
  });
212
- case 14:
213
- _context.next = 21;
214
- break;
215
301
  case 16:
216
- _context.next = 18;
217
- return schemeManager.createScheme('默认配置', updatedState, {
302
+ _context.next = 23;
303
+ break;
304
+ case 18:
305
+ _context.next = 20;
306
+ return schemeManager.createScheme('默认配置', configToSave,
307
+ // 使用 columnConfig 而不是 columnState
308
+ {
218
309
  isDefault: true,
219
- description: '自动保存的默认列配置'
310
+ description: '自动保存的默认列配置',
311
+ filterModel: filterModel
220
312
  });
221
- case 18:
313
+ case 20:
222
314
  newScheme = _context.sent;
223
- _context.next = 21;
315
+ _context.next = 23;
224
316
  return schemeManager.loadScheme(newScheme.id);
225
- case 21:
226
- _context.next = 26;
227
- break;
228
317
  case 23:
229
- _context.prev = 23;
318
+ _context.next = 28;
319
+ break;
320
+ case 25:
321
+ _context.prev = 25;
230
322
  _context.t0 = _context["catch"](1);
231
323
  console.error('[ColumnSetting] 保存列配置到方案失败:', _context.t0);
232
- case 26:
324
+ case 28:
233
325
  case "end":
234
326
  return _context.stop();
235
327
  }
236
- }, _callee, null, [[1, 23]]);
328
+ }, _callee, null, [[1, 25]]);
237
329
  })), 50);
330
+
331
+ // 保存成功后清除备份
332
+ setOriginalColumnDefs(null);
238
333
  message.success('列配置已保存');
239
334
  onClose();
240
- case 10:
335
+ case 13:
241
336
  case "end":
242
337
  return _context2.stop();
243
338
  }
@@ -246,7 +341,7 @@ var ColumnSetting = function ColumnSetting(_ref) {
246
341
 
247
342
  // 保存为新方案
248
343
  var handleSaveScheme = useCallback( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
249
- var columnStateToSave, values, processedColumns, newScheme;
344
+ var columnConfigToSave, values, processedColumns, _values, filterModel, newScheme;
250
345
  return _regeneratorRuntime().wrap(function _callee3$(_context3) {
251
346
  while (1) switch (_context3.prev = _context3.next) {
252
347
  case 0:
@@ -259,37 +354,37 @@ var ColumnSetting = function ColumnSetting(_ref) {
259
354
  case 3:
260
355
  _context3.prev = 3;
261
356
  if (!(activeTab === 'columns' && form)) {
262
- _context3.next = 14;
357
+ _context3.next = 13;
263
358
  break;
264
359
  }
265
360
  values = form.values;
361
+ columnConfigToSave = values.items; // 直接使用 FlatColumnItem[] 数据
266
362
  processedColumns = processColumnGroups(values.items); // 先应用到 Grid
267
363
  if (type !== 'formArrayTable') {
268
364
  gridApi.setGridOption("columnDefs", processedColumns);
269
365
  }
270
- gridApi.applyColumnState({
271
- state: processedColumns,
272
- applyOrder: true
273
- });
274
366
 
275
- // 等待状态更新,然后获取最新状态
367
+ // 等待状态更新
276
368
  _context3.next = 11;
277
369
  return new Promise(function (resolve) {
278
370
  return setTimeout(resolve, 50);
279
371
  });
280
372
  case 11:
281
- columnStateToSave = gridApi.getColumnState();
282
373
  _context3.next = 15;
283
374
  break;
284
- case 14:
285
- // 如果在"方案管理"标签页,直接获取当前 Grid 状态
286
- columnStateToSave = gridApi.getColumnState();
375
+ case 13:
376
+ // 如果在"方案管理"标签页,使用当前表单数据
377
+ _values = form === null || form === void 0 ? void 0 : form.values;
378
+ columnConfigToSave = (_values === null || _values === void 0 ? void 0 : _values.items) || [];
287
379
  case 15:
288
- _context3.next = 17;
289
- return schemeManager === null || schemeManager === void 0 ? void 0 : schemeManager.createScheme(schemeName.trim(), columnStateToSave, {
290
- description: schemeDescription.trim() || "\u521B\u5EFA\u4E8E ".concat(new Date().toLocaleString())
380
+ // 获取过滤器模型
381
+ filterModel = gridApi.getFilterModel();
382
+ _context3.next = 18;
383
+ return schemeManager === null || schemeManager === void 0 ? void 0 : schemeManager.createScheme(schemeName.trim(), columnConfigToSave, {
384
+ description: schemeDescription.trim() || "\u521B\u5EFA\u4E8E ".concat(new Date().toLocaleString()),
385
+ filterModel: filterModel
291
386
  });
292
- case 17:
387
+ case 18:
293
388
  newScheme = _context3.sent;
294
389
  message.success('方案保存成功');
295
390
  setSaveSchemeVisible(false);
@@ -298,17 +393,17 @@ var ColumnSetting = function ColumnSetting(_ref) {
298
393
 
299
394
  // 切换到方案管理标签页,显示新创建的方案
300
395
  setActiveTab('schemes');
301
- _context3.next = 28;
396
+ _context3.next = 29;
302
397
  break;
303
- case 25:
304
- _context3.prev = 25;
398
+ case 26:
399
+ _context3.prev = 26;
305
400
  _context3.t0 = _context3["catch"](3);
306
401
  message.error(_context3.t0.message || '保存方案失败');
307
- case 28:
402
+ case 29:
308
403
  case "end":
309
404
  return _context3.stop();
310
405
  }
311
- }, _callee3, null, [[3, 25]]);
406
+ }, _callee3, null, [[3, 26]]);
312
407
  })), [gridApi, schemeManager, schemeName, schemeDescription, activeTab, form, type]);
313
408
 
314
409
  // 加载方案
@@ -566,13 +661,10 @@ var ColumnSetting = function ColumnSetting(_ref) {
566
661
  }))));
567
662
  }
568
663
  }];
569
- var tableProps = {
570
- onRowDrag: true
571
- };
572
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Modal, {
664
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(DraggableModal, {
573
665
  title: "\u5217\u65B9\u6848\u7BA1\u7406",
574
666
  open: visible,
575
- onCancel: onClose,
667
+ onCancel: handleClose,
576
668
  width: 1100,
577
669
  footer: null,
578
670
  destroyOnClose: true
@@ -583,7 +675,7 @@ var ColumnSetting = function ColumnSetting(_ref) {
583
675
  onClick: onClose
584
676
  }, "\u53D6\u6D88"), /*#__PURE__*/React.createElement(Button, {
585
677
  onClick: handleSaveColumns
586
- }, "\u4FDD\u5B58\u914D\u7F6E"), /*#__PURE__*/React.createElement(Button, {
678
+ }, "\u4FDD\u5B58\u914D\u7F6E"), (type !== 'formArrayTable' || schemeManager) && /*#__PURE__*/React.createElement(Button, {
587
679
  type: "primary",
588
680
  icon: /*#__PURE__*/React.createElement(SaveOutlined, null),
589
681
  onClick: function onClick() {
@@ -623,143 +715,11 @@ var ColumnSetting = function ColumnSetting(_ref) {
623
715
  style: {
624
716
  color: '#666'
625
717
  }
626
- }, "\u672A\u9009\u62E9\u65B9\u6848 - \u4F7F\u7528\u9ED8\u8BA4\u914D\u7F6E")), /*#__PURE__*/React.createElement(Form, {
627
- form: form
628
- }, /*#__PURE__*/React.createElement(FormLayout, null, /*#__PURE__*/React.createElement(SchemaField, null, /*#__PURE__*/React.createElement(SchemaField.Void, {
629
- "x-component": "FormGrid",
630
- "x-component-props": {
631
- maxColumns: [1, 3],
632
- strictAutoFit: true
633
- }
634
- }, /*#__PURE__*/React.createElement(SchemaField.Array, {
635
- name: "items",
636
- title: "",
637
- "x-component": "ArrayTable",
638
- "x-component-props": tableProps,
639
- "x-decorator": "FormItem",
640
- "x-decorator-props": {
641
- gridSpan: 3
642
- }
643
- }, /*#__PURE__*/React.createElement(SchemaField.Object, null, /*#__PURE__*/React.createElement(SchemaField.Void, {
644
- "x-component": "ArrayTable.Column",
645
- "x-component-props": {
646
- width: 80,
647
- title: '排序'
648
- }
649
- }, /*#__PURE__*/React.createElement(SchemaField.Void, {
650
- "x-decorator": "FormItem",
651
- required: true,
652
- "x-component": "ArrayTable.SortHandle"
653
- })), /*#__PURE__*/React.createElement(SchemaField.Void, {
654
- "x-component": "ArrayTable.Column",
655
- "x-component-props": {
656
- width: 180,
657
- title: '列名'
658
- }
659
- }, /*#__PURE__*/React.createElement(SchemaField.String, {
660
- name: "headerName",
661
- "x-decorator": "FormItem",
662
- "x-component": "Input",
663
- "x-read-pretty": true
664
- })), /*#__PURE__*/React.createElement(SchemaField.Void, {
665
- "x-component": "ArrayTable.Column",
666
- "x-component-props": {
667
- width: 120,
668
- title: '分组名称'
669
- }
670
- }, /*#__PURE__*/React.createElement(SchemaField.String, {
671
- name: "groupName",
672
- "x-decorator": "FormItem",
673
- "x-component": "Input"
674
- })), /*#__PURE__*/React.createElement(SchemaField.Void, {
675
- "x-component": "ArrayTable.Column",
676
- "x-component-props": {
677
- width: 80,
678
- title: '列过滤'
679
- }
680
- }, /*#__PURE__*/React.createElement(SchemaField.String, {
681
- name: "suppressHeaderFilterButton",
682
- "x-decorator": "FormItem",
683
- "x-component": "Switch"
684
- })), /*#__PURE__*/React.createElement(SchemaField.Void, {
685
- "x-component": "ArrayTable.Column",
686
- "x-component-props": {
687
- width: 120,
688
- title: '内容布局'
689
- }
690
- }, /*#__PURE__*/React.createElement(SchemaField.String, {
691
- name: "cellClass",
692
- "x-decorator": "FormItem",
693
- "x-component": "Select",
694
- default: "custom-cell-left",
695
- enum: [{
696
- value: 'custom-cell-left',
697
- label: '左对齐'
698
- }, {
699
- value: 'custom-cell-right',
700
- label: '右对齐'
701
- }, {
702
- value: 'custom-cell-centered',
703
- label: '居中对齐'
704
- }]
705
- })), /*#__PURE__*/React.createElement(SchemaField.Void, {
706
- "x-component": "ArrayTable.Column",
707
- "x-component-props": {
708
- width: 100,
709
- title: '宽度'
710
- }
711
- }, /*#__PURE__*/React.createElement(SchemaField.String, {
712
- name: "width",
713
- "x-decorator": "FormItem",
714
- "x-component": "NumberPicker"
715
- })), /*#__PURE__*/React.createElement(SchemaField.Void, {
716
- "x-component": "ArrayTable.Column",
717
- "x-component-props": {
718
- width: 100,
719
- title: '占满'
720
- }
721
- }, /*#__PURE__*/React.createElement(SchemaField.String, {
722
- name: "flex",
723
- "x-decorator": "FormItem",
724
- "x-component": "Select",
725
- enum: [{
726
- value: 1,
727
- label: '占满'
728
- }, {
729
- value: 0,
730
- label: '不占满'
731
- }]
732
- })), /*#__PURE__*/React.createElement(SchemaField.Void, {
733
- "x-component": "ArrayTable.Column",
734
- "x-component-props": {
735
- width: 100,
736
- title: '固定位置'
737
- }
738
- }, /*#__PURE__*/React.createElement(SchemaField.String, {
739
- name: "pinned",
740
- "x-decorator": "FormItem",
741
- "x-component": "Select",
742
- enum: [{
743
- value: 'left',
744
- label: '左固定'
745
- }, {
746
- value: 'right',
747
- label: '右固定'
748
- }, {
749
- value: 'notPinned',
750
- label: '不固定'
751
- }]
752
- })), /*#__PURE__*/React.createElement(SchemaField.Void, {
753
- "x-component": "ArrayTable.Column",
754
- "x-component-props": {
755
- width: 100,
756
- title: '隐藏'
757
- }
758
- }, /*#__PURE__*/React.createElement(SchemaField.String, {
759
- name: "hide",
760
- "x-decorator": "FormItem",
761
- "x-component": "Switch"
762
- }))))))))), schemeManager && /*#__PURE__*/React.createElement(TabPane, {
718
+ }, "\u672A\u9009\u62E9\u65B9\u6848 - \u4F7F\u7528\u9ED8\u8BA4\u914D\u7F6E")), /*#__PURE__*/React.createElement(ColumnConfigTable, {
719
+ items: form.values.items || [],
720
+ onChange: handleColumnChange,
721
+ simple: type === 'formArrayTable'
722
+ })), schemeManager && type !== 'formArrayTable' && /*#__PURE__*/React.createElement(TabPane, {
763
723
  tab: "\u65B9\u6848\u7BA1\u7406",
764
724
  key: "schemes"
765
725
  }, /*#__PURE__*/React.createElement("div", {
@@ -0,0 +1,15 @@
1
+ /**
2
+ * 移动节点弹窗组件
3
+ * 用于选择目标父节点,支持移动到根级别或其他分组下
4
+ */
5
+ import React from 'react';
6
+ import type { FlatColumnItem } from './columnGroupTypes';
7
+ interface MoveNodeModalProps {
8
+ visible: boolean;
9
+ currentNode: FlatColumnItem | null;
10
+ allItems: FlatColumnItem[];
11
+ onCancel: () => void;
12
+ onConfirm: (targetParentId: string | undefined) => void;
13
+ }
14
+ declare const MoveNodeModal: React.FC<MoveNodeModalProps>;
15
+ export default MoveNodeModal;