@nokecy/qc-ui 1.0.58 → 1.0.60

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 (96) hide show
  1. package/dist/cjs/ag-grid-plus/ag-gridPlus.js +2 -4
  2. package/dist/cjs/array-table/index.js +194 -7
  3. package/dist/cjs/deleteConfirm/index.d.ts +31 -0
  4. package/dist/cjs/deleteConfirm/index.js +64 -0
  5. package/dist/cjs/editable/index.js +104 -21
  6. package/dist/cjs/fullScreenAlert/index.d.ts +25 -4
  7. package/dist/cjs/fullScreenAlert/index.js +50 -17
  8. package/dist/cjs/generatedListPage/ConfigurableToolbar.d.ts +35 -0
  9. package/dist/cjs/generatedListPage/ConfigurableToolbar.js +179 -0
  10. package/dist/cjs/generatedListPage/GeneratedListPage.d.ts +8 -0
  11. package/dist/cjs/generatedListPage/GeneratedListPage.js +545 -0
  12. package/dist/cjs/generatedListPage/OptionsColumn.d.ts +9 -0
  13. package/dist/cjs/generatedListPage/OptionsColumn.js +135 -0
  14. package/dist/cjs/generatedListPage/PerformanceMonitor.d.ts +55 -0
  15. package/dist/cjs/generatedListPage/PerformanceMonitor.js +277 -0
  16. package/dist/cjs/generatedListPage/RequestManager.d.ts +97 -0
  17. package/dist/cjs/generatedListPage/RequestManager.js +404 -0
  18. package/dist/cjs/generatedListPage/_utils/AccessWrapper.d.ts +16 -0
  19. package/dist/cjs/generatedListPage/_utils/AccessWrapper.js +26 -0
  20. package/dist/cjs/generatedListPage/_utils/defaultHandlers.d.ts +22 -0
  21. package/dist/cjs/generatedListPage/_utils/defaultHandlers.js +127 -0
  22. package/dist/cjs/generatedListPage/index.d.ts +20 -0
  23. package/dist/cjs/generatedListPage/index.js +92 -0
  24. package/dist/cjs/generatedListPage/types.d.ts +221 -0
  25. package/dist/cjs/generatedListPage/types.js +5 -0
  26. package/dist/cjs/generatedListPage/usePermissionCheck.d.ts +66 -0
  27. package/dist/cjs/generatedListPage/usePermissionCheck.js +150 -0
  28. package/dist/cjs/generatedListPage/useRequestManager.d.ts +35 -0
  29. package/dist/cjs/generatedListPage/useRequestManager.js +121 -0
  30. package/dist/cjs/importModal/index.d.ts +21 -3
  31. package/dist/cjs/importModal/index.js +30 -10
  32. package/dist/cjs/index.d.ts +9 -1
  33. package/dist/cjs/index.js +21 -0
  34. package/dist/cjs/standardFormDialog/FormValidation.d.ts +150 -0
  35. package/dist/cjs/standardFormDialog/FormValidation.js +229 -0
  36. package/dist/cjs/standardFormDialog/PortalManager.d.ts +94 -0
  37. package/dist/cjs/standardFormDialog/PortalManager.js +259 -0
  38. package/dist/cjs/standardFormDialog/StandardFormDialog.d.ts +10 -0
  39. package/dist/cjs/standardFormDialog/StandardFormDialog.js +516 -0
  40. package/dist/cjs/standardFormDialog/index.d.ts +7 -0
  41. package/dist/cjs/standardFormDialog/index.js +83 -0
  42. package/dist/cjs/standardFormDialog/types.d.ts +107 -0
  43. package/dist/cjs/standardFormDialog/types.js +5 -0
  44. package/dist/cjs/standardFormDialog/useStandardFormSchema.d.ts +68 -0
  45. package/dist/cjs/standardFormDialog/useStandardFormSchema.js +197 -0
  46. package/dist/cjs/standardFormDialog/withStandardForm.d.ts +193 -0
  47. package/dist/cjs/standardFormDialog/withStandardForm.js +388 -0
  48. package/dist/esm/ag-grid-plus/ag-gridPlus.js +2 -4
  49. package/dist/esm/array-table/index.js +194 -7
  50. package/dist/esm/deleteConfirm/index.d.ts +31 -0
  51. package/dist/esm/deleteConfirm/index.js +57 -0
  52. package/dist/esm/editable/index.js +105 -22
  53. package/dist/esm/fullScreenAlert/index.d.ts +25 -4
  54. package/dist/esm/fullScreenAlert/index.js +50 -18
  55. package/dist/esm/generatedListPage/ConfigurableToolbar.d.ts +35 -0
  56. package/dist/esm/generatedListPage/ConfigurableToolbar.js +171 -0
  57. package/dist/esm/generatedListPage/GeneratedListPage.d.ts +8 -0
  58. package/dist/esm/generatedListPage/GeneratedListPage.js +535 -0
  59. package/dist/esm/generatedListPage/OptionsColumn.d.ts +9 -0
  60. package/dist/esm/generatedListPage/OptionsColumn.js +127 -0
  61. package/dist/esm/generatedListPage/PerformanceMonitor.d.ts +55 -0
  62. package/dist/esm/generatedListPage/PerformanceMonitor.js +272 -0
  63. package/dist/esm/generatedListPage/RequestManager.d.ts +97 -0
  64. package/dist/esm/generatedListPage/RequestManager.js +398 -0
  65. package/dist/esm/generatedListPage/_utils/AccessWrapper.d.ts +16 -0
  66. package/dist/esm/generatedListPage/_utils/AccessWrapper.js +20 -0
  67. package/dist/esm/generatedListPage/_utils/defaultHandlers.d.ts +22 -0
  68. package/dist/esm/generatedListPage/_utils/defaultHandlers.js +122 -0
  69. package/dist/esm/generatedListPage/index.d.ts +20 -0
  70. package/dist/esm/generatedListPage/index.js +26 -0
  71. package/dist/esm/generatedListPage/types.d.ts +221 -0
  72. package/dist/esm/generatedListPage/types.js +1 -0
  73. package/dist/esm/generatedListPage/usePermissionCheck.d.ts +66 -0
  74. package/dist/esm/generatedListPage/usePermissionCheck.js +145 -0
  75. package/dist/esm/generatedListPage/useRequestManager.d.ts +35 -0
  76. package/dist/esm/generatedListPage/useRequestManager.js +116 -0
  77. package/dist/esm/importModal/index.d.ts +21 -3
  78. package/dist/esm/importModal/index.js +29 -10
  79. package/dist/esm/index.d.ts +9 -1
  80. package/dist/esm/index.js +6 -1
  81. package/dist/esm/standardFormDialog/FormValidation.d.ts +150 -0
  82. package/dist/esm/standardFormDialog/FormValidation.js +223 -0
  83. package/dist/esm/standardFormDialog/PortalManager.d.ts +94 -0
  84. package/dist/esm/standardFormDialog/PortalManager.js +253 -0
  85. package/dist/esm/standardFormDialog/StandardFormDialog.d.ts +10 -0
  86. package/dist/esm/standardFormDialog/StandardFormDialog.js +508 -0
  87. package/dist/esm/standardFormDialog/index.d.ts +7 -0
  88. package/dist/esm/standardFormDialog/index.js +6 -0
  89. package/dist/esm/standardFormDialog/types.d.ts +107 -0
  90. package/dist/esm/standardFormDialog/types.js +1 -0
  91. package/dist/esm/standardFormDialog/useStandardFormSchema.d.ts +68 -0
  92. package/dist/esm/standardFormDialog/useStandardFormSchema.js +191 -0
  93. package/dist/esm/standardFormDialog/withStandardForm.d.ts +193 -0
  94. package/dist/esm/standardFormDialog/withStandardForm.js +382 -0
  95. package/dist/umd/qc-ui.min.js +1 -1
  96. package/package.json +1 -1
