@vtx/components 4.0.0-beta.8 → 4.0.0-beta.80

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 (135) hide show
  1. package/es/index.js +3 -0
  2. package/es/utils/filterSpecialCharacters.js +47 -46
  3. package/es/utils/index.js +1 -2
  4. package/es/vtx-combogrid/Combogrid.js +5 -4
  5. package/es/vtx-combogrid/index.js +7 -4
  6. package/es/vtx-datagrid/Store/Provide.js +106 -137
  7. package/es/vtx-datagrid/ToolBar/components/ColumnSetting/index.js +7 -3
  8. package/es/vtx-datagrid/ToolBar/components/ColumnSetting/style.js +5 -2
  9. package/es/vtx-datagrid/ToolBar/components/Density/index.js +3 -0
  10. package/es/vtx-datagrid/ToolBar/components/TableStyle/index.js +3 -0
  11. package/es/vtx-datagrid/columnState.js +91 -0
  12. package/es/vtx-datagrid/index.js +124 -32
  13. package/es/vtx-datagrid/mergeComponents.js +15 -0
  14. package/es/vtx-datagrid/renderColumnButtons.js +30 -11
  15. package/es/vtx-datagrid/style/index.js +102 -20
  16. package/es/vtx-date-picker/QdatePicker.js +1 -1
  17. package/es/vtx-descriptions/Descriptions.js +29 -0
  18. package/es/vtx-descriptions/index.js +3 -0
  19. package/es/vtx-descriptions/style/index.js +19 -0
  20. package/es/vtx-ellipsis-text/index.js +7 -2
  21. package/es/vtx-ellipsis-text/style/index.js +3 -1
  22. package/es/vtx-export/index.js +25 -25
  23. package/es/vtx-export-async/History.js +11 -3
  24. package/es/vtx-export-async/index.js +45 -15
  25. package/es/vtx-export-async/util.js +16 -5
  26. package/es/vtx-form-layout/Card.js +10 -10
  27. package/es/vtx-form-layout/Divider.js +1 -1
  28. package/es/vtx-form-layout/FormItem.js +16 -16
  29. package/es/vtx-form-layout/Pane.js +23 -12
  30. package/es/vtx-icon/index.js +54 -45
  31. package/es/vtx-icon/index.js1 +90 -0
  32. package/es/vtx-image/Preview.js +11 -6
  33. package/es/vtx-image/style/index.js +0 -1
  34. package/es/vtx-import/index.js +207 -65
  35. package/es/vtx-import/result.js +28 -26
  36. package/es/vtx-import/style/index.js +16 -1
  37. package/es/vtx-import2/Content.js +2 -1
  38. package/es/vtx-import2/index.js +30 -19
  39. package/es/vtx-import2/style/index.js +60 -9
  40. package/es/vtx-modal/index.js +9 -4
  41. package/es/vtx-page-layout/style/index.js +4 -2
  42. package/es/vtx-provider/index.js +7 -3
  43. package/es/vtx-provider/locale/en_US.js +57 -3
  44. package/es/vtx-provider/locale/zh_CN.js +57 -3
  45. package/es/vtx-search/index.js +13 -9
  46. package/es/vtx-search/style/index.js +2 -1
  47. package/es/vtx-select/index.js +102 -36
  48. package/es/vtx-select/style/index.js +11 -56
  49. package/es/vtx-signature/index.js +5 -4
  50. package/es/vtx-signature/style/index.js +1 -1
  51. package/es/vtx-split-pane/Resizer.js +0 -1
  52. package/es/vtx-split-pane/SplitPane.js +42 -34
  53. package/es/vtx-split-pane/style/index.js +8 -112
  54. package/es/vtx-time-picker/index.js +27 -1
  55. package/es/vtx-transfer/Transfer.js +29 -0
  56. package/es/vtx-transfer/index.js +3 -0
  57. package/es/vtx-transfer/style/index.js +19 -0
  58. package/es/vtx-transfer-select/TransferSelect.js +143 -0
  59. package/es/vtx-transfer-select/index.js +3 -0
  60. package/es/vtx-transfer-select/style/index.js +19 -0
  61. package/es/vtx-tree/index.js +98 -35
  62. package/es/vtx-tree-select/index.js +71 -105
  63. package/es/vtx-tree-select/style/index.js +9 -3
  64. package/es/vtx-upload/FilePreview.js +2 -1
  65. package/es/vtx-wang-editor/index.js +93 -39
  66. package/es/vtx-wang-editor/wangEditorUtil.js +4 -0
  67. package/lib/index.js +36 -0
  68. package/lib/utils/filterSpecialCharacters.js +48 -46
  69. package/lib/utils/index.js +0 -7
  70. package/lib/vtx-combogrid/Combogrid.js +5 -4
  71. package/lib/vtx-combogrid/index.js +7 -4
  72. package/lib/vtx-datagrid/Store/Provide.js +113 -143
  73. package/lib/vtx-datagrid/ToolBar/components/ColumnSetting/index.js +7 -3
  74. package/lib/vtx-datagrid/ToolBar/components/ColumnSetting/style.js +5 -2
  75. package/lib/vtx-datagrid/ToolBar/components/Density/index.js +3 -0
  76. package/lib/vtx-datagrid/ToolBar/components/TableStyle/index.js +3 -0
  77. package/lib/vtx-datagrid/columnState.js +100 -0
  78. package/lib/vtx-datagrid/index.js +124 -32
  79. package/lib/vtx-datagrid/mergeComponents.js +21 -0
  80. package/lib/vtx-datagrid/renderColumnButtons.js +30 -11
  81. package/lib/vtx-datagrid/style/index.js +102 -20
  82. package/lib/vtx-date-picker/QdatePicker.js +1 -1
  83. package/lib/vtx-descriptions/Descriptions.js +38 -0
  84. package/lib/vtx-descriptions/index.js +15 -0
  85. package/lib/vtx-descriptions/style/index.js +25 -0
  86. package/lib/vtx-ellipsis-text/index.js +7 -2
  87. package/lib/vtx-ellipsis-text/style/index.js +3 -1
  88. package/lib/vtx-export/index.js +26 -26
  89. package/lib/vtx-export-async/History.js +11 -3
  90. package/lib/vtx-export-async/index.js +43 -13
  91. package/lib/vtx-export-async/util.js +16 -5
  92. package/lib/vtx-form-layout/Card.js +9 -9
  93. package/lib/vtx-form-layout/Divider.js +1 -1
  94. package/lib/vtx-form-layout/FormItem.js +16 -16
  95. package/lib/vtx-form-layout/Pane.js +22 -11
  96. package/lib/vtx-icon/index.js +54 -52
  97. package/lib/vtx-icon/index.js1 +90 -0
  98. package/lib/vtx-image/Preview.js +11 -6
  99. package/lib/vtx-image/style/index.js +0 -1
  100. package/lib/vtx-import/index.js +205 -63
  101. package/lib/vtx-import/result.js +29 -27
  102. package/lib/vtx-import/style/index.js +16 -1
  103. package/lib/vtx-import2/Content.js +2 -1
  104. package/lib/vtx-import2/index.js +29 -18
  105. package/lib/vtx-import2/style/index.js +60 -9
  106. package/lib/vtx-modal/index.js +9 -4
  107. package/lib/vtx-page-layout/style/index.js +4 -2
  108. package/lib/vtx-provider/index.js +7 -3
  109. package/lib/vtx-provider/locale/en_US.js +57 -3
  110. package/lib/vtx-provider/locale/zh_CN.js +57 -3
  111. package/lib/vtx-search/index.js +13 -9
  112. package/lib/vtx-search/style/index.js +2 -1
  113. package/lib/vtx-select/index.js +104 -38
  114. package/lib/vtx-select/style/index.js +11 -56
  115. package/lib/vtx-signature/index.js +4 -3
  116. package/lib/vtx-signature/style/index.js +1 -1
  117. package/lib/vtx-split-pane/Resizer.js +0 -1
  118. package/lib/vtx-split-pane/SplitPane.js +40 -31
  119. package/lib/vtx-split-pane/style/index.js +8 -112
  120. package/lib/vtx-time-picker/index.js +27 -1
  121. package/lib/vtx-transfer/Transfer.js +38 -0
  122. package/lib/vtx-transfer/index.js +15 -0
  123. package/lib/vtx-transfer/style/index.js +25 -0
  124. package/lib/vtx-transfer-select/TransferSelect.js +151 -0
  125. package/lib/vtx-transfer-select/index.js +15 -0
  126. package/lib/vtx-transfer-select/style/index.js +25 -0
  127. package/lib/vtx-tree/index.js +96 -33
  128. package/lib/vtx-tree-select/index.js +71 -105
  129. package/lib/vtx-tree-select/style/index.js +9 -3
  130. package/lib/vtx-upload/FilePreview.js +2 -1
  131. package/lib/vtx-wang-editor/index.js +91 -37
  132. package/lib/vtx-wang-editor/wangEditorUtil.js +4 -0
  133. package/package.json +47 -32
  134. package/es/utils/hooks/useFetchData/index.js +0 -82
  135. package/lib/utils/hooks/useFetchData/index.js +0 -89
