@nokecy/qc-ui 1.1.18 → 1.1.19
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 +23 -0
- package/dist/cjs/ag-grid-plus/context/gridContext.d.ts +5 -0
- package/dist/cjs/ag-grid-plus/index.less +13 -0
- package/dist/cjs/ag-grid-plus/setting/ColumnConfigTable.js +79 -76
- package/dist/cjs/ag-grid-plus/setting/ColumnNameCellRenderer.d.ts +22 -0
- package/dist/cjs/ag-grid-plus/setting/ColumnNameCellRenderer.js +211 -0
- package/dist/cjs/ag-grid-plus/setting/ColumnSetting.js +80 -25
- package/dist/cjs/ag-grid-plus/setting/DebounceInputs.d.ts +1 -0
- package/dist/cjs/ag-grid-plus/setting/DebounceInputs.js +2 -0
- package/dist/cjs/ag-grid-plus/setting/columnGroupTypes.d.ts +3 -1
- package/dist/cjs/ag-grid-plus/setting/columnGroupUtils.d.ts +2 -1
- package/dist/cjs/ag-grid-plus/setting/columnGroupUtils.js +49 -9
- package/dist/esm/ag-grid-plus/ag-gridPlus.js +23 -0
- package/dist/esm/ag-grid-plus/context/gridContext.d.ts +5 -0
- package/dist/esm/ag-grid-plus/index.less +13 -0
- package/dist/esm/ag-grid-plus/setting/ColumnConfigTable.js +81 -78
- package/dist/esm/ag-grid-plus/setting/ColumnNameCellRenderer.d.ts +22 -0
- package/dist/esm/ag-grid-plus/setting/ColumnNameCellRenderer.js +204 -0
- package/dist/esm/ag-grid-plus/setting/ColumnSetting.js +80 -25
- package/dist/esm/ag-grid-plus/setting/DebounceInputs.d.ts +1 -0
- package/dist/esm/ag-grid-plus/setting/DebounceInputs.js +2 -0
- package/dist/esm/ag-grid-plus/setting/columnGroupTypes.d.ts +3 -1
- package/dist/esm/ag-grid-plus/setting/columnGroupUtils.d.ts +2 -1
- package/dist/esm/ag-grid-plus/setting/columnGroupUtils.js +49 -9
- package/dist/umd/qc-ui.min.css +1 -1
- package/dist/umd/qc-ui.min.js +1 -1
- package/package.json +1 -1
|
@@ -101,6 +101,10 @@ function AgGridPlus(props) {
|
|
|
101
101
|
var apiRef = (0, _react.useRef)();
|
|
102
102
|
var allColDefsRef = (0, _react.useRef)([]);
|
|
103
103
|
|
|
104
|
+
// 【新增】缓存初始的 columnDefs,用于保留原始 headerName
|
|
105
|
+
// 这个值在组件生命周期中保持不变,不会被列方案修改
|
|
106
|
+
var initialColumnDefsRef = (0, _react.useRef)([]);
|
|
107
|
+
|
|
104
108
|
// 【新增】用于缓存每个数据对象的唯一 ID(降级方案)
|
|
105
109
|
var rowIdCacheRef = (0, _react.useRef)(new WeakMap());
|
|
106
110
|
var rowIdCounterRef = (0, _react.useRef)(0);
|
|
@@ -590,6 +594,21 @@ function AgGridPlus(props) {
|
|
|
590
594
|
var cols = getTableColumns([dataForTypeInference]);
|
|
591
595
|
allColDefsRef.current = cols; // 同步更新 ref
|
|
592
596
|
|
|
597
|
+
// 【新增】首次初始化时缓存初始列定义(浅拷贝即可,只需要保留 headerName)
|
|
598
|
+
if (initialColumnDefsRef.current.length === 0) {
|
|
599
|
+
initialColumnDefsRef.current = cols.map(function (col) {
|
|
600
|
+
// 递归处理分组的 children
|
|
601
|
+
if ('children' in col && col.children) {
|
|
602
|
+
return _objectSpread(_objectSpread({}, col), {}, {
|
|
603
|
+
children: col.children.map(function (child) {
|
|
604
|
+
return _objectSpread({}, child);
|
|
605
|
+
})
|
|
606
|
+
});
|
|
607
|
+
}
|
|
608
|
+
// 普通列只需要浅拷贝
|
|
609
|
+
return _objectSpread({}, col);
|
|
610
|
+
});
|
|
611
|
+
}
|
|
593
612
|
return cols;
|
|
594
613
|
}, [_react.default.Children.count(children), props.columnDefs, extensibleColumns, gridKey]);
|
|
595
614
|
|
|
@@ -1117,6 +1136,8 @@ function AgGridPlus(props) {
|
|
|
1117
1136
|
columnState: gridPlusColumnState,
|
|
1118
1137
|
allColDefs: allColDefsRef.current,
|
|
1119
1138
|
// 【修复】传入原始完整的列定义
|
|
1139
|
+
initialColumnDefs: initialColumnDefsRef.current,
|
|
1140
|
+
// 【新增】传入初始列定义(用于获取原始 headerName)
|
|
1120
1141
|
onSaveColumnState: onSaveColumnState,
|
|
1121
1142
|
applyToGlobal: applyToGlobal,
|
|
1122
1143
|
resetCurrent: resetCurrent,
|
|
@@ -1143,6 +1164,8 @@ function AgGridPlus(props) {
|
|
|
1143
1164
|
};
|
|
1144
1165
|
}, [extensibleColumns, gridPlusColumnState, allColDefsRef.current,
|
|
1145
1166
|
// 【修复】添加到依赖数组
|
|
1167
|
+
initialColumnDefsRef.current,
|
|
1168
|
+
// 【新增】添加初始列定义到依赖数组
|
|
1146
1169
|
onSaveColumnState, applyToGlobal, resetCurrent, resetAll, currentQueryScheme, queryItemsOrder, queryFormItems,
|
|
1147
1170
|
// 方案管理依赖
|
|
1148
1171
|
columnSchemes, querySchemes, currentSchemes, schemesLoading, lastSyncTime, saveColumnScheme, deleteColumnScheme, saveQueryScheme, deleteQueryScheme, setCurrentColumnScheme, setCurrentQueryScheme, refreshSchemes, getColumnSchemes, getQuerySchemes, getCurrentScheme]);
|
|
@@ -100,6 +100,11 @@ export interface GridPlusContextValue extends SchemeManagementAPI {
|
|
|
100
100
|
* 用于列方案应用时保留这些属性
|
|
101
101
|
*/
|
|
102
102
|
allColDefs?: import('../types').ExtendedColDef[];
|
|
103
|
+
/**
|
|
104
|
+
* 初始列定义(从 props 传入的原始值,不会被列方案修改)
|
|
105
|
+
* 用于获取原始 headerName,以便显示修改状态
|
|
106
|
+
*/
|
|
107
|
+
initialColumnDefs?: import('../types').ExtendedColDef[];
|
|
103
108
|
/**
|
|
104
109
|
* 保存当前表格的列状态到服务器(仅保存当前表格)
|
|
105
110
|
* @param gridKey 表格唯一标识
|
|
@@ -35,3 +35,16 @@
|
|
|
35
35
|
width: 18px !important;
|
|
36
36
|
height: 18px !important;
|
|
37
37
|
}
|
|
38
|
+
|
|
39
|
+
// 列内容对齐方式样式
|
|
40
|
+
.custom-cell-left {
|
|
41
|
+
text-align: left !important;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.custom-cell-centered {
|
|
45
|
+
text-align: center !important;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.custom-cell-right {
|
|
49
|
+
text-align: right !important;
|
|
50
|
+
}
|
|
@@ -12,6 +12,7 @@ var _agGridReact = require("ag-grid-react");
|
|
|
12
12
|
var _columnGroupUtils = require("./columnGroupUtils");
|
|
13
13
|
var _DebounceInputs = require("./DebounceInputs");
|
|
14
14
|
var _theme = require("../theme");
|
|
15
|
+
var _ColumnNameCellRenderer = require("./ColumnNameCellRenderer");
|
|
15
16
|
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); }
|
|
16
17
|
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; }
|
|
17
18
|
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
@@ -50,63 +51,7 @@ var TypeCellRenderer = function TypeCellRenderer(props) {
|
|
|
50
51
|
}, "\u5217");
|
|
51
52
|
};
|
|
52
53
|
|
|
53
|
-
|
|
54
|
-
var NameCellRenderer = function NameCellRenderer(props) {
|
|
55
|
-
var item = props.data;
|
|
56
|
-
if (!item) return null;
|
|
57
|
-
var paddingLeft = (item.level || 0) * 20;
|
|
58
|
-
|
|
59
|
-
// 从 props 中获取自定义参数
|
|
60
|
-
var _ref = props,
|
|
61
|
-
expandedKeys = _ref.expandedKeys,
|
|
62
|
-
onToggleExpand = _ref.onToggleExpand,
|
|
63
|
-
allItems = _ref.allItems;
|
|
64
|
-
|
|
65
|
-
// 检查是否有子节点
|
|
66
|
-
var hasChildren = allItems === null || allItems === void 0 ? void 0 : allItems.some(function (i) {
|
|
67
|
-
return i.parentId === item.id;
|
|
68
|
-
});
|
|
69
|
-
var isExpanded = expandedKeys === null || expandedKeys === void 0 ? void 0 : expandedKeys.has(item.id);
|
|
70
|
-
return /*#__PURE__*/_react.default.createElement("div", {
|
|
71
|
-
style: {
|
|
72
|
-
display: 'flex',
|
|
73
|
-
alignItems: 'center',
|
|
74
|
-
gap: 8,
|
|
75
|
-
paddingLeft: paddingLeft
|
|
76
|
-
}
|
|
77
|
-
}, item.type === 'group' && hasChildren ? /*#__PURE__*/_react.default.createElement("span", {
|
|
78
|
-
onClick: function onClick() {
|
|
79
|
-
return onToggleExpand === null || onToggleExpand === void 0 ? void 0 : onToggleExpand(item.id);
|
|
80
|
-
},
|
|
81
|
-
style: {
|
|
82
|
-
cursor: 'pointer',
|
|
83
|
-
width: 16,
|
|
84
|
-
display: 'inline-block'
|
|
85
|
-
}
|
|
86
|
-
}, isExpanded ? '▼' : '▶') : /*#__PURE__*/_react.default.createElement("span", {
|
|
87
|
-
style: {
|
|
88
|
-
width: 16,
|
|
89
|
-
display: 'inline-block'
|
|
90
|
-
}
|
|
91
|
-
}), /*#__PURE__*/_react.default.createElement(_icons.HolderOutlined, {
|
|
92
|
-
style: {
|
|
93
|
-
color: '#999',
|
|
94
|
-
cursor: 'grab'
|
|
95
|
-
}
|
|
96
|
-
}), /*#__PURE__*/_react.default.createElement(_antd.Input, {
|
|
97
|
-
value: item.headerName || '',
|
|
98
|
-
onChange: function onChange(e) {
|
|
99
|
-
if (props.node) {
|
|
100
|
-
props.node.setDataValue('headerName', e.target.value);
|
|
101
|
-
}
|
|
102
|
-
},
|
|
103
|
-
bordered: false,
|
|
104
|
-
placeholder: "\u8F93\u5165\u540D\u79F0",
|
|
105
|
-
style: {
|
|
106
|
-
flex: 1
|
|
107
|
-
}
|
|
108
|
-
}));
|
|
109
|
-
};
|
|
54
|
+
// 名称列渲染器已移至独立文件 ColumnNameCellRenderer.tsx
|
|
110
55
|
|
|
111
56
|
/** 宽度输入 */
|
|
112
57
|
var WidthCellRenderer = function WidthCellRenderer(props) {
|
|
@@ -121,6 +66,7 @@ var WidthCellRenderer = function WidthCellRenderer(props) {
|
|
|
121
66
|
},
|
|
122
67
|
min: 50,
|
|
123
68
|
max: 1000,
|
|
69
|
+
size: "small",
|
|
124
70
|
style: {
|
|
125
71
|
width: '100%'
|
|
126
72
|
}
|
|
@@ -226,16 +172,47 @@ var PinnedCellRenderer = function PinnedCellRenderer(props) {
|
|
|
226
172
|
});
|
|
227
173
|
};
|
|
228
174
|
|
|
175
|
+
/** 对齐方式渲染器 */
|
|
176
|
+
var AlignmentCellRenderer = function AlignmentCellRenderer(props) {
|
|
177
|
+
var item = props.data;
|
|
178
|
+
if (!item || item.type !== 'column') return /*#__PURE__*/_react.default.createElement("span", null, "-");
|
|
179
|
+
|
|
180
|
+
// 标准化 cellClass 值,默认为左对齐
|
|
181
|
+
var normalizedValue = item.cellClass || 'custom-cell-left';
|
|
182
|
+
return /*#__PURE__*/_react.default.createElement(_antd.Select, {
|
|
183
|
+
value: normalizedValue,
|
|
184
|
+
onChange: function onChange(val) {
|
|
185
|
+
if (props.node) {
|
|
186
|
+
props.node.setDataValue('cellClass', val);
|
|
187
|
+
}
|
|
188
|
+
},
|
|
189
|
+
style: {
|
|
190
|
+
width: '100%'
|
|
191
|
+
},
|
|
192
|
+
options: [{
|
|
193
|
+
value: 'custom-cell-left',
|
|
194
|
+
label: '左对齐'
|
|
195
|
+
}, {
|
|
196
|
+
value: 'custom-cell-centered',
|
|
197
|
+
label: '居中对齐'
|
|
198
|
+
}, {
|
|
199
|
+
value: 'custom-cell-right',
|
|
200
|
+
label: '右对齐'
|
|
201
|
+
}],
|
|
202
|
+
size: "small"
|
|
203
|
+
});
|
|
204
|
+
};
|
|
205
|
+
|
|
229
206
|
/** 操作列 */
|
|
230
207
|
var ActionCellRenderer = function ActionCellRenderer(props) {
|
|
231
208
|
var item = props.data;
|
|
232
209
|
if (!item) return null;
|
|
233
210
|
|
|
234
211
|
// 从 props 中获取自定义参数
|
|
235
|
-
var
|
|
236
|
-
onDelete =
|
|
237
|
-
onAddChildGroup =
|
|
238
|
-
simple =
|
|
212
|
+
var _ref = props,
|
|
213
|
+
onDelete = _ref.onDelete,
|
|
214
|
+
onAddChildGroup = _ref.onAddChildGroup,
|
|
215
|
+
simple = _ref.simple;
|
|
239
216
|
return /*#__PURE__*/_react.default.createElement(_antd.Space, {
|
|
240
217
|
size: "small"
|
|
241
218
|
}, !simple && item.type === 'group' && /*#__PURE__*/_react.default.createElement(_antd.Button, {
|
|
@@ -260,13 +237,13 @@ var ActionCellRenderer = function ActionCellRenderer(props) {
|
|
|
260
237
|
|
|
261
238
|
// ==================== 主组件 ====================
|
|
262
239
|
|
|
263
|
-
var ColumnConfigTable = function ColumnConfigTable(
|
|
264
|
-
var items =
|
|
265
|
-
onChange =
|
|
266
|
-
|
|
267
|
-
simple =
|
|
268
|
-
|
|
269
|
-
scrollY =
|
|
240
|
+
var ColumnConfigTable = function ColumnConfigTable(_ref2) {
|
|
241
|
+
var items = _ref2.items,
|
|
242
|
+
onChange = _ref2.onChange,
|
|
243
|
+
_ref2$simple = _ref2.simple,
|
|
244
|
+
simple = _ref2$simple === void 0 ? false : _ref2$simple,
|
|
245
|
+
_ref2$scrollY = _ref2.scrollY,
|
|
246
|
+
scrollY = _ref2$scrollY === void 0 ? 480 : _ref2$scrollY;
|
|
270
247
|
var _useState = (0, _react.useState)(items),
|
|
271
248
|
_useState2 = _slicedToArray(_useState, 2),
|
|
272
249
|
localItems = _useState2[0],
|
|
@@ -606,6 +583,12 @@ var ColumnConfigTable = function ColumnConfigTable(_ref3) {
|
|
|
606
583
|
|
|
607
584
|
// 列定义
|
|
608
585
|
var columnDefs = (0, _react.useMemo)(function () {
|
|
586
|
+
// 通用单元格样式 - 垂直居中
|
|
587
|
+
var commonCellStyle = {
|
|
588
|
+
display: 'flex',
|
|
589
|
+
alignItems: 'center',
|
|
590
|
+
height: '100%'
|
|
591
|
+
};
|
|
609
592
|
var cols = [{
|
|
610
593
|
field: 'type',
|
|
611
594
|
headerName: '类型',
|
|
@@ -613,6 +596,7 @@ var ColumnConfigTable = function ColumnConfigTable(_ref3) {
|
|
|
613
596
|
minWidth: 100,
|
|
614
597
|
maxWidth: 150,
|
|
615
598
|
cellRenderer: TypeCellRenderer,
|
|
599
|
+
cellStyle: commonCellStyle,
|
|
616
600
|
rowDrag: true,
|
|
617
601
|
suppressSizeToFit: true
|
|
618
602
|
}, {
|
|
@@ -620,37 +604,49 @@ var ColumnConfigTable = function ColumnConfigTable(_ref3) {
|
|
|
620
604
|
headerName: '名称',
|
|
621
605
|
flex: 1,
|
|
622
606
|
minWidth: 200,
|
|
623
|
-
cellRenderer:
|
|
607
|
+
cellRenderer: _ColumnNameCellRenderer.ColumnNameCellRenderer,
|
|
624
608
|
cellRendererParams: {
|
|
625
609
|
expandedKeys: expandedKeys,
|
|
626
610
|
onToggleExpand: toggleExpand,
|
|
627
611
|
allItems: localItems
|
|
628
612
|
}
|
|
613
|
+
// 名称列不需要 cellStyle,因为渲染器内部已经处理了
|
|
629
614
|
}, {
|
|
630
615
|
field: 'width',
|
|
631
616
|
headerName: '宽度',
|
|
632
617
|
width: 100,
|
|
633
|
-
cellRenderer: WidthCellRenderer
|
|
618
|
+
cellRenderer: WidthCellRenderer,
|
|
619
|
+
cellStyle: commonCellStyle
|
|
634
620
|
}, {
|
|
635
621
|
field: 'flex',
|
|
636
622
|
headerName: '占满',
|
|
637
623
|
width: 120,
|
|
638
|
-
cellRenderer: FlexCellRenderer
|
|
624
|
+
cellRenderer: FlexCellRenderer,
|
|
625
|
+
cellStyle: commonCellStyle
|
|
639
626
|
}, {
|
|
640
627
|
field: 'pinned',
|
|
641
628
|
headerName: '固定',
|
|
642
629
|
width: 120,
|
|
643
|
-
cellRenderer: PinnedCellRenderer
|
|
630
|
+
cellRenderer: PinnedCellRenderer,
|
|
631
|
+
cellStyle: commonCellStyle
|
|
632
|
+
}, {
|
|
633
|
+
field: 'cellClass',
|
|
634
|
+
headerName: '对齐',
|
|
635
|
+
width: 120,
|
|
636
|
+
cellRenderer: AlignmentCellRenderer,
|
|
637
|
+
cellStyle: commonCellStyle
|
|
644
638
|
}, {
|
|
645
639
|
field: 'hide',
|
|
646
640
|
headerName: '隐藏',
|
|
647
641
|
width: 80,
|
|
648
|
-
cellRenderer: createSwitchRenderer('hide')
|
|
642
|
+
cellRenderer: createSwitchRenderer('hide'),
|
|
643
|
+
cellStyle: commonCellStyle
|
|
649
644
|
}, {
|
|
650
645
|
field: 'suppressHeaderFilterButton',
|
|
651
646
|
headerName: '列过滤',
|
|
652
647
|
width: 80,
|
|
653
|
-
cellRenderer: SuppressFilterButtonRenderer
|
|
648
|
+
cellRenderer: SuppressFilterButtonRenderer,
|
|
649
|
+
cellStyle: commonCellStyle
|
|
654
650
|
}, {
|
|
655
651
|
headerName: '操作',
|
|
656
652
|
width: 200,
|
|
@@ -660,7 +656,8 @@ var ColumnConfigTable = function ColumnConfigTable(_ref3) {
|
|
|
660
656
|
onDelete: handleDelete,
|
|
661
657
|
onAddChildGroup: handleAddChildGroup,
|
|
662
658
|
simple: simple
|
|
663
|
-
}
|
|
659
|
+
},
|
|
660
|
+
cellStyle: commonCellStyle
|
|
664
661
|
}];
|
|
665
662
|
return cols;
|
|
666
663
|
}, [handleDelete, handleAddChildGroup, simple, expandedKeys, toggleExpand, localItems]);
|
|
@@ -728,7 +725,13 @@ var ColumnConfigTable = function ColumnConfigTable(_ref3) {
|
|
|
728
725
|
rowDragEntireRow: true,
|
|
729
726
|
suppressMoveWhenRowDragging: true,
|
|
730
727
|
suppressMovableColumns: true,
|
|
731
|
-
domLayout: "normal"
|
|
728
|
+
domLayout: "normal",
|
|
729
|
+
getRowHeight: function getRowHeight(params) {
|
|
730
|
+
var item = params.data;
|
|
731
|
+
// 如果已修改,显示双行布局(原始名称 + 当前名称)
|
|
732
|
+
var isModified = (item === null || item === void 0 ? void 0 : item.originalHeaderName) && (item === null || item === void 0 ? void 0 : item.headerName) !== (item === null || item === void 0 ? void 0 : item.originalHeaderName);
|
|
733
|
+
return isModified ? 56 : 40;
|
|
734
|
+
}
|
|
732
735
|
})));
|
|
733
736
|
};
|
|
734
737
|
var _default = exports.default = ColumnConfigTable;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 列名称单元格渲染器 - 分层叠加式设计
|
|
3
|
+
*
|
|
4
|
+
* 设计特点:
|
|
5
|
+
* - 垂直分层布局,原始字段(field)在上,编辑区域在下
|
|
6
|
+
* - 使用视觉层次区分只读和可编辑信息
|
|
7
|
+
* - 支持快速重置功能
|
|
8
|
+
* - 显示修改状态指示
|
|
9
|
+
*/
|
|
10
|
+
import React from 'react';
|
|
11
|
+
import type { ICellRendererParams } from 'ag-grid-community';
|
|
12
|
+
import type { FlatColumnItem } from './columnGroupTypes';
|
|
13
|
+
interface ColumnNameCellRendererProps extends ICellRendererParams<FlatColumnItem> {
|
|
14
|
+
expandedKeys?: Set<string>;
|
|
15
|
+
onToggleExpand?: (id: string) => void;
|
|
16
|
+
allItems?: FlatColumnItem[];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* 列名称单元格渲染器
|
|
20
|
+
*/
|
|
21
|
+
export declare const ColumnNameCellRenderer: React.FC<ColumnNameCellRendererProps>;
|
|
22
|
+
export default ColumnNameCellRenderer;
|
|
@@ -0,0 +1,211 @@
|
|
|
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 = exports.ColumnNameCellRenderer = void 0;
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
var _antd = require("antd");
|
|
10
|
+
var _icons = require("@ant-design/icons");
|
|
11
|
+
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); }
|
|
12
|
+
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; }
|
|
13
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
14
|
+
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
|
+
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
|
+
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
|
+
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
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } /**
|
|
19
|
+
* 列名称单元格渲染器 - 分层叠加式设计
|
|
20
|
+
*
|
|
21
|
+
* 设计特点:
|
|
22
|
+
* - 垂直分层布局,原始字段(field)在上,编辑区域在下
|
|
23
|
+
* - 使用视觉层次区分只读和可编辑信息
|
|
24
|
+
* - 支持快速重置功能
|
|
25
|
+
* - 显示修改状态指示
|
|
26
|
+
*/
|
|
27
|
+
var Text = _antd.Typography.Text;
|
|
28
|
+
/**
|
|
29
|
+
* 列名称单元格渲染器
|
|
30
|
+
*/
|
|
31
|
+
var ColumnNameCellRenderer = exports.ColumnNameCellRenderer = function ColumnNameCellRenderer(props) {
|
|
32
|
+
var item = props.data,
|
|
33
|
+
node = props.node,
|
|
34
|
+
expandedKeys = props.expandedKeys,
|
|
35
|
+
onToggleExpand = props.onToggleExpand,
|
|
36
|
+
allItems = props.allItems;
|
|
37
|
+
var _useState = (0, _react.useState)(false),
|
|
38
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
39
|
+
isEditing = _useState2[0],
|
|
40
|
+
setIsEditing = _useState2[1];
|
|
41
|
+
var _useState3 = (0, _react.useState)((item === null || item === void 0 ? void 0 : item.headerName) || ''),
|
|
42
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
43
|
+
localValue = _useState4[0],
|
|
44
|
+
setLocalValue = _useState4[1];
|
|
45
|
+
|
|
46
|
+
// 计算缩进
|
|
47
|
+
var paddingLeft = ((item === null || item === void 0 ? void 0 : item.level) || 0) * 20;
|
|
48
|
+
|
|
49
|
+
// 检查是否有子节点
|
|
50
|
+
var hasChildren = (0, _react.useMemo)(function () {
|
|
51
|
+
return allItems === null || allItems === void 0 ? void 0 : allItems.some(function (i) {
|
|
52
|
+
return i.parentId === (item === null || item === void 0 ? void 0 : item.id);
|
|
53
|
+
});
|
|
54
|
+
}, [allItems, item === null || item === void 0 ? void 0 : item.id]);
|
|
55
|
+
var isExpanded = expandedKeys === null || expandedKeys === void 0 ? void 0 : expandedKeys.has((item === null || item === void 0 ? void 0 : item.id) || '');
|
|
56
|
+
|
|
57
|
+
// 判断是否已修改 (对比当前 headerName 和原始 originalHeaderName)
|
|
58
|
+
var isModified = (0, _react.useMemo)(function () {
|
|
59
|
+
return (item === null || item === void 0 ? void 0 : item.originalHeaderName) && (item === null || item === void 0 ? void 0 : item.headerName) !== (item === null || item === void 0 ? void 0 : item.originalHeaderName);
|
|
60
|
+
}, [item === null || item === void 0 ? void 0 : item.originalHeaderName, item === null || item === void 0 ? void 0 : item.headerName]);
|
|
61
|
+
|
|
62
|
+
// 处理名称修改
|
|
63
|
+
var handleChange = (0, _react.useCallback)(function (e) {
|
|
64
|
+
setLocalValue(e.target.value);
|
|
65
|
+
}, []);
|
|
66
|
+
|
|
67
|
+
// 处理失焦保存
|
|
68
|
+
var handleBlur = (0, _react.useCallback)(function () {
|
|
69
|
+
setIsEditing(false);
|
|
70
|
+
if (localValue !== (item === null || item === void 0 ? void 0 : item.headerName) && node) {
|
|
71
|
+
node.setDataValue('headerName', localValue);
|
|
72
|
+
}
|
|
73
|
+
}, [localValue, item === null || item === void 0 ? void 0 : item.headerName, node]);
|
|
74
|
+
|
|
75
|
+
// 处理按下 Enter 键
|
|
76
|
+
var handlePressEnter = (0, _react.useCallback)(function (e) {
|
|
77
|
+
e.currentTarget.blur();
|
|
78
|
+
}, []);
|
|
79
|
+
|
|
80
|
+
// 处理按下 Escape 键
|
|
81
|
+
var handleKeyDown = (0, _react.useCallback)(function (e) {
|
|
82
|
+
if (e.key === 'Escape') {
|
|
83
|
+
setLocalValue((item === null || item === void 0 ? void 0 : item.headerName) || '');
|
|
84
|
+
e.currentTarget.blur();
|
|
85
|
+
}
|
|
86
|
+
}, [item === null || item === void 0 ? void 0 : item.headerName]);
|
|
87
|
+
|
|
88
|
+
// 处理聚焦
|
|
89
|
+
var handleFocus = (0, _react.useCallback)(function () {
|
|
90
|
+
setIsEditing(true);
|
|
91
|
+
}, []);
|
|
92
|
+
|
|
93
|
+
// 处理重置
|
|
94
|
+
var handleReset = (0, _react.useCallback)(function () {
|
|
95
|
+
if (item !== null && item !== void 0 && item.originalHeaderName && node) {
|
|
96
|
+
var originalValue = item.originalHeaderName;
|
|
97
|
+
setLocalValue(originalValue);
|
|
98
|
+
node.setDataValue('headerName', originalValue);
|
|
99
|
+
}
|
|
100
|
+
}, [item === null || item === void 0 ? void 0 : item.originalHeaderName, node]);
|
|
101
|
+
if (!item) return null;
|
|
102
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
|
103
|
+
style: {
|
|
104
|
+
display: 'flex',
|
|
105
|
+
alignItems: 'center',
|
|
106
|
+
gap: 8,
|
|
107
|
+
paddingLeft: paddingLeft,
|
|
108
|
+
width: '100%',
|
|
109
|
+
height: '100%',
|
|
110
|
+
minHeight: isModified ? '56px' : '40px'
|
|
111
|
+
}
|
|
112
|
+
}, item.type === 'group' && hasChildren ? /*#__PURE__*/_react.default.createElement("span", {
|
|
113
|
+
onClick: function onClick() {
|
|
114
|
+
return onToggleExpand === null || onToggleExpand === void 0 ? void 0 : onToggleExpand(item.id);
|
|
115
|
+
},
|
|
116
|
+
style: {
|
|
117
|
+
cursor: 'pointer',
|
|
118
|
+
width: 16,
|
|
119
|
+
display: 'inline-block',
|
|
120
|
+
fontSize: '12px',
|
|
121
|
+
color: '#666'
|
|
122
|
+
}
|
|
123
|
+
}, isExpanded ? '▼' : '▶') : /*#__PURE__*/_react.default.createElement("span", {
|
|
124
|
+
style: {
|
|
125
|
+
width: 16,
|
|
126
|
+
display: 'inline-block'
|
|
127
|
+
}
|
|
128
|
+
}), /*#__PURE__*/_react.default.createElement(_icons.HolderOutlined, {
|
|
129
|
+
style: {
|
|
130
|
+
color: '#999',
|
|
131
|
+
cursor: 'grab',
|
|
132
|
+
fontSize: '14px'
|
|
133
|
+
}
|
|
134
|
+
}), /*#__PURE__*/_react.default.createElement("div", {
|
|
135
|
+
style: {
|
|
136
|
+
flex: 1,
|
|
137
|
+
display: 'flex',
|
|
138
|
+
flexDirection: 'column',
|
|
139
|
+
gap: 2,
|
|
140
|
+
justifyContent: 'center'
|
|
141
|
+
}
|
|
142
|
+
}, item.originalHeaderName && isModified && /*#__PURE__*/_react.default.createElement("div", {
|
|
143
|
+
style: {
|
|
144
|
+
display: 'flex',
|
|
145
|
+
alignItems: 'center',
|
|
146
|
+
gap: 4,
|
|
147
|
+
height: '16px'
|
|
148
|
+
}
|
|
149
|
+
}, /*#__PURE__*/_react.default.createElement(Text, {
|
|
150
|
+
type: "secondary",
|
|
151
|
+
style: {
|
|
152
|
+
fontSize: '11px',
|
|
153
|
+
color: '#8c8c8c',
|
|
154
|
+
lineHeight: '16px'
|
|
155
|
+
}
|
|
156
|
+
}, "\u539F\u59CB: ", item.originalHeaderName), /*#__PURE__*/_react.default.createElement(_antd.Tooltip, {
|
|
157
|
+
title: "\u5DF2\u4FEE\u6539: ".concat(item.originalHeaderName, " \u2192 ").concat(item.headerName)
|
|
158
|
+
}, /*#__PURE__*/_react.default.createElement(_icons.InfoCircleOutlined, {
|
|
159
|
+
style: {
|
|
160
|
+
fontSize: '11px',
|
|
161
|
+
color: '#1890ff',
|
|
162
|
+
cursor: 'help'
|
|
163
|
+
}
|
|
164
|
+
}))), /*#__PURE__*/_react.default.createElement("div", {
|
|
165
|
+
style: {
|
|
166
|
+
display: 'flex',
|
|
167
|
+
alignItems: 'center',
|
|
168
|
+
gap: 4
|
|
169
|
+
}
|
|
170
|
+
}, /*#__PURE__*/_react.default.createElement(_antd.Input, {
|
|
171
|
+
value: isEditing ? localValue : item.headerName,
|
|
172
|
+
onChange: handleChange,
|
|
173
|
+
onFocus: handleFocus,
|
|
174
|
+
onBlur: handleBlur,
|
|
175
|
+
onPressEnter: handlePressEnter,
|
|
176
|
+
onKeyDown: handleKeyDown,
|
|
177
|
+
bordered: false,
|
|
178
|
+
placeholder: item.type === 'group' ? '输入分组名称' : '输入显示名称',
|
|
179
|
+
style: {
|
|
180
|
+
flex: 1,
|
|
181
|
+
fontSize: '14px',
|
|
182
|
+
fontWeight: item.type === 'group' ? 600 : 400,
|
|
183
|
+
borderBottom: isEditing ? '1px solid #1890ff' : '1px solid transparent',
|
|
184
|
+
transition: 'border-color 0.2s',
|
|
185
|
+
padding: '0 4px',
|
|
186
|
+
color: isModified ? '#1890ff' : 'rgba(0, 0, 0, 0.85)'
|
|
187
|
+
}
|
|
188
|
+
}), isModified && /*#__PURE__*/_react.default.createElement(_antd.Tooltip, {
|
|
189
|
+
title: "\u91CD\u7F6E\u4E3A\u539F\u59CB\u540D\u79F0"
|
|
190
|
+
}, /*#__PURE__*/_react.default.createElement(_antd.Button, {
|
|
191
|
+
type: "text",
|
|
192
|
+
size: "small",
|
|
193
|
+
icon: /*#__PURE__*/_react.default.createElement(_icons.UndoOutlined, null),
|
|
194
|
+
onClick: handleReset,
|
|
195
|
+
style: {
|
|
196
|
+
minWidth: '24px',
|
|
197
|
+
width: '24px',
|
|
198
|
+
height: '24px',
|
|
199
|
+
padding: 0,
|
|
200
|
+
opacity: 0.6,
|
|
201
|
+
transition: 'opacity 0.2s'
|
|
202
|
+
},
|
|
203
|
+
onMouseEnter: function onMouseEnter(e) {
|
|
204
|
+
return e.currentTarget.style.opacity = '1';
|
|
205
|
+
},
|
|
206
|
+
onMouseLeave: function onMouseLeave(e) {
|
|
207
|
+
return e.currentTarget.style.opacity = '0.6';
|
|
208
|
+
}
|
|
209
|
+
})))));
|
|
210
|
+
};
|
|
211
|
+
var _default = exports.default = ColumnNameCellRenderer;
|