@nokecy/qc-ui 1.1.68 → 1.1.70

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 (32) hide show
  1. package/dist/cjs/ag-grid-plus/ag-gridPlus.js +1 -16
  2. package/dist/cjs/ag-grid-plus/setting/ColumnConfigForm.js +3 -1
  3. package/dist/cjs/ag-grid-plus/setting/ColumnConfigTable.js +7 -3
  4. package/dist/cjs/ag-grid-plus/setting/ColumnNameCellRenderer.js +9 -6
  5. package/dist/cjs/ag-grid-plus/setting/ColumnSetting.js +4 -2
  6. package/dist/cjs/ag-grid-plus/setting/MoveNodeModal.js +3 -1
  7. package/dist/cjs/ag-grid-plus/setting/NameColumnRenderer.js +6 -4
  8. package/dist/cjs/ag-grid-plus/setting/QuerySchemeManager.js +10 -8
  9. package/dist/cjs/ag-grid-plus/utils/columnProcessors.js +6 -3
  10. package/dist/cjs/array-table/readOnlyFormatters.d.ts +8 -0
  11. package/dist/cjs/array-table/readOnlyFormatters.js +23 -1
  12. package/dist/cjs/array-table/utils.js +49 -12
  13. package/dist/cjs/generatedListPage/_utils/defaultHandlers.d.ts +1 -1
  14. package/dist/cjs/generatedListPage/_utils/defaultHandlers.js +130 -42
  15. package/dist/cjs/generatedListPage/types.d.ts +2 -2
  16. package/dist/esm/ag-grid-plus/ag-gridPlus.js +3 -18
  17. package/dist/esm/ag-grid-plus/setting/ColumnConfigForm.js +4 -2
  18. package/dist/esm/ag-grid-plus/setting/ColumnConfigTable.js +8 -4
  19. package/dist/esm/ag-grid-plus/setting/ColumnNameCellRenderer.js +10 -7
  20. package/dist/esm/ag-grid-plus/setting/ColumnSetting.js +5 -3
  21. package/dist/esm/ag-grid-plus/setting/MoveNodeModal.js +4 -2
  22. package/dist/esm/ag-grid-plus/setting/NameColumnRenderer.js +7 -5
  23. package/dist/esm/ag-grid-plus/setting/QuerySchemeManager.js +11 -9
  24. package/dist/esm/ag-grid-plus/utils/columnProcessors.js +6 -3
  25. package/dist/esm/array-table/readOnlyFormatters.d.ts +8 -0
  26. package/dist/esm/array-table/readOnlyFormatters.js +22 -0
  27. package/dist/esm/array-table/utils.js +50 -13
  28. package/dist/esm/generatedListPage/_utils/defaultHandlers.d.ts +1 -1
  29. package/dist/esm/generatedListPage/_utils/defaultHandlers.js +130 -42
  30. package/dist/esm/generatedListPage/types.d.ts +2 -2
  31. package/dist/umd/qc-ui.min.js +1 -1
  32. package/package.json +1 -1