@@ -406,10 +406,8 @@ function AgGridPlus(props) {
406
406
  var shouldCalculate = !valueEnum || valueEnum.length === 0;
407
407
  return {
408
408
  type: "number",
409
- calculateType: shouldCalculate ? "sum" : false,
410
- cellStyle: {
411
- 'text-align': 'right'
412
- }
409
+ calculateType: shouldCalculate ? "sum" : false
410
+ // cellStyle: { 'text-align': 'right' }
413
411
  };
414
412
  }
415
413
  return undefined;
@@ -24,6 +24,7 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
24
24
  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; }
25
25
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
26
26
  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); }
27
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
27
28
  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); }
28
29
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
29
30
  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."); }
@@ -60,8 +61,7 @@ var ArrayTable = (0, _react2.observer)(function (props) {
60
61
  var addition = (0, _utils.useAddition)();
61
62
  var _useGridPlusColumnSta = (0, _agGridPlus.useGridPlusColumnState)(),
62
63
  onSaveColumnState = _useGridPlusColumnSta.onSaveColumnState,
63
- gridPlusColumnState = _useGridPlusColumnSta.columnState,
64
- extensibleColumns = _useGridPlusColumnSta.extensibleColumns;
64
+ gridPlusColumnState = _useGridPlusColumnSta.columnState;
65
65
  (0, _react.useEffect)(function () {
66
66
  if (props.gridKey && gridPlusColumnState && gridPlusColumnState[props.gridKey] && apiRef.current) {
67
67
  setTimeout(function () {
@@ -71,7 +71,7 @@ var ArrayTable = (0, _react2.observer)(function (props) {
71
71
  });
72
72
  }, 10);
73
73
  }
74
- }, [gridPlusColumnState, apiRef.current]);
74
+ }, [gridPlusColumnState, props.gridKey]);
75
75
 
