@zat-design/sisyphus-react 4.1.1 → 4.1.2-beta.1

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.
@@ -65,6 +65,8 @@ var ProDrawer = _ref => {
65
65
  var _ref3 = drawerProps || {},
66
66
  drawerMask = _ref3.mask,
67
67
  restDrawerProps = _objectWithoutProperties(_ref3, _excluded);
68
+ var drawerWidth = width;
69
+ var drawerSize = restDrawerProps === null || restDrawerProps === void 0 ? void 0 : restDrawerProps.size;
68
70
 
69
71
  // 使用 useEffect 在 open 变更时延迟捕获 初始DOM 快照
70
72
  useEffect(() => {
@@ -241,7 +243,8 @@ var ProDrawer = _ref => {
241
243
  return defaultFooter;
242
244
  };
243
245
  return /*#__PURE__*/_jsxs(Drawer, _objectSpread(_objectSpread({
244
- size: parseInt(String(width), 10) || 960,
246
+ width: drawerWidth,
247
+ size: drawerSize,
245
248
  open: open,
246
249
  mask: drawerMask !== null && drawerMask !== void 0 ? drawerMask : {
247
250
  blur: false
@@ -252,7 +255,7 @@ var ProDrawer = _ref => {
252
255
  closable: false,
253
256
  onClose: onCancel,
254
257
  zIndex: zIndex
255
- }, omit(restDrawerProps, 'width')), {}, {
258
+ }, omit(restDrawerProps, 'width', 'size')), {}, {
256
259
  children: [/*#__PURE__*/_jsx("div", {
257
260
  className: "pro-drawer-close",
258
261
  onClick: onConfirm,
@@ -18,6 +18,7 @@ import ProIcon from "../../../ProIcon";
18
18
  import { jsx as _jsx } from "react/jsx-runtime";
19
19
  import { jsxs as _jsxs } from "react/jsx-runtime";
20
20
  var Row = props => {
21
+ var _restProps$className;
21
22
  var disabled = props.disabled,
22
23
  children = props.children,
23
24
  restProps = _objectWithoutProperties(props, _excluded);
@@ -40,13 +41,17 @@ var Row = props => {
40
41
  position: 'relative',
41
42
  zIndex: 2
42
43
  } : {});
44
+
45
+ // 检查是否是空状态占位行
46
+ var isPlaceholderRow = (_restProps$className = restProps.className) === null || _restProps$className === void 0 ? void 0 : _restProps$className.includes('ant-table-placeholder');
43
47
  return /*#__PURE__*/_jsx("tr", _objectSpread(_objectSpread(_objectSpread({}, restProps), {}, {
44
48
  ref: setNodeRef,
45
49
  style: style
46
50
  }, attributes), {}, {
47
51
  children: React.Children.map(children, (child, index) => {
48
52
  // 在第一列(通常是rowSelection列)显示拖拽图标
49
- if (index === 0 && !disabled) {
53
+ // 如果是占位行,不添加拖拽包装器
54
+ if (index === 0 && !disabled && !isPlaceholderRow) {
50
55
  var _restProps$dataRowD;
51
56
  var _ref = (child === null || child === void 0 ? void 0 : child.props) || {},
52
57
  render = _ref.render,
@@ -34,7 +34,8 @@ import useShouldUpdateForTable from "../../utils/useShouldUpdateForTable";
34
34
  /** 列配置中不应透传到 Form.Item 或 DOM 的字段(与 ProForm Render 保持一致) */
35
35
  import { Fragment as _Fragment } from "react/jsx-runtime";
36
36
  import { jsx as _jsx } from "react/jsx-runtime";
37
- var OMIT_FORM_ITEM_AND_DOM_KEYS = ['format', 'toISOString', 'toCSTString', 'switchValue', 'precision', 'clearNotShow', 'dependNames'];
37
+ var OMIT_FORM_ITEM_AND_DOM_KEYS = ['format', 'toISOString', 'toCSTString', 'switchValue', 'precision', 'clearNotShow', 'dependNames', 'shouldCellUpdate' // 表格内部性能优化属性,不应传递给 Form.Item
38
+ ];
38
39
  var RenderField = _ref => {
39
40
  var _type, _type$replace, _fieldProps2, _fieldProps4, _names, _TargetComponent5, _componentProps;
40
41
  var value = _ref.text,
@@ -498,14 +499,16 @@ var RenderField = _ref => {
498
499
  }
499
500
  }
500
501
  }
501
- // 使用startTransition优化状态更新
502
- compatStartTransition(() => {
503
- setState({
504
- forceUpdate: {
505
- d: Date.now()
506
- }
502
+ // 仅在存在联动逻辑且行数据实际发生变化时触发强制刷新
503
+ if (onFieldChange && !isEqual(orgRow, row)) {
504
+ compatStartTransition(() => {
505
+ setState({
506
+ forceUpdate: {
507
+ rowKey: record === null || record === void 0 ? void 0 : record.rowKey
508
+ }
509
+ });
507
510
  });
508
- });
511
+ }
509
512
  case 33:
510
513
  case "end":
511
514
  return _context.stop();
@@ -602,11 +605,11 @@ var RenderField = _ref => {
602
605
  cellNamePath: []
603
606
  });
604
607
  case 22:
605
- // 单行编辑时需要 强制更新视图
608
+ // 单行编辑时需要 强制更新视图,仅对当前行打标记
606
609
  compatStartTransition(() => {
607
610
  setState({
608
611
  forceUpdate: {
609
- d: Date.now()
612
+ rowKey: record === null || record === void 0 ? void 0 : record.rowKey
610
613
  }
611
614
  });
612
615
  });
@@ -825,7 +828,11 @@ export default /*#__PURE__*/memo(RenderField, (prevProps, nextProps) => {
825
828
 
826
829
  // fieldProps 函数化直接更新,无法比对返回值是否一致
827
830
  if (isFunction(prevColumn === null || prevColumn === void 0 ? void 0 : prevColumn.fieldProps) && isFunction(nextColumn === null || nextColumn === void 0 ? void 0 : nextColumn.fieldProps)) {
828
- return false;
831
+ var prevFieldProps = prevColumn.fieldProps(prevRecord, prevReactiveParams);
832
+ var nextFieldProps = nextColumn.fieldProps(nextRecord, nextReactiveParams);
833
+ if (!isEqualWith(prevFieldProps, nextFieldProps, customEqualForFunction)) {
834
+ return false;
835
+ }
829
836
  }
830
837
 
831
838
  // 通用函数比较方法
@@ -31,7 +31,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
31
31
  import { Fragment as _Fragment } from "react/jsx-runtime";
32
32
  import { jsxs as _jsxs } from "react/jsx-runtime";
33
33
  var ProEditTable = (_ref, ref) => {
34
- var _resetProps$id, _resetProps$id$split, _ref2, _formFieldProps$shoul, _themeConfig$data2, _resetProps$otherProp;
34
+ var _resetProps$id, _resetProps$id$split, _ref2, _formFieldProps$shoul, _themeConfig$data2;
35
35
  var _ref$value = _ref.value,
36
36
  value = _ref$value === void 0 ? [] : _ref$value,
37
37
  onChange = _ref.onChange,
@@ -150,10 +150,13 @@ var ProEditTable = (_ref, ref) => {
150
150
  var getRowKey = useCallback(record => {
151
151
  var key = record.rowKey || getRandom();
152
152
  if (rowKey) {
153
- var _ref4;
154
- key = (_ref4 = isFunction(rowKey) ? rowKey(record) : record[rowKey]) !== null && _ref4 !== void 0 ? _ref4 : key;
153
+ var userKey = isFunction(rowKey) ? rowKey(record) : record[rowKey];
154
+ // 检查用户返回的 key 是否有效(不是 null、undefined、NaN 或空字符串)
155
+ if (userKey != null && !Number.isNaN(userKey) && userKey !== '') {
156
+ key = userKey;
157
+ }
155
158
  }
156
- return key;
159
+ return String(key); // 确保返回字符串
157
160
  }, [rowKey]);
158
161
  var originalValues = useMemo(() => {
159
162
  var _originalArr$every, _originalArr$some;
@@ -186,7 +189,7 @@ var ProEditTable = (_ref, ref) => {
186
189
 
187
190
  // 分页变更
188
191
  var handlePageChange = useCallback( /*#__PURE__*/function () {
189
- var _ref5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(current, pageSize) {
192
+ var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(current, pageSize) {
190
193
  return _regeneratorRuntime().wrap(function _callee$(_context) {
191
194
  while (1) switch (_context.prev = _context.next) {
192
195
  case 0:
@@ -232,47 +235,50 @@ var ProEditTable = (_ref, ref) => {
232
235
  }, _callee, null, [[0, 10]]);
233
236
  }));
234
237
  return function (_x, _x2) {
235
- return _ref5.apply(this, arguments);
238
+ return _ref4.apply(this, arguments);
236
239
  };
237
240
  }(), [pagination, page.pageSize, form, name]);
238
- var config = _objectSpread({
239
- form,
240
- mode,
241
- isView,
242
- viewEmpty,
243
- disabled,
244
- cellNamePath,
245
- forceUpdate,
246
- insertType,
247
- emptyBtnText,
248
- editingKeys,
249
- actionWidth,
250
- actionProps,
251
- toolbarProps,
252
- setState,
253
- selectedRowKeys,
254
- selectedRows,
255
- onlyOneLineMsg,
256
- deletePoConfirmMsg,
257
- mulDeletePoConfirmMsg,
258
- virtualKey,
259
- requiredAlign,
260
- name: isArray(name) ? name : [name],
261
- // name需要处理成namePath形式,为兼容多路径
262
- namePath,
263
- tableRef,
264
- max,
265
- tableLength: value === null || value === void 0 ? void 0 : value.length,
266
- page,
267
- originalValues,
268
- prefixCls,
269
- rowDisabled,
270
- actionDirection,
271
- diffConfig: _objectSpread(_objectSpread({}, resetProps === null || resetProps === void 0 || (_resetProps$otherProp = resetProps.otherProps) === null || _resetProps$otherProp === void 0 ? void 0 : _resetProps$otherProp.diffConfig), diffConfig),
272
- shouldUpdateDebounce,
273
- getIsNew,
274
- handlePageChange
275
- }, resetProps);
241
+ var config = useMemo(() => {
242
+ var _resetProps$otherProp;
243
+ return _objectSpread({
244
+ form,
245
+ mode,
246
+ isView,
247
+ viewEmpty,
248
+ disabled,
249
+ cellNamePath,
250
+ forceUpdate,
251
+ insertType,
252
+ emptyBtnText,
253
+ editingKeys,
254
+ actionWidth,
255
+ actionProps,
256
+ toolbarProps,
257
+ setState,
258
+ selectedRowKeys,
259
+ selectedRows,
260
+ onlyOneLineMsg,
261
+ deletePoConfirmMsg,
262
+ mulDeletePoConfirmMsg,
263
+ virtualKey,
264
+ requiredAlign,
265
+ name: isArray(name) ? name : [name],
266
+ // name需要处理成namePath形式,为兼容多路径
267
+ namePath,
268
+ tableRef,
269
+ max,
270
+ tableLength: value === null || value === void 0 ? void 0 : value.length,
271
+ page,
272
+ originalValues,
273
+ prefixCls,
274
+ rowDisabled,
275
+ actionDirection,
276
+ diffConfig: _objectSpread(_objectSpread({}, resetProps === null || resetProps === void 0 || (_resetProps$otherProp = resetProps.otherProps) === null || _resetProps$otherProp === void 0 ? void 0 : _resetProps$otherProp.diffConfig), diffConfig),
277
+ shouldUpdateDebounce,
278
+ getIsNew,
279
+ handlePageChange
280
+ }, resetProps);
281
+ }, [actionDirection, actionProps, actionWidth, cellNamePath, deletePoConfirmMsg, disabled, diffConfig, editingKeys, emptyBtnText, form, forceUpdate, getIsNew, handlePageChange, insertType, isView, max, mode, mulDeletePoConfirmMsg, name, namePath, onlyOneLineMsg, originalValues, prefixCls, requiredAlign, resetProps, rowDisabled, selectedRowKeys, selectedRows, shouldUpdateDebounce, tableRef, toolbarProps, value === null || value === void 0 ? void 0 : value.length, viewEmpty, virtualKey, page]);
276
282
 
277
283
  // 编辑行设置下样式
278
284
  var _rowClassName = record => {
@@ -330,7 +336,7 @@ var ProEditTable = (_ref, ref) => {
330
336
 
331
337
  // 空列表状态
332
338
  var emptyDom = useMemo(() => () => {
333
- var _filter, _ref6;
339
+ var _filter, _ref5;
334
340
  return /*#__PURE__*/_jsxs("div", {
335
341
  className: "com-empty",
336
342
  children: [/*#__PURE__*/_jsx("img", {
@@ -341,7 +347,7 @@ var ProEditTable = (_ref, ref) => {
341
347
  className: "content",
342
348
  children: disabled || isForbiddenBtn('add') ? locale.ProEditTable.noData : /*#__PURE__*/_jsxs(_Fragment, {
343
349
  children: [locale.ProEditTable.noData, "\uFF0C", /*#__PURE__*/_jsx(RenderToolbar, _objectSpread({}, _objectSpread(_objectSpread({}, config), {}, {
344
- toolbarProps: toolbarProps === null || toolbarProps === void 0 || (_filter = (_ref6 = toolbarProps).filter) === null || _filter === void 0 ? void 0 : _filter.call(_ref6, item => item.type === 'add' || (item === null || item === void 0 ? void 0 : item.persistence)),
350
+ toolbarProps: toolbarProps === null || toolbarProps === void 0 || (_filter = (_ref5 = toolbarProps).filter) === null || _filter === void 0 ? void 0 : _filter.call(_ref5, item => item.type === 'add' || (item === null || item === void 0 ? void 0 : item.persistence)),
345
351
  dataSource: []
346
352
  })))]
347
353
  })
@@ -367,7 +373,7 @@ var ProEditTable = (_ref, ref) => {
367
373
  };
368
374
  var _columns = useMemo(() => {
369
375
  return transformColumns(columns, config);
370
- }, [disabled, forceUpdate, columns, page, actionProps, editingKeys, cellNamePath]);
376
+ }, [columns, config]);
371
377
  var initDataSource = () => {
372
378
  var _value$every, _value$some;
373
379
  // 检查每一项是否有 rowKey 或通过 rowKey 字段获取的 key
@@ -416,6 +422,28 @@ var ProEditTable = (_ref, ref) => {
416
422
  rowSelection: renderRowSelection()
417
423
  }) : summary;
418
424
  var TableComponent = draggable ? DraggableTable : BaseTable;
425
+ var tableProps = useMemo(() => ({
426
+ rowKey,
427
+ value,
428
+ headerRender,
429
+ tableRef,
430
+ className: _className,
431
+ columns: _columns,
432
+ renderRowSelection,
433
+ rowClassName: _rowClassName,
434
+ disabled,
435
+ virtualKey,
436
+ editingKeys,
437
+ isHideCheckBox,
438
+ rowDraggable,
439
+ pagination,
440
+ scroll,
441
+ summary: _summary,
442
+ page,
443
+ formatMessage,
444
+ locale,
445
+ handlePageChange
446
+ }), [_className, _columns, _rowClassName, disabled, editingKeys, formatMessage, handlePageChange, headerRender, isHideCheckBox, locale, page, pagination, renderRowSelection, rowDraggable, rowKey, scroll, _summary, tableRef, value, virtualKey]);
419
447
  return /*#__PURE__*/_jsxs(_Fragment, {
420
448
  children: [/*#__PURE__*/_jsx(ConfigProvider, {
421
449
  renderEmpty: value !== null && value !== void 0 && value.length ? undefined : emptyDom,
@@ -426,28 +454,7 @@ var ProEditTable = (_ref, ref) => {
426
454
  onDragEnd,
427
455
  draggable
428
456
  },
429
- tableProps: {
430
- rowKey,
431
- value,
432
- headerRender,
433
- tableRef,
434
- className: _className,
435
- columns: _columns,
436
- renderRowSelection,
437
- rowClassName: _rowClassName,
438
- disabled,
439
- virtualKey,
440
- editingKeys,
441
- isHideCheckBox,
442
- rowDraggable,
443
- pagination,
444
- scroll,
445
- summary: _summary,
446
- page,
447
- formatMessage,
448
- locale,
449
- handlePageChange
450
- }
457
+ tableProps: tableProps
451
458
  }))
452
459
  }), !isView && value !== null && value !== void 0 && value.length ? toolbarSticky ? /*#__PURE__*/_jsx(Affix, _objectSpread(_objectSpread({
453
460
  ref: affixRef
@@ -16,7 +16,7 @@ export declare const defaultMultipleActionKeys: string[];
16
16
  export declare const defaultEditingActionKeys: string[];
17
17
  export declare const defaultToolbarKeys: string[];
18
18
  export declare const actions: {
19
- edit: ({ record, editingKeys, setState, form, virtualRowName, virtualKey, onlyOneLineMsg, }: any) => boolean;
19
+ edit: ({ record, editingKeys, setState, form, virtualRowName, virtualKey, onlyOneLineMsg }: any) => boolean;
20
20
  save: ({ record, editingKeys, setState, form, rowName, virtualRowName, result }: any) => Promise<void>;
21
21
  cancel: ({ name, record, editingKeys, setState, form, virtualRowName, virtualKey }: any) => void;
22
22
  delete: ({ name, record, editingKeys, setState, form, virtualKey, onlyOneLineMsg }: any) => boolean;
@@ -167,8 +167,8 @@ export var actions = {
167
167
  },
168
168
  add: function () {
169
169
  var _add = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(_ref5) {
170
- var _tableRef$current, _tableRef$current$scr;
171
- var result, insertType, editingKeys, setState, form, name, virtualName, virtualKey, onlyOneLineMsg, tableRef, _ref5$prefixCls, prefixCls, page, handlePageChange, nextData, rowKey, addData, nextPageNum, nextEditingKeys;
170
+ var _tableRef$current;
171
+ var result, insertType, editingKeys, setState, form, name, virtualName, virtualKey, onlyOneLineMsg, tableRef, _ref5$prefixCls, prefixCls, page, handlePageChange, nextData, rowKey, addData, nextPageNum, nextEditingKeys, tableBody;
172
172
  return _regeneratorRuntime().wrap(function _callee4$(_context4) {
173
173
  while (1) switch (_context4.prev = _context4.next) {
174
174
  case 0:
@@ -228,17 +228,24 @@ export var actions = {
228
228
  });
229
229
  }
230
230
  form.setFieldValue(name, nextData);
231
- (_tableRef$current = tableRef.current) === null || _tableRef$current === void 0 || (_tableRef$current = _tableRef$current.children[0]) === null || _tableRef$current === void 0 || (_tableRef$current = _tableRef$current.querySelector(`.${prefixCls}-table-body`)) === null || _tableRef$current === void 0 || (_tableRef$current$scr = _tableRef$current.scrollTo) === null || _tableRef$current$scr === void 0 || _tableRef$current$scr.call(_tableRef$current, {
232
- top: insertType === 'before' ? -10000 : 10000,
233
- behavior: 'smooth'
234
- });
231
+ tableBody = (_tableRef$current = tableRef.current) === null || _tableRef$current === void 0 || (_tableRef$current = _tableRef$current.children[0]) === null || _tableRef$current === void 0 ? void 0 : _tableRef$current.querySelector(`.${prefixCls}-table-body`);
232
+ if (tableBody) {
233
+ // 等待新行渲染完毕再读取 scrollHeight,确保能滚动到真正的底部
234
+ requestAnimationFrame(() => {
235
+ var _tableBody$scrollTo;
236
+ (_tableBody$scrollTo = tableBody.scrollTo) === null || _tableBody$scrollTo === void 0 || _tableBody$scrollTo.call(tableBody, {
237
+ top: insertType === 'before' ? 0 : tableBody.scrollHeight,
238
+ behavior: 'smooth'
239
+ });
240
+ });
241
+ }
235
242
  if (!virtualKey) {
236
- _context4.next = 15;
243
+ _context4.next = 16;
237
244
  break;
238
245
  }
239
- _context4.next = 15;
246
+ _context4.next = 16;
240
247
  return form.validateFields([name]);
241
- case 15:
248
+ case 16:
242
249
  case "end":
243
250
  return _context4.stop();
244
251
  }
@@ -211,7 +211,7 @@ export var transformColumns = function transformColumns() {
211
211
  setState = config.setState,
212
212
  page = config.page;
213
213
  var isCell = mode === 'cell';
214
- var nextColumns = cloneDeepFilterNode(columns);
214
+ var nextColumns = columns.map(item => cloneDeepFilterNode(item));
215
215
  var pageNum = tools.calc(page.pageNum, '-', 1);
216
216
  var firstIndex = tools.calc(pageNum, '*', page.pageSize);
217
217
  nextColumns.forEach((item, index) => {
@@ -364,6 +364,19 @@ export var transformColumns = function transformColumns() {
364
364
  });
365
365
  };
366
366
  item.render = _render;
367
+
368
+ // 精准控制单元格更新,减少不必要的渲染
369
+ if (!item.shouldCellUpdate) {
370
+ var hasComponent = isFunction(item.component);
371
+ item.shouldCellUpdate = (record, prevRecord) => {
372
+ if ((record === null || record === void 0 ? void 0 : record.rowKey) !== (prevRecord === null || prevRecord === void 0 ? void 0 : prevRecord.rowKey)) return true;
373
+ // 动态 component 可能依赖行内其他字段,需比较整行
374
+ if (hasComponent) return !isEqual(record, prevRecord);
375
+ var key = item.dataIndex || item.key;
376
+ if (!key) return true;
377
+ return (record === null || record === void 0 ? void 0 : record[key]) !== (prevRecord === null || prevRecord === void 0 ? void 0 : prevRecord[key]);
378
+ };
379
+ }
367
380
  });
368
381
  if (disabled || isView) {
369
382
  // 查看模式下过滤操作栏
@@ -49,8 +49,9 @@ var Container = props => {
49
49
  diffConfig: diffConfig
50
50
  }, otherProps));
51
51
  if (type === 'ProCollapse') {
52
+ var hasFieldChildren = Array.isArray(children) && children.length > 0;
52
53
  return /*#__PURE__*/_jsx(ProCollapse, _objectSpread(_objectSpread({}, omit(props, ['otherProps', 'children', 'onBlur', 'onChange', 'placeholder', 'className'])), {}, {
53
- children: child
54
+ children: hasFieldChildren ? child : null
54
55
  }));
55
56
  }
56
57
  if (type === 'Container') {
@@ -75,31 +75,29 @@ export declare const useFormItemProps: (column: FlexibleGroupColumnType, context
75
75
  confirm?: boolean | import("antd").ModalFuncProps | import("../../../render/propsType").FunctionArgs<any, boolean | import("antd").ModalFuncProps>;
76
76
  show?: boolean | ReactiveFunction<any, boolean>;
77
77
  component?: React.ReactNode | ReactiveFunction<any, React.ReactNode>;
78
- trim?: boolean;
79
- normalize?: (value: any, prevValue: any, allValues: import("@rc-component/form/lib/interface").Store) => any;
80
- children?: React.ReactNode | ((form: FormInstance<any>) => React.ReactNode);
81
- vertical?: boolean;
82
78
  id?: string;
83
79
  className?: string;
84
80
  hidden?: boolean;
85
81
  style?: React.CSSProperties;
82
+ children?: React.ReactNode | ((form: FormInstance<any>) => React.ReactNode);
86
83
  onReset?: () => void;
87
84
  prefixCls?: string;
85
+ status?: "" | "warning" | "error" | "success" | "validating";
88
86
  rootClassName?: string;
89
- status?: "" | "success" | "error" | "warning" | "validating";
90
- trigger?: string;
91
- colon?: boolean;
92
87
  isView?: boolean;
93
- desensitization?: [number, number] | ReactiveFunction<any, [number, number]>;
94
- getValueProps?: ((value: any) => Record<string, unknown>) & ((value: any) => Record<string, unknown>);
88
+ colon?: boolean;
95
89
  htmlFor?: string;
96
90
  labelAlign?: import("antd/es/form/interface").FormLabelAlign;
97
91
  labelCol?: import("antd").ColProps;
92
+ vertical?: boolean;
98
93
  getValueFromEvent?: (...args: import("@rc-component/form/lib/interface").EventArgs) => any;
94
+ normalize?: (value: any, prevValue: any, allValues: import("@rc-component/form/lib/interface").Store) => any;
99
95
  shouldUpdate?: import("@rc-component/form/lib/Field").ShouldUpdate<any>;
96
+ trigger?: string;
100
97
  validateTrigger?: string | false | string[];
101
98
  validateDebounce?: number;
102
99
  valuePropName?: string;
100
+ getValueProps?: ((value: any) => Record<string, unknown>) & ((value: any) => Record<string, unknown>);
103
101
  messageVariables?: Record<string, string>;
104
102
  initialValue?: any;
105
103
  onMetaChange?: (meta: import("@rc-component/form/lib/Field").MetaEvent) => void;
@@ -110,7 +108,7 @@ export declare const useFormItemProps: (column: FlexibleGroupColumnType, context
110
108
  hasFeedback?: boolean | {
111
109
  icons: import("antd/es/form/FormItem").FeedbackIcons;
112
110
  };
113
- validateStatus?: "" | "success" | "error" | "warning" | "validating";
111
+ validateStatus?: "" | "warning" | "error" | "success" | "validating";
114
112
  layout?: import("antd/es/form/Form").FormItemLayout;
115
113
  wrapperCol?: import("antd").ColProps;
116
114
  help?: React.ReactNode;
@@ -123,10 +121,12 @@ export declare const useFormItemProps: (column: FlexibleGroupColumnType, context
123
121
  index?: number;
124
122
  }) => string | React.ReactElement<any, any>;
125
123
  viewType?: import("../../../render/propsType").ViewType;
124
+ trim?: boolean;
126
125
  upperCase?: boolean;
127
126
  toISOString?: boolean;
128
127
  toCSTString?: boolean;
129
128
  clearNotShow?: boolean;
129
+ desensitization?: [number, number] | ReactiveFunction<any, [number, number]>;
130
130
  name: any;
131
131
  dependencies: any[];
132
132
  tooltip: string | {
@@ -3,7 +3,7 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
3
3
  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; }
4
4
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
5
5
  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); }
6
- import { useLayoutEffect } from 'react';
6
+ import React, { useLayoutEffect } from 'react';
7
7
  import { Collapse, Descriptions, Space } from 'antd';
8
8
  import { CaretRightOutlined } from '@ant-design/icons';
9
9
  import classNames from 'classnames';
@@ -55,11 +55,12 @@ var ProCollapse = props => {
55
55
  'pro-collapse-no-level1-title': !title && level !== '2' && level !== '3',
56
56
  [`${className}`]: className
57
57
  });
58
- var content = /*#__PURE__*/_jsx("div", {
58
+ var shouldRenderContent = children !== null && children !== undefined;
59
+ var content = shouldRenderContent ? /*#__PURE__*/_jsx("div", {
59
60
  className: "pro-collapse-content",
60
61
  style: contentStyle,
61
62
  children: children
62
- });
63
+ }) : null;
63
64
 
64
65
  // 生成 Collapse items 配置
65
66
  var getCollapseItems = () => {
@@ -424,7 +424,7 @@ export var ProSelect = (props, ref) => {
424
424
  return /*#__PURE__*/_jsx(OptGroup, {
425
425
  label: item[label],
426
426
  children: groupOpts.map(opt => /*#__PURE__*/_jsx(Option, {
427
- label: opt[label],
427
+ label: selectProps.showCodeName ? `${opt[code]}-${opt[label]}` : opt[label],
428
428
  value: opt[code],
429
429
  record: opt,
430
430
  disabled: !!opt.disabled,
@@ -440,7 +440,7 @@ export var ProSelect = (props, ref) => {
440
440
  }, (_item$label = item[label]) !== null && _item$label !== void 0 ? _item$label : `group-${index}`);
441
441
  }
442
442
  return /*#__PURE__*/_jsx(Option, {
443
- label: item[label],
443
+ label: selectProps.showCodeName ? `${item[code]}-${item[label]}` : item[label],
444
444
  value: optionValue,
445
445
  record: item,
446
446
  disabled: !!item.disabled,
@@ -71,6 +71,8 @@ var ProDrawer = _ref => {
71
71
  var _ref3 = drawerProps || {},
72
72
  drawerMask = _ref3.mask,
73
73
  restDrawerProps = _objectWithoutProperties(_ref3, _excluded);
74
+ var drawerWidth = width;
75
+ var drawerSize = restDrawerProps === null || restDrawerProps === void 0 ? void 0 : restDrawerProps.size;
74
76
 
75
77
  // 使用 useEffect 在 open 变更时延迟捕获 初始DOM 快照
76
78
  (0, _react.useEffect)(() => {
@@ -247,7 +249,8 @@ var ProDrawer = _ref => {
247
249
  return defaultFooter;
248
250
  };
249
251
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_antd.Drawer, _objectSpread(_objectSpread({
250
- size: parseInt(String(width), 10) || 960,
252
+ width: drawerWidth,
253
+ size: drawerSize,
251
254
  open: open,
252
255
  mask: drawerMask !== null && drawerMask !== void 0 ? drawerMask : {
253
256
  blur: false
@@ -258,7 +261,7 @@ var ProDrawer = _ref => {
258
261
  closable: false,
259
262
  onClose: onCancel,
260
263
  zIndex: zIndex
261
- }, (0, _lodash.omit)(restDrawerProps, 'width')), {}, {
264
+ }, (0, _lodash.omit)(restDrawerProps, 'width', 'size')), {}, {
262
265
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
263
266
  className: "pro-drawer-close",
264
267
  onClick: onConfirm,
@@ -26,6 +26,7 @@ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e =
26
26
  function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
27
27
  function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
28
28
  var Row = props => {
29
+ var _restProps$className;
29
30
  var disabled = props.disabled,
30
31
  children = props.children,
31
32
  restProps = _objectWithoutProperties(props, _excluded);
@@ -48,13 +49,17 @@ var Row = props => {
48
49
  position: 'relative',
49
50
  zIndex: 2
50
51
  } : {});
52
+
53
+ // 检查是否是空状态占位行
54
+ var isPlaceholderRow = (_restProps$className = restProps.className) === null || _restProps$className === void 0 ? void 0 : _restProps$className.includes('ant-table-placeholder');
51
55
  return /*#__PURE__*/(0, _jsxRuntime.jsx)("tr", _objectSpread(_objectSpread(_objectSpread({}, restProps), {}, {
52
56
  ref: setNodeRef,
53
57
  style: style
54
58
  }, attributes), {}, {
55
59
  children: _react.default.Children.map(children, (child, index) => {
56
60
  // 在第一列(通常是rowSelection列)显示拖拽图标
57
- if (index === 0 && !disabled) {
61
+ // 如果是占位行,不添加拖拽包装器
62
+ if (index === 0 && !disabled && !isPlaceholderRow) {
58
63
  var _restProps$dataRowD;
59
64
  var _ref = (child === null || child === void 0 ? void 0 : child.props) || {},
60
65
  render = _ref.render,
@@ -41,7 +41,8 @@ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol"
41
41
  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); }
42
42
  function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
43
43
  function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
44
- var OMIT_FORM_ITEM_AND_DOM_KEYS = ['format', 'toISOString', 'toCSTString', 'switchValue', 'precision', 'clearNotShow', 'dependNames'];
44
+ var OMIT_FORM_ITEM_AND_DOM_KEYS = ['format', 'toISOString', 'toCSTString', 'switchValue', 'precision', 'clearNotShow', 'dependNames', 'shouldCellUpdate' // 表格内部性能优化属性,不应传递给 Form.Item
45
+ ];
45
46
  var RenderField = _ref => {
46
47
  var _type, _type$replace, _fieldProps2, _fieldProps4, _names, _TargetComponent5, _componentProps;
47
48
  var value = _ref.text,
@@ -505,14 +506,16 @@ var RenderField = _ref => {
505
506
  }
506
507
  }
507
508
  }
508
- // 使用startTransition优化状态更新
509
- (0, _utils.compatStartTransition)(() => {
510
- setState({
511
- forceUpdate: {
512
- d: Date.now()
513
- }
509
+ // 仅在存在联动逻辑且行数据实际发生变化时触发强制刷新
510
+ if (onFieldChange && !(0, _lodash.isEqual)(orgRow, row)) {
511
+ (0, _utils.compatStartTransition)(() => {
512
+ setState({
513
+ forceUpdate: {
514
+ rowKey: record === null || record === void 0 ? void 0 : record.rowKey
515
+ }
516
+ });
514
517
  });
515
- });
518
+ }
516
519
  case 33:
517
520
  case "end":
518
521
  return _context.stop();
@@ -609,11 +612,11 @@ var RenderField = _ref => {
609
612
  cellNamePath: []
610
613
  });
611
614
  case 22:
612
- // 单行编辑时需要 强制更新视图
615
+ // 单行编辑时需要 强制更新视图,仅对当前行打标记
613
616
  (0, _utils.compatStartTransition)(() => {
614
617
  setState({
615
618
  forceUpdate: {
616
- d: Date.now()
619
+ rowKey: record === null || record === void 0 ? void 0 : record.rowKey
617
620
  }
618
621
  });
619
622
  });
@@ -832,7 +835,11 @@ var _default = exports.default = /*#__PURE__*/(0, _react.memo)(RenderField, (pre
832
835
 
833
836
  // fieldProps 函数化直接更新,无法比对返回值是否一致
834
837
  if ((0, _lodash.isFunction)(prevColumn === null || prevColumn === void 0 ? void 0 : prevColumn.fieldProps) && (0, _lodash.isFunction)(nextColumn === null || nextColumn === void 0 ? void 0 : nextColumn.fieldProps)) {
835
- return false;
838
+ var prevFieldProps = prevColumn.fieldProps(prevRecord, prevReactiveParams);
839
+ var nextFieldProps = nextColumn.fieldProps(nextRecord, nextReactiveParams);
840
+ if (!(0, _lodash.isEqualWith)(prevFieldProps, nextFieldProps, _utils.customEqualForFunction)) {
841
+ return false;
842
+ }
836
843
  }
837
844
 
838
845
  // 通用函数比较方法
@@ -38,7 +38,7 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
38
38
  function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
39
39
  function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
40
40
  var ProEditTable = (_ref, ref) => {
41
- var _resetProps$id, _resetProps$id$split, _ref2, _formFieldProps$shoul, _themeConfig$data2, _resetProps$otherProp;
41
+ var _resetProps$id, _resetProps$id$split, _ref2, _formFieldProps$shoul, _themeConfig$data2;
42
42
  var _ref$value = _ref.value,
43
43
  value = _ref$value === void 0 ? [] : _ref$value,
44
44
  onChange = _ref.onChange,
@@ -157,10 +157,13 @@ var ProEditTable = (_ref, ref) => {
157
157
  var getRowKey = (0, _react.useCallback)(record => {
158
158
  var key = record.rowKey || (0, _tools.getRandom)();
159
159
  if (rowKey) {
160
- var _ref4;
161
- key = (_ref4 = (0, _lodash.isFunction)(rowKey) ? rowKey(record) : record[rowKey]) !== null && _ref4 !== void 0 ? _ref4 : key;
160
+ var userKey = (0, _lodash.isFunction)(rowKey) ? rowKey(record) : record[rowKey];
161
+ // 检查用户返回的 key 是否有效(不是 null、undefined、NaN 或空字符串)
162
+ if (userKey != null && !Number.isNaN(userKey) && userKey !== '') {
163
+ key = userKey;
164
+ }
162
165
  }
163
- return key;
166
+ return String(key); // 确保返回字符串
164
167
  }, [rowKey]);
165
168
  var originalValues = (0, _react.useMemo)(() => {
166
169
  var _originalArr$every, _originalArr$some;
@@ -193,7 +196,7 @@ var ProEditTable = (_ref, ref) => {
193
196
 
194
197
  // 分页变更
195
198
  var handlePageChange = (0, _react.useCallback)( /*#__PURE__*/function () {
196
- var _ref5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(current, pageSize) {
199
+ var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(current, pageSize) {
197
200
  return _regeneratorRuntime().wrap(function _callee$(_context) {
198
201
  while (1) switch (_context.prev = _context.next) {
199
202
  case 0:
@@ -239,47 +242,50 @@ var ProEditTable = (_ref, ref) => {
239
242
  }, _callee, null, [[0, 10]]);
240
243
  }));
241
244
  return function (_x, _x2) {
242
- return _ref5.apply(this, arguments);
245
+ return _ref4.apply(this, arguments);
243
246
  };
244
247
  }(), [pagination, page.pageSize, form, name]);
245
- var config = _objectSpread({
246
- form,
247
- mode,
248
- isView,
249
- viewEmpty,
250
- disabled,
251
- cellNamePath,
252
- forceUpdate,
253
- insertType,
254
- emptyBtnText,
255
- editingKeys,
256
- actionWidth,
257
- actionProps,
258
- toolbarProps,
259
- setState,
260
- selectedRowKeys,
261
- selectedRows,
262
- onlyOneLineMsg,
263
- deletePoConfirmMsg,
264
- mulDeletePoConfirmMsg,
265
- virtualKey,
266
- requiredAlign,
267
- name: (0, _lodash.isArray)(name) ? name : [name],
268
- // name需要处理成namePath形式,为兼容多路径
269
- namePath,
270
- tableRef,
271
- max,
272
- tableLength: value === null || value === void 0 ? void 0 : value.length,
273
- page,
274
- originalValues,
275
- prefixCls,
276
- rowDisabled,
277
- actionDirection,
278
- diffConfig: _objectSpread(_objectSpread({}, resetProps === null || resetProps === void 0 || (_resetProps$otherProp = resetProps.otherProps) === null || _resetProps$otherProp === void 0 ? void 0 : _resetProps$otherProp.diffConfig), diffConfig),
279
- shouldUpdateDebounce,
280
- getIsNew,
281
- handlePageChange
282
- }, resetProps);
248
+ var config = (0, _react.useMemo)(() => {
249
+ var _resetProps$otherProp;
250
+ return _objectSpread({
251
+ form,
252
+ mode,
253
+ isView,
254
+ viewEmpty,
255
+ disabled,
256
+ cellNamePath,
257
+ forceUpdate,
258
+ insertType,
259
+ emptyBtnText,
260
+ editingKeys,
261
+ actionWidth,
262
+ actionProps,
263
+ toolbarProps,
264
+ setState,
265
+ selectedRowKeys,
266
+ selectedRows,
267
+ onlyOneLineMsg,
268
+ deletePoConfirmMsg,
269
+ mulDeletePoConfirmMsg,
270
+ virtualKey,
271
+ requiredAlign,
272
+ name: (0, _lodash.isArray)(name) ? name : [name],
273
+ // name需要处理成namePath形式,为兼容多路径
274
+ namePath,
275
+ tableRef,
276
+ max,
277
+ tableLength: value === null || value === void 0 ? void 0 : value.length,
278
+ page,
279
+ originalValues,
280
+ prefixCls,
281
+ rowDisabled,
282
+ actionDirection,
283
+ diffConfig: _objectSpread(_objectSpread({}, resetProps === null || resetProps === void 0 || (_resetProps$otherProp = resetProps.otherProps) === null || _resetProps$otherProp === void 0 ? void 0 : _resetProps$otherProp.diffConfig), diffConfig),
284
+ shouldUpdateDebounce,
285
+ getIsNew,
286
+ handlePageChange
287
+ }, resetProps);
288
+ }, [actionDirection, actionProps, actionWidth, cellNamePath, deletePoConfirmMsg, disabled, diffConfig, editingKeys, emptyBtnText, form, forceUpdate, getIsNew, handlePageChange, insertType, isView, max, mode, mulDeletePoConfirmMsg, name, namePath, onlyOneLineMsg, originalValues, prefixCls, requiredAlign, resetProps, rowDisabled, selectedRowKeys, selectedRows, shouldUpdateDebounce, tableRef, toolbarProps, value === null || value === void 0 ? void 0 : value.length, viewEmpty, virtualKey, page]);
283
289
 
284
290
  // 编辑行设置下样式
285
291
  var _rowClassName = record => {
@@ -337,7 +343,7 @@ var ProEditTable = (_ref, ref) => {
337
343
 
338
344
  // 空列表状态
339
345
  var emptyDom = (0, _react.useMemo)(() => () => {
340
- var _filter, _ref6;
346
+ var _filter, _ref5;
341
347
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
342
348
  className: "com-empty",
343
349
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("img", {
@@ -348,7 +354,7 @@ var ProEditTable = (_ref, ref) => {
348
354
  className: "content",
349
355
  children: disabled || isForbiddenBtn('add') ? _locale.default.ProEditTable.noData : /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
350
356
  children: [_locale.default.ProEditTable.noData, "\uFF0C", /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.RenderToolbar, _objectSpread({}, _objectSpread(_objectSpread({}, config), {}, {
351
- toolbarProps: toolbarProps === null || toolbarProps === void 0 || (_filter = (_ref6 = toolbarProps).filter) === null || _filter === void 0 ? void 0 : _filter.call(_ref6, item => item.type === 'add' || (item === null || item === void 0 ? void 0 : item.persistence)),
357
+ toolbarProps: toolbarProps === null || toolbarProps === void 0 || (_filter = (_ref5 = toolbarProps).filter) === null || _filter === void 0 ? void 0 : _filter.call(_ref5, item => item.type === 'add' || (item === null || item === void 0 ? void 0 : item.persistence)),
352
358
  dataSource: []
353
359
  })))]
354
360
  })
@@ -374,7 +380,7 @@ var ProEditTable = (_ref, ref) => {
374
380
  };
375
381
  var _columns = (0, _react.useMemo)(() => {
376
382
  return (0, _utils.transformColumns)(columns, config);
377
- }, [disabled, forceUpdate, columns, page, actionProps, editingKeys, cellNamePath]);
383
+ }, [columns, config]);
378
384
  var initDataSource = () => {
379
385
  var _value$every, _value$some;
380
386
  // 检查每一项是否有 rowKey 或通过 rowKey 字段获取的 key
@@ -423,6 +429,28 @@ var ProEditTable = (_ref, ref) => {
423
429
  rowSelection: renderRowSelection()
424
430
  }) : summary;
425
431
  var TableComponent = draggable ? _RcTable.DraggableTable : _RcTable.BaseTable;
432
+ var tableProps = (0, _react.useMemo)(() => ({
433
+ rowKey,
434
+ value,
435
+ headerRender,
436
+ tableRef,
437
+ className: _className,
438
+ columns: _columns,
439
+ renderRowSelection,
440
+ rowClassName: _rowClassName,
441
+ disabled,
442
+ virtualKey,
443
+ editingKeys,
444
+ isHideCheckBox,
445
+ rowDraggable,
446
+ pagination,
447
+ scroll,
448
+ summary: _summary,
449
+ page,
450
+ formatMessage: _locale.formatMessage,
451
+ locale: _locale.default,
452
+ handlePageChange
453
+ }), [_className, _columns, _rowClassName, disabled, editingKeys, _locale.formatMessage, handlePageChange, headerRender, isHideCheckBox, _locale.default, page, pagination, renderRowSelection, rowDraggable, rowKey, scroll, _summary, tableRef, value, virtualKey]);
426
454
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
427
455
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_antd.ConfigProvider, {
428
456
  renderEmpty: value !== null && value !== void 0 && value.length ? undefined : emptyDom,
@@ -433,28 +461,7 @@ var ProEditTable = (_ref, ref) => {
433
461
  onDragEnd,
434
462
  draggable
435
463
  },
436
- tableProps: {
437
- rowKey,
438
- value,
439
- headerRender,
440
- tableRef,
441
- className: _className,
442
- columns: _columns,
443
- renderRowSelection,
444
- rowClassName: _rowClassName,
445
- disabled,
446
- virtualKey,
447
- editingKeys,
448
- isHideCheckBox,
449
- rowDraggable,
450
- pagination,
451
- scroll,
452
- summary: _summary,
453
- page,
454
- formatMessage: _locale.formatMessage,
455
- locale: _locale.default,
456
- handlePageChange
457
- }
464
+ tableProps: tableProps
458
465
  }))
459
466
  }), !isView && value !== null && value !== void 0 && value.length ? toolbarSticky ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_antd.Affix, _objectSpread(_objectSpread({
460
467
  ref: affixRef
@@ -16,7 +16,7 @@ export declare const defaultMultipleActionKeys: string[];
16
16
  export declare const defaultEditingActionKeys: string[];
17
17
  export declare const defaultToolbarKeys: string[];
18
18
  export declare const actions: {
19
- edit: ({ record, editingKeys, setState, form, virtualRowName, virtualKey, onlyOneLineMsg, }: any) => boolean;
19
+ edit: ({ record, editingKeys, setState, form, virtualRowName, virtualKey, onlyOneLineMsg }: any) => boolean;
20
20
  save: ({ record, editingKeys, setState, form, rowName, virtualRowName, result }: any) => Promise<void>;
21
21
  cancel: ({ name, record, editingKeys, setState, form, virtualRowName, virtualKey }: any) => void;
22
22
  delete: ({ name, record, editingKeys, setState, form, virtualKey, onlyOneLineMsg }: any) => boolean;
@@ -174,8 +174,8 @@ var actions = exports.actions = {
174
174
  },
175
175
  add: function () {
176
176
  var _add = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(_ref5) {
177
- var _tableRef$current, _tableRef$current$scr;
178
- var result, insertType, editingKeys, setState, form, name, virtualName, virtualKey, onlyOneLineMsg, tableRef, _ref5$prefixCls, prefixCls, page, handlePageChange, nextData, rowKey, addData, nextPageNum, nextEditingKeys;
177
+ var _tableRef$current;
178
+ var result, insertType, editingKeys, setState, form, name, virtualName, virtualKey, onlyOneLineMsg, tableRef, _ref5$prefixCls, prefixCls, page, handlePageChange, nextData, rowKey, addData, nextPageNum, nextEditingKeys, tableBody;
179
179
  return _regeneratorRuntime().wrap(function _callee4$(_context4) {
180
180
  while (1) switch (_context4.prev = _context4.next) {
181
181
  case 0:
@@ -235,17 +235,24 @@ var actions = exports.actions = {
235
235
  });
236
236
  }
237
237
  form.setFieldValue(name, nextData);
238
- (_tableRef$current = tableRef.current) === null || _tableRef$current === void 0 || (_tableRef$current = _tableRef$current.children[0]) === null || _tableRef$current === void 0 || (_tableRef$current = _tableRef$current.querySelector(`.${prefixCls}-table-body`)) === null || _tableRef$current === void 0 || (_tableRef$current$scr = _tableRef$current.scrollTo) === null || _tableRef$current$scr === void 0 || _tableRef$current$scr.call(_tableRef$current, {
239
- top: insertType === 'before' ? -10000 : 10000,
240
- behavior: 'smooth'
241
- });
238
+ tableBody = (_tableRef$current = tableRef.current) === null || _tableRef$current === void 0 || (_tableRef$current = _tableRef$current.children[0]) === null || _tableRef$current === void 0 ? void 0 : _tableRef$current.querySelector(`.${prefixCls}-table-body`);
239
+ if (tableBody) {
240
+ // 等待新行渲染完毕再读取 scrollHeight,确保能滚动到真正的底部
241
+ requestAnimationFrame(() => {
242
+ var _tableBody$scrollTo;
243
+ (_tableBody$scrollTo = tableBody.scrollTo) === null || _tableBody$scrollTo === void 0 || _tableBody$scrollTo.call(tableBody, {
244
+ top: insertType === 'before' ? 0 : tableBody.scrollHeight,
245
+ behavior: 'smooth'
246
+ });
247
+ });
248
+ }
242
249
  if (!virtualKey) {
243
- _context4.next = 15;
250
+ _context4.next = 16;
244
251
  break;
245
252
  }
246
- _context4.next = 15;
253
+ _context4.next = 16;
247
254
  return form.validateFields([name]);
248
- case 15:
255
+ case 16:
249
256
  case "end":
250
257
  return _context4.stop();
251
258
  }
@@ -215,7 +215,7 @@ var transformColumns = exports.transformColumns = function transformColumns() {
215
215
  setState = config.setState,
216
216
  page = config.page;
217
217
  var isCell = mode === 'cell';
218
- var nextColumns = (0, _tools.cloneDeepFilterNode)(columns);
218
+ var nextColumns = columns.map(item => (0, _tools.cloneDeepFilterNode)(item));
219
219
  var pageNum = _utils.tools.calc(page.pageNum, '-', 1);
220
220
  var firstIndex = _utils.tools.calc(pageNum, '*', page.pageSize);
221
221
  nextColumns.forEach((item, index) => {
@@ -368,6 +368,19 @@ var transformColumns = exports.transformColumns = function transformColumns() {
368
368
  });
369
369
  };
370
370
  item.render = _render;
371
+
372
+ // 精准控制单元格更新,减少不必要的渲染
373
+ if (!item.shouldCellUpdate) {
374
+ var hasComponent = (0, _lodash.isFunction)(item.component);
375
+ item.shouldCellUpdate = (record, prevRecord) => {
376
+ if ((record === null || record === void 0 ? void 0 : record.rowKey) !== (prevRecord === null || prevRecord === void 0 ? void 0 : prevRecord.rowKey)) return true;
377
+ // 动态 component 可能依赖行内其他字段,需比较整行
378
+ if (hasComponent) return !(0, _lodash.isEqual)(record, prevRecord);
379
+ var key = item.dataIndex || item.key;
380
+ if (!key) return true;
381
+ return (record === null || record === void 0 ? void 0 : record[key]) !== (prevRecord === null || prevRecord === void 0 ? void 0 : prevRecord[key]);
382
+ };
383
+ }
371
384
  });
372
385
  if (disabled || isView) {
373
386
  // 查看模式下过滤操作栏
@@ -56,8 +56,9 @@ var Container = props => {
56
56
  diffConfig: diffConfig
57
57
  }, otherProps));
58
58
  if (type === 'ProCollapse') {
59
+ var hasFieldChildren = Array.isArray(children) && children.length > 0;
59
60
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_ProCollapse.default, _objectSpread(_objectSpread({}, (0, _lodash.omit)(props, ['otherProps', 'children', 'onBlur', 'onChange', 'placeholder', 'className'])), {}, {
60
- children: child
61
+ children: hasFieldChildren ? child : null
61
62
  }));
62
63
  }
63
64
  if (type === 'Container') {
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
- var _react = require("react");
7
+ var _react = _interopRequireWildcard(require("react"));
8
8
  var _antd = require("antd");
9
9
  var _icons = require("@ant-design/icons");
10
10
  var _classnames = _interopRequireDefault(require("classnames"));
@@ -12,6 +12,8 @@ var _fold = _interopRequireDefault(require("../../../assets/fold.svg"));
12
12
  var _index = _interopRequireDefault(require("../../../ProIcon/index"));
13
13
  var _jsxRuntime = require("react/jsx-runtime");
14
14
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+ 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
+ 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; }
15
17
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
16
18
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
17
19
  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; }
@@ -61,11 +63,12 @@ var ProCollapse = props => {
61
63
  'pro-collapse-no-level1-title': !title && level !== '2' && level !== '3',
62
64
  [`${className}`]: className
63
65
  });
64
- var content = /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
66
+ var shouldRenderContent = children !== null && children !== undefined;
67
+ var content = shouldRenderContent ? /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
65
68
  className: "pro-collapse-content",
66
69
  style: contentStyle,
67
70
  children: children
68
- });
71
+ }) : null;
69
72
 
70
73
  // 生成 Collapse items 配置
71
74
  var getCollapseItems = () => {
@@ -431,7 +431,7 @@ var ProSelect = (props, ref) => {
431
431
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(OptGroup, {
432
432
  label: item[label],
433
433
  children: groupOpts.map(opt => /*#__PURE__*/(0, _jsxRuntime.jsx)(Option, {
434
- label: opt[label],
434
+ label: selectProps.showCodeName ? `${opt[code]}-${opt[label]}` : opt[label],
435
435
  value: opt[code],
436
436
  record: opt,
437
437
  disabled: !!opt.disabled,
@@ -447,7 +447,7 @@ var ProSelect = (props, ref) => {
447
447
  }, (_item$label = item[label]) !== null && _item$label !== void 0 ? _item$label : `group-${index}`);
448
448
  }
449
449
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(Option, {
450
- label: item[label],
450
+ label: selectProps.showCodeName ? `${item[code]}-${item[label]}` : item[label],
451
451
  value: optionValue,
452
452
  record: item,
453
453
  disabled: !!item.disabled,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zat-design/sisyphus-react",
3
- "version": "4.1.1",
3
+ "version": "4.1.2-beta.1",
4
4
  "license": "MIT",
5
5
  "main": "lib/index.js",
6
6
  "module": "es/index.js",