@@ -71,7 +71,6 @@ _agGridCommunity.ModuleRegistry.registerModules([_agGridEnterprise.AllEnterprise
71
71
 
72
72
  // 导入 AG-Grid v33 主题
73
73
 
74
- var Text = _antd.Typography.Text;
75
74
  var getSort = function getSort(columnState) {
76
75
  return columnState ? "".concat(columnState.colId, " ").concat(columnState.sort) : "";
77
76
  };
@@ -478,21 +477,7 @@ function AgGridPlus(props) {
478
477
  }
479
478
  //@ts-ignore
480
479
  if (col !== null && col !== void 0 && col.ellipsis) {
481
- return _objectSpread(_objectSpread({}, (0, _columnProcessors.mergeInferredColumnType)(col, dataType)), {}, {
482
- cellRenderer: function cellRenderer(_ref) {
483
- var value = _ref.value;
484
- return /*#__PURE__*/_react.default.createElement(Text, {
485
- ellipsis: {
486
- tooltip: value
487
- },
488
- style: {
489
- display: 'flex',
490
- justifyContent: 'center',
491
- alignItems: 'center'
492
- }
493
- }, value);
494
- }
495
- });
480
+ return (0, _columnProcessors.processEllipsisColumn)((0, _columnProcessors.mergeInferredColumnType)(col, dataType));
496
481
  }
497
482
  if (col.cellRenderer) {
498
483
  return _objectSpread(_objectSpread({}, (0, _columnProcessors.mergeInferredColumnType)(col, dataType)), {}, {
@@ -39,12 +39,14 @@ var SchemaField = (0, _react2.createSchemaField)({
39
39
  * 自定义排序抓手
40
40
  */
41
41
  var CustomSortHandle = function CustomSortHandle() {
42
+ var _theme$useToken = _antd.theme.useToken(),
43
+ token = _theme$useToken.token; // 颜色取主题 token,跟随亮/暗主题 @author nokecy
42
44
  return /*#__PURE__*/_react.default.createElement(_antd.Tooltip, {
43
45
  title: "\u62D6\u52A8\u6392\u5E8F\uFF08\u4EC5\u652F\u6301\u540C\u7EA7\uFF09"
44
46
  }, /*#__PURE__*/_react.default.createElement(_icons.HolderOutlined, {
45
47
  style: {
46
48
  fontSize: 16,
47
- color: '#999',
49
+ color: token.colorTextTertiary,
48
50
  cursor: 'move'
49
51
  }
50
52
  }));
@@ -245,6 +245,8 @@ var ColumnConfigTable = function ColumnConfigTable(_ref2) {
245
245
  _ref2$scrollY = _ref2.scrollY,
246
246
  scrollY = _ref2$scrollY === void 0 ? 480 : _ref2$scrollY;
247
247
  var gridTheme = (0, _theme.useAgGridTheme)();
248
+ var _theme$useToken = _antd.theme.useToken(),
249
+ token = _theme$useToken.token; // 颜色取主题 token,跟随亮/暗主题 @author nokecy
248
250
  var _useState = (0, _react.useState)(items),
249
251
  _useState2 = _slicedToArray(_useState, 2),
250
252
  localItems = _useState2[0],
@@ -687,16 +689,18 @@ var ColumnConfigTable = function ColumnConfigTable(_ref2) {
687
689
  return localItems.filter(isNodeVisible);
688
690
  }, [localItems, expandedKeys, simple]);
689
691
 
690
- // 添加拖拽样式
692
+ // 添加拖拽样式:选择器限定在本表容器(.qc-column-config-table)内,免得弹窗打开期间染到背后列表的行;
693
+ // 拖拽幽灵挂在 body 上,只能全局。颜色取主题 token。@author nokecy
691
694
  (0, _react.useEffect)(function () {
692
695
  var style = document.createElement('style');
693
- style.textContent = "\n /* \u62D6\u62FD\u884C\u6837\u5F0F */\n .ag-row-dragging {\n opacity: 0.5;\n transition: opacity 0.2s ease;\n }\n\n /* \u62D6\u62FD\u5E7D\u7075\u6837\u5F0F */\n .ag-dnd-ghost {\n background: #fff !important;\n border: 2px dashed #1890ff !important;\n border-radius: 4px !important;\n padding: 8px !important;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15) !important;\n opacity: 0.9 !important;\n font-size: 14px !important;\n }\n\n /* \u53EF\u653E\u7F6E\u76EE\u6807\u9AD8\u4EAE */\n .ag-row-hover.ag-row {\n background-color: #e6f7ff !important;\n transition: background-color 0.2s ease;\n }\n\n /* \u5206\u7EC4\u884C\u7279\u6B8A\u9AD8\u4EAE */\n .ag-row-hover.ag-row[row-id*=\"group\"] {\n background-color: #bae7ff !important;\n border: 2px solid #1890ff;\n transition: all 0.2s ease;\n }\n\n /* \u884C\u52A8\u753B */\n .ag-row {\n transition: transform 0.3s ease, opacity 0.3s ease;\n }\n\n /* \u62D6\u62FD\u624B\u67C4\u6837\u5F0F */\n .ag-row .ag-cell[col-id=\"type\"] {\n cursor: grab !important;\n }\n\n .ag-row-dragging .ag-cell[col-id=\"type\"] {\n cursor: grabbing !important;\n }\n ";
696
+ style.textContent = "\n /* \u62D6\u62FD\u884C\u6837\u5F0F */\n .qc-column-config-table .ag-row-dragging {\n opacity: 0.5;\n transition: opacity 0.2s ease;\n }\n\n /* \u62D6\u62FD\u5E7D\u7075\u6837\u5F0F */\n .ag-dnd-ghost {\n background: ".concat(token.colorBgElevated, " !important;\n color: ").concat(token.colorText, " !important;\n border: 2px dashed ").concat(token.colorPrimary, " !important;\n border-radius: 4px !important;\n padding: 8px !important;\n box-shadow: ").concat(token.boxShadowSecondary, " !important;\n opacity: 0.9 !important;\n font-size: 14px !important;\n }\n\n /* \u53EF\u653E\u7F6E\u76EE\u6807\u9AD8\u4EAE */\n .qc-column-config-table .ag-row-hover.ag-row {\n background-color: ").concat(token.controlItemBgHover, " !important;\n transition: background-color 0.2s ease;\n }\n\n /* \u5206\u7EC4\u884C\u7279\u6B8A\u9AD8\u4EAE */\n .qc-column-config-table .ag-row-hover.ag-row[row-id*=\"group\"] {\n background-color: ").concat(token.controlItemBgActive, " !important;\n border: 2px solid ").concat(token.colorPrimary, ";\n transition: all 0.2s ease;\n }\n\n /* \u884C\u52A8\u753B */\n .qc-column-config-table .ag-row {\n transition: transform 0.3s ease, opacity 0.3s ease;\n }\n\n /* \u62D6\u62FD\u624B\u67C4\u6837\u5F0F */\n .qc-column-config-table .ag-row .ag-cell[col-id=\"type\"] {\n cursor: grab !important;\n }\n\n .qc-column-config-table .ag-row-dragging .ag-cell[col-id=\"type\"] {\n cursor: grabbing !important;\n }\n ");
694
697
  document.head.appendChild(style);
695
698
  return function () {
696
699
  document.head.removeChild(style);
697
700
  };
698
- }, []);
701
+ }, [token]);
699
702
  return /*#__PURE__*/_react.default.createElement("div", {
703
+ className: "qc-column-config-table",
700
704
  style: {
701
705
  width: '100%'
702
706
  }
@@ -34,6 +34,9 @@ var ColumnNameCellRenderer = exports.ColumnNameCellRenderer = function ColumnNam
34
34
  expandedKeys = props.expandedKeys,
35
35
  onToggleExpand = props.onToggleExpand,
36
36
  allItems = props.allItems;
37
+ var _theme$useToken = _antd.theme.useToken(),
38
+ token = _theme$useToken.token; // 颜色取主题 token,跟随亮/暗主题 @author nokecy
39
+
37
40
  var _useState = (0, _react.useState)(false),
38
41
  _useState2 = _slicedToArray(_useState, 2),
39
42
  isEditing = _useState2[0],
@@ -118,7 +121,7 @@ var ColumnNameCellRenderer = exports.ColumnNameCellRenderer = function ColumnNam
118
121
  width: 16,
119
122
  display: 'inline-block',
120
123
  fontSize: '12px',
121
- color: '#666'
124
+ color: token.colorTextSecondary
122
125
  }
123
126
  }, isExpanded ? '▼' : '▶') : /*#__PURE__*/_react.default.createElement("span", {
124
127
  style: {
@@ -127,7 +130,7 @@ var ColumnNameCellRenderer = exports.ColumnNameCellRenderer = function ColumnNam
127
130
  }
128
131
  }), /*#__PURE__*/_react.default.createElement(_icons.HolderOutlined, {
129
132
  style: {
130
- color: '#999',
133
+ color: token.colorTextTertiary,
131
134
  cursor: 'grab',
132
135
  fontSize: '14px'
133
136
  }
@@ -150,7 +153,7 @@ var ColumnNameCellRenderer = exports.ColumnNameCellRenderer = function ColumnNam
150
153
  type: "secondary",
151
154
  style: {
152
155
  fontSize: '11px',
153
- color: '#8c8c8c',
156
+ color: token.colorTextTertiary,
154
157
  lineHeight: '16px'
155
158
  }
156
159
  }, "\u539F\u59CB: ", item.originalHeaderName), /*#__PURE__*/_react.default.createElement(_antd.Tooltip, {
@@ -158,7 +161,7 @@ var ColumnNameCellRenderer = exports.ColumnNameCellRenderer = function ColumnNam
158
161
  }, /*#__PURE__*/_react.default.createElement(_icons.InfoCircleOutlined, {
159
162
  style: {
160
163
  fontSize: '11px',
161
- color: '#1890ff',
164
+ color: token.colorPrimary,
162
165
  cursor: 'help'
163
166
  }
164
167
  }))), /*#__PURE__*/_react.default.createElement("div", {
@@ -180,10 +183,10 @@ var ColumnNameCellRenderer = exports.ColumnNameCellRenderer = function ColumnNam
180
183
  flex: 1,
181
184
  fontSize: '14px',
182
185
  fontWeight: item.type === 'group' ? 600 : 400,
183
- borderBottom: isEditing ? '1px solid #1890ff' : '1px solid transparent',
186
+ borderBottom: isEditing ? "1px solid ".concat(token.colorPrimary) : '1px solid transparent',
184
187
  transition: 'border-color 0.2s',
185
188
  padding: '0 4px',
186
- color: isModified ? '#1890ff' : 'rgba(0, 0, 0, 0.85)'
189
+ color: isModified ? token.colorPrimary : token.colorText
187
190
  }
188
191
  }), isModified && /*#__PURE__*/_react.default.createElement(_antd.Tooltip, {
189
192
  title: "\u91CD\u7F6E\u4E3A\u539F\u59CB\u540D\u79F0"
@@ -59,6 +59,8 @@ var ColumnSetting = function ColumnSetting(_ref) {
59
59
  onSaveColumnState = _ref.onSaveColumnState,
60
60
  allColDefsProp = _ref.allColDefs;
61
61
  var gridTheme = (0, _theme.useAgGridTheme)();
62
+ var _theme$useToken = _antd.theme.useToken(),
63
+ token = _theme$useToken.token; // 颜色取主题 token,跟随亮/暗主题 @author nokecy
62
64
  // 使用新的集中式方案管理 API(包含状态数据和操作方法)
63
65
  var _useGridSchemes = (0, _useSchemeManager.useGridSchemes)(),
64
66
  columnSchemes = _useGridSchemes.columnSchemes,
@@ -953,7 +955,7 @@ var ColumnSetting = function ColumnSetting(_ref) {
953
955
  title: '重置所有用户配置',
954
956
  content: /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("p", {
955
957
  style: {
956
- color: '#ff4d4f',
958
+ color: token.colorError,
957
959
  fontWeight: 'bold'
958
960
  }
959
961
  }, "\u6B64\u64CD\u4F5C\u4E0D\u53EF\u6062\u590D\uFF01"), /*#__PURE__*/_react.default.createElement("p", null, "\u786E\u5B9A\u8981\u5220\u9664\u6240\u6709\u7528\u6237\u7684\u4E2A\u4EBA\u5217\u914D\u7F6E\u5417\uFF1F"), /*#__PURE__*/_react.default.createElement("p", null, "\u6267\u884C\u540E\uFF0C\u6240\u6709\u7528\u6237\u5C06\u4F7F\u7528\u5168\u5C40\u9ED8\u8BA4\u914D\u7F6E\u3002")),
@@ -1184,7 +1186,7 @@ var ColumnSetting = function ColumnSetting(_ref) {
1184
1186
  marginLeft: 16,
1185
1187
  fontSize: 14,
1186
1188
  fontWeight: 'normal',
1187
- color: '#1890ff'
1189
+ color: token.colorPrimary
1188
1190
  }
1189
1191
  }, "- \u5F53\u524D\u65B9\u6848: ", currentScheme.name, isUsingGlobalFallback && currentScheme.isGlobal && /*#__PURE__*/_react.default.createElement(_antd.Tag, {
1190
1192
  color: "orange",
@@ -23,6 +23,8 @@ var MoveNodeModal = function MoveNodeModal(_ref) {
23
23
  allItems = _ref.allItems,
24
24
  onCancel = _ref.onCancel,
25
25
  onConfirm = _ref.onConfirm;
26
+ var _theme$useToken = _antd.theme.useToken(),
27
+ token = _theme$useToken.token; // 颜色取主题 token,跟随亮/暗主题 @author nokecy
26
28
  /**
27
29
  * 将扁平数据转换为 Tree 结构
28
30
  */
@@ -143,7 +145,7 @@ var MoveNodeModal = function MoveNodeModal(_ref) {
143
145
  }, /*#__PURE__*/_react.default.createElement("div", {
144
146
  style: {
145
147
  marginBottom: 16,
146
- color: '#666'
148
+ color: token.colorTextSecondary
147
149
  }
148
150
  }, "\u8BF7\u9009\u62E9\u76EE\u6807\u7236\u8282\u70B9(\u53EA\u80FD\u9009\u62E9\u5206\u7EC4\u8282\u70B9):"), /*#__PURE__*/_react.default.createElement(_antd.Tree, {
149
151
  showIcon: true,
@@ -25,6 +25,8 @@ var NameColumnRenderer = function NameColumnRenderer(_ref) {
25
25
  var type = record.type,
26
26
  level = record.level,
27
27
  _isNew = record._isNew;
28
+ var _theme$useToken = _antd.theme.useToken(),
29
+ token = _theme$useToken.token; // 颜色取主题 token,跟随亮/暗主题 @author nokecy
28
30
 
29
31
  // 计算缩进(每层 20px)
30
32
  var indent = level * 20;
@@ -45,12 +47,12 @@ var NameColumnRenderer = function NameColumnRenderer(_ref) {
45
47
  // 节点类型图标
46
48
  var NodeIcon = type === 'group' ? /*#__PURE__*/_react.default.createElement(_icons.FolderOutlined, {
47
49
  style: {
48
- color: '#1890ff',
50
+ color: token.colorPrimary,
49
51
  fontSize: 14
50
52
  }
51
53
  }) : /*#__PURE__*/_react.default.createElement(_icons.FileOutlined, {
52
54
  style: {
53
- color: '#52c41a',
55
+ color: token.colorSuccess,
54
56
  fontSize: 14
55
57
  }
56
58
  });
@@ -63,7 +65,7 @@ var NameColumnRenderer = function NameColumnRenderer(_ref) {
63
65
  }
64
66
  }, level > 0 && /*#__PURE__*/_react.default.createElement("span", {
65
67
  style: {
66
- color: '#999',
68
+ color: token.colorTextTertiary,
67
69
  fontFamily: 'monospace',
68
70
  fontSize: 12,
69
71
  flexShrink: 0
@@ -87,7 +89,7 @@ var NameColumnRenderer = function NameColumnRenderer(_ref) {
87
89
  placeholder: type === 'group' ? '请输入分组名称' : '请输入列名称',
88
90
  style: {
89
91
  flex: 1,
90
- background: _isNew ? '#fff7e6' : 'transparent' // 新添加的节点高亮
92
+ background: _isNew ? token.colorWarningBg : 'transparent' // 新添加的节点高亮
91
93
  }
92
94
  }));
93
95
  };
@@ -59,6 +59,8 @@ var QuerySchemeManager = function QuerySchemeManager(_ref) {
59
59
  visible = _ref.visible,
60
60
  onClose = _ref.onClose;
61
61
  var gridTheme = (0, _theme.useAgGridTheme)();
62
+ var _theme$useToken = _antd.theme.useToken(),
63
+ token = _theme$useToken.token; // 颜色取主题 token,跟随亮/暗主题 @author nokecy
62
64
  // 获取方案管理 API
63
65
  var _useGridSchemes = (0, _useSchemeManager.useGridSchemes)(),
64
66
  querySchemes = _useGridSchemes.querySchemes,
@@ -607,7 +609,7 @@ var QuerySchemeManager = function QuerySchemeManager(_ref) {
607
609
  }
608
610
  return /*#__PURE__*/_react.default.createElement(_antd.Space, null, scheme.isDefault && /*#__PURE__*/_react.default.createElement(_icons.StarFilled, {
609
611
  style: {
610
- color: '#faad14'
612
+ color: token.colorWarning
611
613
  }
612
614
  }), /*#__PURE__*/_react.default.createElement("span", null, scheme.name), isCurrent && /*#__PURE__*/_react.default.createElement(_antd.Tag, {
613
615
  color: "blue"
@@ -709,7 +711,7 @@ var QuerySchemeManager = function QuerySchemeManager(_ref) {
709
711
  marginLeft: 16,
710
712
  fontSize: 14,
711
713
  fontWeight: 'normal',
712
- color: '#1890ff'
714
+ color: token.colorPrimary
713
715
  }
714
716
  }, "- \u5F53\u524D\u65B9\u6848: ", currentScheme.name)),
715
717
  open: visible,
@@ -730,30 +732,30 @@ var QuerySchemeManager = function QuerySchemeManager(_ref) {
730
732
  style: {
731
733
  marginBottom: 16,
732
734
  padding: '12px 16px',
733
- background: currentScheme ? '#e6f7ff' : '#f5f5f5',
735
+ background: currentScheme ? token.colorPrimaryBg : token.colorFillTertiary,
734
736
  borderRadius: 4,
735
737
  border: '1px solid',
736
- borderColor: currentScheme ? '#91d5ff' : '#d9d9d9'
738
+ borderColor: currentScheme ? token.colorPrimaryBorder : token.colorBorder
737
739
  }
738
740
  }, currentScheme ? /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("div", {
739
741
  style: {
740
742
  fontWeight: 600,
741
743
  marginBottom: 4,
742
- color: '#1890ff'
744
+ color: token.colorPrimary
743
745
  }
744
746
  }, "\u5F53\u524D\u65B9\u6848: ", currentScheme.name), currentScheme.description && /*#__PURE__*/_react.default.createElement("div", {
745
747
  style: {
746
748
  fontSize: 12,
747
- color: '#666'
749
+ color: token.colorTextSecondary
748
750
  }
749
751
  }, currentScheme.description)) : /*#__PURE__*/_react.default.createElement("div", {
750
752
  style: {
751
- color: '#666'
753
+ color: token.colorTextSecondary
752
754
  }
753
755
  }, "\u672A\u9009\u62E9\u65B9\u6848 - \u4F7F\u7528\u4E34\u65F6\u914D\u7F6E")), /*#__PURE__*/_react.default.createElement("div", {
754
756
  style: {
755
757
  marginBottom: 16,
756
- color: '#666'
758
+ color: token.colorTextSecondary
757
759
  }
758
760
  }, "\u62D6\u62FD\u4E0B\u65B9\u67E5\u8BE2\u9879\u8C03\u6574\u987A\u5E8F\uFF0C\u4F7F\u7528\u5F00\u5173\u63A7\u5236\u663E\u793A/\u9690\u85CF\uFF0C\u5B8C\u6210\u540E\u53EF\u5E94\u7528\u6216\u4FDD\u5B58\u4E3A\u65B9\u6848"), /*#__PURE__*/_react.default.createElement("div", {
759
761
  style: {
@@ -223,6 +223,8 @@ function processEllipsisColumn(col) {
223
223
  return col;
224
224
  }
225
225
  return _objectSpread(_objectSpread({}, col), {}, {
226
+ // 块级占满单元格,对齐继承单元格的 text-align(列方案的左/中/右对齐、数字列右对齐);
227
+ // 以前写死 flex 居中,列方案选左对齐也居中,且 flex 容器里省略号不截断。@author nokecy
226
228
  cellRenderer: function cellRenderer(_ref) {
227
229
  var value = _ref.value;
228
230
  return /*#__PURE__*/_react.default.createElement(Text, {
@@ -230,9 +232,10 @@ function processEllipsisColumn(col) {
230
232
  tooltip: value
231
233
  },
232
234
  style: {
233
- display: 'flex',
234
- justifyContent: 'center',
235
- alignItems: 'center'
235
+ display: 'block',
236
+ width: '100%',
237
+ color: 'inherit',
238
+ lineHeight: 'inherit'
236
239
  }
237
240
  }, value);
238
241
  }
@@ -5,6 +5,14 @@ export type ReadOnlyFormatterCtx = {
5
5
  fieldSchema: any;
6
6
  };
7
7
  export type ReadOnlyFormatter = (value: any, ctx: ReadOnlyFormatterCtx) => string;
8
+ /**
9
+ * 兜底格式化器:注册表里没有的组件(业务自定义的选择器、输入框等),可编辑列按它出懒挂载文本。
10
+ *
11
+ * 显示与控件失焦时看到的一致:原始值原样显示;labelInValue 对象 / 解构字段({value,label})显示 label,
12
+ * 没有 label 才显示 value;数组逐个显示后逗号拼接。显示需要按编码查名称等特殊逻辑的组件,
13
+ * 消费方用 registerReadOnlyFormatter 注册专用格式化器覆盖。@author nokecy
14
+ */
15
+ export declare const fallbackFormatter: ReadOnlyFormatter;
8
16
  /** 消费方扩展自定义只读列的显示逻辑 */
9
17
  export declare const registerReadOnlyFormatter: (component: string, formatter: ReadOnlyFormatter) => void;
10
18
  /**
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.registerReadOnlyFormatter = exports.getReadOnlyFormatter = void 0;
6
+ exports.registerReadOnlyFormatter = exports.getReadOnlyFormatter = exports.fallbackFormatter = void 0;
7
7
  var _dayjs = _interopRequireDefault(require("dayjs"));
8
8
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
9
  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); } /**
@@ -100,6 +100,28 @@ var registry = {
100
100
  Checkbox: booleanFormatter
101
101
  };
102
102
 
103
+ /**
104
+ * 兜底格式化器:注册表里没有的组件(业务自定义的选择器、输入框等),可编辑列按它出懒挂载文本。
105
+ *
106
+ * 显示与控件失焦时看到的一致:原始值原样显示;labelInValue 对象 / 解构字段({value,label})显示 label,
107
+ * 没有 label 才显示 value;数组逐个显示后逗号拼接。显示需要按编码查名称等特殊逻辑的组件,
108
+ * 消费方用 registerReadOnlyFormatter 注册专用格式化器覆盖。@author nokecy
109
+ */
110
+ var fallbackFormatter = exports.fallbackFormatter = function fallbackFormatter(value, ctx) {
111
+ if (value == null || value === '') return '';
112
+ if (Array.isArray(value)) return value.map(function (v) {
113
+ return fallbackFormatter(v, ctx);
114
+ }).filter(Boolean).join(', ');
115
+ if (typeof value === 'boolean') return booleanFormatter(value, ctx);
116
+ if (_typeof(value) === 'object') {
117
+ var _value$label2;
118
+ if (typeof value.format === 'function') return dateFormatter(value, ctx);
119
+ var shown = (_value$label2 = value.label) !== null && _value$label2 !== void 0 ? _value$label2 : value.value;
120
+ return shown == null ? '' : String(shown);
121
+ }
122
+ return String(value);
123
+ };
124
+
103
125
  /** 消费方扩展自定义只读列的显示逻辑 */
104
126
  var registerReadOnlyFormatter = exports.registerReadOnlyFormatter = function registerReadOnlyFormatter(component, formatter) {
105
127
  registry[component] = formatter;
@@ -27,13 +27,13 @@ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e
27
27
  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; }
28
28
  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); } }
29
29
  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); }); }; }
30
+ 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); }
30
31
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
31
32
  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."); }
32
33
  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); }
33
34
  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; }
34
35
  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; } }