76
76
  //@ts-ignore
77
77
  if (columns.length > 0) {
@@ -98,12 +98,88 @@ var ArrayTable = (0, _react2.observer)(function (props) {
98
98
  arr.splice(fromIndex, 1);
99
99
  arr.splice(toIndex, 0, element);
100
100
  }
101
- }, []);
101
+ }, [field]);
102
102
  var onColumnStateChanged = function onColumnStateChanged(columnState) {
103
103
  if (props.gridKey) {
104
104
  onSaveColumnState && onSaveColumnState(props.gridKey, columnState);
105
105
  }
106
106
  };
107
+
108
+ // 通用的聚焦函数
109
+ var focusInputInCell = (0, _react.useCallback)(function (cell) {
110
+ // 首先查找Editable包装的元素
111
+ var editableElement = cell.querySelector('.ant-formily-editable');
112
+ if (editableElement) {
113
+ // 检查Editable是否已经处于编辑状态
114
+ var isEditing = editableElement.getAttribute('data-editable-state') === 'editing';
115
+ if (isEditing) {
116
+ // 如果已经处于编辑状态,查找输入框并直接聚焦
117
+ var existingInput = editableElement.querySelector('input:not([readonly]):not([disabled]), textarea:not([readonly]):not([disabled])');
118
+ if (existingInput) {
119
+ existingInput.focus();
120
+ if ('setSelectionRange' in existingInput && existingInput.type !== 'number' && existingInput.type !== 'date') {
121
+ var _existingInput$value;
122
+ var length = ((_existingInput$value = existingInput.value) === null || _existingInput$value === void 0 ? void 0 : _existingInput$value.length) || 0;
123
+ setTimeout(function () {
124
+ existingInput.setSelectionRange(length, length);
125
+ }, 10);
126
+ }
127
+ }
128
+ } else {
129
+ // 如果还没有进入编辑状态,触发编辑状态
130
+ editableElement.click();
131
+ var focusEvent = new Event('focus', {
132
+ bubbles: true
133
+ });
134
+ editableElement.dispatchEvent(focusEvent);
135
+
136
+ // 延迟查找输入框并设置光标
137
+ setTimeout(function () {
138
+ var newInput = editableElement.querySelector('input:not([readonly]):not([disabled]), textarea:not([readonly]):not([disabled])');
139
+ if (newInput) {
140
+ newInput.focus();
141
+ if ('setSelectionRange' in newInput && newInput.type !== 'number' && newInput.type !== 'date') {
142
+ var _newInput$value;
143
+ var _length = ((_newInput$value = newInput.value) === null || _newInput$value === void 0 ? void 0 : _newInput$value.length) || 0;
144
+ setTimeout(function () {
145
+ newInput.setSelectionRange(_length, _length);
146
+ }, 10);
147
+ }
148
+ }
149
+ }, 150);
150
+ }
151
+ } else {
152
+ // 如果没有Editable包装,尝试多种选择器查找输入框
153
+ var inputElement = cell.querySelector('input:not([readonly]):not([disabled]), textarea:not([readonly]):not([disabled])');
154
+ if (!inputElement) {
155
+ // 尝试更宽泛的选择器
156
+ inputElement = cell.querySelector('input, textarea');
157
+ }
158
+ if (!inputElement) {
159
+ // 尝试查找Ant Design的输入框
160
+ inputElement = cell.querySelector('.ant-input');
161
+ }
162
+ if (!inputElement) {
163
+ // 查找任何可聚焦的元素
164
+ inputElement = cell.querySelector('[contenteditable="true"], [tabindex]');
165
+ }
166
+ if (inputElement) {
167
+ inputElement.focus();
168
+
169
+ // 将光标定位到末尾
170
+ if ('setSelectionRange' in inputElement && inputElement.type !== 'number' && inputElement.type !== 'date') {
171
+ var _inputElement$value;
172
+ var _length2 = ((_inputElement$value = inputElement.value) === null || _inputElement$value === void 0 ? void 0 : _inputElement$value.length) || 0;
173
+ setTimeout(function () {
174
+ inputElement.setSelectionRange(_length2, _length2);
175
+ }, 10);
176
+ }
177
+ } else {
178
+ // 尝试直接聚焦到单元格本身
179
+ cell.focus();
180
+ }
181
+ }
182
+ }, []);
107
183
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
108
184
  ref: ref,
