@nokecy/qc-ui 1.0.84 → 1.0.86
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 +29 -9
- package/dist/cjs/ag-grid-plus/setting/ColumnConfigTable.js +127 -48
- package/dist/esm/ag-grid-plus/ag-gridPlus.js +29 -9
- package/dist/esm/ag-grid-plus/setting/ColumnConfigTable.js +122 -42
- package/dist/umd/qc-ui.min.js +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,5 @@
|
|
|
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 _debounce from "lodash/debounce";
|
|
2
3
|
var _excluded = ["record", "index", "moveRow", "children"];
|
|
3
4
|
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; }
|
|
4
5
|
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; }
|
|
@@ -10,21 +11,21 @@ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread n
|
|
|
10
11
|
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
11
12
|
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
12
13
|
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); }
|
|
14
|
+
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; }
|
|
15
|
+
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; }
|
|
13
16
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
14
17
|
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."); }
|
|
15
18
|
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); }
|
|
16
19
|
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; }
|
|
17
20
|
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; } }
|
|
18
21
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
19
|
-
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; }
|
|
20
|
-
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; }
|
|
21
22
|
/**
|
|
22
23
|
* 列配置表格组件
|
|
23
24
|
* 使用简单的 Ant Design Table 替代 Formily ArrayTable
|
|
24
25
|
* 通过 React useState 直接管理数据状态,确保 type 字段不会丢失
|
|
25
26
|
*/
|
|
26
27
|
|
|
27
|
-
import React, { useCallback, useMemo, useState, useRef } from 'react';
|
|
28
|
+
import React, { useCallback, useMemo, useState, useRef, useEffect } from 'react';
|
|
28
29
|
import { Table, Button, Input, InputNumber, Select, Switch, Space, Popconfirm, message, Tag, Tooltip } from 'antd';
|
|
29
30
|
import { PlusOutlined, DeleteOutlined, FolderOutlined, FolderAddOutlined, FileOutlined, DownOutlined, RightOutlined, DragOutlined, HolderOutlined } from '@ant-design/icons';
|
|
30
31
|
import { DndProvider, useDrag, useDrop } from 'react-dnd';
|
|
@@ -32,15 +33,66 @@ import { HTML5Backend } from 'react-dnd-html5-backend';
|
|
|
32
33
|
import { generateId, findLastDescendantIndex, reorderItems } from "./columnGroupUtils";
|
|
33
34
|
import MoveNodeModal from "./MoveNodeModal";
|
|
34
35
|
var DRAG_TYPE = 'COLUMN_ROW';
|
|
36
|
+
/**
|
|
37
|
+
* 受控的名称输入组件 - 解决光标跳出问题
|
|
38
|
+
* 通过内部维护输入状态,只在失去焦点时同步到父组件
|
|
39
|
+
*/
|
|
40
|
+
var NameInput = function NameInput(_ref) {
|
|
41
|
+
var value = _ref.value,
|
|
42
|
+
onChange = _ref.onChange,
|
|
43
|
+
placeholder = _ref.placeholder,
|
|
44
|
+
isNew = _ref.isNew;
|
|
45
|
+
var _useState = useState(value),
|
|
46
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
47
|
+
localValue = _useState2[0],
|
|
48
|
+
setLocalValue = _useState2[1];
|
|
49
|
+
|
|
50
|
+
// 同步外部变化到本地状态
|
|
51
|
+
useEffect(function () {
|
|
52
|
+
setLocalValue(value);
|
|
53
|
+
}, [value]);
|
|
54
|
+
|
|
55
|
+
// 处理输入变化 - 只更新本地状态
|
|
56
|
+
var handleChange = function handleChange(e) {
|
|
57
|
+
setLocalValue(e.target.value);
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
// 失去焦点时同步到父组件
|
|
61
|
+
var handleBlur = function handleBlur() {
|
|
62
|
+
if (localValue !== value) {
|
|
63
|
+
onChange(localValue);
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
// 按回车键时也同步并失去焦点
|
|
68
|
+
var handlePressEnter = function handlePressEnter() {
|
|
69
|
+
if (localValue !== value) {
|
|
70
|
+
onChange(localValue);
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
return /*#__PURE__*/React.createElement(Input, {
|
|
74
|
+
value: localValue,
|
|
75
|
+
onChange: handleChange,
|
|
76
|
+
onBlur: handleBlur,
|
|
77
|
+
onPressEnter: handlePressEnter,
|
|
78
|
+
bordered: false,
|
|
79
|
+
placeholder: placeholder,
|
|
80
|
+
style: {
|
|
81
|
+
flex: 1,
|
|
82
|
+
background: isNew ? '#fff7e6' : 'transparent'
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
};
|
|
86
|
+
|
|
35
87
|
/**
|
|
36
88
|
* 可拖拽的表格行组件
|
|
37
89
|
*/
|
|
38
|
-
var DraggableRow = function DraggableRow(
|
|
39
|
-
var record =
|
|
40
|
-
index =
|
|
41
|
-
moveRow =
|
|
42
|
-
children =
|
|
43
|
-
restProps = _objectWithoutProperties(
|
|
90
|
+
var DraggableRow = function DraggableRow(_ref2) {
|
|
91
|
+
var record = _ref2.record,
|
|
92
|
+
index = _ref2.index,
|
|
93
|
+
moveRow = _ref2.moveRow,
|
|
94
|
+
children = _ref2.children,
|
|
95
|
+
restProps = _objectWithoutProperties(_ref2, _excluded);
|
|
44
96
|
var ref = useRef(null);
|
|
45
97
|
var _useDrag = useDrag({
|
|
46
98
|
type: DRAG_TYPE,
|
|
@@ -106,26 +158,26 @@ var DraggableRow = function DraggableRow(_ref) {
|
|
|
106
158
|
/**
|
|
107
159
|
* 列配置表格组件
|
|
108
160
|
*/
|
|
109
|
-
var ColumnConfigTable = function ColumnConfigTable(
|
|
110
|
-
var items =
|
|
111
|
-
onChange =
|
|
112
|
-
|
|
113
|
-
simple =
|
|
161
|
+
var ColumnConfigTable = function ColumnConfigTable(_ref3) {
|
|
162
|
+
var items = _ref3.items,
|
|
163
|
+
onChange = _ref3.onChange,
|
|
164
|
+
_ref3$simple = _ref3.simple,
|
|
165
|
+
simple = _ref3$simple === void 0 ? false : _ref3$simple;
|
|
114
166
|
// 本地状态管理(用于优化性能)
|
|
115
|
-
var
|
|
116
|
-
|
|
117
|
-
localItems =
|
|
118
|
-
setLocalItems =
|
|
167
|
+
var _useState3 = useState(items),
|
|
168
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
169
|
+
localItems = _useState4[0],
|
|
170
|
+
setLocalItems = _useState4[1];
|
|
119
171
|
|
|
120
172
|
// 移动节点弹窗状态
|
|
121
|
-
var
|
|
122
|
-
_useState4 = _slicedToArray(_useState3, 2),
|
|
123
|
-
moveModalVisible = _useState4[0],
|
|
124
|
-
setMoveModalVisible = _useState4[1];
|
|
125
|
-
var _useState5 = useState(null),
|
|
173
|
+
var _useState5 = useState(false),
|
|
126
174
|
_useState6 = _slicedToArray(_useState5, 2),
|
|
127
|
-
|
|
128
|
-
|
|
175
|
+
moveModalVisible = _useState6[0],
|
|
176
|
+
setMoveModalVisible = _useState6[1];
|
|
177
|
+
var _useState7 = useState(null),
|
|
178
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
179
|
+
currentMoveNode = _useState8[0],
|
|
180
|
+
setCurrentMoveNode = _useState8[1];
|
|
129
181
|
|
|
130
182
|
/**
|
|
131
183
|
* 同步更新本地状态和通知父组件
|
|
@@ -151,6 +203,24 @@ var ColumnConfigTable = function ColumnConfigTable(_ref2) {
|
|
|
151
203
|
onChange(_toConsumableArray(newItems));
|
|
152
204
|
}, [onChange]);
|
|
153
205
|
|
|
206
|
+
/**
|
|
207
|
+
* 防抖的更新函数 - 用于输入框等高频更新场景
|
|
208
|
+
* 延迟 300ms 后才通知父组件,减少不必要的重渲染
|
|
209
|
+
*/
|
|
210
|
+
var debouncedUpdateItems = useMemo(function () {
|
|
211
|
+
return _debounce(function (newItems) {
|
|
212
|
+
reorderItems(newItems);
|
|
213
|
+
onChange(_toConsumableArray(newItems));
|
|
214
|
+
}, 300);
|
|
215
|
+
}, [onChange]);
|
|
216
|
+
|
|
217
|
+
// 组件卸载时清理防抖函数
|
|
218
|
+
useEffect(function () {
|
|
219
|
+
return function () {
|
|
220
|
+
debouncedUpdateItems.cancel();
|
|
221
|
+
};
|
|
222
|
+
}, [debouncedUpdateItems]);
|
|
223
|
+
|
|
154
224
|
/**
|
|
155
225
|
* 切换分组的折叠/展开状态
|
|
156
226
|
*/
|
|
@@ -448,8 +518,10 @@ var ColumnConfigTable = function ColumnConfigTable(_ref2) {
|
|
|
448
518
|
|
|
449
519
|
/**
|
|
450
520
|
* 更新节点属性
|
|
521
|
+
* @param immediate 是否立即更新父组件(非输入框类更新需要立即生效)
|
|
451
522
|
*/
|
|
452
523
|
var handleUpdateNode = useCallback(function (nodeId, updates) {
|
|
524
|
+
var immediate = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
453
525
|
var newItems = localItems.map(function (item) {
|
|
454
526
|
if (item.id === nodeId) {
|
|
455
527
|
// ⚠️ 关键:确保 type 字段不会被覆盖
|
|
@@ -461,8 +533,20 @@ var ColumnConfigTable = function ColumnConfigTable(_ref2) {
|
|
|
461
533
|
}
|
|
462
534
|
return item;
|
|
463
535
|
});
|
|
464
|
-
|
|
465
|
-
|
|
536
|
+
|
|
537
|
+
// 立即更新本地状态(保证输入框显示最新内容)
|
|
538
|
+
setLocalItems(_toConsumableArray(newItems));
|
|
539
|
+
|
|
540
|
+
// 根据场景选择立即更新或防抖更新
|
|
541
|
+
if (immediate) {
|
|
542
|
+
// 非文本输入的更新(如开关、选择器等)需要立即生效
|
|
543
|
+
reorderItems(newItems);
|
|
544
|
+
onChange(_toConsumableArray(newItems));
|
|
545
|
+
} else {
|
|
546
|
+
// 文本输入使用防抖,避免频繁触发父组件更新
|
|
547
|
+
debouncedUpdateItems(newItems);
|
|
548
|
+
}
|
|
549
|
+
}, [localItems, onChange, debouncedUpdateItems]);
|
|
466
550
|
|
|
467
551
|
/**
|
|
468
552
|
* 处理拖拽排序
|
|
@@ -634,19 +718,15 @@ var ColumnConfigTable = function ColumnConfigTable(_ref2) {
|
|
|
634
718
|
margin: 0,
|
|
635
719
|
flexShrink: 0
|
|
636
720
|
}
|
|
637
|
-
}, record.type === 'group' ? '分组' : '列'), /*#__PURE__*/React.createElement(
|
|
721
|
+
}, record.type === 'group' ? '分组' : '列'), /*#__PURE__*/React.createElement(NameInput, {
|
|
638
722
|
value: text,
|
|
639
|
-
onChange: function onChange(
|
|
723
|
+
onChange: function onChange(newValue) {
|
|
640
724
|
return handleUpdateNode(record.id, {
|
|
641
|
-
headerName:
|
|
642
|
-
});
|
|
725
|
+
headerName: newValue
|
|
726
|
+
}, true);
|
|
643
727
|
},
|
|
644
|
-
bordered: false,
|
|
645
728
|
placeholder: record.type === 'group' ? '请输入分组名称' : '请输入列名称',
|
|
646
|
-
|
|
647
|
-
flex: 1,
|
|
648
|
-
background: record._isNew ? '#fff7e6' : 'transparent'
|
|
649
|
-
}
|
|
729
|
+
isNew: record._isNew
|
|
650
730
|
}));
|
|
651
731
|
}, [getIndentSymbol, handleUpdateNode, handleToggleCollapse]);
|
|
652
732
|
|
|
@@ -751,7 +831,7 @@ var ColumnConfigTable = function ColumnConfigTable(_ref2) {
|
|
|
751
831
|
onChange: function onChange(newValue) {
|
|
752
832
|
return handleUpdateNode(record.id, {
|
|
753
833
|
width: newValue || undefined
|
|
754
|
-
});
|
|
834
|
+
}, true);
|
|
755
835
|
},
|
|
756
836
|
min: 50,
|
|
757
837
|
max: 1000,
|
|
@@ -773,7 +853,7 @@ var ColumnConfigTable = function ColumnConfigTable(_ref2) {
|
|
|
773
853
|
onChange: function onChange(newValue) {
|
|
774
854
|
return handleUpdateNode(record.id, {
|
|
775
855
|
flex: newValue
|
|
776
|
-
});
|
|
856
|
+
}, true);
|
|
777
857
|
},
|
|
778
858
|
style: {
|
|
779
859
|
width: '100%'
|
|
@@ -800,7 +880,7 @@ var ColumnConfigTable = function ColumnConfigTable(_ref2) {
|
|
|
800
880
|
onChange: function onChange(newValue) {
|
|
801
881
|
return handleUpdateNode(record.id, {
|
|
802
882
|
pinned: newValue
|
|
803
|
-
});
|
|
883
|
+
}, true);
|
|
804
884
|
},
|
|
805
885
|
style: {
|
|
806
886
|
width: '100%'
|
|
@@ -830,7 +910,7 @@ var ColumnConfigTable = function ColumnConfigTable(_ref2) {
|
|
|
830
910
|
onChange: function onChange(checked) {
|
|
831
911
|
return handleUpdateNode(record.id, {
|
|
832
912
|
hide: checked
|
|
833
|
-
});
|
|
913
|
+
}, true);
|
|
834
914
|
}
|
|
835
915
|
});
|
|
836
916
|
}
|
|
@@ -847,7 +927,7 @@ var ColumnConfigTable = function ColumnConfigTable(_ref2) {
|
|
|
847
927
|
onChange: function onChange(newValue) {
|
|
848
928
|
return handleUpdateNode(record.id, {
|
|
849
929
|
cellClass: newValue
|
|
850
|
-
});
|
|
930
|
+
}, true);
|
|
851
931
|
},
|
|
852
932
|
style: {
|
|
853
933
|
width: '100%'
|
|
@@ -877,7 +957,7 @@ var ColumnConfigTable = function ColumnConfigTable(_ref2) {
|
|
|
877
957
|
onChange: function onChange(checked) {
|
|
878
958
|
return handleUpdateNode(record.id, {
|
|
879
959
|
suppressHeaderFilterButton: !checked
|
|
880
|
-
});
|
|
960
|
+
}, true);
|
|
881
961
|
}
|
|
882
962
|
});
|
|
883
963
|
}
|