@@ -1,30 +1,38 @@
1
1
  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); }
2
- 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; }
3
- 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; }
4
- 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; }
5
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
6
- 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); }
7
2
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
8
3
  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."); }
9
4
  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); }
10
5
  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; }
11
6
  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; } }
12
7
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
8
+ 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; }
9
+ 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; }
10
+ 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; }
11
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
12
+ 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); }
13
+ function _readOnlyError(name) { throw new TypeError("\"" + name + "\" is read-only"); }
13
14
  import React, { useRef, useEffect, useContext } from 'react';
14
- import { ConfigProvider, message, Button, Modal } from 'antd';
15
+ import { message, Button, Tooltip } from 'antd';
15
16
  import PropTypes from 'prop-types';
16
17
  import useSet from "../utils/useSet";
17
18
  import VtxImportResult from "./result";
18
19
  import getToken from "../utils/getToken";
19
- var token = getToken();
20
20
  import md5 from 'md5';
21
21
  import { getVtxToken, getSignature } from '@vtx/utils';
22
- import classnames from 'classnames';
23
22
  import { useStyle } from "./style/index";
24
23
  import { VtxProvider, useIntl } from "../vtx-provider";
25
- import { jsx as _jsx } from "react/jsx-runtime";
24
+ import VtxModal from "../vtx-modal";
26
25
  import { jsxs as _jsxs } from "react/jsx-runtime";