109
185
  style: {
@@ -166,7 +242,120 @@ var ArrayTable = (0, _react2.observer)(function (props) {
166
242
  suppressColumnVirtualisation: true,
167
243
  gridOptions: {
168
244
  enableCellTextSelection: true,
169
- ensureDomOrder: true
245
+ ensureDomOrder: true,
246
+ suppressCopyRowsToClipboard: true,
247
+ suppressCopySingleCellRanges: true,
248
+ enterNavigatesVertically: true,
249
+ enterNavigatesVerticallyAfterEdit: true
250
+ },
251
+ onCellKeyDown: function onCellKeyDown(event) {
252
+ var keyEvent = event.event,
253
+ node = event.node,
254
+ colDef = event.colDef,
255
+ api = event.api;
256
+ if (!keyEvent) return;
257
+
258
+ // 处理上下左右键导航
259
+ if (keyEvent.key === 'ArrowDown' || keyEvent.key === 'ArrowUp' || keyEvent.key === 'ArrowLeft' || keyEvent.key === 'ArrowRight') {
260
+ var currentRowIndex = node.rowIndex;
261
+ var currentColId = colDef.field;
262
+ var targetRowIndex = currentRowIndex;
263
+ var targetColId = currentColId;
264
+
265
+ // 确定目标位置
266
+ if (keyEvent.key === 'ArrowDown') {
267
+ targetRowIndex = currentRowIndex + 1;
268
+ } else if (keyEvent.key === 'ArrowUp') {
269
+ targetRowIndex = currentRowIndex - 1;
270
+ } else if (keyEvent.key === 'ArrowLeft' || keyEvent.key === 'ArrowRight') {
271
+ // 对于左右键,使用AG-Grid的API获取列信息
272
+ var visibleColumns = api.getAllDisplayedColumns();
273
+ if (visibleColumns && visibleColumns.length > 0) {
274
+ // 找到当前列的索引
275
+ var currentColIndex = visibleColumns.findIndex(function (col) {
276
+ return col.getColId() === currentColId;
277
+ });
278
+ var targetColIndex;
279
+ if (keyEvent.key === 'ArrowLeft') {
280
+ targetColIndex = currentColIndex - 1;
281
+ } else {
282
+ targetColIndex = currentColIndex + 1;
283
+ }
284
+
285
+ // 检查目标列索引是否有效
286
+ if (targetColIndex >= 0 && targetColIndex < visibleColumns.length) {
287
+ targetColId = visibleColumns[targetColIndex].getColId();
288
+ } else {
289
+ return; // 无法移动到目标列
290
+ }
291
+ } else {
292
+ return; // 无列信息
293
+ }
294
+ }
295
+
296
+ // 检查目标位置是否有效
297
+ var isValidTarget = keyEvent.key === 'ArrowLeft' || keyEvent.key === 'ArrowRight' || targetRowIndex >= 0 && targetRowIndex < dataSource.length;
298
+ if (isValidTarget) {
299
+ // 延迟执行以确保当前编辑完成
300
+ setTimeout(function () {
301
+ api.setFocusedCell(targetRowIndex, targetColId);
302
+
303
+ // 不使用原生startEditingCell,而是手动触发编辑状态
304
+ // 使用DOM选择器查找目标单元格
305
+ setTimeout(function () {
306
+ var _ref$current;
307
+ // 通过ref获取网格容器
308
+ var gridContainer = (_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.querySelector('.ag-theme-alpine');
309
+ if (gridContainer) {
310
+ // 尝试通过行和列分步查找目标单元格
311
+ var rows = gridContainer.querySelectorAll('.ag-row');
312
+ if (rows[targetRowIndex]) {
313
+ var targetRow = rows[targetRowIndex];
314
+
315
+ // 在行内查找指定列的单元格
316
+ var targetCell = targetRow.querySelector(".ag-cell[col-id=\"".concat(targetColId, "\"]"));
317
+ if (!targetCell) {
318
+ // 如果通过col-id找不到,遍历所有单元格查找匹配的列
319
+ var cells = targetRow.querySelectorAll('.ag-cell');
320
+ var _iterator = _createForOfIteratorHelper(cells),
321
+ _step;
322
+ try {
323
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
324
+ var cell = _step.value;
325
+ var colId = cell.getAttribute('col-id') || cell.getAttribute('data-col-id');
326
+ if (colId === targetColId) {
327
+ targetCell = cell;
328
+ break;
329
+ }
330
+ }
331
+ } catch (err) {
332
+ _iterator.e(err);
333
+ } finally {
334
+ _iterator.f();
335
+ }
336
+ }
337
+ if (targetCell) {
338
+ focusInputInCell(targetCell);
339
+ }
340
+ }
341
+ }
342
+ }, 150);
343
+ }, 10);
344
+ }
345
+ keyEvent.preventDefault();
346
+ keyEvent.stopPropagation();
347
+ }
348
+ },
349
+ onCellClicked: function onCellClicked(event) {
350
+ var _event$event;
351
+ // 点击单元格时触发编辑状态
352
+ var cellElement = (_event$event = event.event) === null || _event$event === void 0 ? void 0 : _event$event.target;
353
+ setTimeout(function () {
354
+ var gridCell = cellElement === null || cellElement === void 0 ? void 0 : cellElement.closest('[data-ag-grid-cell]');
355
+ if (gridCell) {
356
+ focusInputInCell(gridCell);
357
+ }
358
+ }, 10);
170
359
  },
171
360
  onRowDragMove: onRowDragMove,
172
361
  onRowDataUpdated: function onRowDataUpdated(e) {
@@ -181,8 +370,6 @@ var ArrayTable = (0, _react2.observer)(function (props) {
181
370
  suppressClipboardPaste: true,
182
371
  preventDefaultOnContextMenu: true,
183
372
  enableCellTextSelection: true,
184
- suppressCopyRowsToClipboard: true,
185
- suppressCopySingleCellRanges: true,
186
373
  className: "ag-theme-alpine",
187
374
  defaultColDef: {
188
375
  resizable: true,
@@ -0,0 +1,31 @@
1
+ import React from "react";
2
+ export interface DeleteConfirmProps {
3
+ /** 确认框标题 */
4
+ title?: React.ReactNode;
5
+ /** 确认框内容,不提供时会使用默认内容 */
6
+ content?: React.ReactNode;
7
+ /** 确认回调函数 */
8
+ onConfirm: () => Promise<any>;
9
+ /** 子组件(触发按钮) */
10
+ children: React.ReactNode;
11
+ }
12
+ /**
13
+ * DeleteConfirm 删除确认组件
14
+ *
15
+ * 基于 Modal.confirm 的删除确认对话框组件,提供统一的危险操作确认体验
16
+ *
17
+ * @example
18
+ * ```tsx
19
+ * <DeleteConfirm
20
+ * title="确认删除"
21
+ * content="删除后数据将无法恢复,确定要删除吗?"
22
+ * onConfirm={async () => {
23
+ * await deleteApi({ id: record.id });
24
+ * }}
25
+ * >
26
+ * <Button danger>删除</Button>
27
+ * </DeleteConfirm>
28
+ * ```
29
+ */
30
+ declare const DeleteConfirm: React.FC<DeleteConfirmProps>;
31
+ export default DeleteConfirm;
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _antd = require("antd");
9
+ var _icons = require("@ant-design/icons");
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+ var confirm = _antd.Modal.confirm;
12
+ /**
13
+ * DeleteConfirm 删除确认组件
14
+ *
15
+ * 基于 Modal.confirm 的删除确认对话框组件,提供统一的危险操作确认体验
16
+ *
17
+ * @example
18
+ * ```tsx
19
+ * <DeleteConfirm
20
+ * title="确认删除"
21
+ * content="删除后数据将无法恢复,确定要删除吗?"
22
+ * onConfirm={async () => {
23
+ * await deleteApi({ id: record.id });
24
+ * }}
25
+ * >
26
+ * <Button danger>删除</Button>
27
+ * </DeleteConfirm>
28
+ * ```
29
+ */
30
+ var DeleteConfirm = function DeleteConfirm(props) {
31
+ var onConfirm = props.onConfirm,
32
+ title = props.title,
33
+ content = props.content,
34
+ children = props.children;
35
+ var showPromiseConfirm = function showPromiseConfirm() {
36
+ // 智能转换 title:支持字符串、ReactNode 或使用默认值
37
+ var titleText = title || '确认操作';
38
+
39
+ // 如果没有提供 content,生成默认内容
40
+ // 只有当 title 是字符串时才拼接,否则使用通用提示
41
+ var defaultContent = typeof title === 'string' ? "\u5371\u9669\u64CD\u4F5C,\u4E3A\u9632\u6B62\u8BEF\u89E6\u53D1,".concat(title) : '危险操作,为防止误触发,请确认操作';
42
+ var contentText = content || defaultContent;
43
+ confirm({
44
+ title: titleText,
45
+ icon: /*#__PURE__*/_react.default.createElement(_icons.ExclamationCircleFilled, null),
46
+ content: contentText,
47
+ onOk: function onOk() {
48
+ return new Promise(function (resolve, reject) {
49
+ onConfirm().then(resolve).catch(function (error) {
50
+ console.error('Oops errors!', error);
51
+ reject();
52
+ });
53
+ }).catch(function () {
54
+ return console.log('Oops errors!');
55
+ });
56
+ },
57
+ onCancel: function onCancel() {}
58
+ });
59
+ };
60
+ return /*#__PURE__*/_react.default.createElement("span", {
61
+ onClick: showPromiseConfirm
62
+ }, children);
63
+ };
64
+ var _default = exports.default = DeleteConfirm;
@@ -19,6 +19,7 @@ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return
19
19
  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; }
20
20
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
21
  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); }
22
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
22
23
  function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
23
24
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
24
25
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
@@ -84,6 +85,35 @@ var InternalEditable = (0, _react.observer)(function (props) {
84
85
  hashId = _useStyle2[1];
85
86
  var ref = (0, _react2.useRef)();
86
87
  var innerRef = (0, _react2.useRef)(null);
88
+
89
+ // 通用的聚焦函数
90
+ var focusInput = _react2.default.useCallback(function () {
91
+ var _innerRef$current;
92
+ var input = (_innerRef$current = innerRef.current) === null || _innerRef$current === void 0 ? void 0 : _innerRef$current.querySelector('input:not([readonly]):not([disabled]), textarea:not([readonly]):not([disabled])');
93
+ if (input) {
94
+ input.focus();
95
+ if ('setSelectionRange' in input && input.type !== 'number' && input.type !== 'date') {
96
+ var _input$value;
97
+ var length = ((_input$value = input.value) === null || _input$value === void 0 ? void 0 : _input$value.length) || 0;
98
+ setTimeout(function () {
99
+ input.setSelectionRange(length, length);
100
+ }, 10);
101
+ }
102
+ return true;
103
+ }
104
+ return false;
105
+ }, []);
106
+
107
+ // 重试聚焦函数
108
+ var retryFocus = _react2.default.useCallback(function () {
109
+ if (!focusInput()) {
110
+ setTimeout(function () {
111
+ if (!focusInput()) {
112
+ setTimeout(focusInput, 50);
113
+ }
114
+ }, 50);
115
+ }
116
+ }, [focusInput]);
87
117
  var recover = /*#__PURE__*/function () {
88
118
  var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
89
119
  var _field$errors;
@@ -124,48 +154,101 @@ var InternalEditable = (0, _react.observer)(function (props) {
124
154
  return _ref.apply(this, arguments);
125
155
  };
126
156
  }();
127
- var renderEditHelper = function renderEditHelper() {
128
- if (editable) return;
129
- return /*#__PURE__*/_react2.default.createElement(_antdV.FormItem.BaseItem, _extends({}, props, itemProps), pattern === 'editable' && /*#__PURE__*/_react2.default.createElement(_icons.EditOutlined, {
130
- className: "".concat(prefixCls, "-edit-btn")
131
- }), pattern !== 'editable' && /*#__PURE__*/_react2.default.createElement(_icons.MessageOutlined, {
132
- className: "".concat(prefixCls, "-edit-btn")
133
- }));
134
- };
135
- var renderCloseHelper = function renderCloseHelper() {
136
- if (!editable) return;
137
- return /*#__PURE__*/_react2.default.createElement(_antdV.FormItem.BaseItem, props, /*#__PURE__*/_react2.default.createElement(_icons.CloseOutlined, {
138
- className: "".concat(prefixCls, "-close-btn")
139
- }));
140
- };
141
157
  (0, _builtins__.useClickAway)(function (e) {
158
+ var _innerRef$current2;
142
159
  var target = e.target;
143
160
  if (target !== null && target !== void 0 && target.closest(".".concat(basePrefixCls, "-select-dropdown"))) return;
144
161
  if (target !== null && target !== void 0 && target.closest(".".concat(basePrefixCls, "-picker-dropdown"))) return;
145
162
  if (target !== null && target !== void 0 && target.closest(".".concat(basePrefixCls, "-cascader-menus"))) return;
163
+
164
+ // 检查是否点击的是当前组件内的输入框或相关元素
165
+ var inputElements = (_innerRef$current2 = innerRef.current) === null || _innerRef$current2 === void 0 ? void 0 : _innerRef$current2.querySelectorAll('input, textarea, .ant-input, .ant-input-wrapper');
166
+ if (inputElements) {
167
+ //@ts-ignore
168
+ var _iterator = _createForOfIteratorHelper(inputElements),
169
+ _step;
170
+ try {
171
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
172
+ var input = _step.value;
173
+ if (target === input || input.contains(target) || target.closest('.ant-input-wrapper')) {
174
+ return; // 不触发recover
175
+ }
176
+ }
177
+ } catch (err) {
178
+ _iterator.e(err);
179
+ } finally {
180
+ _iterator.f();
181
+ }
182
+ }
146
183
  recover();
147
184
  }, innerRef);
148
185
  var onClick = function onClick(e) {
149
- var _innerRef$current;
186
+ var _innerRef$current3;
150
187
  var target = e.target;
151
- var close = ((_innerRef$current = innerRef.current) === null || _innerRef$current === void 0 ? void 0 : _innerRef$current.querySelector(".".concat(prefixCls, "-close-btn"))) || null;
188
+ var close = ((_innerRef$current3 = innerRef.current) === null || _innerRef$current3 === void 0 ? void 0 : _innerRef$current3.querySelector(".".concat(prefixCls, "-close-btn"))) || null;
152
189
  if (target !== null && target !== void 0 && target.contains(close) || close !== null && close !== void 0 && close.contains(target)) {
153
190
  recover();
154
191
  } else if (!ref.current) {
192
+ // 只有在非编辑状态时才触发编辑状态
155
193
  setTimeout(function () {
156
194
  setEditable(true);
157
- setTimeout(function () {
158
- var _innerRef$current2;
159
- (_innerRef$current2 = innerRef.current) === null || _innerRef$current2 === void 0 || (_innerRef$current2 = _innerRef$current2.querySelector('input')) === null || _innerRef$current2 === void 0 || _innerRef$current2.focus();
160
- });
195
+ setTimeout(retryFocus, 100);
161
196
  });
197
+ } else {
198
+ // 如果已经处于编辑状态,检查点击的是否是输入框或其相关元素
199
+ var isInputElement = target.tagName === 'INPUT' || target.tagName === 'TEXTAREA';
200
+ var isInputRelated = target.closest('input, textarea, .ant-input, .ant-input-wrapper');
201
+ if (isInputElement || isInputRelated) {
202
+ // 如果点击的是输入框或相关元素,不做任何操作,让输入框自己处理焦点
203
+ e.stopPropagation();
204
+ return;
205
+ }
206
+ // 如果点击的是其他区域且已经处于编辑状态,也不做任何操作(保持编辑状态)
162
207
  }
163
208
  };
209
+
210
+ // 监听键盘导航事件,自动进入编辑状态
211
+ _react2.default.useEffect(function () {
212
+ var handleKeyDown = function handleKeyDown(e) {
213
+ if (e.key === 'Enter' || e.key === 'F2') {
214
+ if (!editable && pattern === 'editable') {
215
+ e.preventDefault();
216
+ setEditable(true);
217
+ setTimeout(retryFocus, 100);
218
+ }
219
+ }
220
+ };
221
+ var element = innerRef.current;
222
+ if (element) {
223
+ element.addEventListener('keydown', handleKeyDown);
224
+ return function () {
225
+ element.removeEventListener('keydown', handleKeyDown);
226
+ };
227
+ }
228
+ }, [editable, pattern, setEditable, retryFocus]);
229
+
230
+ // 当组件获得焦点时自动进入编辑状态
231
+ _react2.default.useEffect(function () {
232
+ var handleFocus = function handleFocus() {
233
+ if (!editable && pattern === 'editable') {
234
+ setEditable(true);
235
+ setTimeout(retryFocus, 100);
236
+ }
237
+ };
238
+ var element = innerRef.current;
239
+ if (element) {
240
+ element.addEventListener('focus', handleFocus, true);
241
+ return function () {
242
+ element.removeEventListener('focus', handleFocus, true);
243
+ };
244
+ }
245
+ }, [editable, pattern, setEditable, retryFocus]);
164
246
  ref.current = editable;
165
247
  return wrapSSR( /*#__PURE__*/_react2.default.createElement("div", {
166
248
  className: (0, _classnames.default)(prefixCls, hashId),
167
249
  ref: innerRef,
168
- onClick: onClick
250
+ onClick: onClick,
251
+ "data-editable-state": editable ? 'editing' : 'readonly'
169
252
  }, /*#__PURE__*/_react2.default.createElement("div", {
170
253
  className: "".concat(prefixCls, "-content")
171
254
  }, /*#__PURE__*/_react2.default.createElement(_antdV.FormItem.BaseItem, _extends({}, props, itemProps), props.children))));
@@ -1,9 +1,30 @@
1
1
  import React from 'react';
2
2
  import './index.less';
3
+ export interface FullScreenAlertProps {
4
+ /** 是否激活警告效果 */
5
+ active?: boolean;
6
+ /** 警告类型 */
7
+ type?: 'success' | 'error';
8
+ /** 状态变化回调 */
9
+ onChange?: (active: boolean) => void;
10
+ /** 自动关闭时间(毫秒),默认3000ms */
11
+ duration?: number;
12
+ /** 其他 HTML div 属性 */
13
+ [key: string]: any;
14
+ }
3
15
  /**
4
- * 全部闪烁警告
5
- * @param props
6
- * @returns
16
+ * FullScreenAlert 全屏闪烁警告组件
17
+ *
18
+ * 在屏幕边缘显示闪烁的彩色边框,用于视觉警告提醒
19
+ *
20
+ * @example
21
+ * ```tsx
22
+ * <FullScreenAlert
23
+ * active={showAlert}
24
+ * type="error"
25
+ * onChange={(active) => setShowAlert(active)}
26
+ * />
27
+ * ```
7
28
  */
8
- declare const FullScreenAlert: (props: any) => React.JSX.Element;
29
+ declare const FullScreenAlert: React.FC<FullScreenAlertProps>;
9
30
  export default FullScreenAlert;