@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
|
@@ -0,0 +1,940 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
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); }
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
var _antd = require("antd");
|
|
10
|
+
var _icons = require("@ant-design/icons");
|
|
11
|
+
var _reactDnd = require("react-dnd");
|
|
12
|
+
var _reactDndHtml5Backend = require("react-dnd-html5-backend");
|
|
13
|
+
var _columnGroupUtils = require("./columnGroupUtils");
|
|
14
|
+
var _MoveNodeModal = _interopRequireDefault(require("./MoveNodeModal"));
|
|
15
|
+
var _excluded = ["record", "index", "moveRow", "children"];
|
|
16
|
+
/**
|
|
17
|
+
* 列配置表格组件
|
|
18
|
+
* 使用简单的 Ant Design Table 替代 Formily ArrayTable
|
|
19
|
+
* 通过 React useState 直接管理数据状态,确保 type 字段不会丢失
|
|
20
|
+
*/
|
|
21
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
22
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
23
|
+
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; }
|
|
24
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
25
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
26
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
27
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
28
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
29
|
+
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
30
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
31
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
32
|
+
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
33
|
+
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); }
|
|
34
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
35
|
+
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."); }
|
|
36
|
+
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); }
|
|
37
|
+
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; }
|
|
38
|
+
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; } }
|
|
39
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
40
|
+
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; }
|
|
41
|
+
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; }
|
|
42
|
+
var DRAG_TYPE = 'COLUMN_ROW';
|
|
43
|
+
/**
|
|
44
|
+
* 可拖拽的表格行组件
|
|
45
|
+
*/
|
|
46
|
+
var DraggableRow = function DraggableRow(_ref) {
|
|
47
|
+
var record = _ref.record,
|
|
48
|
+
index = _ref.index,
|
|
49
|
+
moveRow = _ref.moveRow,
|
|
50
|
+
children = _ref.children,
|
|
51
|
+
restProps = _objectWithoutProperties(_ref, _excluded);
|
|
52
|
+
var ref = (0, _react.useRef)(null);
|
|
53
|
+
var _useDrag = (0, _reactDnd.useDrag)({
|
|
54
|
+
type: DRAG_TYPE,
|
|
55
|
+
item: {
|
|
56
|
+
id: record.id,
|
|
57
|
+
index: index,
|
|
58
|
+
parentId: record.parentId,
|
|
59
|
+
level: record.level
|
|
60
|
+
},
|
|
61
|
+
collect: function collect(monitor) {
|
|
62
|
+
return {
|
|
63
|
+
isDragging: monitor.isDragging()
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
}),
|
|
67
|
+
_useDrag2 = _slicedToArray(_useDrag, 2),
|
|
68
|
+
isDragging = _useDrag2[0].isDragging,
|
|
69
|
+
drag = _useDrag2[1];
|
|
70
|
+
var _useDrop = (0, _reactDnd.useDrop)({
|
|
71
|
+
accept: DRAG_TYPE,
|
|
72
|
+
hover: function hover(item, monitor) {
|
|
73
|
+
if (!ref.current) return;
|
|
74
|
+
var dragIndex = item.index;
|
|
75
|
+
var hoverIndex = index;
|
|
76
|
+
if (dragIndex === hoverIndex) return;
|
|
77
|
+
|
|
78
|
+
// 只允许同级别、同父节点的节点之间拖拽
|
|
79
|
+
if (item.parentId !== record.parentId || item.level !== record.level) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
var hoverBoundingRect = ref.current.getBoundingClientRect();
|
|
83
|
+
var hoverMiddleY = (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2;
|
|
84
|
+
var clientOffset = monitor.getClientOffset();
|
|
85
|
+
if (!clientOffset) return;
|
|
86
|
+
var hoverClientY = clientOffset.y - hoverBoundingRect.top;
|
|
87
|
+
|
|
88
|
+
// 向下拖拽时,只有当鼠标超过中线才触发
|
|
89
|
+
if (dragIndex < hoverIndex && hoverClientY < hoverMiddleY) return;
|
|
90
|
+
// 向上拖拽时,只有当鼠标超过中线才触发
|
|
91
|
+
if (dragIndex > hoverIndex && hoverClientY > hoverMiddleY) return;
|
|
92
|
+
moveRow(dragIndex, hoverIndex, item, {
|
|
93
|
+
id: record.id,
|
|
94
|
+
index: hoverIndex,
|
|
95
|
+
parentId: record.parentId,
|
|
96
|
+
level: record.level
|
|
97
|
+
});
|
|
98
|
+
item.index = hoverIndex;
|
|
99
|
+
}
|
|
100
|
+
}),
|
|
101
|
+
_useDrop2 = _slicedToArray(_useDrop, 2),
|
|
102
|
+
drop = _useDrop2[1];
|
|
103
|
+
drag(drop(ref));
|
|
104
|
+
return /*#__PURE__*/_react.default.createElement("tr", _extends({
|
|
105
|
+
ref: ref
|
|
106
|
+
}, restProps, {
|
|
107
|
+
style: {
|
|
108
|
+
opacity: isDragging ? 0.5 : 1,
|
|
109
|
+
cursor: 'move'
|
|
110
|
+
}
|
|
111
|
+
}), children);
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* 列配置表格组件
|
|
116
|
+
*/
|
|
117
|
+
var ColumnConfigTable = function ColumnConfigTable(_ref2) {
|
|
118
|
+
var items = _ref2.items,
|
|
119
|
+
onChange = _ref2.onChange,
|
|
120
|
+
_ref2$simple = _ref2.simple,
|
|
121
|
+
simple = _ref2$simple === void 0 ? false : _ref2$simple;
|
|
122
|
+
// 本地状态管理(用于优化性能)
|
|
123
|
+
var _useState = (0, _react.useState)(items),
|
|
124
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
125
|
+
localItems = _useState2[0],
|
|
126
|
+
setLocalItems = _useState2[1];
|
|
127
|
+
|
|
128
|
+
// 移动节点弹窗状态
|
|
129
|
+
var _useState3 = (0, _react.useState)(false),
|
|
130
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
131
|
+
moveModalVisible = _useState4[0],
|
|
132
|
+
setMoveModalVisible = _useState4[1];
|
|
133
|
+
var _useState5 = (0, _react.useState)(null),
|
|
134
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
135
|
+
currentMoveNode = _useState6[0],
|
|
136
|
+
setCurrentMoveNode = _useState6[1];
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* 同步更新本地状态和通知父组件
|
|
140
|
+
*/
|
|
141
|
+
var updateItems = (0, _react.useCallback)(function (newItems) {
|
|
142
|
+
// 重新计算 order
|
|
143
|
+
(0, _columnGroupUtils.reorderItems)(newItems);
|
|
144
|
+
console.log('[ColumnConfigTable] updateItems 调用,重新计算 order 后:', {
|
|
145
|
+
itemsCount: newItems.length,
|
|
146
|
+
items: newItems.map(function (item, idx) {
|
|
147
|
+
return {
|
|
148
|
+
index: idx,
|
|
149
|
+
id: item.id,
|
|
150
|
+
type: item.type,
|
|
151
|
+
headerName: item.headerName,
|
|
152
|
+
field: item.field,
|
|
153
|
+
order: item.order,
|
|
154
|
+
parentId: item.parentId
|
|
155
|
+
};
|
|
156
|
+
})
|
|
157
|
+
});
|
|
158
|
+
setLocalItems(_toConsumableArray(newItems));
|
|
159
|
+
onChange(_toConsumableArray(newItems));
|
|
160
|
+
}, [onChange]);
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* 切换分组的折叠/展开状态
|
|
164
|
+
*/
|
|
165
|
+
var handleToggleCollapse = (0, _react.useCallback)(function (nodeId) {
|
|
166
|
+
var newItems = localItems.map(function (item) {
|
|
167
|
+
if (item.id === nodeId && item.type === 'group') {
|
|
168
|
+
return _objectSpread(_objectSpread({}, item), {}, {
|
|
169
|
+
_collapsed: !item._collapsed
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
return item;
|
|
173
|
+
});
|
|
174
|
+
setLocalItems(newItems);
|
|
175
|
+
// 注意: _collapsed 是临时UI状态,不需要通知父组件持久化
|
|
176
|
+
}, [localItems]);
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* 检查节点是否应该被隐藏(因为祖先节点折叠)
|
|
180
|
+
*/
|
|
181
|
+
var isNodeHidden = (0, _react.useCallback)(function (item) {
|
|
182
|
+
var currentId = item.parentId;
|
|
183
|
+
while (currentId) {
|
|
184
|
+
var parent = localItems.find(function (i) {
|
|
185
|
+
return i.id === currentId;
|
|
186
|
+
});
|
|
187
|
+
if (!parent) break;
|
|
188
|
+
if (parent.type === 'group' && parent._collapsed) {
|
|
189
|
+
return true;
|
|
190
|
+
}
|
|
191
|
+
currentId = parent.parentId;
|
|
192
|
+
}
|
|
193
|
+
return false;
|
|
194
|
+
}, [localItems]);
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* 获取可见的节点列表(过滤掉被折叠隐藏的节点)
|
|
198
|
+
*/
|
|
199
|
+
var visibleItems = (0, _react.useMemo)(function () {
|
|
200
|
+
return localItems.filter(function (item) {
|
|
201
|
+
return !isNodeHidden(item);
|
|
202
|
+
});
|
|
203
|
+
}, [localItems, isNodeHidden]);
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* 添加根级别分组
|
|
207
|
+
*/
|
|
208
|
+
var handleAddRootGroup = (0, _react.useCallback)(function () {
|
|
209
|
+
var newGroup = {
|
|
210
|
+
id: (0, _columnGroupUtils.generateId)(),
|
|
211
|
+
type: 'group',
|
|
212
|
+
// ⚠️ 关键:明确设置 type
|
|
213
|
+
level: 0,
|
|
214
|
+
order: localItems.length,
|
|
215
|
+
headerName: '新分组',
|
|
216
|
+
groupId: (0, _columnGroupUtils.generateId)(),
|
|
217
|
+
_isNew: true
|
|
218
|
+
};
|
|
219
|
+
updateItems([].concat(_toConsumableArray(localItems), [newGroup]));
|
|
220
|
+
_antd.message.success('已添加根级别分组');
|
|
221
|
+
}, [localItems, updateItems]);
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* 为指定分组添加子分组
|
|
225
|
+
*/
|
|
226
|
+
var handleAddChildGroup = (0, _react.useCallback)(function (parentId) {
|
|
227
|
+
var parentIndex = localItems.findIndex(function (item) {
|
|
228
|
+
return item.id === parentId;
|
|
229
|
+
});
|
|
230
|
+
if (parentIndex === -1) {
|
|
231
|
+
_antd.message.error('未找到父节点');
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
var parent = localItems[parentIndex];
|
|
235
|
+
if (parent.type !== 'group') {
|
|
236
|
+
_antd.message.error('只能为分组添加子分组');
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
// 找到插入位置(父节点的所有后代节点之后)
|
|
241
|
+
var insertIndex = (0, _columnGroupUtils.findLastDescendantIndex)(localItems, parentId) + 1;
|
|
242
|
+
var newGroup = {
|
|
243
|
+
id: (0, _columnGroupUtils.generateId)(),
|
|
244
|
+
type: 'group',
|
|
245
|
+
// ⚠️ 关键:明确设置 type
|
|
246
|
+
parentId: parentId,
|
|
247
|
+
level: parent.level + 1,
|
|
248
|
+
order: insertIndex,
|
|
249
|
+
headerName: '新子分组',
|
|
250
|
+
groupId: (0, _columnGroupUtils.generateId)(),
|
|
251
|
+
_isNew: true
|
|
252
|
+
};
|
|
253
|
+
var newItems = _toConsumableArray(localItems);
|
|
254
|
+
newItems.splice(insertIndex, 0, newGroup);
|
|
255
|
+
updateItems(newItems);
|
|
256
|
+
_antd.message.success("\u5DF2\u4E3A\u5206\u7EC4\"".concat(parent.headerName, "\"\u6DFB\u52A0\u5B50\u5206\u7EC4"));
|
|
257
|
+
}, [localItems, updateItems]);
|
|
258
|
+
|
|
259
|
+
/**
|
|
260
|
+
* 打开移动节点弹窗
|
|
261
|
+
*/
|
|
262
|
+
var handleOpenMoveModal = (0, _react.useCallback)(function (node) {
|
|
263
|
+
console.log('[ColumnConfigTable] 打开移动弹窗:', {
|
|
264
|
+
node: {
|
|
265
|
+
id: node.id,
|
|
266
|
+
headerName: node.headerName,
|
|
267
|
+
type: node.type,
|
|
268
|
+
parentId: node.parentId,
|
|
269
|
+
level: node.level
|
|
270
|
+
},
|
|
271
|
+
allItems: localItems.map(function (n) {
|
|
272
|
+
return {
|
|
273
|
+
id: n.id,
|
|
274
|
+
headerName: n.headerName,
|
|
275
|
+
type: n.type,
|
|
276
|
+
parentId: n.parentId,
|
|
277
|
+
level: n.level
|
|
278
|
+
};
|
|
279
|
+
})
|
|
280
|
+
});
|
|
281
|
+
setCurrentMoveNode(node);
|
|
282
|
+
setMoveModalVisible(true);
|
|
283
|
+
}, [localItems]);
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* 关闭移动节点弹窗
|
|
287
|
+
*/
|
|
288
|
+
var handleCloseMoveModal = (0, _react.useCallback)(function () {
|
|
289
|
+
setMoveModalVisible(false);
|
|
290
|
+
setCurrentMoveNode(null);
|
|
291
|
+
}, []);
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* 确认移动节点
|
|
295
|
+
*/
|
|
296
|
+
var handleConfirmMove = (0, _react.useCallback)(function (targetParentId) {
|
|
297
|
+
if (!currentMoveNode) return;
|
|
298
|
+
var nodeId = currentMoveNode.id;
|
|
299
|
+
|
|
300
|
+
// 1. 验证:不能移动到自己的后代节点下
|
|
301
|
+
if (targetParentId) {
|
|
302
|
+
var checkId = targetParentId;
|
|
303
|
+
while (checkId) {
|
|
304
|
+
if (checkId === nodeId) {
|
|
305
|
+
_antd.message.error('不能将节点移动到自己的后代节点下');
|
|
306
|
+
return;
|
|
307
|
+
}
|
|
308
|
+
var parent = localItems.find(function (item) {
|
|
309
|
+
return item.id === checkId;
|
|
310
|
+
});
|
|
311
|
+
checkId = parent === null || parent === void 0 ? void 0 : parent.parentId;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
// 2. 验证:不能移动到同一个父节点下(无意义操作)
|
|
316
|
+
if (currentMoveNode.parentId === targetParentId) {
|
|
317
|
+
_antd.message.warning('节点已经在该父节点下,无需移动');
|
|
318
|
+
handleCloseMoveModal();
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
// 3. 执行移动
|
|
323
|
+
var newItems = _toConsumableArray(localItems);
|
|
324
|
+
|
|
325
|
+
// 3.1 收集要移动的节点(包括所有后代)
|
|
326
|
+
var nodesToMove = [];
|
|
327
|
+
var collectNodes = function collectNodes(id) {
|
|
328
|
+
var node = newItems.find(function (item) {
|
|
329
|
+
return item.id === id;
|
|
330
|
+
});
|
|
331
|
+
if (!node) return;
|
|
332
|
+
nodesToMove.push(node);
|
|
333
|
+
|
|
334
|
+
// 递归收集子节点
|
|
335
|
+
newItems.forEach(function (item) {
|
|
336
|
+
if (item.parentId === id) {
|
|
337
|
+
collectNodes(item.id);
|
|
338
|
+
}
|
|
339
|
+
});
|
|
340
|
+
};
|
|
341
|
+
collectNodes(nodeId);
|
|
342
|
+
console.log('[ColumnConfigTable] 移动节点:', {
|
|
343
|
+
nodeId: nodeId,
|
|
344
|
+
targetParentId: targetParentId,
|
|
345
|
+
nodesToMoveCount: nodesToMove.length,
|
|
346
|
+
nodesToMove: nodesToMove.map(function (n) {
|
|
347
|
+
return {
|
|
348
|
+
id: n.id,
|
|
349
|
+
headerName: n.headerName,
|
|
350
|
+
parentId: n.parentId
|
|
351
|
+
};
|
|
352
|
+
})
|
|
353
|
+
});
|
|
354
|
+
|
|
355
|
+
// 3.2 从原位置移除这些节点
|
|
356
|
+
var remainingItems = newItems.filter(function (item) {
|
|
357
|
+
return !nodesToMove.some(function (n) {
|
|
358
|
+
return n.id === item.id;
|
|
359
|
+
});
|
|
360
|
+
});
|
|
361
|
+
|
|
362
|
+
// 3.3 计算新的层级
|
|
363
|
+
var targetParent = targetParentId ? remainingItems.find(function (item) {
|
|
364
|
+
return item.id === targetParentId;
|
|
365
|
+
}) : undefined;
|
|
366
|
+
var newLevel = targetParent ? targetParent.level + 1 : 0;
|
|
367
|
+
var levelDelta = newLevel - currentMoveNode.level;
|
|
368
|
+
|
|
369
|
+
// 3.4 更新节点的 parentId 和 level
|
|
370
|
+
var updatedNodesToMove = nodesToMove.map(function (node) {
|
|
371
|
+
return _objectSpread(_objectSpread({}, node), {}, {
|
|
372
|
+
parentId: node.id === nodeId ? targetParentId : node.parentId,
|
|
373
|
+
level: node.level + levelDelta
|
|
374
|
+
});
|
|
375
|
+
});
|
|
376
|
+
|
|
377
|
+
// 3.5 找到插入位置
|
|
378
|
+
var insertIndex;
|
|
379
|
+
if (targetParentId) {
|
|
380
|
+
// 插入到目标父节点的所有后代之后
|
|
381
|
+
insertIndex = (0, _columnGroupUtils.findLastDescendantIndex)(remainingItems, targetParentId) + 1;
|
|
382
|
+
} else {
|
|
383
|
+
// 插入到根级别的末尾
|
|
384
|
+
insertIndex = remainingItems.length;
|
|
385
|
+
}
|
|
386
|
+
console.log('[ColumnConfigTable] 插入位置:', {
|
|
387
|
+
insertIndex: insertIndex,
|
|
388
|
+
targetParentId: targetParentId,
|
|
389
|
+
remainingItemsCount: remainingItems.length,
|
|
390
|
+
updatedNodesToMove: updatedNodesToMove.map(function (n) {
|
|
391
|
+
return {
|
|
392
|
+
id: n.id,
|
|
393
|
+
headerName: n.headerName,
|
|
394
|
+
parentId: n.parentId,
|
|
395
|
+
level: n.level
|
|
396
|
+
};
|
|
397
|
+
})
|
|
398
|
+
});
|
|
399
|
+
|
|
400
|
+
// 3.6 插入节点
|
|
401
|
+
remainingItems.splice.apply(remainingItems, [insertIndex, 0].concat(_toConsumableArray(updatedNodesToMove)));
|
|
402
|
+
|
|
403
|
+
// 3.7 重新计算 order
|
|
404
|
+
(0, _columnGroupUtils.reorderItems)(remainingItems);
|
|
405
|
+
console.log('[ColumnConfigTable] 移动完成后的数组:', {
|
|
406
|
+
totalCount: remainingItems.length,
|
|
407
|
+
items: remainingItems.map(function (n) {
|
|
408
|
+
return {
|
|
409
|
+
id: n.id,
|
|
410
|
+
headerName: n.headerName,
|
|
411
|
+
parentId: n.parentId,
|
|
412
|
+
level: n.level,
|
|
413
|
+
order: n.order
|
|
414
|
+
};
|
|
415
|
+
})
|
|
416
|
+
});
|
|
417
|
+
updateItems(remainingItems);
|
|
418
|
+
_antd.message.success("\u5DF2\u5C06\"".concat(currentMoveNode.headerName, "\"\u79FB\u52A8\u5230\u65B0\u4F4D\u7F6E"));
|
|
419
|
+
handleCloseMoveModal();
|
|
420
|
+
}, [currentMoveNode, localItems, updateItems, handleCloseMoveModal]);
|
|
421
|
+
|
|
422
|
+
/**
|
|
423
|
+
* 删除节点(及其所有子节点)
|
|
424
|
+
*/
|
|
425
|
+
var handleDeleteNode = (0, _react.useCallback)(function (nodeId) {
|
|
426
|
+
var nodeIndex = localItems.findIndex(function (item) {
|
|
427
|
+
return item.id === nodeId;
|
|
428
|
+
});
|
|
429
|
+
if (nodeIndex === -1) {
|
|
430
|
+
_antd.message.error('未找到要删除的节点');
|
|
431
|
+
return;
|
|
432
|
+
}
|
|
433
|
+
var node = localItems[nodeIndex];
|
|
434
|
+
|
|
435
|
+
// 查找所有需要删除的节点(包括所有后代)
|
|
436
|
+
var toDelete = [nodeId];
|
|
437
|
+
var findDescendants = function findDescendants(parentId) {
|
|
438
|
+
localItems.forEach(function (item) {
|
|
439
|
+
if (item.parentId === parentId) {
|
|
440
|
+
toDelete.push(item.id);
|
|
441
|
+
if (item.type === 'group') {
|
|
442
|
+
findDescendants(item.id);
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
});
|
|
446
|
+
};
|
|
447
|
+
if (node.type === 'group') {
|
|
448
|
+
findDescendants(nodeId);
|
|
449
|
+
}
|
|
450
|
+
var newItems = localItems.filter(function (item) {
|
|
451
|
+
return !toDelete.includes(item.id);
|
|
452
|
+
});
|
|
453
|
+
updateItems(newItems);
|
|
454
|
+
_antd.message.success(node.type === 'group' ? "\u5DF2\u5220\u9664\u5206\u7EC4\"".concat(node.headerName, "\"\u53CA\u5176 ").concat(toDelete.length - 1, " \u4E2A\u5B50\u8282\u70B9") : "\u5DF2\u5220\u9664\u5217\"".concat(node.headerName, "\""));
|
|
455
|
+
}, [localItems, updateItems]);
|
|
456
|
+
|
|
457
|
+
/**
|
|
458
|
+
* 更新节点属性
|
|
459
|
+
*/
|
|
460
|
+
var handleUpdateNode = (0, _react.useCallback)(function (nodeId, updates) {
|
|
461
|
+
var newItems = localItems.map(function (item) {
|
|
462
|
+
if (item.id === nodeId) {
|
|
463
|
+
// ⚠️ 关键:确保 type 字段不会被覆盖
|
|
464
|
+
return _objectSpread(_objectSpread(_objectSpread({}, item), updates), {}, {
|
|
465
|
+
type: item.type,
|
|
466
|
+
// 强制保留原始 type
|
|
467
|
+
_isNew: false // 清除新建标记
|
|
468
|
+
});
|
|
469
|
+
}
|
|
470
|
+
return item;
|
|
471
|
+
});
|
|
472
|
+
updateItems(newItems);
|
|
473
|
+
}, [localItems, updateItems]);
|
|
474
|
+
|
|
475
|
+
/**
|
|
476
|
+
* 处理拖拽排序
|
|
477
|
+
*/
|
|
478
|
+
var handleDragSort = (0, _react.useCallback)(function (dragIndex, hoverIndex, dragItem, hoverItem) {
|
|
479
|
+
// 只有同级别、同父节点的节点才能拖拽排序
|
|
480
|
+
if (dragItem.parentId !== hoverItem.parentId || dragItem.level !== hoverItem.level) {
|
|
481
|
+
return;
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
// ✅ 关键修复: 通过 ID 找到在 localItems 中的真实索引
|
|
485
|
+
// dragIndex 和 hoverIndex 是基于 visibleItems 的索引,不能直接用于 localItems
|
|
486
|
+
var realDragIndex = localItems.findIndex(function (item) {
|
|
487
|
+
return item.id === dragItem.id;
|
|
488
|
+
});
|
|
489
|
+
var realHoverIndex = localItems.findIndex(function (item) {
|
|
490
|
+
return item.id === hoverItem.id;
|
|
491
|
+
});
|
|
492
|
+
if (realDragIndex === -1 || realHoverIndex === -1) {
|
|
493
|
+
console.error('[ColumnConfigTable] 找不到节点索引:', {
|
|
494
|
+
dragItem: dragItem,
|
|
495
|
+
hoverItem: hoverItem
|
|
496
|
+
});
|
|
497
|
+
return;
|
|
498
|
+
}
|
|
499
|
+
var newItems = _toConsumableArray(localItems);
|
|
500
|
+
var draggedItem = newItems[realDragIndex];
|
|
501
|
+
|
|
502
|
+
// 如果是分组节点,需要收集所有后代节点一起移动
|
|
503
|
+
var nodesToMove = [draggedItem];
|
|
504
|
+
if (draggedItem.type === 'group') {
|
|
505
|
+
// 递归收集所有后代节点
|
|
506
|
+
var collectDescendants = function collectDescendants(parentId) {
|
|
507
|
+
newItems.forEach(function (item) {
|
|
508
|
+
if (item.parentId === parentId) {
|
|
509
|
+
nodesToMove.push(item);
|
|
510
|
+
if (item.type === 'group') {
|
|
511
|
+
collectDescendants(item.id);
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
});
|
|
515
|
+
};
|
|
516
|
+
collectDescendants(draggedItem.id);
|
|
517
|
+
}
|
|
518
|
+
console.log('[ColumnConfigTable] 拖动排序:', {
|
|
519
|
+
dragIndex: dragIndex,
|
|
520
|
+
hoverIndex: hoverIndex,
|
|
521
|
+
realDragIndex: realDragIndex,
|
|
522
|
+
realHoverIndex: realHoverIndex,
|
|
523
|
+
draggedItem: {
|
|
524
|
+
id: draggedItem.id,
|
|
525
|
+
headerName: draggedItem.headerName,
|
|
526
|
+
type: draggedItem.type
|
|
527
|
+
},
|
|
528
|
+
nodesToMoveCount: nodesToMove.length,
|
|
529
|
+
nodesToMove: nodesToMove.map(function (n) {
|
|
530
|
+
return {
|
|
531
|
+
id: n.id,
|
|
532
|
+
headerName: n.headerName,
|
|
533
|
+
parentId: n.parentId
|
|
534
|
+
};
|
|
535
|
+
})
|
|
536
|
+
});
|
|
537
|
+
|
|
538
|
+
// 从原数组中移除所有要移动的节点
|
|
539
|
+
var remainingItems = newItems.filter(function (item) {
|
|
540
|
+
return !nodesToMove.some(function (n) {
|
|
541
|
+
return n.id === item.id;
|
|
542
|
+
});
|
|
543
|
+
});
|
|
544
|
+
|
|
545
|
+
// 计算新的插入位置
|
|
546
|
+
// 如果拖动到下方,需要调整插入索引(因为移除了节点)
|
|
547
|
+
var adjustedHoverIndex = realHoverIndex;
|
|
548
|
+
if (realDragIndex < realHoverIndex) {
|
|
549
|
+
// 向下拖动:需要减去被移除的节点数量
|
|
550
|
+
adjustedHoverIndex = realHoverIndex - nodesToMove.length;
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
// 在新位置插入所有节点
|
|
554
|
+
remainingItems.splice.apply(remainingItems, [adjustedHoverIndex, 0].concat(nodesToMove));
|
|
555
|
+
console.log('[ColumnConfigTable] 拖动完成,准备更新:', {
|
|
556
|
+
remainingItemsCount: remainingItems.length,
|
|
557
|
+
items: remainingItems.map(function (item, idx) {
|
|
558
|
+
return {
|
|
559
|
+
index: idx,
|
|
560
|
+
id: item.id,
|
|
561
|
+
type: item.type,
|
|
562
|
+
headerName: item.headerName,
|
|
563
|
+
field: item.field,
|
|
564
|
+
order: item.order,
|
|
565
|
+
parentId: item.parentId
|
|
566
|
+
};
|
|
567
|
+
})
|
|
568
|
+
});
|
|
569
|
+
|
|
570
|
+
// 使用 updateItems 来同时更新本地状态和通知父组件
|
|
571
|
+
updateItems(remainingItems);
|
|
572
|
+
}, [localItems, updateItems]);
|
|
573
|
+
|
|
574
|
+
/**
|
|
575
|
+
* 获取缩进符号
|
|
576
|
+
*/
|
|
577
|
+
var getIndentSymbol = (0, _react.useCallback)(function (item) {
|
|
578
|
+
var _siblings;
|
|
579
|
+
if (item.level === 0) return '';
|
|
580
|
+
var siblings = localItems.filter(function (i) {
|
|
581
|
+
return i.parentId === item.parentId;
|
|
582
|
+
});
|
|
583
|
+
var isLast = ((_siblings = siblings[siblings.length - 1]) === null || _siblings === void 0 ? void 0 : _siblings.id) === item.id;
|
|
584
|
+
return isLast ? '└─ ' : '├─ ';
|
|
585
|
+
}, [localItems]);
|
|
586
|
+
|
|
587
|
+
/**
|
|
588
|
+
* 渲染名称列
|
|
589
|
+
*/
|
|
590
|
+
var renderNameCell = (0, _react.useCallback)(function (text, record) {
|
|
591
|
+
var indent = record.level * 20;
|
|
592
|
+
var indentSymbol = getIndentSymbol(record);
|
|
593
|
+
var NodeIcon = record.type === 'group' ? /*#__PURE__*/_react.default.createElement(_icons.FolderOutlined, {
|
|
594
|
+
style: {
|
|
595
|
+
color: '#1890ff',
|
|
596
|
+
fontSize: 14
|
|
597
|
+
}
|
|
598
|
+
}) : /*#__PURE__*/_react.default.createElement(_icons.FileOutlined, {
|
|
599
|
+
style: {
|
|
600
|
+
color: '#52c41a',
|
|
601
|
+
fontSize: 14
|
|
602
|
+
}
|
|
603
|
+
});
|
|
604
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
|
605
|
+
style: {
|
|
606
|
+
paddingLeft: indent,
|
|
607
|
+
display: 'flex',
|
|
608
|
+
alignItems: 'center',
|
|
609
|
+
gap: 8
|
|
610
|
+
}
|
|
611
|
+
}, record.level > 0 && /*#__PURE__*/_react.default.createElement("span", {
|
|
612
|
+
style: {
|
|
613
|
+
color: '#999',
|
|
614
|
+
fontFamily: 'monospace',
|
|
615
|
+
fontSize: 12,
|
|
616
|
+
flexShrink: 0
|
|
617
|
+
}
|
|
618
|
+
}, indentSymbol), record.type === 'group' ? /*#__PURE__*/_react.default.createElement("span", {
|
|
619
|
+
onClick: function onClick() {
|
|
620
|
+
return handleToggleCollapse(record.id);
|
|
621
|
+
},
|
|
622
|
+
style: {
|
|
623
|
+
cursor: 'pointer',
|
|
624
|
+
fontSize: 12,
|
|
625
|
+
color: '#999',
|
|
626
|
+
flexShrink: 0,
|
|
627
|
+
width: 16,
|
|
628
|
+
textAlign: 'center'
|
|
629
|
+
}
|
|
630
|
+
}, record._collapsed ? /*#__PURE__*/_react.default.createElement(_icons.RightOutlined, null) : /*#__PURE__*/_react.default.createElement(_icons.DownOutlined, null)) : /*#__PURE__*/_react.default.createElement("span", {
|
|
631
|
+
style: {
|
|
632
|
+
width: 16,
|
|
633
|
+
flexShrink: 0
|
|
634
|
+
}
|
|
635
|
+
}), /*#__PURE__*/_react.default.createElement("span", {
|
|
636
|
+
style: {
|
|
637
|
+
flexShrink: 0
|
|
638
|
+
}
|
|
639
|
+
}, NodeIcon), /*#__PURE__*/_react.default.createElement(_antd.Tag, {
|
|
640
|
+
color: record.type === 'group' ? 'blue' : 'green',
|
|
641
|
+
style: {
|
|
642
|
+
margin: 0,
|
|
643
|
+
flexShrink: 0
|
|
644
|
+
}
|
|
645
|
+
}, record.type === 'group' ? '分组' : '列'), /*#__PURE__*/_react.default.createElement(_antd.Input, {
|
|
646
|
+
value: text,
|
|
647
|
+
onChange: function onChange(e) {
|
|
648
|
+
return handleUpdateNode(record.id, {
|
|
649
|
+
headerName: e.target.value
|
|
650
|
+
});
|
|
651
|
+
},
|
|
652
|
+
bordered: false,
|
|
653
|
+
placeholder: record.type === 'group' ? '请输入分组名称' : '请输入列名称',
|
|
654
|
+
style: {
|
|
655
|
+
flex: 1,
|
|
656
|
+
background: record._isNew ? '#fff7e6' : 'transparent'
|
|
657
|
+
}
|
|
658
|
+
}));
|
|
659
|
+
}, [getIndentSymbol, handleUpdateNode, handleToggleCollapse]);
|
|
660
|
+
|
|
661
|
+
/**
|
|
662
|
+
* 渲染操作列
|
|
663
|
+
*/
|
|
664
|
+
var renderActionsCell = (0, _react.useCallback)(function (_, record) {
|
|
665
|
+
if (record.type === 'group') {
|
|
666
|
+
return /*#__PURE__*/_react.default.createElement(_antd.Space, {
|
|
667
|
+
size: "small"
|
|
668
|
+
}, !simple && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_antd.Tooltip, {
|
|
669
|
+
title: "\u6DFB\u52A0\u5B50\u5206\u7EC4"
|
|
670
|
+
}, /*#__PURE__*/_react.default.createElement(_antd.Button, {
|
|
671
|
+
type: "link",
|
|
672
|
+
size: "small",
|
|
673
|
+
icon: /*#__PURE__*/_react.default.createElement(_icons.FolderAddOutlined, null),
|
|
674
|
+
onClick: function onClick() {
|
|
675
|
+
return handleAddChildGroup(record.id);
|
|
676
|
+
}
|
|
677
|
+
}, "\u6DFB\u52A0\u5B50\u5206\u7EC4")), /*#__PURE__*/_react.default.createElement(_antd.Tooltip, {
|
|
678
|
+
title: "\u79FB\u52A8\u8282\u70B9"
|
|
679
|
+
}, /*#__PURE__*/_react.default.createElement(_antd.Button, {
|
|
680
|
+
type: "link",
|
|
681
|
+
size: "small",
|
|
682
|
+
icon: /*#__PURE__*/_react.default.createElement(_icons.DragOutlined, null),
|
|
683
|
+
onClick: function onClick() {
|
|
684
|
+
return handleOpenMoveModal(record);
|
|
685
|
+
}
|
|
686
|
+
}, "\u79FB\u52A8")), record._isNew && /*#__PURE__*/_react.default.createElement(_antd.Popconfirm, {
|
|
687
|
+
title: "\u786E\u5B9A\u8981\u5220\u9664\u5206\u7EC4\"".concat(record.headerName, "\"\u53CA\u5176\u6240\u6709\u5B50\u8282\u70B9\u5417\uFF1F"),
|
|
688
|
+
onConfirm: function onConfirm() {
|
|
689
|
+
return handleDeleteNode(record.id);
|
|
690
|
+
},
|
|
691
|
+
okText: "\u786E\u5B9A",
|
|
692
|
+
cancelText: "\u53D6\u6D88"
|
|
693
|
+
}, /*#__PURE__*/_react.default.createElement(_antd.Tooltip, {
|
|
694
|
+
title: "\u5220\u9664\u5206\u7EC4"
|
|
695
|
+
}, /*#__PURE__*/_react.default.createElement(_antd.Button, {
|
|
696
|
+
type: "link",
|
|
697
|
+
size: "small",
|
|
698
|
+
danger: true,
|
|
699
|
+
icon: /*#__PURE__*/_react.default.createElement(_icons.DeleteOutlined, null)
|
|
700
|
+
})))));
|
|
701
|
+
} else {
|
|
702
|
+
return /*#__PURE__*/_react.default.createElement(_antd.Space, {
|
|
703
|
+
size: "small"
|
|
704
|
+
}, !simple && /*#__PURE__*/_react.default.createElement(_antd.Tooltip, {
|
|
705
|
+
title: "\u79FB\u52A8\u8282\u70B9"
|
|
706
|
+
}, /*#__PURE__*/_react.default.createElement(_antd.Button, {
|
|
707
|
+
type: "link",
|
|
708
|
+
size: "small",
|
|
709
|
+
icon: /*#__PURE__*/_react.default.createElement(_icons.DragOutlined, null),
|
|
710
|
+
onClick: function onClick() {
|
|
711
|
+
return handleOpenMoveModal(record);
|
|
712
|
+
}
|
|
713
|
+
}, "\u79FB\u52A8")));
|
|
714
|
+
}
|
|
715
|
+
}, [simple, handleAddChildGroup, handleDeleteNode, handleOpenMoveModal]);
|
|
716
|
+
|
|
717
|
+
/**
|
|
718
|
+
* 表格列配置
|
|
719
|
+
*/
|
|
720
|
+
var columns = (0, _react.useMemo)(function () {
|
|
721
|
+
return [{
|
|
722
|
+
title: '排序',
|
|
723
|
+
key: 'sort',
|
|
724
|
+
width: 40,
|
|
725
|
+
align: 'center',
|
|
726
|
+
render: function render() {
|
|
727
|
+
return /*#__PURE__*/_react.default.createElement(_antd.Tooltip, {
|
|
728
|
+
title: "\u62D6\u52A8\u6392\u5E8F\uFF08\u4EC5\u652F\u6301\u540C\u7EA7\uFF09"
|
|
729
|
+
}, /*#__PURE__*/_react.default.createElement(_icons.HolderOutlined, {
|
|
730
|
+
style: {
|
|
731
|
+
fontSize: 16,
|
|
732
|
+
color: '#999',
|
|
733
|
+
cursor: 'move'
|
|
734
|
+
}
|
|
735
|
+
}));
|
|
736
|
+
}
|
|
737
|
+
}, {
|
|
738
|
+
title: '操作',
|
|
739
|
+
key: 'actions',
|
|
740
|
+
width: 120,
|
|
741
|
+
align: 'center',
|
|
742
|
+
render: renderActionsCell
|
|
743
|
+
}, {
|
|
744
|
+
title: '名称',
|
|
745
|
+
dataIndex: 'headerName',
|
|
746
|
+
key: 'headerName',
|
|
747
|
+
width: 100,
|
|
748
|
+
render: renderNameCell
|
|
749
|
+
}, {
|
|
750
|
+
title: '宽度',
|
|
751
|
+
dataIndex: 'width',
|
|
752
|
+
key: 'width',
|
|
753
|
+
width: 80,
|
|
754
|
+
align: 'center',
|
|
755
|
+
render: function render(value, record) {
|
|
756
|
+
if (record.type !== 'column') return '-';
|
|
757
|
+
return /*#__PURE__*/_react.default.createElement(_antd.InputNumber, {
|
|
758
|
+
value: value,
|
|
759
|
+
onChange: function onChange(newValue) {
|
|
760
|
+
return handleUpdateNode(record.id, {
|
|
761
|
+
width: newValue || undefined
|
|
762
|
+
});
|
|
763
|
+
},
|
|
764
|
+
min: 50,
|
|
765
|
+
max: 1000,
|
|
766
|
+
style: {
|
|
767
|
+
width: '100%'
|
|
768
|
+
}
|
|
769
|
+
});
|
|
770
|
+
}
|
|
771
|
+
}, {
|
|
772
|
+
title: '占满',
|
|
773
|
+
dataIndex: 'flex',
|
|
774
|
+
key: 'flex',
|
|
775
|
+
width: 50,
|
|
776
|
+
align: 'center',
|
|
777
|
+
render: function render(value, record) {
|
|
778
|
+
if (record.type !== 'column') return '-';
|
|
779
|
+
return /*#__PURE__*/_react.default.createElement(_antd.Select, {
|
|
780
|
+
value: value || 0,
|
|
781
|
+
onChange: function onChange(newValue) {
|
|
782
|
+
return handleUpdateNode(record.id, {
|
|
783
|
+
flex: newValue
|
|
784
|
+
});
|
|
785
|
+
},
|
|
786
|
+
style: {
|
|
787
|
+
width: '100%'
|
|
788
|
+
},
|
|
789
|
+
options: [{
|
|
790
|
+
value: 1,
|
|
791
|
+
label: '占满'
|
|
792
|
+
}, {
|
|
793
|
+
value: 0,
|
|
794
|
+
label: '不占满'
|
|
795
|
+
}]
|
|
796
|
+
});
|
|
797
|
+
}
|
|
798
|
+
}, {
|
|
799
|
+
title: '固定',
|
|
800
|
+
dataIndex: 'pinned',
|
|
801
|
+
key: 'pinned',
|
|
802
|
+
width: 50,
|
|
803
|
+
align: 'center',
|
|
804
|
+
render: function render(value, record) {
|
|
805
|
+
if (record.type !== 'column') return '-';
|
|
806
|
+
return /*#__PURE__*/_react.default.createElement(_antd.Select, {
|
|
807
|
+
value: value || 'notPinned',
|
|
808
|
+
onChange: function onChange(newValue) {
|
|
809
|
+
return handleUpdateNode(record.id, {
|
|
810
|
+
pinned: newValue
|
|
811
|
+
});
|
|
812
|
+
},
|
|
813
|
+
style: {
|
|
814
|
+
width: '100%'
|
|
815
|
+
},
|
|
816
|
+
options: [{
|
|
817
|
+
value: 'left',
|
|
818
|
+
label: '左固定'
|
|
819
|
+
}, {
|
|
820
|
+
value: 'right',
|
|
821
|
+
label: '右固定'
|
|
822
|
+
}, {
|
|
823
|
+
value: 'notPinned',
|
|
824
|
+
label: '不固定'
|
|
825
|
+
}]
|
|
826
|
+
});
|
|
827
|
+
}
|
|
828
|
+
}, {
|
|
829
|
+
title: '隐藏',
|
|
830
|
+
dataIndex: 'hide',
|
|
831
|
+
key: 'hide',
|
|
832
|
+
width: 50,
|
|
833
|
+
align: 'center',
|
|
834
|
+
render: function render(value, record) {
|
|
835
|
+
if (record.type !== 'column') return '-';
|
|
836
|
+
return /*#__PURE__*/_react.default.createElement(_antd.Switch, {
|
|
837
|
+
checked: value || false,
|
|
838
|
+
onChange: function onChange(checked) {
|
|
839
|
+
return handleUpdateNode(record.id, {
|
|
840
|
+
hide: checked
|
|
841
|
+
});
|
|
842
|
+
}
|
|
843
|
+
});
|
|
844
|
+
}
|
|
845
|
+
}, {
|
|
846
|
+
title: '布局',
|
|
847
|
+
dataIndex: 'cellClass',
|
|
848
|
+
key: 'cellClass',
|
|
849
|
+
width: 50,
|
|
850
|
+
align: 'center',
|
|
851
|
+
render: function render(value, record) {
|
|
852
|
+
if (record.type !== 'column') return '-';
|
|
853
|
+
return /*#__PURE__*/_react.default.createElement(_antd.Select, {
|
|
854
|
+
value: value || 'custom-cell-left',
|
|
855
|
+
onChange: function onChange(newValue) {
|
|
856
|
+
return handleUpdateNode(record.id, {
|
|
857
|
+
cellClass: newValue
|
|
858
|
+
});
|
|
859
|
+
},
|
|
860
|
+
style: {
|
|
861
|
+
width: '100%'
|
|
862
|
+
},
|
|
863
|
+
options: [{
|
|
864
|
+
value: 'custom-cell-left',
|
|
865
|
+
label: '左对齐'
|
|
866
|
+
}, {
|
|
867
|
+
value: 'custom-cell-right',
|
|
868
|
+
label: '右对齐'
|
|
869
|
+
}, {
|
|
870
|
+
value: 'custom-cell-centered',
|
|
871
|
+
label: '居中'
|
|
872
|
+
}]
|
|
873
|
+
});
|
|
874
|
+
}
|
|
875
|
+
}, {
|
|
876
|
+
title: '列过滤',
|
|
877
|
+
dataIndex: 'suppressHeaderFilterButton',
|
|
878
|
+
key: 'suppressHeaderFilterButton',
|
|
879
|
+
width: 50,
|
|
880
|
+
align: 'center',
|
|
881
|
+
render: function render(value, record) {
|
|
882
|
+
if (record.type !== 'column') return '-';
|
|
883
|
+
return /*#__PURE__*/_react.default.createElement(_antd.Switch, {
|
|
884
|
+
checked: !value,
|
|
885
|
+
onChange: function onChange(checked) {
|
|
886
|
+
return handleUpdateNode(record.id, {
|
|
887
|
+
suppressHeaderFilterButton: !checked
|
|
888
|
+
});
|
|
889
|
+
}
|
|
890
|
+
});
|
|
891
|
+
}
|
|
892
|
+
}];
|
|
893
|
+
}, [renderNameCell, renderActionsCell, handleUpdateNode]);
|
|
894
|
+
return /*#__PURE__*/_react.default.createElement(_reactDnd.DndProvider, {
|
|
895
|
+
backend: _reactDndHtml5Backend.HTML5Backend
|
|
896
|
+
}, /*#__PURE__*/_react.default.createElement("div", null, !simple && /*#__PURE__*/_react.default.createElement("div", {
|
|
897
|
+
style: {
|
|
898
|
+
marginBottom: 16
|
|
899
|
+
}
|
|
900
|
+
}, /*#__PURE__*/_react.default.createElement(_antd.Button, {
|
|
901
|
+
type: "primary",
|
|
902
|
+
icon: /*#__PURE__*/_react.default.createElement(_icons.PlusOutlined, null),
|
|
903
|
+
onClick: handleAddRootGroup
|
|
904
|
+
}, "\u6DFB\u52A0\u6839\u7EA7\u522B\u5206\u7EC4")), /*#__PURE__*/_react.default.createElement(_antd.Table, {
|
|
905
|
+
columns: columns,
|
|
906
|
+
dataSource: visibleItems,
|
|
907
|
+
rowKey: "id",
|
|
908
|
+
pagination: false,
|
|
909
|
+
bordered: true,
|
|
910
|
+
size: "small",
|
|
911
|
+
scroll: {
|
|
912
|
+
x: 1000
|
|
913
|
+
},
|
|
914
|
+
components: {
|
|
915
|
+
body: {
|
|
916
|
+
row: function row(props) {
|
|
917
|
+
var record = visibleItems.find(function (item) {
|
|
918
|
+
return item.id === props['data-row-key'];
|
|
919
|
+
});
|
|
920
|
+
var index = visibleItems.findIndex(function (item) {
|
|
921
|
+
return item.id === props['data-row-key'];
|
|
922
|
+
});
|
|
923
|
+
if (!record) return /*#__PURE__*/_react.default.createElement("tr", props);
|
|
924
|
+
return /*#__PURE__*/_react.default.createElement(DraggableRow, _extends({
|
|
925
|
+
record: record,
|
|
926
|
+
index: index,
|
|
927
|
+
moveRow: handleDragSort
|
|
928
|
+
}, props));
|
|
929
|
+
}
|
|
930
|
+
}
|
|
931
|
+
}
|
|
932
|
+
}), /*#__PURE__*/_react.default.createElement(_MoveNodeModal.default, {
|
|
933
|
+
visible: moveModalVisible,
|
|
934
|
+
currentNode: currentMoveNode,
|
|
935
|
+
allItems: localItems,
|
|
936
|
+
onCancel: handleCloseMoveModal,
|
|
937
|
+
onConfirm: handleConfirmMove
|
|
938
|
+
})));
|
|
939
|
+
};
|
|
940
|
+
var _default = exports.default = ColumnConfigTable;
|