@nokecy/qc-ui 1.1.17 → 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.
Files changed (30) hide show
  1. package/dist/cjs/ag-grid-plus/ag-gridPlus.js +23 -0
  2. package/dist/cjs/ag-grid-plus/context/gridContext.d.ts +5 -0
  3. package/dist/cjs/ag-grid-plus/index.less +13 -0
  4. package/dist/cjs/ag-grid-plus/setting/ColumnConfigTable.js +79 -76
  5. package/dist/cjs/ag-grid-plus/setting/ColumnNameCellRenderer.d.ts +22 -0
  6. package/dist/cjs/ag-grid-plus/setting/ColumnNameCellRenderer.js +211 -0
  7. package/dist/cjs/ag-grid-plus/setting/ColumnSetting.js +133 -70
  8. package/dist/cjs/ag-grid-plus/setting/DebounceInputs.d.ts +1 -0
  9. package/dist/cjs/ag-grid-plus/setting/DebounceInputs.js +2 -0
  10. package/dist/cjs/ag-grid-plus/setting/QuerySchemeManager.js +64 -54
  11. package/dist/cjs/ag-grid-plus/setting/columnGroupTypes.d.ts +3 -1
  12. package/dist/cjs/ag-grid-plus/setting/columnGroupUtils.d.ts +2 -1
  13. package/dist/cjs/ag-grid-plus/setting/columnGroupUtils.js +49 -9
  14. package/dist/esm/ag-grid-plus/ag-gridPlus.js +23 -0
  15. package/dist/esm/ag-grid-plus/context/gridContext.d.ts +5 -0
  16. package/dist/esm/ag-grid-plus/index.less +13 -0
  17. package/dist/esm/ag-grid-plus/setting/ColumnConfigTable.js +81 -78
  18. package/dist/esm/ag-grid-plus/setting/ColumnNameCellRenderer.d.ts +22 -0
  19. package/dist/esm/ag-grid-plus/setting/ColumnNameCellRenderer.js +204 -0
  20. package/dist/esm/ag-grid-plus/setting/ColumnSetting.js +133 -70
  21. package/dist/esm/ag-grid-plus/setting/DebounceInputs.d.ts +1 -0
  22. package/dist/esm/ag-grid-plus/setting/DebounceInputs.js +2 -0
  23. package/dist/esm/ag-grid-plus/setting/QuerySchemeManager.js +64 -54
  24. package/dist/esm/ag-grid-plus/setting/columnGroupTypes.d.ts +3 -1
  25. package/dist/esm/ag-grid-plus/setting/columnGroupUtils.d.ts +2 -1
  26. package/dist/esm/ag-grid-plus/setting/columnGroupUtils.js +49 -9
  27. package/dist/esm/standardFormDialog/withStandardForm.d.ts +2 -2
  28. package/dist/umd/qc-ui.min.css +1 -1
  29. package/dist/umd/qc-ui.min.js +1 -1
  30. 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 _ref2 = props,
236
- onDelete = _ref2.onDelete,
237
- onAddChildGroup = _ref2.onAddChildGroup,
238
- simple = _ref2.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(_ref3) {
264
- var items = _ref3.items,
265
- onChange = _ref3.onChange,
266
- _ref3$simple = _ref3.simple,
267
- simple = _ref3$simple === void 0 ? false : _ref3$simple,
268
- _ref3$scrollY = _ref3.scrollY,
269
- scrollY = _ref3$scrollY === void 0 ? 480 : _ref3$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: NameCellRenderer,
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;