26
+ import { jsx as _jsx } from "react/jsx-runtime";
27
27
  function VtxImport(props) {
28
+ var templateURL = props.templateURL,
29
+ uploadURL = props.uploadURL,
30
+ afterUpload = props.afterUpload,
31
+ beforeUpload = props.beforeUpload;
32
+ var token = getToken();
33
+ if (props.token) {
34
+ props.token, _readOnlyError("token");
35
+ }
28
36
  var intl = useIntl();
29
37
  var _useContext = useContext(VtxProvider),
30
38
  getPrefixCls = _useContext.getPrefixCls;
@@ -32,14 +40,35 @@ function VtxImport(props) {
32
40
  var _useStyle = useStyle(prefixCls),
33
41
  wrapSSR = _useStyle.wrapSSR,
34
42
  hashId = _useStyle.hashId;
43
+ var TextEnum = _objectSpread({
44
+ rowNumberText: intl.getMessage('import.rowNumber', '行号'),
45
+ errorMessageText: intl.getMessage('import.errorMessage', '错误说明'),
46
+ resultTitleText: intl.getMessage('import.result', '导入结果'),
47
+ btnCloseText: intl.getMessage('switch.close', '关闭'),
48
+ operationText: intl.getMessage('import.operation', '导入'),
49
+ uploadFailedText: intl.getMessage('import.error', '上传失败'),
50
+ parseResponseFailedText: intl.getMessage('import.error', '解析响应失败'),
51
+ uploadSuccessText: intl.getMessage('import.success', '上传成功'),
52
+ parseResponseDataFailedText: intl.getMessage('import.error', '解析响应数据失败'),
53
+ downloadTemplateText: intl.getMessage('import.downloadTemplate', '下载模板'),
54
+ pleaseSelectFileText: intl.getMessage('import.pleaseSelectFile', '请选择需要上传的文件'),
55
+ uploadText: intl.getMessage('import.upload', '上传'),
56
+ selectFileText: intl.getMessage('import.selectFile', '选择文件'),
57
+ noFileSelectedText: intl.getMessage('import.noFileSelected', '未选择任何文件')
58
+ }, props.customEnumText);
59
+
60
+ // 用 useRef 管理 DOM 引用,而不是 state
61
+ var fileInputRef = useRef(null);
62
+ var iframeRef = useRef(null);
63
+ var formRef = useRef(null);
64
+
65
+ // 用于追踪当前 XHR 请求,方便取消
66
+ var xhrRef = useRef(null);
35
67
  var indexRef = useRef(0);
36
68
  var _useSet = useSet({
37
- fileForm: null,
38
- // form表单
39
- fileInput: null,
40
- // 保存上传的文件
41
- iframe: null,
42
- // form表单提交之后跳转的
69
+ // fileForm: null, // form表单
70
+ // fileInput: null, // 保存上传的文件
71
+ // iframe: null, // form表单提交之后跳转的
43
72
  useFormData: window.FormData ? true : false,
44
73
  // 是否查看
45
74
  uploading: false,
@@ -53,13 +82,22 @@ function VtxImport(props) {
53
82
  // 导入结果查看
54
83
  modalWidth: props.modalWidth || 800,
55
84
  columns: props.columns || [{
56
- title: '行号',
85
+ title: TextEnum.rowNumberText,
57
86
  dataIndex: 'lineNum',
58
87
  key: 'lineNum'
59
88
  }, {
60
- title: '错误说明',
89
+ title: TextEnum.errorMessageText,
61
90
  dataIndex: 'messages',
62
- key: 'messages'
91
+ key: 'messages',
92
+ render: function render(val) {
93
+ return /*#__PURE__*/_jsxs("div", {
94
+ style: {
95
+ display: 'flex',
96
+ width: 600
97
+ },
98
+ children: [" ", val]
99
+ });
100
+ }
63
101
  }],
64
102
  step: 1,
65
103
  chunkSize: props.chunkSize || 10 * 1024 * 1024,
@@ -67,7 +105,8 @@ function VtxImport(props) {
67
105
  currentIndex: 0,
68
106
  chunkId: '',
69
107
  chunks: [],
70
- operation: props.operation || intl.getMessage('import.operation', '导入')
108
+ operation: props.operation || TextEnum.operationText,
109
+ fileName: ''
71
110
  }),
72
111
  _useSet2 = _slicedToArray(_useSet, 2),
73
112
  state = _useSet2[0],
@@ -102,7 +141,7 @@ function VtxImport(props) {
102
141
  data.append('chunkNo', i + 1);
103
142
  data.append('chunkId', state.chunkId);
104
143
  data.append('tenantId', getVtxToken('tenantId'));
105
- data.append('file', new File([e], state.fileInput.files[0].name));
144
+ data.append('file', new File([e], fileInputRef.current.files[0].name));
106
145
  dataArr.push(data);
107
146
  });
108
147
  uploadAsync(dataArr);
@@ -112,6 +151,7 @@ function VtxImport(props) {
112
151
  function uploadAsync(list) {
113
152
  if (indexRef.current < list.length) {
114
153
  var xhr = new XMLHttpRequest();
154
+ xhrRef.current = xhr;
115
155
  xhr.onload = function () {
116
156
  if (xhr.status === 200) {
117
157
  setState({
@@ -122,10 +162,12 @@ function VtxImport(props) {
122
162
  }
123
163
  };
124
164
  xhr.onerror = function () {
125
- message.error(intl.getMessage('import.error', '上传失败'));
165
+ message.error(TextEnum.uploadFailedText);
126
166
  };
127
167
  // 发送请求
128
168
  xhr.open('POST', '/cloudFile/common/uploadChunk', true);
169
+ xhr.setRequestHeader('Authorization', token ? "Bearer ".concat(token) : '');
170
+ xhr.setRequestHeader('access_token', token ? "".concat(token) : '');
129
171
  xhr.send(list[indexRef.current]);
130
172
  } else {
131
173
  mergeFile();
@@ -135,28 +177,42 @@ function VtxImport(props) {
135
177
  // 合并分片
136
178
  function mergeFile() {
137
179
  var xhr = new XMLHttpRequest();
180
+ xhrRef.current = xhr;
138
181
  // 当上传完成时调用
139
182
  xhr.onload = function () {
140
183
  if (xhr.status === 200) {
141
- var res = JSON.parse(xhr.responseText);
142
- if ((res === null || res === void 0 ? void 0 : res.result) == 0) {
143
- message.success(intl.getMessage('import.success', '上传成功'));
184
+ var _res;
185
+ var res;
186
+ try {
187
+ res = JSON.parse(xhr.responseText);
188
+ } catch (e) {
189
+ message.error(TextEnum.parseResponseFailedText);
190
+ setState({
191
+ uploading: false
192
+ });
193
+ return;
194
+ }
195
+ if (((_res = res) === null || _res === void 0 ? void 0 : _res.result) == 0) {
196
+ message.success(TextEnum.uploadSuccessText);
144
197
  chunkUpload(res.data);
145
198
  } else {
146
- message.error((res === null || res === void 0 ? void 0 : res.msg) || intl.getMessage('import.error', '上传失败'));
199
+ var _res2;
200
+ message.error(((_res2 = res) === null || _res2 === void 0 ? void 0 : _res2.msg) || TextEnum.uploadFailedText);
147
201
  }
148
202
  }
149
203
  };
150
204
  xhr.onerror = function () {
151
- message.error(intl.getMessage('import.error', '上传失败'));
205
+ message.error(TextEnum.uploadFailedText);
152
206
  };
153
207
  // 发送请求
154
208
  xhr.open('POST', '/cloudFile/common/mergeChunk', true);
209
+ xhr.setRequestHeader('Authorization', token ? "Bearer ".concat(token) : '');
210
+ xhr.setRequestHeader('access_token', token ? "".concat(token) : '');
155
211
  var data = new FormData();
156
212
  data.append('chunkId', state.chunkId);
157
213
  data.append('tenantId', getVtxToken('tenantId'));
158
214
  data.append('chunkSize', state.chunks.length);
159
- data.append('fileName', state.fileInput.files[0].name);
215
+ data.append('fileName', fileInputRef.current.files[0].name);
160
216
  xhr.send(data);
161
217
  }
162
218
 
@@ -166,6 +222,7 @@ function VtxImport(props) {
166
222
  var postData = props.postData || {};
167
223
  if (state.useFormData) {
168
224
  var request = new XMLHttpRequest();
225
+ xhrRef.current = request;
169
226
  // 发送请求
170
227
  request.open('POST', postUrl);
171
228
  request.setRequestHeader('Authorization', token ? "Bearer ".concat(token) : '');
@@ -196,6 +253,7 @@ function VtxImport(props) {
196
253
  var postData = props.postData || {};
197
254
  if (state.useFormData) {
198
255
  var request = new XMLHttpRequest();
256
+ xhrRef.current = request;
199
257
  // 发送请求
200
258
  request.open('POST', postUrl);
201
259
  request.setRequestHeader('Authorization', token ? "Bearer ".concat(token) : '');
@@ -216,7 +274,7 @@ function VtxImport(props) {
216
274
  };
217
275
  //创建formdata对象
218
276
  var fmd = new FormData();
219
- fmd.append(state.fileKey, state.fileInput.files[0]);
277
+ fmd.append(state.fileKey, fileInputRef.current.files[0]);
220
278
  request.send(fmd);
221
279
  }
222
280
  }
@@ -247,7 +305,9 @@ function VtxImport(props) {
247
305
  return postArray.length > 0 ? "".concat(postUrl, "?").concat(postArray.join('&')) : postUrl;
248
306
  };
249
307
  var closeModal = function closeModal() {
250
- state.fileInput.value = '';
308
+ if (fileInputRef.current) {
309
+ fileInputRef.current.value = '';
310
+ }
251
311
  if (typeof props.close === 'function') {
252
312
  props.close();
253
313
  } else {
@@ -258,15 +318,24 @@ function VtxImport(props) {
258
318
  };
259
319
  // 上传之后的回调 - 展示报错信息
260
320
  var uploadSuccess = function uploadSuccess(data) {
261
- state.fileInput.value = '';
321
+ var _parseData;
322
+ if (fileInputRef.current) {
323
+ fileInputRef.current.value = '';
324
+ }
262
325
  setState({
263
326
  uploading: false
264
327
  });
328
+ var parseData;
329
+ try {
330
+ parseData = JSON.parse(data);
331
+ } catch (e) {
332
+ message.error(TextEnum.parseResponseDataFailedText);
333
+ return;
334
+ }
265
335
  if (typeof props.afterUpload === 'function') {
266
336
  afterUpload(data);
267
337
  }
268
- var parseData = JSON.parse(data);
269
- if (Array.isArray(parseData === null || parseData === void 0 ? void 0 : parseData.data)) {
338
+ if (Array.isArray((_parseData = parseData) === null || _parseData === void 0 ? void 0 : _parseData.data)) {
270
339
  setState({
271
340
  resultVisible: true,
272
341
  resultData: parseData.data.map(function (item, index) {
@@ -281,47 +350,46 @@ function VtxImport(props) {
281
350
  } else {
282
351
  // 新增其他错误提示
283
352
  if (parseData.result !== 0) {
284
- message.error((parseData === null || parseData === void 0 ? void 0 : parseData.msg) || intl.getMessage('import.success', '上传成功'));
353
+ var _parseData2;
354
+ message.error(((_parseData2 = parseData) === null || _parseData2 === void 0 ? void 0 : _parseData2.msg) || TextEnum.uploadSuccessText);
285
355
  }
286
356
  }
287
357
  };
288
- var templateURL = props.templateURL,
289
- uploadURL = props.uploadURL,
290
- afterUpload = props.afterUpload,
291
- beforeUpload = props.beforeUpload;
292
358
  var modalProps = {
293
359
  className: "".concat(prefixCls, "-modal"),
294
360
  open: state.visible,
295
- title: intl.getMessage('import.operation', '导入'),
361
+ title: TextEnum.operationText,
296
362
  onCancel: function onCancel() {
297
363
  return closeModal();
298
364
  },
299
- maskClosable: false,
365
+ // maskClosable: false,
366
+ mask: {
367
+ closable: false
368
+ },
300
369
  footer: [templateURL ? /*#__PURE__*/_jsx(Button, {
301
370
  onClick: function onClick() {
302
371
  window.open(templateURL);
303
372
  },
304
- children: intl.getMessage('import.downloadTemplate', '下载模板')
373
+ children: TextEnum.downloadTemplateText
305
374
  }, "downloadTemple") : null, /*#__PURE__*/_jsx(Button, {
306
375
  type: "primary",
307
376
  loading: state.uploading,
308
377
  onClick: function onClick() {
378
+ var _fileInputRef$current2;
309
379
  if (typeof props.beforeUpload === 'function') {
310
- var flag = beforeUpload(state.fileInput.files[0]);
380
+ var _fileInputRef$current;
381
+ var flag = beforeUpload((_fileInputRef$current = fileInputRef.current) === null || _fileInputRef$current === void 0 || (_fileInputRef$current = _fileInputRef$current.files) === null || _fileInputRef$current === void 0 ? void 0 : _fileInputRef$current[0]);
311
382
  if (!flag) {
312
- state.fileInput.value = '';
313
- setState({
314
- fileInput: null
315
- });
383
+ fileInputRef.current.value = '';
316
384
  return;
317
385
  }
318
386
  }
319
- if (state.fileInput.value) {
387
+ if ((_fileInputRef$current2 = fileInputRef.current) !== null && _fileInputRef$current2 !== void 0 && _fileInputRef$current2.value) {
320
388
  setState({
321
389
  uploading: true
322
390
  });
323
391
  // 上传文件
324
- checkFile(state.fileInput.files[0]);
392
+ checkFile(fileInputRef.current.files[0]);
325
393
  // const postUrl = getPostURL();
326
394
  // if (state.useFormData) {
327
395
  // const request = new XMLHttpRequest();
@@ -341,16 +409,17 @@ function VtxImport(props) {
341
409
  // request.send(fmd);
342
410
  // }
343
411
  } else {
344
- message.info(intl.getMessage('import.pleaseSelectFile', '请选择需要上传的文件'));
412
+ message.info(TextEnum.pleaseSelectFileText);
345
413
  }
346
414
  },
347
- children: intl.getMessage('import.upload', '上传')
415
+ children: TextEnum.uploadText
348
416
  }, "uploadSubmit"), /*#__PURE__*/_jsx(Button, {
349
417
  onClick: function onClick() {
350
418
  closeModal();
351
419
  },
352
- children: intl.getMessage('switch.close', '关闭')
353
- }, "closeWindow")]
420
+ children: TextEnum.btnCloseText
421
+ }, "closeWindow")],
422
+ width: 520
354
423
  };
355
424
  var resultProps = {
356
425
  visible: state.resultVisible,
@@ -361,38 +430,109 @@ function VtxImport(props) {
361
430
  resultVisible: false
362
431
  });
363
432
  },
364
- modalWidth: state.modalWidth
433
+ modalWidth: state.modalWidth,
434
+ TextEnum: TextEnum
365
435
  };
436
+
437
+ // 组件卸载时清理
438
+ useEffect(function () {
439
+ return function () {
440
+ // 取消进行中的 XHR 请求
441
+ if (xhrRef.current) {
442
+ xhrRef.current.abort();
443
+ xhrRef.current = null;
444
+ }
445
+ // 清理文件输入
446
+ if (fileInputRef.current) {
447
+ fileInputRef.current.value = '';
448
+ }
449
+ };
450
+ }, []);
366
451
  useEffect(function () {
367
452
  if (state.chunkId) {
368
453
  startUpload();
369
454
  }
370
455
  }, [state.chunkId]);
371
- return wrapSSR( /*#__PURE__*/_jsxs(Modal, _objectSpread(_objectSpread({}, modalProps), {}, {
372
- children: [props.children, /*#__PURE__*/_jsx("form", {
456
+ var truncateFileName = function truncateFileName(fileName) {
457
+ var maxLength = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 28;
458
+ if (fileName.length <= maxLength) return fileName;
459
+ var extIndex = fileName.lastIndexOf('.');
460
+ var ext = extIndex !== -1 ? fileName.slice(extIndex) : '';
461
+ var name = extIndex !== -1 ? fileName.slice(0, extIndex) : fileName;
462
+ var availableLength = maxLength - ext.length - 3; // 3 是 "..."
463
+ if (availableLength <= 0) return "...".concat(ext);
464
+ var startLength = Math.ceil(availableLength / 2);
465
+ var endLength = Math.floor(availableLength / 2);
466
+ var start = name.slice(0, startLength);
467
+ var end = name.slice(-endLength);
468
+ return "".concat(start, "...").concat(end).concat(ext);
469
+ };
470
+
471
+ // 处理文件选择变化
472
+ var handleFileChange = function handleFileChange(event) {
473
+ var _event$target$files;
474
+ var file = (_event$target$files = event.target.files) === null || _event$target$files === void 0 ? void 0 : _event$target$files[0];
475
+ if (file) {
476
+ setState(function (prev) {
477
+ return _objectSpread(_objectSpread({}, prev), {}, {
478
+ fileName: truncateFileName(file.name)
479
+ });
480
+ });
481
+ // 这里可以添加文件上传或其他处理逻辑
482
+ // 例如:uploadFile(file);
483
+ } else {
484
+ setState(function (prev) {
485
+ return _objectSpread(_objectSpread({}, prev), {}, {
486
+ fileName: ''
487
+ });
488
+ });
489
+ }
490
+ };
491
+ var handleSelectFile = function handleSelectFile() {
492
+ var _fileInputRef$current3;
493
+ (_fileInputRef$current3 = fileInputRef.current) === null || _fileInputRef$current3 === void 0 || _fileInputRef$current3.click();
494
+ };
495
+ return wrapSSR( /*#__PURE__*/_jsxs(VtxModal, _objectSpread(_objectSpread({}, modalProps), {}, {
496
+ children: [props.children, /*#__PURE__*/_jsxs("form", {
373
497
  encType: "multipart/form-data",
374
498
  method: "post",
375
499
  target: "tmp",
376
500
  action: uploadURL,
377
- ref: function ref(dom) {
378
- if (dom) state.fileForm = dom;
379
- },
380
- children: /*#__PURE__*/_jsx("input", {
501
+ ref: formRef,
502
+ children: [/*#__PURE__*/_jsxs("div", {
503
+ className: "".concat(prefixCls, "-btn"),
504
+ children: [/*#__PURE__*/_jsx(Button, {
505
+ onClick: handleSelectFile,
506
+ children: /*#__PURE__*/_jsx("span", {
507
+ className: "".concat(prefixCls, "-label"),
508
+ children: TextEnum.selectFileText
509
+ })
510
+ }), state.fileName ? /*#__PURE__*/_jsx(Tooltip, {
511
+ title: state.fileName,
512
+ children: /*#__PURE__*/_jsx("div", {
513
+ className: "".concat(prefixCls, "-file-name"),
514
+ children: state.fileName
515
+ })
516
+ }) : /*#__PURE__*/_jsx("div", {
517
+ className: "".concat(prefixCls, "-file-name"),
518
+ children: TextEnum.noFileSelectedText
519
+ })]
520
+ }), /*#__PURE__*/_jsx("input", {
381
521
  type: "file",
382
522
  name: state.fileKey,
383
523
  accept: state.accept,
384
- ref: function ref(dom) {
385
- if (dom) state.fileInput = dom;
386
- }
387
- })
524
+ ref: fileInputRef,
525
+ style: {
526
+ display: 'none'
527
+ },
528
+ onChange: handleFileChange
529
+ })]
388
530
  }), /*#__PURE__*/_jsx("iframe", {
389
531
  name: "tmp",
390
532
  style: {
391
533
  display: 'none'
392
534
  },
393
- ref: function ref(dom) {
394
- if (dom) state.iframe = dom;
395
- }
535
+ ref: iframeRef
396
536
  }), state.resultVisible && /*#__PURE__*/_jsx(VtxImportResult, _objectSpread({}, resultProps))]
397
537
  })));
398
538
  }
@@ -403,11 +543,13 @@ VtxImport.propTypes = {
403
543
  postData: PropTypes.object,
404
544
  fileKey: PropTypes.string,
405
545
  accept: PropTypes.string,
546
+ token: PropTypes.string,
406
547
  operation: PropTypes.string,
407
548
  close: PropTypes.func,
408
549
  afterUpload: PropTypes.func,
409
550
  modalWidth: PropTypes.number,
410
551
  columns: PropTypes.array,
552
+ customEnumText: PropTypes.object,
411
553
  children: PropTypes.object,
412
554
  beforeUpload: PropTypes.func,
413
555
  chunkSize: PropTypes.number
@@ -1,24 +1,27 @@
1
1
  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); }
2
- 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; }
3
- 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; }
4
- 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; }
5
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
6
- 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); }
7
2
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
8
3
  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."); }
9
4
  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); }
10
5
  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; }
11
6
  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; } }
12
7
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
8
+ 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; }
9
+ 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; }
10
+ 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; }
11
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
12
+ 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); }
13
13
  import React from 'react';
14
14
  import { Modal, Button } from 'antd';
15
15
  import PropTypes from 'prop-types';
16
16
  import useSet from "../utils/useSet";
17
17
  import VtxDatagrid from "../vtx-datagrid";
18
- import { useIntl } from "../vtx-provider";
18
+ import VtxModal from "../vtx-modal";
19
19
  import { jsx as _jsx } from "react/jsx-runtime";
20
20
  function VtxImportResult(props) {
21
- var intl = useIntl();
21
+ var TextEnum = _objectSpread({
22
+ resultTitleText: '导入结果',
23
+ btnCloseText: '关闭'
24
+ }, props.TextEnum);
22
25
  var _useSet = useSet({
23
26
  visible: props.visible || false,
24
27
  dataSource: props.dataSource || [],
@@ -28,47 +31,45 @@ function VtxImportResult(props) {
28
31
  _useSet2 = _slicedToArray(_useSet, 1),
29
32
  state = _useSet2[0];
30
33
  var modalProps = {
31
- bodyStyle: {
32
- backgroundColor: '#f8f8f8'
33
- },
34
+ bodyStyle: {},
34
35
  open: state.visible,
35
- title: intl.getMessage('import.result', '导入结果'),
36
+ title: TextEnum.resultTitleText,
36
37
  onCancel: function onCancel() {
37
38
  if (typeof props.hideVisible === 'function') {
38
39
  props.hideVisible();
39
40
  }
40
41
  },
41
42
  width: state.modalWidth,
42
- maskClosable: false,
43
+ // maskClosable: false,
44
+ mask: {
45
+ closable: false
46
+ },
43
47
  footer: [/*#__PURE__*/_jsx(Button, {
44
48
  onClick: function onClick() {
45
49
  if (typeof props.hideVisible === 'function') {
46
50
  props.hideVisible();
47
51
  }
48
52
  },
49
- children: intl.getMessage('switch.close', '关闭')
53
+ children: TextEnum.btnCloseText
50
54
  }, "closeWindow")]
51
55
  };
52
56
  var newTableProps = {
57
+ toolba: false,
53
58
  columns: state.columns,
54
59
  dataSource: state.dataSource,
55
60
  startIndex: 1,
56
61
  size: 'small',
57
62
  headFootHeight: 50,
58
63
  pagination: false,
59
- autoFit: false
64
+ autoFit: false,
65
+ scroll: {
66
+ y: 550
67
+ }
60
68
  };
61
- return /*#__PURE__*/_jsx(Modal, _objectSpread(_objectSpread({}, modalProps), {}, {
62
- children: /*#__PURE__*/_jsx("div", {
63
- style: {
64
- maxHeight: 600,
65
- width: '100%',
66
- overflow: 'auto'
67
- },
68
- children: /*#__PURE__*/_jsx(VtxDatagrid, _objectSpread({
69
- toolbar: false
70
- }, newTableProps))
71
- })
69
+ return /*#__PURE__*/_jsx(VtxModal, _objectSpread(_objectSpread({}, modalProps), {}, {
70
+ children: /*#__PURE__*/_jsx(VtxDatagrid, _objectSpread({
71
+ toolbar: false
72
+ }, newTableProps))
72
73
  }));
73
74
  }
74
75
  VtxImportResult.propTypes = {
@@ -76,6 +77,7 @@ VtxImportResult.propTypes = {
76
77
  dataSource: PropTypes.array,
77
78
  columns: PropTypes.array,
78
79
  modalWidth: PropTypes.number,
79
- hideVisible: PropTypes.func
80
+ hideVisible: PropTypes.func,
81
+ TextEnum: PropTypes.object
80
82
  };
81
83
  export default VtxImportResult;
@@ -7,7 +7,22 @@ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e
7
7
  import { useStyle as useAntdStyle } from "../../vtx-provider";
8
8
  var genVtxImportStyle = function genVtxImportStyle(token) {
9
9
  var componentCls = token.componentCls;
10
- return _defineProperty({}, componentCls, {});
10
+ return _defineProperty({}, componentCls, _defineProperty({
11
+ '.ant-modal-container': {
12
+ padding: 0,
13
+ '.ant-modal-header': {
14
+ padding: 20
15
+ },
16
+ '.ant-modal-body': {
17
+ padding: 20
18
+ }
19
+ }
20
+ }, '&-btn', {
21
+ display: 'flex',
22
+ justifyContent: 'flex-start',
23
+ alignItems: 'center',
24
+ gap: 8
25
+ }));
11
26
  };
12
27
  export function useStyle(prefixCls) {
13
28
  return useAntdStyle('VtxImport', function (token) {
@@ -98,6 +98,7 @@ Content.propTypes = {
98
98
  customText: PropTypes.string,
99
99
  extraText: PropTypes.string,
100
100
  TextEnum: PropTypes.object,
101
- extraDom: [PropTypes.string, PropTypes.node]
101
+ // extraDom: [PropTypes.string, PropTypes.node],
102
+ extraDom: PropTypes.object
102
103
  };
103
104
  export default Content;