35
36
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
36
- 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); }
37
37
  var isColumnComponent = exports.isColumnComponent = function isColumnComponent(schema) {
38
38
  var _schema$xComponent;
39
39
  return ((_schema$xComponent = schema['x-component']) === null || _schema$xComponent === void 0 ? void 0 : _schema$xComponent.indexOf('Column')) > -1;
@@ -168,6 +168,32 @@ var isSimpleFieldPath = function isSimpleFieldPath(name) {
168
168
  return !!name && /^[^.{}[\]*]+(\.[^.{}[\]*]+)*$/.test(name);
169
169
  };
170
170
 
171
+ /**
172
+ * 解析对象解构字段名 `{value:code,label:name}`(选择器 labelInValue 常用),返回 [对象键, 数据路径] 列表;
173
+ * 不是对象解构、或成员路径不是简单点号路径时返回 null(调用方回退 AgField 全树)。
174
+ * 成员可简写成 `{code}`,等同 `{code:code}`。@author nokecy
175
+ */
176
+ var parseObjectDestructure = function parseObjectDestructure(name) {
177
+ var matched = name && /^\{([^{}]+)\}$/.exec(name.trim());
178
+ if (!matched) return null;
179
+ var members = matched[1].split(',').map(function (part) {
180
+ return part.split(':').map(function (x) {
181
+ return x.trim();
182
+ });
183
+ });
184
+ if (members.some(function (m) {
185
+ return m.length > 2 || !m[0] || !isSimpleFieldPath(m[m.length - 1]);
186
+ })) return null;
187
+ return members.map(function (m) {
188
+ return [m[0], m[m.length - 1]];
189
+ });
190
+ };
191
+
192
+ /** 快路径(只读文本/懒挂载)能自己解析取值的字段名:简单点号路径或对象解构 @author nokecy */
193
+ var isFastPathFieldName = function isFastPathFieldName(name) {
194
+ return isSimpleFieldPath(name) || !!parseObjectDestructure(name);
195
+ };
196
+
171
197
  /**
172
198
  * 按 Formily 字段名从行数据取值。
173
199
  *
@@ -178,6 +204,14 @@ var isSimpleFieldPath = function isSimpleFieldPath(name) {
178
204
  */
179
205
  var readByFieldPath = function readByFieldPath(record, path) {
180
206
  if (record == null) return undefined;
207
+ // 对象解构:与 Formily 一致,按成员路径分别取值拼回 {value, label} 对象 @author nokecy
208
+ var destructure = path.startsWith('{') ? parseObjectDestructure(path) : null;
209
+ if (destructure) return Object.fromEntries(destructure.map(function (_ref3) {
210
+ var _ref4 = _slicedToArray(_ref3, 2),
211
+ key = _ref4[0],
212
+ memberPath = _ref4[1];
213
+ return [key, readByFieldPath(record, memberPath)];
214
+ }));
181
215
  if (path.indexOf('.') < 0) return record[path];
182
216
  return path.split('.').reduce(function (acc, key) {
183
217
  return acc == null ? undefined : acc[key];
@@ -337,7 +371,7 @@ var LazyAgField = exports.LazyAgField = function LazyAgField(params) {
337
371
 
338
372
  /** 焦点离开本格:校验通过才卸回懒挂载文本。isStale 为真说明校验期间焦点又回来了或格子已销毁 */
339
373
  var handleLeave = /*#__PURE__*/function () {
340
- var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(isStale) {
374
+ var _ref5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(isStale) {
341
375
  var _field$value$indexOf3, _field$value3, _field$value3$indexOf, _field$form;
342
376
  var index, cellField;
343
377
  return _regeneratorRuntime().wrap(function _callee$(_context) {
@@ -381,7 +415,7 @@ var LazyAgField = exports.LazyAgField = function LazyAgField(params) {
381
415
  }, _callee, null, [[3, 8]]);
382
416
  }));
383
417
  return function handleLeave(_x) {
384
- return _ref3.apply(this, arguments);
418
+ return _ref5.apply(this, arguments);
385
419
  };
386
420
  }();
387
421
 
@@ -551,11 +585,12 @@ var applyNumberInputDefaults = function applyNumberInputDefaults(dataField) {
551
585
  // 重命名自 useArrayTableColumns:内部无任何 Hook 调用,use 前缀违反 Hook 命名约定且曾在 useMemo 内被调用 @author nokecy
552
586
  var buildArrayTableColumns = exports.buildArrayTableColumns = function buildArrayTableColumns(dataSource, field, sources) {
553
587
  var arrayPattern = field === null || field === void 0 ? void 0 : field.pattern;
554
- return sources.reduce(function (buf, _ref4, key) {
555
- var name = _ref4.name,
556
- columnProps = _ref4.columnProps,
557
- schema = _ref4.schema,
558
- display = _ref4.display;
588
+ return sources.reduce(function (buf, _ref6, key) {
589
+ var _getReadOnlyFormatter;
590
+ var name = _ref6.name,
591
+ columnProps = _ref6.columnProps,
592
+ schema = _ref6.schema,
593
+ display = _ref6.display;
559
594
  if (display && display !== 'visible') return buf;
560
595
  if (!isColumnComponent(schema)) return buf;
561
596
 
@@ -594,8 +629,10 @@ var buildArrayTableColumns = exports.buildArrayTableColumns = function buildArra
594
629
  // ③ 兜底全树:其余(无格式化器/带 reactions/forceAgField/复杂字段名/只读但无格式化器) -> AgField。
595
630
  var dataField = findDataFieldSchema(schema, name);
596
631
  var component = dataField === null || dataField === void 0 ? void 0 : dataField['x-component'];
597
- var formatter = (0, _readOnlyFormatters.getReadOnlyFormatter)(component);
598
632
  var readOnly = isColumnReadOnlyEligible(arrayPattern, dataField, columnProps);
633
+ // 可编辑的数据字段(非 void 操作按钮)即使是业务自定义组件,也按兜底格式化器出懒挂载文本,默认阅读态;
634
+ // 只读列不兜底:自定义只读组件常显示别的字段(如 SiblingText),按自身值出文本会错。@author nokecy
635
+ var formatter = (_getReadOnlyFormatter = (0, _readOnlyFormatters.getReadOnlyFormatter)(component)) !== null && _getReadOnlyFormatter !== void 0 ? _getReadOnlyFormatter : !readOnly && component && (dataField === null || dataField === void 0 ? void 0 : dataField.type) !== 'void' ? _readOnlyFormatters.fallbackFormatter : null;
599
636
  var hasReactions = !!(dataField && dataField['x-reactions']);
600
637
  if (!readOnly) applyNumberInputDefaults(dataField);
601
638
  var forceEager = (columnProps === null || columnProps === void 0 ? void 0 : columnProps.forceAgField) === true;
@@ -612,9 +649,9 @@ var buildArrayTableColumns = exports.buildArrayTableColumns = function buildArra
612
649
  var valueGetter = dataFieldName && dataFieldName !== name ? function (params) {
613
650
  return readByFieldPath(params === null || params === void 0 ? void 0 : params.data, dataFieldName);
614
651
  } : undefined;
615
- // 字段名是路径:`item.qty` 的值在 record.item.qty。快路径自己解析,只认点号分段;
616
- // 解构(`{value:a,label:b}`)/数组下标等复杂语法解析不了,回退全树交给 Formily。@author nokecy
617
- var canFastPath = !dataFieldName || isSimpleFieldPath(dataFieldName);
652
+ // 字段名是路径:`item.qty` 的值在 record.item.qty。快路径自己解析点号分段与对象解构(`{value:a,label:b}`);
653
+ // 数组解构/下标等其余语法解析不了,回退全树交给 Formily。@author nokecy
654
+ var canFastPath = !dataFieldName || isFastPathFieldName(dataFieldName);
618
655
 
619
656
  // ① 只读纯文本
620
657
  if (readOnly && formatter && canFastPath) {
@@ -4,7 +4,7 @@
4
4
  * @param params 导出参数
5
5
  * @param fileName 文件名
6
6
  */
7
- export declare const defaultHandleExport: (exportApi: (params: any) => Promise<Blob>, params: any, fileName: string) => Promise<void>;
7
+ export declare const defaultHandleExport: (exportApi: (params: any, options?: Record<string, any>) => Promise<Blob>, params: any, fileName: string) => Promise<void>;
8
8
  /**
9
9
  * 默认的删除处理器
10
10
  * @param deleteApi 删除API函数