@bit-sun/business-component 4.2.0-alpha.28 → 4.2.0-alpha.29

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 (44) hide show
  1. package/.fatherrc.ts +1 -1
  2. package/dist/components/Business/ImportExport/ExportButton/ModalTitle.d.ts +11 -0
  3. package/dist/components/Business/ImportExport/ExportButton/TemplatePicker.d.ts +13 -0
  4. package/dist/components/Business/ImportExport/ExportButton/index.d.ts +15 -0
  5. package/dist/components/Business/ImportExport/ImportWizard/Preview.d.ts +11 -0
  6. package/dist/components/Business/ImportExport/ImportWizard/index.d.ts +15 -0
  7. package/dist/components/Business/ImportExport/TaskDrawer/index.d.ts +15 -0
  8. package/dist/components/Business/ImportExport/TaskProgress/index.d.ts +15 -0
  9. package/dist/components/Business/ImportExport/businessFunction.d.ts +15 -0
  10. package/dist/components/Business/ImportExport/index.d.ts +14 -0
  11. package/dist/components/Business/ImportExport/sceneCapability.d.ts +20 -0
  12. package/dist/components/Business/ImportExport/services/importExport.d.ts +22 -0
  13. package/dist/components/Business/ImportExport/services/routing.d.ts +8 -0
  14. package/dist/components/Business/ImportExport/types.d.ts +134 -0
  15. package/dist/index.d.ts +1 -0
  16. package/dist/index.esm.js +2465 -10
  17. package/dist/index.js +2484 -7
  18. package/dist/utils/auth.d.ts +4 -0
  19. package/docs/error-record.md +52 -0
  20. package/docs/task-records/2026-07-31-import-export-extraction.md +73 -0
  21. package/package.json +1 -1
  22. package/src/components/Business/AddSelectBusiness/index.tsx +1 -1
  23. package/src/components/Business/ImportExport/ExportButton/ModalTitle.tsx +27 -0
  24. package/src/components/Business/ImportExport/ExportButton/TemplatePicker.tsx +424 -0
  25. package/src/components/Business/ImportExport/ExportButton/index.module.less +382 -0
  26. package/src/components/Business/ImportExport/ExportButton/index.tsx +273 -0
  27. package/src/components/Business/ImportExport/ImportWizard/Preview.tsx +129 -0
  28. package/src/components/Business/ImportExport/ImportWizard/index.module.less +360 -0
  29. package/src/components/Business/ImportExport/ImportWizard/index.tsx +679 -0
  30. package/src/components/Business/ImportExport/TaskDrawer/index.tsx +285 -0
  31. package/src/components/Business/ImportExport/TaskProgress/index.tsx +267 -0
  32. package/src/components/Business/ImportExport/businessFunction.ts +29 -0
  33. package/src/components/Business/ImportExport/index.md +104 -0
  34. package/src/components/Business/ImportExport/index.tsx +170 -0
  35. package/src/components/Business/ImportExport/sceneCapability.ts +28 -0
  36. package/src/components/Business/ImportExport/services/importExport.ts +208 -0
  37. package/src/components/Business/ImportExport/services/routing.ts +21 -0
  38. package/src/components/Business/ImportExport/types.ts +180 -0
  39. package/src/components/Business/SearchSelect/BusinessUtils.tsx +1 -1
  40. package/src/components/Functional/SearchSelect/utils.tsx +0 -1
  41. package/src/index.ts +2 -1
  42. package/src/typings/umi.d.ts +9 -0
  43. package/src/utils/LocalstorageUtils.ts +1 -1
  44. package/src/utils/auth.ts +39 -2
package/dist/index.js CHANGED
@@ -1324,6 +1324,38 @@ var formContainerAndItemLayout = function formContainerAndItemLayout(type, title
1324
1324
  };
1325
1325
  };
1326
1326
 
1327
+ /**
1328
+ * 根据上游权限编码获取关联的导入导出业务功能编码。
1329
+ */
1330
+ var getRelationTemplateCode = function getRelationTemplateCode(authCode) {
1331
+ var _buttonDataList$find;
1332
+ if (!authCode) return '';
1333
+ var menuData = [];
1334
+ try {
1335
+ var storedMenuData = JSON.parse(localStorage.getItem(getLimitMenuDataKey()) || '[]');
1336
+ menuData = Array.isArray(storedMenuData) ? storedMenuData : [];
1337
+ } catch (error) {
1338
+ return '';
1339
+ }
1340
+ var buttonDataList = [];
1341
+ /**
1342
+ * 递归收集叶子菜单下的按钮配置。
1343
+ */
1344
+ var _collectButtons = function collectButtons(items) {
1345
+ items.forEach(function (item) {
1346
+ var _item$children;
1347
+ if (item === null || item === void 0 ? void 0 : (_item$children = item.children) === null || _item$children === void 0 ? void 0 : _item$children.length) {
1348
+ _collectButtons(item.children);
1349
+ } else {
1350
+ buttonDataList = [].concat(_toConsumableArray(buttonDataList), _toConsumableArray((item === null || item === void 0 ? void 0 : item.buttons) || []));
1351
+ }
1352
+ });
1353
+ };
1354
+ _collectButtons(menuData);
1355
+ return ((_buttonDataList$find = buttonDataList.find(function (item) {
1356
+ return item.bizCode === authCode;
1357
+ })) === null || _buttonDataList$find === void 0 ? void 0 : _buttonDataList$find.relationExcelTemplateCode) || '';
1358
+ };
1327
1359
  // 判断某个按钮/菜单 是否有权限,返回布尔值
1328
1360
  var authFunc = function authFunc(code) {
1329
1361
  var _JSON$parse;
@@ -4283,7 +4315,7 @@ var handleParams = function handleParams(params) {
4283
4315
  //处理单据编号查询 如果是查询单条数据 就是模糊查询 两条以上就是精准查询
4284
4316
  var convertOrderNo = function convertOrderNo(params) {
4285
4317
  //需要处理得编号字段名
4286
- var arr = ['qp-skuCode-in', 'qp-eancode-in', 'qp-itemCode-in', 'qp-code-in'];
4318
+ var arr = ['qp-skuCode-in', 'qp-eancode-in', 'qp-itemCode-in'];
4287
4319
  for (var i = 0; i < arr.length; i++) {
4288
4320
  if (params[arr[i]]) {
4289
4321
  if (!params[arr[i]].includes(',')) {
@@ -11014,9 +11046,8 @@ function commonFun(type, prefixUrl, parentProps) {
11014
11046
  }]
11015
11047
  }, selectConfigProps);
11016
11048
  var _tableSearchForm = handleHiddenFields([{
11017
- name: 'qp-code-in',
11018
- label: 'SKC编码',
11019
- type: 'multipleQueryInput'
11049
+ name: 'qp-code-like',
11050
+ label: 'SKC编码'
11020
11051
  }, {
11021
11052
  name: 'qp-skcName-like',
11022
11053
  label: 'SKC名称'
@@ -14687,9 +14718,8 @@ var AddSkcSelect = function AddSkcSelect(parProps) {
14687
14718
  }];
14688
14719
  var mTpTableColumn = handleTableColumn(initialTableColumn, parProps);
14689
14720
  var initialTableSearchForm = [{
14690
- name: 'qp-code-in',
14691
- label: 'SKC编码',
14692
- type: 'multipleQueryInput'
14721
+ name: 'qp-code-like',
14722
+ label: 'SKC编码'
14693
14723
  }, {
14694
14724
  name: 'qp-skcName-like',
14695
14725
  label: 'SKC名称'
@@ -41737,6 +41767,2431 @@ var SystemLog = function SystemLog(_ref) {
41737
41767
  });
41738
41768
  };
41739
41769
 
41770
+ var SDK_PREFIX = '/import-export';
41771
+ /**
41772
+ * 校验并规范化业务功能服务上下文。
41773
+ */
41774
+ var normalizeServiceContext = function normalizeServiceContext(serviceContext) {
41775
+ var value = String(serviceContext || '').trim();
41776
+ if (!/^\/[A-Za-z0-9_-]+(?:\/[A-Za-z0-9_-]+)*$/.test(value) || value.includes('..')) {
41777
+ throw new Error('业务功能服务上下文配置无效');
41778
+ }
41779
+ return value.replace(/\/+$/, '');
41780
+ };
41781
+ /**
41782
+ * 拼接导入导出 SDK 接口地址。
41783
+ */
41784
+ var buildSdkUrl = function buildSdkUrl(serviceContext, path) {
41785
+ return "".concat(normalizeServiceContext(serviceContext)).concat(SDK_PREFIX).concat(path);
41786
+ };
41787
+
41788
+ var CONFIG_PREFIX = '/basic/import-export';
41789
+ var BUSINESS_FUNCTION_PREFIX = '/basic/business-functions';
41790
+ var OSS_UPLOAD_URL = '/basic/upload';
41791
+ var concurrentLimitCode = 'IE-COM-CONCURRENT-FILE-LIMIT';
41792
+ /**
41793
+ * 使用业务项目提供的请求函数创建完整导入导出服务。
41794
+ *
41795
+ * 请求函数由消费方注入,以复用其鉴权、租户和异常处理拦截器。
41796
+ */
41797
+ var createImportExportServices = function createImportExportServices(request) {
41798
+ var overrides = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
41799
+ if (typeof request !== 'function') {
41800
+ throw new Error('创建导入导出服务时必须提供请求函数');
41801
+ }
41802
+ var services = {
41803
+ resolveBusinessFunction: function resolveBusinessFunction(businessFunctionCode) {
41804
+ return request("".concat(BUSINESS_FUNCTION_PREFIX, "/").concat(encodeURIComponent(businessFunctionCode), "/resolve"), {
41805
+ method: 'GET'
41806
+ });
41807
+ },
41808
+ queryTemplates: function queryTemplates(data) {
41809
+ return request("".concat(CONFIG_PREFIX, "/templates/query"), {
41810
+ method: 'POST',
41811
+ data: data
41812
+ });
41813
+ },
41814
+ queryTemplateFields: function queryTemplateFields(data) {
41815
+ return request("".concat(CONFIG_PREFIX, "/fields/candidates"), {
41816
+ method: 'POST',
41817
+ data: data
41818
+ });
41819
+ },
41820
+ uploadFile: function uploadFile(file) {
41821
+ var formData = new FormData();
41822
+ formData.append('file', file);
41823
+ return request(OSS_UPLOAD_URL, {
41824
+ method: 'POST',
41825
+ data: formData
41826
+ });
41827
+ },
41828
+ downloadTemplate: function downloadTemplate(templateCode, data) {
41829
+ return request("".concat(CONFIG_PREFIX, "/templates/").concat(encodeURIComponent(templateCode), "/download"), {
41830
+ method: 'GET',
41831
+ params: data,
41832
+ responseType: 'blob'
41833
+ });
41834
+ },
41835
+ previewImport: function previewImport(serviceContext, data) {
41836
+ return request(buildSdkUrl(serviceContext, '/imports/preview'), {
41837
+ method: 'POST',
41838
+ data: data
41839
+ });
41840
+ },
41841
+ executeImport: function executeImport(serviceContext, data) {
41842
+ return request(buildSdkUrl(serviceContext, '/imports/execute'), {
41843
+ method: 'POST',
41844
+ data: data
41845
+ });
41846
+ },
41847
+ downloadValidationErrorFile: function downloadValidationErrorFile(serviceContext, data) {
41848
+ return request(buildSdkUrl(serviceContext, '/imports/error-file'), {
41849
+ method: 'POST',
41850
+ data: data
41851
+ });
41852
+ },
41853
+ quickExport: function quickExport(serviceContext, data) {
41854
+ return request(buildSdkUrl(serviceContext, '/exports/quick'), {
41855
+ method: 'POST',
41856
+ data: data
41857
+ });
41858
+ },
41859
+ templateExport: function templateExport(serviceContext, data) {
41860
+ return request(buildSdkUrl(serviceContext, '/exports/template'), {
41861
+ method: 'POST',
41862
+ data: data
41863
+ });
41864
+ },
41865
+ queryRecentTasks: function queryRecentTasks(data) {
41866
+ return request("".concat(CONFIG_PREFIX, "/tasks/recent"), {
41867
+ method: 'POST',
41868
+ data: data
41869
+ });
41870
+ },
41871
+ queryTask: function queryTask(serviceContext, taskCode) {
41872
+ if (!taskCode) {
41873
+ return Promise.reject(new Error('taskId is required'));
41874
+ }
41875
+ return request(buildSdkUrl(serviceContext, '/tasks/progress'), {
41876
+ method: 'POST',
41877
+ data: {
41878
+ taskId: taskCode
41879
+ }
41880
+ });
41881
+ }
41882
+ };
41883
+ return _objectSpread2(_objectSpread2({}, services), overrides);
41884
+ };
41885
+ /**
41886
+ * 使用宿主项目的 Umi 请求实例创建默认导入导出服务。
41887
+ */
41888
+ var defaultImportExportServices = createImportExportServices(function (url, options) {
41889
+ return umi.request(url, options);
41890
+ });
41891
+ /**
41892
+ * 将业务侧差异服务合并到默认导入导出服务。
41893
+ */
41894
+ var resolveImportExportServices = function resolveImportExportServices(overrides) {
41895
+ return _objectSpread2(_objectSpread2({}, defaultImportExportServices), overrides || {});
41896
+ };
41897
+ var unwrapResponse = function unwrapResponse(response) {
41898
+ var _response$data;
41899
+ return (response === null || response === void 0 ? void 0 : (_response$data = response.data) === null || _response$data === void 0 ? void 0 : _response$data.data) || (response === null || response === void 0 ? void 0 : response.data) || response;
41900
+ };
41901
+ var getItems = function getItems(response) {
41902
+ var data = unwrapResponse(response);
41903
+ return (data === null || data === void 0 ? void 0 : data.records) || (data === null || data === void 0 ? void 0 : data.items) || (data === null || data === void 0 ? void 0 : data.list) || [];
41904
+ };
41905
+ var normalizeTask = function normalizeTask(task) {
41906
+ var _task$progress, _ref, _ref2, _ref3, _task$processedCount, _ref4, _ref5, _task$totalCount, _task$elapsedSeconds, _ref6, _ref7, _task$successCount, _ref8, _task$failedCount, _task$skippedCount, _task$operatorName, _task$fileName, _task$createdTime, _task$errorMessage;
41907
+ var attributes = (task === null || task === void 0 ? void 0 : task.attributes) || {};
41908
+ var result = (task === null || task === void 0 ? void 0 : task.result) || {};
41909
+ var taskStatus = (task === null || task === void 0 ? void 0 : task.taskStatus) || (task === null || task === void 0 ? void 0 : task.status) || (attributes === null || attributes === void 0 ? void 0 : attributes.status);
41910
+ var completedCount = (attributes === null || attributes === void 0 ? void 0 : attributes.successCount) != null || (attributes === null || attributes === void 0 ? void 0 : attributes.failedCount) != null ? Number((attributes === null || attributes === void 0 ? void 0 : attributes.successCount) || 0) + Number((attributes === null || attributes === void 0 ? void 0 : attributes.failedCount) || 0) : undefined;
41911
+ var terminal = ['SUCCESS', 'PARTIAL_SUCCESS', 'PASSED', 'COMPLETED_WITH_ERRORS', 'FAILED', 'CANCELLED'].includes(taskStatus);
41912
+ return _objectSpread2(_objectSpread2({}, task), {}, {
41913
+ taskId: (task === null || task === void 0 ? void 0 : task.taskId) || (result === null || result === void 0 ? void 0 : result.taskId) || (task === null || task === void 0 ? void 0 : task.taskCode),
41914
+ taskType: (task === null || task === void 0 ? void 0 : task.taskType) || (attributes === null || attributes === void 0 ? void 0 : attributes.taskType) || (attributes === null || attributes === void 0 ? void 0 : attributes.operationType),
41915
+ taskStatus: taskStatus,
41916
+ progress: (_task$progress = task === null || task === void 0 ? void 0 : task.progress) !== null && _task$progress !== void 0 ? _task$progress : attributes === null || attributes === void 0 ? void 0 : attributes.percent,
41917
+ processedCount: (_ref = (_ref2 = (_ref3 = (_task$processedCount = task === null || task === void 0 ? void 0 : task.processedCount) !== null && _task$processedCount !== void 0 ? _task$processedCount : task === null || task === void 0 ? void 0 : task.processedRows) !== null && _ref3 !== void 0 ? _ref3 : attributes === null || attributes === void 0 ? void 0 : attributes.processedCount) !== null && _ref2 !== void 0 ? _ref2 : completedCount) !== null && _ref !== void 0 ? _ref : result === null || result === void 0 ? void 0 : result.rowCount,
41918
+ totalCount: (_ref4 = (_ref5 = (_task$totalCount = task === null || task === void 0 ? void 0 : task.totalCount) !== null && _task$totalCount !== void 0 ? _task$totalCount : task === null || task === void 0 ? void 0 : task.totalRows) !== null && _ref5 !== void 0 ? _ref5 : attributes === null || attributes === void 0 ? void 0 : attributes.totalCount) !== null && _ref4 !== void 0 ? _ref4 : terminal ? completedCount !== null && completedCount !== void 0 ? completedCount : result === null || result === void 0 ? void 0 : result.rowCount : undefined,
41919
+ elapsedSeconds: (_task$elapsedSeconds = task === null || task === void 0 ? void 0 : task.elapsedSeconds) !== null && _task$elapsedSeconds !== void 0 ? _task$elapsedSeconds : task === null || task === void 0 ? void 0 : task.durationSeconds,
41920
+ successCount: (_ref6 = (_ref7 = (_task$successCount = task === null || task === void 0 ? void 0 : task.successCount) !== null && _task$successCount !== void 0 ? _task$successCount : task === null || task === void 0 ? void 0 : task.successRows) !== null && _ref7 !== void 0 ? _ref7 : attributes === null || attributes === void 0 ? void 0 : attributes.successCount) !== null && _ref6 !== void 0 ? _ref6 : result === null || result === void 0 ? void 0 : result.rowCount,
41921
+ failedCount: (_ref8 = (_task$failedCount = task === null || task === void 0 ? void 0 : task.failedCount) !== null && _task$failedCount !== void 0 ? _task$failedCount : task === null || task === void 0 ? void 0 : task.failedRows) !== null && _ref8 !== void 0 ? _ref8 : attributes === null || attributes === void 0 ? void 0 : attributes.failedCount,
41922
+ skippedCount: (_task$skippedCount = task === null || task === void 0 ? void 0 : task.skippedCount) !== null && _task$skippedCount !== void 0 ? _task$skippedCount : task === null || task === void 0 ? void 0 : task.skippedRows,
41923
+ operatorName: (_task$operatorName = task === null || task === void 0 ? void 0 : task.operatorName) !== null && _task$operatorName !== void 0 ? _task$operatorName : task === null || task === void 0 ? void 0 : task.operator,
41924
+ fileName: (_task$fileName = task === null || task === void 0 ? void 0 : task.fileName) !== null && _task$fileName !== void 0 ? _task$fileName : result === null || result === void 0 ? void 0 : result.objectKey,
41925
+ createdTime: (_task$createdTime = task === null || task === void 0 ? void 0 : task.createdTime) !== null && _task$createdTime !== void 0 ? _task$createdTime : task === null || task === void 0 ? void 0 : task.createTime,
41926
+ resultDownloadUrl: (task === null || task === void 0 ? void 0 : task.resultDownloadUrl) || (task === null || task === void 0 ? void 0 : task.resultFileUrl) || (result === null || result === void 0 ? void 0 : result.fileUrl),
41927
+ errorDownloadUrl: (task === null || task === void 0 ? void 0 : task.errorDownloadUrl) || (task === null || task === void 0 ? void 0 : task.errorFileUrl),
41928
+ errorMessage: (_task$errorMessage = task === null || task === void 0 ? void 0 : task.errorMessage) !== null && _task$errorMessage !== void 0 ? _task$errorMessage : attributes === null || attributes === void 0 ? void 0 : attributes.errorMessage
41929
+ });
41930
+ };
41931
+ var taskTypeNames = {
41932
+ IMPORT_VALIDATION: '导入校验',
41933
+ IMPORT_EXECUTION: '导入执行',
41934
+ IMPORT: '导入执行',
41935
+ EXPORT: '导出',
41936
+ TEMPLATE_DOWNLOAD: '模板下载'
41937
+ };
41938
+ var taskTypeName = function taskTypeName(taskType) {
41939
+ return taskTypeNames[String(taskType || '').toUpperCase()] || '文件任务';
41940
+ };
41941
+ var isConcurrentLimit = function isConcurrentLimit(response) {
41942
+ var _response$response;
41943
+ var candidates = [response, response === null || response === void 0 ? void 0 : response.data, response === null || response === void 0 ? void 0 : response.response, response === null || response === void 0 ? void 0 : (_response$response = response.response) === null || _response$response === void 0 ? void 0 : _response$response.data];
41944
+ return candidates.some(function (item) {
41945
+ return (item === null || item === void 0 ? void 0 : item.code) === concurrentLimitCode || String((item === null || item === void 0 ? void 0 : item.message) || (item === null || item === void 0 ? void 0 : item.msg) || '').includes(concurrentLimitCode);
41946
+ });
41947
+ };
41948
+
41949
+ var css_248z$B = ".index-module_exportModal__3w1bk .ant-modal {\n top: 56px;\n max-width: calc(100vw - 32px);\n padding-bottom: 24px;\n}\n.index-module_exportModal__3w1bk .ant-modal-content {\n overflow: hidden;\n border-radius: 8px;\n box-shadow: 0 12px 40px rgba(31, 35, 41, 0.18);\n}\n.index-module_exportModal__3w1bk .ant-modal-header {\n padding: 18px 24px;\n border-bottom-color: #eef0f3;\n}\n.index-module_exportModal__3w1bk .ant-modal-body {\n max-height: calc(100vh - 220px);\n padding: 0;\n overflow-y: auto;\n background: #f7f8fa;\n}\n.index-module_exportModal__3w1bk .ant-modal-footer {\n padding: 14px 24px;\n border-top-color: #eef0f3;\n}\n.index-module_exportModal__3w1bk .ant-modal-close-x {\n height: 76px;\n line-height: 76px;\n}\n.index-module_modalTitle__15u3X {\n display: flex;\n align-items: center;\n min-height: 40px;\n}\n.index-module_modalTitleIcon__3xmvU {\n display: inline-flex;\n flex: 0 0 auto;\n align-items: center;\n justify-content: center;\n width: 40px;\n height: 40px;\n margin-right: 12px;\n color: #1677ff;\n font-size: 20px;\n background: #eaf3ff;\n border-radius: 8px;\n}\n.index-module_modalTitleText__3utGV,\n.index-module_modalTitleDescription__cDWV4,\n.index-module_sectionTitle__16-aX,\n.index-module_sectionDescription__2tpp1,\n.index-module_scopeTitle__1ac6w,\n.index-module_scopeDescription__1s-IV,\n.index-module_fileTypeName__1OYwi,\n.index-module_fileTypeDescription__1FtJb {\n display: block;\n}\n.index-module_modalTitleText__3utGV {\n color: #1f2329;\n font-weight: 600;\n font-size: 16px;\n line-height: 22px;\n}\n.index-module_modalTitleDescription__cDWV4 {\n margin-top: 2px;\n color: #8f959e;\n font-weight: 400;\n font-size: 12px;\n line-height: 18px;\n}\n.index-module_dialogBody__2juxt {\n padding: 16px 24px 24px;\n}\n.index-module_section__16q24 {\n margin-bottom: 16px;\n padding: 18px 20px;\n background: #fff;\n border: 1px solid #e8eaed;\n border-radius: 8px;\n}\n.index-module_section__16q24:last-child {\n margin-bottom: 0;\n}\n.index-module_sectionHeader__1grBk {\n display: flex;\n align-items: flex-start;\n margin-bottom: 16px;\n}\n.index-module_sectionIndex__kzg5U {\n display: inline-flex;\n flex: 0 0 auto;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n margin-right: 10px;\n color: #1677ff;\n font-weight: 600;\n font-size: 13px;\n background: #eaf3ff;\n border-radius: 50%;\n}\n.index-module_sectionTitle__16-aX {\n color: #1f2329;\n font-weight: 600;\n font-size: 15px;\n line-height: 22px;\n}\n.index-module_sectionDescription__2tpp1 {\n margin-top: 2px;\n color: #8f959e;\n font-size: 12px;\n line-height: 18px;\n}\n.index-module_scopeCard__36rit {\n display: flex;\n align-items: center;\n min-height: 72px;\n padding: 14px 16px;\n background: #f7f8fa;\n border: 1px solid #eef0f3;\n border-radius: 6px;\n}\n.index-module_scopeIcon__3kCNV {\n display: inline-flex;\n flex: 0 0 auto;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n margin-right: 12px;\n color: #1677ff;\n font-size: 18px;\n background: #fff;\n border-radius: 6px;\n box-shadow: 0 1px 3px rgba(31, 35, 41, 0.08);\n}\n.index-module_scopeContent__GxJMB {\n min-width: 0;\n}\n.index-module_scopeTitle__1ac6w {\n color: #1f2329;\n font-weight: 500;\n font-size: 14px;\n line-height: 22px;\n}\n.index-module_scopeDescription__1s-IV {\n margin-top: 2px;\n color: #8f959e;\n font-size: 12px;\n line-height: 18px;\n}\n.index-module_resultCount__24HI7 {\n flex: 0 0 auto;\n margin-left: auto;\n padding: 3px 10px;\n color: #1677ff;\n font-weight: 600;\n font-size: 13px;\n white-space: nowrap;\n background: #eaf3ff;\n border-radius: 12px;\n}\n.index-module_fileTypeGrid__3DEH7 {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 12px;\n width: 100%;\n}\n.index-module_fileTypeOption__3xdv7 {\n display: flex;\n align-items: flex-start;\n min-height: 68px;\n margin-right: 0;\n padding: 12px 14px;\n background: #fff;\n border: 1px solid #d9dce1;\n border-radius: 6px;\n transition: border-color 0.2s, background 0.2s, box-shadow 0.2s;\n}\n.index-module_fileTypeOption__3xdv7:hover {\n border-color: #69a5ff;\n}\n.index-module_fileTypeOption__3xdv7.ant-radio-wrapper-checked {\n background: #f5f9ff;\n border-color: #1677ff;\n box-shadow: 0 0 0 2px rgba(22, 119, 255, 0.08);\n}\n.index-module_fileTypeOption__3xdv7 .ant-radio {\n margin-top: 3px;\n}\n.index-module_fileTypeContent__j3dIT {\n margin-left: 4px;\n}\n.index-module_fileTypeName__1OYwi {\n color: #1f2329;\n font-weight: 600;\n font-size: 14px;\n line-height: 22px;\n}\n.index-module_fileTypeDescription__1FtJb {\n margin-top: 2px;\n color: #8f959e;\n font-size: 12px;\n line-height: 18px;\n}\n.index-module_exportAlert__9T7FJ {\n margin-top: 14px;\n border-color: #d9e8ff;\n border-radius: 6px;\n}\n.index-module_templateForm__2B-el .ant-form-item-label {\n padding-bottom: 8px;\n font-weight: 500;\n}\n.index-module_templateSelectItem__1tYgm {\n margin-bottom: 0;\n}\n.index-module_templatePreview__2iSqd {\n margin-top: 16px;\n overflow: hidden;\n border: 1px solid #e8eaed;\n border-radius: 6px;\n}\n.index-module_templatePreviewHeader__3OlGX {\n display: flex;\n align-items: center;\n justify-content: space-between;\n min-height: 48px;\n padding: 8px 14px;\n background: #f7f8fa;\n border-bottom: 1px solid #e8eaed;\n}\n.index-module_downloadTemplateButton__3eGfx {\n padding-right: 0;\n}\n.index-module_templateSummary__qCzi- .ant-descriptions-view {\n border-right: 0;\n border-left: 0;\n border-radius: 0;\n}\n.index-module_templateSummary__qCzi- .ant-descriptions-row > th,\n.index-module_templateSummary__qCzi- .ant-descriptions-row > td {\n padding: 10px 12px;\n}\n.index-module_templateSummary__qCzi- .ant-descriptions-item-label {\n color: #646a73;\n background: #fbfcfd;\n}\n.index-module_templateSummary__qCzi- .ant-descriptions-item-content {\n color: #1f2329;\n font-weight: 500;\n}\n.index-module_fieldPreview__3fZ94 {\n padding: 12px 14px 14px;\n background: #fff;\n}\n.index-module_fieldPreviewHeader__1Dnjl {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 10px;\n}\n.index-module_fieldPreviewLabel__3YyqT {\n color: #646a73;\n font-weight: 500;\n font-size: 13px;\n}\n.index-module_fieldCount__3b__K {\n color: #8f959e;\n font-size: 12px;\n}\n.index-module_fieldTags__3sAMg {\n min-height: 42px;\n max-height: 156px;\n padding: 10px;\n overflow-y: auto;\n background: #f7f8fa;\n border-radius: 6px;\n}\n.index-module_fieldTag__UP35F {\n margin-bottom: 6px;\n color: #434a54;\n background: #fff;\n border-color: #dfe2e6;\n border-radius: 4px;\n}\n.index-module_emptyFields__3GVvx {\n display: flex;\n align-items: center;\n min-height: 22px;\n color: #8f959e;\n font-size: 12px;\n}\n@media (max-width: 576px) {\n .index-module_modalTitleDescription__cDWV4 {\n display: none;\n }\n .index-module_dialogBody__2juxt {\n padding-right: 16px;\n padding-left: 16px;\n }\n .index-module_section__16q24 {\n padding: 16px;\n }\n .index-module_scopeCard__36rit {\n align-items: flex-start;\n }\n .index-module_resultCount__24HI7 {\n margin-top: 7px;\n }\n .index-module_fileTypeGrid__3DEH7 {\n grid-template-columns: 1fr;\n }\n}\n";
41950
+ var styles$1 = {"exportModal":"index-module_exportModal__3w1bk","modalTitle":"index-module_modalTitle__15u3X","modalTitleIcon":"index-module_modalTitleIcon__3xmvU","modalTitleText":"index-module_modalTitleText__3utGV","modalTitleDescription":"index-module_modalTitleDescription__cDWV4","sectionTitle":"index-module_sectionTitle__16-aX","sectionDescription":"index-module_sectionDescription__2tpp1","scopeTitle":"index-module_scopeTitle__1ac6w","scopeDescription":"index-module_scopeDescription__1s-IV","fileTypeName":"index-module_fileTypeName__1OYwi","fileTypeDescription":"index-module_fileTypeDescription__1FtJb","dialogBody":"index-module_dialogBody__2juxt","section":"index-module_section__16q24","sectionHeader":"index-module_sectionHeader__1grBk","sectionIndex":"index-module_sectionIndex__kzg5U","scopeCard":"index-module_scopeCard__36rit","scopeIcon":"index-module_scopeIcon__3kCNV","scopeContent":"index-module_scopeContent__GxJMB","resultCount":"index-module_resultCount__24HI7","fileTypeGrid":"index-module_fileTypeGrid__3DEH7","fileTypeOption":"index-module_fileTypeOption__3xdv7","fileTypeContent":"index-module_fileTypeContent__j3dIT","exportAlert":"index-module_exportAlert__9T7FJ","templateForm":"index-module_templateForm__2B-el","templateSelectItem":"index-module_templateSelectItem__1tYgm","templatePreview":"index-module_templatePreview__2iSqd","templatePreviewHeader":"index-module_templatePreviewHeader__3OlGX","downloadTemplateButton":"index-module_downloadTemplateButton__3eGfx","templateSummary":"index-module_templateSummary__qCzi-","fieldPreview":"index-module_fieldPreview__3fZ94","fieldPreviewHeader":"index-module_fieldPreviewHeader__1Dnjl","fieldPreviewLabel":"index-module_fieldPreviewLabel__3YyqT","fieldCount":"index-module_fieldCount__3b__K","fieldTags":"index-module_fieldTags__3sAMg","fieldTag":"index-module_fieldTag__UP35F","emptyFields":"index-module_emptyFields__3GVvx"};
41951
+ styleInject(css_248z$B);
41952
+
41953
+ /**
41954
+ * 统一导出弹窗标题区的图标、主标题和辅助说明。
41955
+ */
41956
+ var ModalTitle = function ModalTitle(_ref) {
41957
+ var icon = _ref.icon,
41958
+ title = _ref.title,
41959
+ description = _ref.description;
41960
+ return /*#__PURE__*/React__default['default'].createElement("div", {
41961
+ className: styles$1.modalTitle
41962
+ }, /*#__PURE__*/React__default['default'].createElement("span", {
41963
+ className: styles$1.modalTitleIcon
41964
+ }, icon), /*#__PURE__*/React__default['default'].createElement("span", null, /*#__PURE__*/React__default['default'].createElement("span", {
41965
+ className: styles$1.modalTitleText
41966
+ }, title), /*#__PURE__*/React__default['default'].createElement("span", {
41967
+ className: styles$1.modalTitleDescription
41968
+ }, description)));
41969
+ };
41970
+
41971
+ var TemplatePicker = function TemplatePicker(_ref) {
41972
+ var visible = _ref.visible,
41973
+ context = _ref.context,
41974
+ services = _ref.services,
41975
+ onCancel = _ref.onCancel,
41976
+ onConfirm = _ref.onConfirm,
41977
+ documentName = _ref.documentName,
41978
+ resultCount = _ref.resultCount;
41979
+ var _useState = React$1.useState([]),
41980
+ _useState2 = _slicedToArray(_useState, 2),
41981
+ items = _useState2[0],
41982
+ setItems = _useState2[1];
41983
+ var _useState3 = React$1.useState([]),
41984
+ _useState4 = _slicedToArray(_useState3, 2),
41985
+ fields = _useState4[0],
41986
+ setFields = _useState4[1];
41987
+ var _useState5 = React$1.useState(),
41988
+ _useState6 = _slicedToArray(_useState5, 2),
41989
+ templateCode = _useState6[0],
41990
+ setTemplateCode = _useState6[1];
41991
+ var _useState7 = React$1.useState(false),
41992
+ _useState8 = _slicedToArray(_useState7, 2),
41993
+ loading = _useState8[0],
41994
+ setLoading = _useState8[1];
41995
+ var _useState9 = React$1.useState(false),
41996
+ _useState0 = _slicedToArray(_useState9, 2),
41997
+ fieldLoading = _useState0[0],
41998
+ setFieldLoading = _useState0[1];
41999
+ var _useState1 = React$1.useState(false),
42000
+ _useState10 = _slicedToArray(_useState1, 2),
42001
+ confirming = _useState10[0],
42002
+ setConfirming = _useState10[1];
42003
+ var _useState11 = React$1.useState(false),
42004
+ _useState12 = _slicedToArray(_useState11, 2),
42005
+ downloading = _useState12[0],
42006
+ setDownloading = _useState12[1];
42007
+ var _useState13 = React$1.useState('XLSX'),
42008
+ _useState14 = _slicedToArray(_useState13, 2),
42009
+ fileType = _useState14[0],
42010
+ setFileType = _useState14[1];
42011
+ var searchTimer = React$1.useRef();
42012
+ var loadTemplates = React$1.useCallback(/*#__PURE__*/function () {
42013
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(keyword) {
42014
+ var response, loaded, defaultTemplate, _t;
42015
+ return _regenerator().w(function (_context) {
42016
+ while (1) switch (_context.p = _context.n) {
42017
+ case 0:
42018
+ setLoading(true);
42019
+ _context.p = 1;
42020
+ _context.n = 2;
42021
+ return services.queryTemplates({
42022
+ operationType: context.operationType,
42023
+ businessFunctionCode: context.businessFunctionCode,
42024
+ keyword: keyword,
42025
+ enabled: true,
42026
+ currentPage: 1,
42027
+ pageSize: 100
42028
+ });
42029
+ case 2:
42030
+ response = _context.v;
42031
+ loaded = getItems(response);
42032
+ setItems(loaded);
42033
+ if (!keyword) {
42034
+ defaultTemplate = loaded.find(function (template) {
42035
+ return template.defaultFlag && template.enabled !== false;
42036
+ });
42037
+ if (!defaultTemplate) {
42038
+ antd.message.error('当前业务功能未配置启用的默认导出模板');
42039
+ } else {
42040
+ setTemplateCode(defaultTemplate.templateCode);
42041
+ }
42042
+ }
42043
+ _context.n = 4;
42044
+ break;
42045
+ case 3:
42046
+ _context.p = 3;
42047
+ _t = _context.v;
42048
+ antd.message.error('导出模板加载失败,请稍后重试');
42049
+ case 4:
42050
+ _context.p = 4;
42051
+ setLoading(false);
42052
+ return _context.f(4);
42053
+ case 5:
42054
+ return _context.a(2);
42055
+ }
42056
+ }, _callee, null, [[1, 3, 4, 5]]);
42057
+ }));
42058
+ return function (_x) {
42059
+ return _ref2.apply(this, arguments);
42060
+ };
42061
+ }(), [context.businessFunctionCode, context.operationType, services]);
42062
+ React$1.useEffect(function () {
42063
+ if (!visible) return;
42064
+ setTemplateCode(undefined);
42065
+ setFields([]);
42066
+ setFileType('XLSX');
42067
+ loadTemplates();
42068
+ }, [visible, loadTemplates]);
42069
+ React$1.useEffect(function () {
42070
+ return function () {
42071
+ if (searchTimer.current) {
42072
+ window.clearTimeout(searchTimer.current);
42073
+ }
42074
+ };
42075
+ }, []);
42076
+ var selectedTemplate = React$1.useMemo(function () {
42077
+ return items.find(function (item) {
42078
+ return item.templateCode === templateCode;
42079
+ });
42080
+ }, [items, templateCode]);
42081
+ var personalTemplates = items.filter(function (item) {
42082
+ return item.visibility === 'PERSONAL';
42083
+ });
42084
+ var publicTemplates = items.filter(function (item) {
42085
+ return item.visibility !== 'PERSONAL';
42086
+ });
42087
+ var previewFieldNames = fields.length > 0 ? fields.map(function (field) {
42088
+ return field.displayName || field.fieldCode;
42089
+ }) : (selectedTemplate === null || selectedTemplate === void 0 ? void 0 : selectedTemplate.fieldNames) || [];
42090
+ var previewFieldCount = fields.length || (selectedTemplate === null || selectedTemplate === void 0 ? void 0 : selectedTemplate.fieldCount) || previewFieldNames.length;
42091
+ var searchTemplates = function searchTemplates(keyword) {
42092
+ if (searchTimer.current) {
42093
+ window.clearTimeout(searchTimer.current);
42094
+ }
42095
+ searchTimer.current = window.setTimeout(function () {
42096
+ return loadTemplates(keyword.trim() || undefined);
42097
+ }, 300);
42098
+ };
42099
+ React$1.useEffect(function () {
42100
+ if (!selectedTemplate) {
42101
+ setFields([]);
42102
+ return;
42103
+ }
42104
+ setFieldLoading(true);
42105
+ services.queryTemplateFields({
42106
+ templateCode: selectedTemplate.templateCode,
42107
+ metadataEntityCode: selectedTemplate.metadataEntityCode,
42108
+ onlyUnmapped: false,
42109
+ currentPage: 1,
42110
+ pageSize: 500
42111
+ }).then(function (response) {
42112
+ setFields(getItems(response).filter(function (field) {
42113
+ return field.mapped;
42114
+ }));
42115
+ }).catch(function () {
42116
+ setFields([]);
42117
+ antd.message.error('模板字段预览加载失败,请稍后重试');
42118
+ }).finally(function () {
42119
+ return setFieldLoading(false);
42120
+ });
42121
+ }, [selectedTemplate, services]);
42122
+ var confirm = /*#__PURE__*/function () {
42123
+ var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {
42124
+ return _regenerator().w(function (_context2) {
42125
+ while (1) switch (_context2.p = _context2.n) {
42126
+ case 0:
42127
+ if (templateCode) {
42128
+ _context2.n = 1;
42129
+ break;
42130
+ }
42131
+ return _context2.a(2);
42132
+ case 1:
42133
+ if (!(resultCount === 0)) {
42134
+ _context2.n = 2;
42135
+ break;
42136
+ }
42137
+ antd.message.warning('当前查询结果为空,不创建导出任务');
42138
+ return _context2.a(2);
42139
+ case 2:
42140
+ setConfirming(true);
42141
+ _context2.p = 3;
42142
+ _context2.n = 4;
42143
+ return onConfirm(templateCode, fileType);
42144
+ case 4:
42145
+ _context2.p = 4;
42146
+ setConfirming(false);
42147
+ return _context2.f(4);
42148
+ case 5:
42149
+ return _context2.a(2);
42150
+ }
42151
+ }, _callee2, null, [[3,, 4, 5]]);
42152
+ }));
42153
+ return function confirm() {
42154
+ return _ref3.apply(this, arguments);
42155
+ };
42156
+ }();
42157
+ var downloadTemplate = /*#__PURE__*/function () {
42158
+ var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {
42159
+ var file, url, link, _t2;
42160
+ return _regenerator().w(function (_context3) {
42161
+ while (1) switch (_context3.p = _context3.n) {
42162
+ case 0:
42163
+ if (templateCode) {
42164
+ _context3.n = 1;
42165
+ break;
42166
+ }
42167
+ antd.message.warning('请先选择模板');
42168
+ return _context3.a(2);
42169
+ case 1:
42170
+ setDownloading(true);
42171
+ _context3.p = 2;
42172
+ _context3.n = 3;
42173
+ return services.downloadTemplate(templateCode, context);
42174
+ case 3:
42175
+ file = _context3.v;
42176
+ url = URL.createObjectURL(file instanceof Blob ? file : new Blob([file]));
42177
+ link = document.createElement('a');
42178
+ link.href = url;
42179
+ link.download = "".concat((selectedTemplate === null || selectedTemplate === void 0 ? void 0 : selectedTemplate.templateName) || templateCode, ".xlsx");
42180
+ document.body.appendChild(link);
42181
+ link.click();
42182
+ document.body.removeChild(link);
42183
+ URL.revokeObjectURL(url);
42184
+ antd.message.success('模板下载成功');
42185
+ _context3.n = 5;
42186
+ break;
42187
+ case 4:
42188
+ _context3.p = 4;
42189
+ _t2 = _context3.v;
42190
+ antd.message.error('模板下载失败,请稍后重试');
42191
+ case 5:
42192
+ _context3.p = 5;
42193
+ setDownloading(false);
42194
+ return _context3.f(5);
42195
+ case 6:
42196
+ return _context3.a(2);
42197
+ }
42198
+ }, _callee3, null, [[2, 4, 5, 6]]);
42199
+ }));
42200
+ return function downloadTemplate() {
42201
+ return _ref4.apply(this, arguments);
42202
+ };
42203
+ }();
42204
+ return /*#__PURE__*/React__default['default'].createElement(antd.Modal, {
42205
+ width: 760,
42206
+ title: /*#__PURE__*/React__default['default'].createElement(ModalTitle, {
42207
+ icon: /*#__PURE__*/React__default['default'].createElement(icons.FileExcelOutlined, null),
42208
+ title: "".concat(documentName || '业务单据', "\u6309\u6A21\u677F\u5BFC\u51FA"),
42209
+ description: "\u6309\u5DF2\u914D\u7F6E\u7684\u5B57\u6BB5\u6A21\u677F\u751F\u6210\u5F53\u524D\u7B5B\u9009\u7ED3\u679C"
42210
+ }),
42211
+ visible: visible,
42212
+ onCancel: onCancel,
42213
+ onOk: confirm,
42214
+ confirmLoading: confirming,
42215
+ okButtonProps: {
42216
+ disabled: !templateCode || resultCount === 0
42217
+ },
42218
+ okText: "\u521B\u5EFA\u5BFC\u51FA\u4EFB\u52A1",
42219
+ cancelText: "\u53D6\u6D88",
42220
+ wrapClassName: styles$1.exportModal,
42221
+ destroyOnClose: true
42222
+ }, /*#__PURE__*/React__default['default'].createElement("div", {
42223
+ className: styles$1.dialogBody
42224
+ }, /*#__PURE__*/React__default['default'].createElement(antd.Form, {
42225
+ layout: "vertical",
42226
+ className: styles$1.templateForm
42227
+ }, /*#__PURE__*/React__default['default'].createElement("section", {
42228
+ className: styles$1.section
42229
+ }, /*#__PURE__*/React__default['default'].createElement("div", {
42230
+ className: styles$1.sectionHeader
42231
+ }, /*#__PURE__*/React__default['default'].createElement("span", {
42232
+ className: styles$1.sectionIndex
42233
+ }, "1"), /*#__PURE__*/React__default['default'].createElement("span", null, /*#__PURE__*/React__default['default'].createElement("span", {
42234
+ className: styles$1.sectionTitle
42235
+ }, "\u9009\u62E9\u5BFC\u51FA\u6A21\u677F"), /*#__PURE__*/React__default['default'].createElement("span", {
42236
+ className: styles$1.sectionDescription
42237
+ }, "\u6A21\u677F\u51B3\u5B9A\u5BFC\u51FA\u6587\u4EF6\u5305\u542B\u7684\u5B57\u6BB5\u53CA\u5B57\u6BB5\u987A\u5E8F"))), /*#__PURE__*/React__default['default'].createElement(antd.Form.Item, {
42238
+ label: "\u5BFC\u51FA\u6A21\u677F",
42239
+ required: true,
42240
+ className: styles$1.templateSelectItem
42241
+ }, /*#__PURE__*/React__default['default'].createElement(antd.Spin, {
42242
+ spinning: loading
42243
+ }, /*#__PURE__*/React__default['default'].createElement(antd.Select, {
42244
+ size: "large",
42245
+ showSearch: true,
42246
+ allowClear: true,
42247
+ filterOption: false,
42248
+ onSearch: searchTemplates,
42249
+ onClear: function onClear() {
42250
+ return loadTemplates();
42251
+ },
42252
+ placeholder: "\u8F93\u5165\u6A21\u677F\u540D\u79F0\u5B9E\u65F6\u67E5\u8BE2",
42253
+ value: templateCode,
42254
+ onChange: setTemplateCode,
42255
+ style: {
42256
+ width: '100%'
42257
+ },
42258
+ notFoundContent: /*#__PURE__*/React__default['default'].createElement(antd.Empty, {
42259
+ image: antd.Empty.PRESENTED_IMAGE_SIMPLE
42260
+ })
42261
+ }, personalTemplates.length > 0 && (/*#__PURE__*/React__default['default'].createElement(antd.Select.OptGroup, {
42262
+ label: "\u4E2A\u4EBA\u6A21\u677F"
42263
+ }, personalTemplates.map(function (item) {
42264
+ return /*#__PURE__*/React__default['default'].createElement(antd.Select.Option, {
42265
+ key: item.templateCode,
42266
+ value: item.templateCode
42267
+ }, item.templateName);
42268
+ }))), publicTemplates.length > 0 && (/*#__PURE__*/React__default['default'].createElement(antd.Select.OptGroup, {
42269
+ label: "\u516C\u5171\u6A21\u677F"
42270
+ }, publicTemplates.map(function (item) {
42271
+ return /*#__PURE__*/React__default['default'].createElement(antd.Select.Option, {
42272
+ key: item.templateCode,
42273
+ value: item.templateCode
42274
+ }, item.templateName);
42275
+ })))))), selectedTemplate && (/*#__PURE__*/React__default['default'].createElement("div", {
42276
+ className: styles$1.templatePreview
42277
+ }, /*#__PURE__*/React__default['default'].createElement("div", {
42278
+ className: styles$1.templatePreviewHeader
42279
+ }, /*#__PURE__*/React__default['default'].createElement("span", {
42280
+ className: styles$1.sectionTitle
42281
+ }, "\u6A21\u677F\u4FE1\u606F\u4E0E\u5B57\u6BB5\u9884\u89C8"), /*#__PURE__*/React__default['default'].createElement(antd.Button, {
42282
+ className: styles$1.downloadTemplateButton,
42283
+ type: "link",
42284
+ icon: /*#__PURE__*/React__default['default'].createElement(icons.DownloadOutlined, null),
42285
+ loading: downloading,
42286
+ onClick: downloadTemplate
42287
+ }, "\u4E0B\u8F7D\u7A7A\u767D\u6A21\u677F")), /*#__PURE__*/React__default['default'].createElement(antd.Descriptions, {
42288
+ bordered: true,
42289
+ size: "small",
42290
+ column: {
42291
+ xs: 1,
42292
+ sm: 3
42293
+ },
42294
+ className: styles$1.templateSummary
42295
+ }, /*#__PURE__*/React__default['default'].createElement(antd.Descriptions.Item, {
42296
+ label: "\u6A21\u677F\u540D\u79F0"
42297
+ }, selectedTemplate.templateName), /*#__PURE__*/React__default['default'].createElement(antd.Descriptions.Item, {
42298
+ label: "\u6A21\u677F\u7C7B\u578B"
42299
+ }, selectedTemplate.visibility === 'PERSONAL' ? '个人模板' : '公共模板'), /*#__PURE__*/React__default['default'].createElement(antd.Descriptions.Item, {
42300
+ label: "\u4E1A\u52A1\u529F\u80FD"
42301
+ }, documentName || selectedTemplate.businessFunctionCode || '-')), /*#__PURE__*/React__default['default'].createElement("div", {
42302
+ className: styles$1.fieldPreview
42303
+ }, /*#__PURE__*/React__default['default'].createElement("div", {
42304
+ className: styles$1.fieldPreviewHeader
42305
+ }, /*#__PURE__*/React__default['default'].createElement("span", {
42306
+ className: styles$1.fieldPreviewLabel
42307
+ }, "\u5B57\u6BB5\u9884\u89C8"), /*#__PURE__*/React__default['default'].createElement("span", {
42308
+ className: styles$1.fieldCount
42309
+ }, previewFieldCount, " \u4E2A\u5B57\u6BB5")), /*#__PURE__*/React__default['default'].createElement("div", {
42310
+ className: styles$1.fieldTags
42311
+ }, /*#__PURE__*/React__default['default'].createElement(antd.Spin, {
42312
+ spinning: fieldLoading
42313
+ }, /*#__PURE__*/React__default['default'].createElement(antd.Space, {
42314
+ size: [4, 0],
42315
+ wrap: true
42316
+ }, previewFieldNames.map(function (name) {
42317
+ return /*#__PURE__*/React__default['default'].createElement(antd.Tag, {
42318
+ className: styles$1.fieldTag,
42319
+ key: name
42320
+ }, name);
42321
+ }), !fieldLoading && previewFieldNames.length === 0 && (/*#__PURE__*/React__default['default'].createElement("span", {
42322
+ className: styles$1.emptyFields
42323
+ }, "\u6682\u65E0\u5DF2\u6620\u5C04\u5B57\u6BB5"))))))))), /*#__PURE__*/React__default['default'].createElement("section", {
42324
+ className: styles$1.section
42325
+ }, /*#__PURE__*/React__default['default'].createElement("div", {
42326
+ className: styles$1.sectionHeader
42327
+ }, /*#__PURE__*/React__default['default'].createElement("span", {
42328
+ className: styles$1.sectionIndex
42329
+ }, "2"), /*#__PURE__*/React__default['default'].createElement("span", null, /*#__PURE__*/React__default['default'].createElement("span", {
42330
+ className: styles$1.sectionTitle
42331
+ }, "\u8BBE\u7F6E\u5BFC\u51FA\u53C2\u6570"), /*#__PURE__*/React__default['default'].createElement("span", {
42332
+ className: styles$1.sectionDescription
42333
+ }, "\u786E\u8BA4\u5F53\u524D\u5BFC\u51FA\u8303\u56F4\u5E76\u9009\u62E9\u6587\u4EF6\u683C\u5F0F"))), /*#__PURE__*/React__default['default'].createElement("div", {
42334
+ className: styles$1.scopeCard
42335
+ }, /*#__PURE__*/React__default['default'].createElement("span", {
42336
+ className: styles$1.scopeIcon
42337
+ }, /*#__PURE__*/React__default['default'].createElement(icons.FilterOutlined, null)), /*#__PURE__*/React__default['default'].createElement("span", {
42338
+ className: styles$1.scopeContent
42339
+ }, /*#__PURE__*/React__default['default'].createElement("span", {
42340
+ className: styles$1.scopeTitle
42341
+ }, "\u5F53\u524D\u7B5B\u9009\u7ED3\u679C"), /*#__PURE__*/React__default['default'].createElement("span", {
42342
+ className: styles$1.scopeDescription
42343
+ }, "\u7CFB\u7EDF\u5C06\u6309\u5217\u8868\u5F53\u524D\u67E5\u8BE2\u6761\u4EF6\u548C\u6240\u9009\u6A21\u677F\u5B57\u6BB5\u5BFC\u51FA")), /*#__PURE__*/React__default['default'].createElement("span", {
42344
+ className: styles$1.resultCount
42345
+ }, resultCount == null ? '以查询结果为准' : "".concat(resultCount, " \u6761"))), /*#__PURE__*/React__default['default'].createElement(antd.Form.Item, {
42346
+ label: "\u6587\u4EF6\u683C\u5F0F",
42347
+ style: {
42348
+ marginTop: 16,
42349
+ marginBottom: 0
42350
+ }
42351
+ }, /*#__PURE__*/React__default['default'].createElement(antd.Radio.Group, {
42352
+ className: styles$1.fileTypeGrid,
42353
+ value: fileType,
42354
+ onChange: function onChange(event) {
42355
+ return setFileType(event.target.value);
42356
+ }
42357
+ }, /*#__PURE__*/React__default['default'].createElement(antd.Radio, {
42358
+ className: styles$1.fileTypeOption,
42359
+ value: "XLSX"
42360
+ }, /*#__PURE__*/React__default['default'].createElement("span", {
42361
+ className: styles$1.fileTypeContent
42362
+ }, /*#__PURE__*/React__default['default'].createElement("span", {
42363
+ className: styles$1.fileTypeName
42364
+ }, "XLSX"), /*#__PURE__*/React__default['default'].createElement("span", {
42365
+ className: styles$1.fileTypeDescription
42366
+ }, "\u4FDD\u7559\u8868\u683C\u683C\u5F0F\uFF0C\u9002\u5408\u67E5\u770B\u4E0E\u7F16\u8F91"))), /*#__PURE__*/React__default['default'].createElement(antd.Radio, {
42367
+ className: styles$1.fileTypeOption,
42368
+ value: "CSV"
42369
+ }, /*#__PURE__*/React__default['default'].createElement("span", {
42370
+ className: styles$1.fileTypeContent
42371
+ }, /*#__PURE__*/React__default['default'].createElement("span", {
42372
+ className: styles$1.fileTypeName
42373
+ }, "CSV"), /*#__PURE__*/React__default['default'].createElement("span", {
42374
+ className: styles$1.fileTypeDescription
42375
+ }, "\u6587\u4EF6\u66F4\u8F7B\u91CF\uFF0C\u9002\u5408\u7CFB\u7EDF\u95F4\u4EA4\u6362"))))), /*#__PURE__*/React__default['default'].createElement(antd.Alert, {
42376
+ className: styles$1.exportAlert,
42377
+ type: resultCount === 0 ? 'warning' : 'info',
42378
+ showIcon: true,
42379
+ message: resultCount === 0 ? '当前查询结果为空,暂时无法创建导出任务。' : '创建后可在任务中心查看处理进度并下载导出文件。'
42380
+ })))));
42381
+ };
42382
+
42383
+ /**
42384
+ * 提供快速导出和按模板导出入口。
42385
+ */
42386
+ var ExportButton = function ExportButton(_ref) {
42387
+ var _config$getResultCoun;
42388
+ var config = _ref.config,
42389
+ services = _ref.services,
42390
+ resolveRequestContext = _ref.resolveRequestContext,
42391
+ showQuickExport = _ref.showQuickExport,
42392
+ showTemplateExport = _ref.showTemplateExport,
42393
+ onTaskCreated = _ref.onTaskCreated;
42394
+ var _useState = React$1.useState(false),
42395
+ _useState2 = _slicedToArray(_useState, 2),
42396
+ pickerVisible = _useState2[0],
42397
+ setPickerVisible = _useState2[1];
42398
+ var _useState3 = React$1.useState(false),
42399
+ _useState4 = _slicedToArray(_useState3, 2),
42400
+ quickVisible = _useState4[0],
42401
+ setQuickVisible = _useState4[1];
42402
+ var _useState5 = React$1.useState(false),
42403
+ _useState6 = _slicedToArray(_useState5, 2),
42404
+ exporting = _useState6[0],
42405
+ setExporting = _useState6[1];
42406
+ var _useState7 = React$1.useState(),
42407
+ _useState8 = _slicedToArray(_useState7, 2),
42408
+ routeLoading = _useState8[0],
42409
+ setRouteLoading = _useState8[1];
42410
+ var _useState9 = React$1.useState(),
42411
+ _useState0 = _slicedToArray(_useState9, 2),
42412
+ context = _useState0[0],
42413
+ setContext = _useState0[1];
42414
+ var _useState1 = React$1.useState('XLSX'),
42415
+ _useState10 = _slicedToArray(_useState1, 2),
42416
+ quickFileType = _useState10[0],
42417
+ setQuickFileType = _useState10[1];
42418
+ var createTask = /*#__PURE__*/function () {
42419
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(currentContext, execute) {
42420
+ var data,
42421
+ fileType,
42422
+ response,
42423
+ task,
42424
+ _args = arguments,
42425
+ _t;
42426
+ return _regenerator().w(function (_context) {
42427
+ while (1) switch (_context.p = _context.n) {
42428
+ case 0:
42429
+ data = _args.length > 2 && _args[2] !== undefined ? _args[2] : {};
42430
+ fileType = _args.length > 3 && _args[3] !== undefined ? _args[3] : 'XLSX';
42431
+ setExporting(true);
42432
+ _context.p = 1;
42433
+ _context.n = 2;
42434
+ return execute(currentContext.serviceContext, _objectSpread2(_objectSpread2({
42435
+ businessFunctionCode: currentContext.businessFunctionCode,
42436
+ conditions: currentContext.conditions
42437
+ }, data), {}, {
42438
+ fileType: fileType
42439
+ }));
42440
+ case 2:
42441
+ response = _context.v;
42442
+ if (!isConcurrentLimit(response)) {
42443
+ _context.n = 3;
42444
+ break;
42445
+ }
42446
+ antd.message.warning('当前导入导出任务较多,请稍后重试');
42447
+ return _context.a(2);
42448
+ case 3:
42449
+ task = normalizeTask(_objectSpread2(_objectSpread2({}, unwrapResponse(response)), {}, {
42450
+ taskType: 'EXPORT',
42451
+ taskStatus: 'PENDING',
42452
+ serviceContext: currentContext.serviceContext
42453
+ }));
42454
+ if (task === null || task === void 0 ? void 0 : task.taskId) {
42455
+ _context.n = 4;
42456
+ break;
42457
+ }
42458
+ throw new Error((task === null || task === void 0 ? void 0 : task.msg) || 'export taskId is missing');
42459
+ case 4:
42460
+ onTaskCreated(task);
42461
+ antd.message.success('已创建导出任务');
42462
+ _context.n = 7;
42463
+ break;
42464
+ case 5:
42465
+ _context.p = 5;
42466
+ _t = _context.v;
42467
+ if (!isConcurrentLimit(_t)) {
42468
+ _context.n = 6;
42469
+ break;
42470
+ }
42471
+ antd.message.warning('当前导入导出任务较多,请稍后重试');
42472
+ return _context.a(2);
42473
+ case 6:
42474
+ antd.message.error('创建导出任务失败,请稍后重试');
42475
+ case 7:
42476
+ _context.p = 7;
42477
+ setExporting(false);
42478
+ return _context.f(7);
42479
+ case 8:
42480
+ return _context.a(2);
42481
+ }
42482
+ }, _callee, null, [[1, 5, 7, 8]]);
42483
+ }));
42484
+ return function createTask(_x, _x2) {
42485
+ return _ref2.apply(this, arguments);
42486
+ };
42487
+ }();
42488
+ var resultCount = (_config$getResultCoun = config.getResultCount) === null || _config$getResultCoun === void 0 ? void 0 : _config$getResultCoun.call(config);
42489
+ var submitQuickExport = /*#__PURE__*/function () {
42490
+ var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {
42491
+ return _regenerator().w(function (_context2) {
42492
+ while (1) switch (_context2.n) {
42493
+ case 0:
42494
+ if (context) {
42495
+ _context2.n = 1;
42496
+ break;
42497
+ }
42498
+ return _context2.a(2);
42499
+ case 1:
42500
+ if (!(resultCount === 0)) {
42501
+ _context2.n = 2;
42502
+ break;
42503
+ }
42504
+ antd.message.warning('当前查询结果为空,不创建导出任务');
42505
+ return _context2.a(2);
42506
+ case 2:
42507
+ _context2.n = 3;
42508
+ return createTask(context, services.quickExport, {}, quickFileType);
42509
+ case 3:
42510
+ setQuickVisible(false);
42511
+ case 4:
42512
+ return _context2.a(2);
42513
+ }
42514
+ }, _callee2);
42515
+ }));
42516
+ return function submitQuickExport() {
42517
+ return _ref3.apply(this, arguments);
42518
+ };
42519
+ }();
42520
+ var openExport = /*#__PURE__*/function () {
42521
+ var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(type) {
42522
+ var resolvedContext;
42523
+ return _regenerator().w(function (_context3) {
42524
+ while (1) switch (_context3.p = _context3.n) {
42525
+ case 0:
42526
+ setRouteLoading(type);
42527
+ _context3.p = 1;
42528
+ _context3.n = 2;
42529
+ return resolveRequestContext();
42530
+ case 2:
42531
+ resolvedContext = _context3.v;
42532
+ if (resolvedContext) {
42533
+ _context3.n = 3;
42534
+ break;
42535
+ }
42536
+ return _context3.a(2);
42537
+ case 3:
42538
+ setContext(resolvedContext);
42539
+ if (type === 'QUICK') {
42540
+ setQuickVisible(true);
42541
+ } else {
42542
+ setPickerVisible(true);
42543
+ }
42544
+ case 4:
42545
+ _context3.p = 4;
42546
+ setRouteLoading(undefined);
42547
+ return _context3.f(4);
42548
+ case 5:
42549
+ return _context3.a(2);
42550
+ }
42551
+ }, _callee3, null, [[1,, 4, 5]]);
42552
+ }));
42553
+ return function openExport(_x3) {
42554
+ return _ref4.apply(this, arguments);
42555
+ };
42556
+ }();
42557
+ var quickExportModal = /*#__PURE__*/React__default['default'].createElement(antd.Modal, {
42558
+ width: 560,
42559
+ title: /*#__PURE__*/React__default['default'].createElement(ModalTitle, {
42560
+ icon: /*#__PURE__*/React__default['default'].createElement(icons.ExportOutlined, null),
42561
+ title: "".concat(config.documentName, "\u5FEB\u901F\u5BFC\u51FA"),
42562
+ description: "\u4F7F\u7528\u7CFB\u7EDF\u9ED8\u8BA4\u5B57\u6BB5\u5BFC\u51FA\u5F53\u524D\u7B5B\u9009\u7ED3\u679C"
42563
+ }),
42564
+ visible: quickVisible,
42565
+ onCancel: function onCancel() {
42566
+ return setQuickVisible(false);
42567
+ },
42568
+ onOk: submitQuickExport,
42569
+ confirmLoading: exporting,
42570
+ okText: "\u521B\u5EFA\u5BFC\u51FA\u4EFB\u52A1",
42571
+ cancelText: "\u53D6\u6D88",
42572
+ okButtonProps: {
42573
+ disabled: resultCount === 0,
42574
+ icon: /*#__PURE__*/React__default['default'].createElement(icons.ExportOutlined, null)
42575
+ },
42576
+ wrapClassName: styles$1.exportModal,
42577
+ destroyOnClose: true
42578
+ }, /*#__PURE__*/React__default['default'].createElement("div", {
42579
+ className: styles$1.dialogBody
42580
+ }, /*#__PURE__*/React__default['default'].createElement("section", {
42581
+ className: styles$1.section
42582
+ }, /*#__PURE__*/React__default['default'].createElement("div", {
42583
+ className: styles$1.sectionHeader
42584
+ }, /*#__PURE__*/React__default['default'].createElement("span", {
42585
+ className: styles$1.sectionIndex
42586
+ }, "1"), /*#__PURE__*/React__default['default'].createElement("span", null, /*#__PURE__*/React__default['default'].createElement("span", {
42587
+ className: styles$1.sectionTitle
42588
+ }, "\u786E\u8BA4\u5BFC\u51FA\u8303\u56F4"), /*#__PURE__*/React__default['default'].createElement("span", {
42589
+ className: styles$1.sectionDescription
42590
+ }, "\u5BFC\u51FA\u5185\u5BB9\u4E0E\u5F53\u524D\u5217\u8868\u7684\u67E5\u8BE2\u6761\u4EF6\u4FDD\u6301\u4E00\u81F4"))), /*#__PURE__*/React__default['default'].createElement("div", {
42591
+ className: styles$1.scopeCard
42592
+ }, /*#__PURE__*/React__default['default'].createElement("span", {
42593
+ className: styles$1.scopeIcon
42594
+ }, /*#__PURE__*/React__default['default'].createElement(icons.FilterOutlined, null)), /*#__PURE__*/React__default['default'].createElement("span", {
42595
+ className: styles$1.scopeContent
42596
+ }, /*#__PURE__*/React__default['default'].createElement("span", {
42597
+ className: styles$1.scopeTitle
42598
+ }, "\u5F53\u524D\u7B5B\u9009\u7ED3\u679C"), /*#__PURE__*/React__default['default'].createElement("span", {
42599
+ className: styles$1.scopeDescription
42600
+ }, "\u7CFB\u7EDF\u5C06\u6309\u5217\u8868\u5F53\u524D\u67E5\u8BE2\u6761\u4EF6\u751F\u6210\u5BFC\u51FA\u6587\u4EF6")), /*#__PURE__*/React__default['default'].createElement("span", {
42601
+ className: styles$1.resultCount
42602
+ }, resultCount == null ? '以查询结果为准' : "".concat(resultCount, " \u6761")))), /*#__PURE__*/React__default['default'].createElement("section", {
42603
+ className: styles$1.section
42604
+ }, /*#__PURE__*/React__default['default'].createElement("div", {
42605
+ className: styles$1.sectionHeader
42606
+ }, /*#__PURE__*/React__default['default'].createElement("span", {
42607
+ className: styles$1.sectionIndex
42608
+ }, "2"), /*#__PURE__*/React__default['default'].createElement("span", null, /*#__PURE__*/React__default['default'].createElement("span", {
42609
+ className: styles$1.sectionTitle
42610
+ }, "\u9009\u62E9\u6587\u4EF6\u683C\u5F0F"), /*#__PURE__*/React__default['default'].createElement("span", {
42611
+ className: styles$1.sectionDescription
42612
+ }, "\u6839\u636E\u540E\u7EED\u4F7F\u7528\u573A\u666F\u9009\u62E9\u5408\u9002\u7684\u6587\u4EF6\u7C7B\u578B"))), /*#__PURE__*/React__default['default'].createElement(antd.Radio.Group, {
42613
+ className: styles$1.fileTypeGrid,
42614
+ value: quickFileType,
42615
+ onChange: function onChange(event) {
42616
+ return setQuickFileType(event.target.value);
42617
+ }
42618
+ }, /*#__PURE__*/React__default['default'].createElement(antd.Radio, {
42619
+ className: styles$1.fileTypeOption,
42620
+ value: "XLSX"
42621
+ }, /*#__PURE__*/React__default['default'].createElement("span", {
42622
+ className: styles$1.fileTypeContent
42623
+ }, /*#__PURE__*/React__default['default'].createElement("span", {
42624
+ className: styles$1.fileTypeName
42625
+ }, "XLSX"), /*#__PURE__*/React__default['default'].createElement("span", {
42626
+ className: styles$1.fileTypeDescription
42627
+ }, "\u4FDD\u7559\u8868\u683C\u683C\u5F0F\uFF0C\u9002\u5408\u67E5\u770B\u4E0E\u7F16\u8F91"))), /*#__PURE__*/React__default['default'].createElement(antd.Radio, {
42628
+ className: styles$1.fileTypeOption,
42629
+ value: "CSV"
42630
+ }, /*#__PURE__*/React__default['default'].createElement("span", {
42631
+ className: styles$1.fileTypeContent
42632
+ }, /*#__PURE__*/React__default['default'].createElement("span", {
42633
+ className: styles$1.fileTypeName
42634
+ }, "CSV"), /*#__PURE__*/React__default['default'].createElement("span", {
42635
+ className: styles$1.fileTypeDescription
42636
+ }, "\u6587\u4EF6\u66F4\u8F7B\u91CF\uFF0C\u9002\u5408\u7CFB\u7EDF\u95F4\u4EA4\u6362")))), /*#__PURE__*/React__default['default'].createElement(antd.Alert, {
42637
+ className: styles$1.exportAlert,
42638
+ type: resultCount === 0 ? 'warning' : 'info',
42639
+ showIcon: true,
42640
+ message: resultCount === 0 ? '当前查询结果为空,暂时无法创建导出任务。' : '快速导出使用系统默认字段;创建后可在任务中心查看进度并下载文件。'
42641
+ }))));
42642
+ return /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, (showQuickExport || showTemplateExport) && (/*#__PURE__*/React__default['default'].createElement(antd.Dropdown, {
42643
+ trigger: ['hover', 'click'],
42644
+ overlay: /*#__PURE__*/React__default['default'].createElement(antd.Menu, null, showQuickExport && (/*#__PURE__*/React__default['default'].createElement(antd.Menu.Item, {
42645
+ key: "quick",
42646
+ onClick: function onClick() {
42647
+ return openExport('QUICK');
42648
+ }
42649
+ }, "\u5FEB\u901F\u5BFC\u51FA")), showTemplateExport && (/*#__PURE__*/React__default['default'].createElement(antd.Menu.Item, {
42650
+ key: "template",
42651
+ onClick: function onClick() {
42652
+ return openExport('TEMPLATE');
42653
+ }
42654
+ }, "\u6309\u6A21\u677F\u5BFC\u51FA")))
42655
+ }, /*#__PURE__*/React__default['default'].createElement(antd.Button, {
42656
+ loading: exporting || Boolean(routeLoading)
42657
+ }, "\u5BFC\u51FA ", /*#__PURE__*/React__default['default'].createElement(icons.DownOutlined, null)))), context && (/*#__PURE__*/React__default['default'].createElement(TemplatePicker, {
42658
+ visible: pickerVisible,
42659
+ context: context,
42660
+ services: services,
42661
+ onCancel: function onCancel() {
42662
+ return setPickerVisible(false);
42663
+ },
42664
+ onConfirm: function () {
42665
+ var _onConfirm = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(templateCode, fileType) {
42666
+ return _regenerator().w(function (_context4) {
42667
+ while (1) switch (_context4.n) {
42668
+ case 0:
42669
+ if (context) {
42670
+ _context4.n = 1;
42671
+ break;
42672
+ }
42673
+ return _context4.a(2);
42674
+ case 1:
42675
+ setPickerVisible(false);
42676
+ _context4.n = 2;
42677
+ return createTask(context, services.templateExport, {
42678
+ templateCode: templateCode
42679
+ }, fileType);
42680
+ case 2:
42681
+ return _context4.a(2);
42682
+ }
42683
+ }, _callee4);
42684
+ }));
42685
+ function onConfirm(_x4, _x5) {
42686
+ return _onConfirm.apply(this, arguments);
42687
+ }
42688
+ return onConfirm;
42689
+ }(),
42690
+ documentName: config.documentName,
42691
+ resultCount: resultCount
42692
+ })), quickExportModal);
42693
+ };
42694
+
42695
+ var css_248z$C = ".index-module_importModal__1JaEc .ant-modal {\n top: 32px;\n max-width: calc(100vw - 32px);\n padding-bottom: 24px;\n}\n.index-module_importModal__1JaEc .ant-modal-content {\n overflow: hidden;\n border-radius: 8px;\n box-shadow: 0 12px 40px rgba(31, 35, 41, 0.18);\n}\n.index-module_importModal__1JaEc .ant-modal-header {\n padding: 18px 24px;\n border-bottom-color: #eef0f3;\n}\n.index-module_importModal__1JaEc .ant-modal-body {\n max-height: calc(100vh - 196px);\n padding: 0;\n overflow-y: auto;\n background: #f7f8fa;\n}\n.index-module_importModal__1JaEc .ant-modal-footer {\n padding: 14px 24px;\n border-top-color: #eef0f3;\n}\n.index-module_importModal__1JaEc .ant-modal-close-x {\n height: 76px;\n line-height: 76px;\n}\n.index-module_modalTitle__3d39a {\n display: flex;\n align-items: center;\n min-height: 40px;\n}\n.index-module_modalTitleIcon__2AtL9 {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 40px;\n height: 40px;\n margin-right: 12px;\n color: #1677ff;\n font-size: 20px;\n background: #eaf3ff;\n border-radius: 8px;\n}\n.index-module_modalTitleText__2UW-U,\n.index-module_modalTitleDescription__1Qcq4,\n.index-module_sectionTitle__qZI6w,\n.index-module_sectionDescription__3E7Zk {\n display: block;\n}\n.index-module_modalTitleText__2UW-U {\n color: #1f2329;\n font-weight: 600;\n font-size: 16px;\n line-height: 22px;\n}\n.index-module_modalTitleDescription__1Qcq4 {\n margin-top: 2px;\n color: #8f959e;\n font-weight: 400;\n font-size: 12px;\n line-height: 18px;\n}\n.index-module_stepsPanel__MuG00 {\n padding: 18px 112px;\n background: #fff;\n border-bottom: 1px solid #eef0f3;\n}\n.index-module_form__bTCme {\n padding: 16px 24px 24px;\n}\n.index-module_section__BJBpD {\n margin-bottom: 16px;\n padding: 18px 20px;\n background: #fff;\n border: 1px solid #e8eaed;\n border-radius: 8px;\n}\n.index-module_sectionHeader__1h2gs {\n display: flex;\n align-items: flex-start;\n margin-bottom: 16px;\n}\n.index-module_sectionIndex__24-YU {\n display: inline-flex;\n flex: 0 0 auto;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n margin-right: 10px;\n color: #1677ff;\n font-weight: 600;\n font-size: 13px;\n background: #eaf3ff;\n border-radius: 50%;\n}\n.index-module_sectionTitle__qZI6w {\n color: #1f2329;\n font-weight: 600;\n font-size: 15px;\n line-height: 22px;\n}\n.index-module_sectionDescription__3E7Zk {\n margin-top: 2px;\n color: #8f959e;\n font-size: 12px;\n line-height: 18px;\n}\n.index-module_templateRow__rfmnk {\n display: flex;\n align-items: flex-end;\n}\n.index-module_templateField__1_mqV {\n flex: 1;\n margin-bottom: 12px;\n}\n.index-module_downloadButton__2qPVb {\n flex: 0 0 auto;\n margin-bottom: 12px;\n margin-left: 12px;\n}\n.index-module_templateSummary__2r3lb .ant-descriptions-item-label {\n color: #646a73;\n background: #f7f8fa;\n}\n.index-module_templateSummary__2r3lb .ant-descriptions-item-content {\n color: #1f2329;\n}\n.index-module_settingGrid__eJkC9 {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 12px;\n}\n.index-module_settingItem__3WPVC {\n min-width: 0;\n margin-bottom: 0;\n padding: 14px 16px;\n background: #f7f8fa;\n border-radius: 6px;\n}\n.index-module_settingItem__3WPVC .ant-form-item-label {\n padding-bottom: 10px;\n font-weight: 500;\n}\n.index-module_radioGroup__2Jr25 {\n display: flex;\n flex-wrap: wrap;\n gap: 10px 16px;\n}\n.index-module_radioGroup__2Jr25 .ant-radio-wrapper {\n margin-right: 0;\n}\n.index-module_uploadSection__14gcF {\n margin-bottom: 0;\n}\n.index-module_uploadDragger__1WiN- .ant-upload.ant-upload-drag {\n min-height: 156px;\n background: #fbfcfd;\n border-color: #c9cdd4;\n border-radius: 8px;\n}\n.index-module_uploadDragger__1WiN- .ant-upload.ant-upload-drag:hover {\n background: #f5f9ff;\n border-color: #1677ff;\n}\n.index-module_uploadDragger__1WiN- .ant-upload.ant-upload-drag .ant-upload {\n padding: 24px;\n}\n.index-module_uploadDragger__1WiN- .ant-upload-drag-icon {\n margin-bottom: 8px;\n}\n.index-module_uploadDragger__1WiN- .ant-upload-drag-icon .anticon {\n color: #1677ff;\n font-size: 42px;\n}\n.index-module_uploadDragger__1WiN- .ant-upload-text {\n margin-bottom: 4px;\n color: #1f2329;\n font-weight: 500;\n font-size: 14px;\n}\n.index-module_uploadDragger__1WiN- .ant-upload-hint {\n color: #8f959e;\n font-size: 12px;\n}\n.index-module_uploadDragger__1WiN- .ant-upload-list-item {\n margin-top: 10px;\n}\n.index-module_uploadAlert__3cAKI {\n margin-top: 12px;\n border-color: #d9e8ff;\n border-radius: 6px;\n}\n.index-module_progressPanel__q541a {\n margin-top: 14px;\n padding: 12px 14px 8px;\n background: #f7f8fa;\n border-radius: 6px;\n}\n.index-module_progressTitle__2LZCd {\n margin-bottom: 6px;\n color: #646a73;\n font-size: 13px;\n}\n.index-module_formFooter__gpQVO {\n position: sticky;\n bottom: 0;\n z-index: 1;\n display: flex;\n justify-content: flex-end;\n margin: 16px -24px 0;\n padding: 14px 24px;\n background: #fff;\n border-top: 1px solid #eef0f3;\n gap: 8px;\n}\n.index-module_preview__31wWm {\n padding: 16px 24px 0;\n}\n.index-module_previewCard__1yjnj {\n min-height: 280px;\n padding: 18px 20px;\n background: #fff;\n border: 1px solid #e8eaed;\n border-radius: 8px;\n}\n.index-module_previewSummary__1ZXyN .ant-descriptions-item-label {\n color: #646a73;\n background: #f7f8fa;\n}\n.index-module_previewSummary__1ZXyN .ant-descriptions-item-content {\n color: #1f2329;\n font-weight: 500;\n}\n.index-module_previewAlert__1Iy7j,\n.index-module_previewTable__Jn5wH {\n margin-top: 12px;\n}\n.index-module_previewFooter__3kH-h {\n justify-content: space-between;\n}\n@media (max-width: 768px) {\n .index-module_stepsPanel__MuG00 {\n padding: 16px 32px;\n }\n .index-module_form__bTCme {\n padding-right: 16px;\n padding-left: 16px;\n }\n .index-module_preview__31wWm {\n padding-right: 16px;\n padding-left: 16px;\n }\n .index-module_section__BJBpD {\n padding: 16px;\n }\n .index-module_settingGrid__eJkC9 {\n grid-template-columns: 1fr;\n }\n .index-module_formFooter__gpQVO {\n margin-right: -16px;\n margin-left: -16px;\n padding-right: 16px;\n padding-left: 16px;\n }\n}\n@media (max-width: 576px) {\n .index-module_modalTitleDescription__1Qcq4 {\n display: none;\n }\n .index-module_stepsPanel__MuG00 {\n padding: 14px 20px;\n }\n .index-module_templateRow__rfmnk {\n display: block;\n }\n .index-module_downloadButton__2qPVb {\n margin-top: 0;\n margin-bottom: 12px;\n margin-left: 0;\n }\n}\n";
42696
+ var styles$2 = {"importModal":"index-module_importModal__1JaEc","modalTitle":"index-module_modalTitle__3d39a","modalTitleIcon":"index-module_modalTitleIcon__2AtL9","modalTitleText":"index-module_modalTitleText__2UW-U","modalTitleDescription":"index-module_modalTitleDescription__1Qcq4","sectionTitle":"index-module_sectionTitle__qZI6w","sectionDescription":"index-module_sectionDescription__3E7Zk","stepsPanel":"index-module_stepsPanel__MuG00","form":"index-module_form__bTCme","section":"index-module_section__BJBpD","sectionHeader":"index-module_sectionHeader__1h2gs","sectionIndex":"index-module_sectionIndex__24-YU","templateRow":"index-module_templateRow__rfmnk","templateField":"index-module_templateField__1_mqV","downloadButton":"index-module_downloadButton__2qPVb","templateSummary":"index-module_templateSummary__2r3lb","settingGrid":"index-module_settingGrid__eJkC9","settingItem":"index-module_settingItem__3WPVC","radioGroup":"index-module_radioGroup__2Jr25","uploadSection":"index-module_uploadSection__14gcF","uploadDragger":"index-module_uploadDragger__1WiN-","uploadAlert":"index-module_uploadAlert__3cAKI","progressPanel":"index-module_progressPanel__q541a","progressTitle":"index-module_progressTitle__2LZCd","formFooter":"index-module_formFooter__gpQVO","preview":"index-module_preview__31wWm","previewCard":"index-module_previewCard__1yjnj","previewSummary":"index-module_previewSummary__1ZXyN","previewAlert":"index-module_previewAlert__1Iy7j","previewTable":"index-module_previewTable__Jn5wH","previewFooter":"index-module_previewFooter__3kH-h"};
42697
+ styleInject(css_248z$C);
42698
+
42699
+ var Preview = function Preview(_ref) {
42700
+ var _preview$totalCount, _preview$failedCount, _preview$categoryCoun;
42701
+ var preview = _ref.preview,
42702
+ onBack = _ref.onBack,
42703
+ onExecute = _ref.onExecute,
42704
+ onDownloadErrorFile = _ref.onDownloadErrorFile,
42705
+ executing = _ref.executing,
42706
+ downloadingErrorFile = _ref.downloadingErrorFile;
42707
+ var errorTypes = Array.isArray(preview === null || preview === void 0 ? void 0 : preview.errorCategories) ? preview.errorCategories : [];
42708
+ var totalCount = Number((_preview$totalCount = preview === null || preview === void 0 ? void 0 : preview.totalCount) !== null && _preview$totalCount !== void 0 ? _preview$totalCount : 0);
42709
+ var failedCount = Number((_preview$failedCount = preview === null || preview === void 0 ? void 0 : preview.failedCount) !== null && _preview$failedCount !== void 0 ? _preview$failedCount : 0);
42710
+ var errorTypeCount = Number((_preview$categoryCoun = preview === null || preview === void 0 ? void 0 : preview.categoryCount) !== null && _preview$categoryCoun !== void 0 ? _preview$categoryCoun : errorTypes.length);
42711
+ var hasErrors = failedCount > 0;
42712
+ var canExecute = (preview === null || preview === void 0 ? void 0 : preview.canExecute) === true;
42713
+ var errorFileAvailable = (preview === null || preview === void 0 ? void 0 : preview.errorFileAvailable) === true;
42714
+ var handleExecute = function handleExecute() {
42715
+ if (hasErrors && canExecute) {
42716
+ antd.Modal.confirm({
42717
+ title: '确认导入合格业务单据?',
42718
+ content: '异常所属业务单据将整单跳过,仅导入其余合格业务单据。',
42719
+ okText: '确认导入',
42720
+ cancelText: '取消',
42721
+ onOk: onExecute
42722
+ });
42723
+ return;
42724
+ }
42725
+ onExecute();
42726
+ };
42727
+ return /*#__PURE__*/React__default['default'].createElement("div", {
42728
+ className: styles$2.preview
42729
+ }, /*#__PURE__*/React__default['default'].createElement("section", {
42730
+ className: styles$2.previewCard
42731
+ }, /*#__PURE__*/React__default['default'].createElement("div", {
42732
+ className: styles$2.sectionHeader
42733
+ }, /*#__PURE__*/React__default['default'].createElement("span", {
42734
+ className: styles$2.sectionIndex
42735
+ }, /*#__PURE__*/React__default['default'].createElement(icons.CheckOutlined, null)), /*#__PURE__*/React__default['default'].createElement("span", null, /*#__PURE__*/React__default['default'].createElement("span", {
42736
+ className: styles$2.sectionTitle
42737
+ }, "\u6570\u636E\u6821\u9A8C\u7ED3\u679C"), /*#__PURE__*/React__default['default'].createElement("span", {
42738
+ className: styles$2.sectionDescription
42739
+ }, "\u8BF7\u786E\u8BA4\u6821\u9A8C\u7ED3\u679C\u540E\u518D\u6267\u884C\u6B63\u5F0F\u5BFC\u5165"))), /*#__PURE__*/React__default['default'].createElement(antd.Descriptions, {
42740
+ bordered: true,
42741
+ size: "small",
42742
+ column: {
42743
+ xs: 1,
42744
+ sm: 3
42745
+ },
42746
+ className: styles$2.previewSummary
42747
+ }, /*#__PURE__*/React__default['default'].createElement(antd.Descriptions.Item, {
42748
+ label: "\u603B\u660E\u7EC6\u6570"
42749
+ }, totalCount), /*#__PURE__*/React__default['default'].createElement(antd.Descriptions.Item, {
42750
+ label: "\u5F02\u5E38\u660E\u7EC6\u6570"
42751
+ }, failedCount), /*#__PURE__*/React__default['default'].createElement(antd.Descriptions.Item, {
42752
+ label: "\u9519\u8BEF\u7C7B\u578B\u6570"
42753
+ }, errorTypeCount)), hasErrors && (/*#__PURE__*/React__default['default'].createElement(antd.Alert, {
42754
+ className: styles$2.previewAlert,
42755
+ type: "warning",
42756
+ showIcon: true,
42757
+ message: "\u5B58\u5728 ".concat(failedCount, " \u6761\u5F02\u5E38\u660E\u7EC6"),
42758
+ description: canExecute ? '异常所属业务单据将整单阻断,其余合格业务单据可继续导入。' : '当前没有可执行的合格业务单据,请下载错误文件并重新上传校验。'
42759
+ })), errorTypes.length > 0 && (/*#__PURE__*/React__default['default'].createElement(antd.Table, {
42760
+ className: styles$2.previewTable,
42761
+ rowKey: "reason",
42762
+ size: "small",
42763
+ pagination: false,
42764
+ dataSource: errorTypes,
42765
+ columns: [{
42766
+ title: '错误原因',
42767
+ dataIndex: 'reason'
42768
+ }, {
42769
+ title: '异常明细数',
42770
+ dataIndex: 'count',
42771
+ width: 120
42772
+ }]
42773
+ }))), /*#__PURE__*/React__default['default'].createElement("div", {
42774
+ className: "".concat(styles$2.formFooter, " ").concat(styles$2.previewFooter)
42775
+ }, /*#__PURE__*/React__default['default'].createElement("div", null, errorFileAvailable && (/*#__PURE__*/React__default['default'].createElement(antd.Button, {
42776
+ loading: downloadingErrorFile,
42777
+ onClick: onDownloadErrorFile
42778
+ }, "\u4E0B\u8F7D\u9519\u8BEF\u6587\u4EF6"))), /*#__PURE__*/React__default['default'].createElement(antd.Space, null, /*#__PURE__*/React__default['default'].createElement(antd.Button, {
42779
+ onClick: onBack
42780
+ }, "\u4E0A\u4E00\u6B65"), /*#__PURE__*/React__default['default'].createElement(antd.Button, {
42781
+ type: "primary",
42782
+ loading: executing,
42783
+ disabled: !canExecute,
42784
+ onClick: handleExecute
42785
+ }, "\u5F00\u59CB\u5BFC\u5165"))));
42786
+ };
42787
+
42788
+ var POLL_INTERVAL_MS = 1000;
42789
+ var MAX_FILE_SIZE = 10 * 1024 * 1024;
42790
+ var PREFERENCE_KEY = 'import-export:last-import-preference';
42791
+ var SUPPORTED_ERROR_HANDLING_MODE = 'PARTIAL_SUCCESS';
42792
+ var PREVIEW_EXPIRED_MESSAGE = '校验结果已过期,请重新上传并校验';
42793
+ var PREVIEW_CONSUMED_MESSAGE = '校验结果已执行或正在执行,请勿重复提交';
42794
+ var wait = function wait() {
42795
+ return new Promise(function (resolve) {
42796
+ return setTimeout(resolve, POLL_INTERVAL_MS);
42797
+ });
42798
+ };
42799
+ var operationErrorMessages = function operationErrorMessages(error) {
42800
+ var _error$data, _error$data2, _error$response, _error$response$data, _error$response2, _error$response2$data;
42801
+ return [error === null || error === void 0 ? void 0 : error.message, error === null || error === void 0 ? void 0 : error.msg, error === null || error === void 0 ? void 0 : (_error$data = error.data) === null || _error$data === void 0 ? void 0 : _error$data.message, error === null || error === void 0 ? void 0 : (_error$data2 = error.data) === null || _error$data2 === void 0 ? void 0 : _error$data2.msg, error === null || error === void 0 ? void 0 : (_error$response = error.response) === null || _error$response === void 0 ? void 0 : (_error$response$data = _error$response.data) === null || _error$response$data === void 0 ? void 0 : _error$response$data.message, error === null || error === void 0 ? void 0 : (_error$response2 = error.response) === null || _error$response2 === void 0 ? void 0 : (_error$response2$data = _error$response2.data) === null || _error$response2$data === void 0 ? void 0 : _error$response2$data.msg].filter(Boolean).map(String);
42802
+ };
42803
+ var isPreviewExpiredError = function isPreviewExpiredError(error) {
42804
+ return operationErrorMessages(error).some(function (text) {
42805
+ return text.includes(PREVIEW_EXPIRED_MESSAGE);
42806
+ });
42807
+ };
42808
+ var isPreviewConsumedError = function isPreviewConsumedError(error) {
42809
+ return operationErrorMessages(error).some(function (text) {
42810
+ return text.includes('已执行或正在执行') || text.includes('请勿重复提交');
42811
+ });
42812
+ };
42813
+ /**
42814
+ * 完成模板选择、文件上传、数据校验和正式导入的两步向导。
42815
+ */
42816
+ var ImportWizard = function ImportWizard(_ref) {
42817
+ var _selectedTemplate$fie, _selectedTemplate$fie2;
42818
+ var visible = _ref.visible,
42819
+ context = _ref.context,
42820
+ documentName = _ref.documentName,
42821
+ services = _ref.services,
42822
+ onClose = _ref.onClose,
42823
+ onTaskCreated = _ref.onTaskCreated;
42824
+ var _Form$useForm = antd.Form.useForm(),
42825
+ _Form$useForm2 = _slicedToArray(_Form$useForm, 1),
42826
+ form = _Form$useForm2[0];
42827
+ var _useState = React$1.useState(0),
42828
+ _useState2 = _slicedToArray(_useState, 2),
42829
+ step = _useState2[0],
42830
+ setStep = _useState2[1];
42831
+ var _useState3 = React$1.useState(false),
42832
+ _useState4 = _slicedToArray(_useState3, 2),
42833
+ parsing = _useState4[0],
42834
+ setParsing = _useState4[1];
42835
+ var _useState5 = React$1.useState(),
42836
+ _useState6 = _slicedToArray(_useState5, 2),
42837
+ preview = _useState6[0],
42838
+ setPreview = _useState6[1];
42839
+ var _useState7 = React$1.useState(false),
42840
+ _useState8 = _slicedToArray(_useState7, 2),
42841
+ executing = _useState8[0],
42842
+ setExecuting = _useState8[1];
42843
+ var _useState9 = React$1.useState([]),
42844
+ _useState0 = _slicedToArray(_useState9, 2),
42845
+ templates = _useState0[0],
42846
+ setTemplates = _useState0[1];
42847
+ var _useState1 = React$1.useState(false),
42848
+ _useState10 = _slicedToArray(_useState1, 2),
42849
+ downloading = _useState10[0],
42850
+ setDownloading = _useState10[1];
42851
+ var _useState11 = React$1.useState(false),
42852
+ _useState12 = _slicedToArray(_useState11, 2),
42853
+ downloadingErrorFile = _useState12[0],
42854
+ setDownloadingErrorFile = _useState12[1];
42855
+ var _useState13 = React$1.useState(),
42856
+ _useState14 = _slicedToArray(_useState13, 2),
42857
+ selectedTemplateCode = _useState14[0],
42858
+ setSelectedTemplateCode = _useState14[1];
42859
+ var _useState15 = React$1.useState(),
42860
+ _useState16 = _slicedToArray(_useState15, 2),
42861
+ selectedFile = _useState16[0],
42862
+ setSelectedFile = _useState16[1];
42863
+ var _useState17 = React$1.useState(''),
42864
+ _useState18 = _slicedToArray(_useState17, 2),
42865
+ fileName = _useState18[0],
42866
+ setFileName = _useState18[1];
42867
+ React$1.useEffect(function () {
42868
+ if (!visible) return;
42869
+ setStep(0);
42870
+ setPreview(undefined);
42871
+ setSelectedTemplateCode(undefined);
42872
+ setSelectedFile(undefined);
42873
+ setFileName('');
42874
+ setExecuting(false);
42875
+ setDownloadingErrorFile(false);
42876
+ var preference = {};
42877
+ try {
42878
+ preference = JSON.parse(localStorage.getItem(PREFERENCE_KEY) || '{}');
42879
+ } catch (error) {
42880
+ preference = {};
42881
+ }
42882
+ form.setFieldsValue({
42883
+ strategy: preference.strategy || 'UPSERT',
42884
+ errorHandlingMode: SUPPORTED_ERROR_HANDLING_MODE
42885
+ });
42886
+ services.queryTemplates({
42887
+ operationType: 'IMPORT',
42888
+ businessFunctionCode: context.businessFunctionCode,
42889
+ enabled: true,
42890
+ currentPage: 1,
42891
+ pageSize: 100
42892
+ }).then(function (response) {
42893
+ var loaded = getItems(response);
42894
+ setTemplates(loaded);
42895
+ var defaultTemplate = loaded.find(function (template) {
42896
+ return template.defaultFlag && template.enabled !== false;
42897
+ });
42898
+ if (!defaultTemplate) {
42899
+ antd.message.error('当前业务功能未配置启用的默认导入模板');
42900
+ return;
42901
+ }
42902
+ setSelectedTemplateCode(defaultTemplate.templateCode);
42903
+ form.setFieldsValue({
42904
+ templateCode: defaultTemplate.templateCode
42905
+ });
42906
+ }).catch(function () {
42907
+ return antd.message.error('导入模板加载失败,请稍后重试');
42908
+ });
42909
+ }, [visible, context.businessFunctionCode, form, services]);
42910
+ var expirePreview = React$1.useCallback(function () {
42911
+ setPreview(undefined);
42912
+ setStep(0);
42913
+ setSelectedFile(undefined);
42914
+ setFileName('');
42915
+ setExecuting(false);
42916
+ setDownloadingErrorFile(false);
42917
+ antd.message.warning(PREVIEW_EXPIRED_MESSAGE);
42918
+ }, []);
42919
+ React$1.useEffect(function () {
42920
+ if (!visible || step !== 1) return undefined;
42921
+ var expiresAt = Number(preview === null || preview === void 0 ? void 0 : preview.expiresAt);
42922
+ if (!Number.isFinite(expiresAt) || expiresAt <= 0) return undefined;
42923
+ var remaining = expiresAt - Date.now();
42924
+ if (remaining <= 0) {
42925
+ expirePreview();
42926
+ return undefined;
42927
+ }
42928
+ var timer = window.setTimeout(expirePreview, remaining);
42929
+ return function () {
42930
+ return window.clearTimeout(timer);
42931
+ };
42932
+ }, [visible, step, preview === null || preview === void 0 ? void 0 : preview.expiresAt, expirePreview]);
42933
+ var waitForPreviewTask = /*#__PURE__*/function () {
42934
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(taskId, previewResult) {
42935
+ var task, merged, _t, _t2;
42936
+ return _regenerator().w(function (_context) {
42937
+ while (1) switch (_context.n) {
42938
+ case 0:
42939
+ _t = normalizeTask;
42940
+ _t2 = unwrapResponse;
42941
+ _context.n = 1;
42942
+ return services.queryTask(context.serviceContext, taskId);
42943
+ case 1:
42944
+ task = _t(_t2(_context.v));
42945
+ if (task.taskStatus) {
42946
+ _context.n = 2;
42947
+ break;
42948
+ }
42949
+ throw new Error((task === null || task === void 0 ? void 0 : task.msg) || 'preview task status is missing');
42950
+ case 2:
42951
+ merged = _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, previewResult), task.result || {}), task), {}, {
42952
+ taskId: taskId,
42953
+ serviceContext: context.serviceContext
42954
+ });
42955
+ setPreview(merged);
42956
+ onTaskCreated === null || onTaskCreated === void 0 ? void 0 : onTaskCreated(task);
42957
+ if (!(task.stage === 'PREVIEW_COMPLETED')) {
42958
+ _context.n = 3;
42959
+ break;
42960
+ }
42961
+ if (!['PASSED', 'COMPLETED_WITH_ERRORS', 'SUCCESS', 'PARTIAL_SUCCESS'].includes(task.taskStatus)) {
42962
+ _context.n = 3;
42963
+ break;
42964
+ }
42965
+ return _context.a(2, merged);
42966
+ case 3:
42967
+ if (!(task.taskStatus === 'FAILED' || task.taskStatus === 'CANCELLED')) {
42968
+ _context.n = 4;
42969
+ break;
42970
+ }
42971
+ throw new Error(task.errorMessage || 'preview task failed');
42972
+ case 4:
42973
+ _context.n = 5;
42974
+ return wait();
42975
+ case 5:
42976
+ _context.n = 0;
42977
+ break;
42978
+ case 6:
42979
+ return _context.a(2);
42980
+ }
42981
+ }, _callee);
42982
+ }));
42983
+ return function waitForPreviewTask(_x, _x2) {
42984
+ return _ref2.apply(this, arguments);
42985
+ };
42986
+ }();
42987
+ var selectFile = function selectFile(file) {
42988
+ var _String$split$pop;
42989
+ var extension = (_String$split$pop = String((file === null || file === void 0 ? void 0 : file.name) || '').split('.').pop()) === null || _String$split$pop === void 0 ? void 0 : _String$split$pop.toLowerCase();
42990
+ if (!['xlsx', 'xls', 'csv'].includes(extension || '')) {
42991
+ antd.message.warning('仅支持 .xlsx、.xls、.csv 文件');
42992
+ setSelectedFile(undefined);
42993
+ return false;
42994
+ }
42995
+ if (Number((file === null || file === void 0 ? void 0 : file.size) || 0) > MAX_FILE_SIZE) {
42996
+ antd.message.warning('文件不能超过 10MB');
42997
+ setSelectedFile(undefined);
42998
+ return false;
42999
+ }
43000
+ setSelectedFile(file);
43001
+ setFileName((file === null || file === void 0 ? void 0 : file.name) || '');
43002
+ setPreview(undefined);
43003
+ return false;
43004
+ };
43005
+ var parse = /*#__PURE__*/function () {
43006
+ var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {
43007
+ var values, uploaded, objectKey, response, created, completed, _t3, _t4;
43008
+ return _regenerator().w(function (_context2) {
43009
+ while (1) switch (_context2.p = _context2.n) {
43010
+ case 0:
43011
+ if (selectedFile) {
43012
+ _context2.n = 1;
43013
+ break;
43014
+ }
43015
+ antd.message.warning('请先选择导入文件');
43016
+ return _context2.a(2);
43017
+ case 1:
43018
+ setParsing(true);
43019
+ _context2.p = 2;
43020
+ _context2.n = 3;
43021
+ return form.validateFields(['templateCode', 'strategy', 'errorHandlingMode']);
43022
+ case 3:
43023
+ values = _context2.v;
43024
+ localStorage.setItem(PREFERENCE_KEY, JSON.stringify({
43025
+ strategy: values.strategy,
43026
+ errorHandlingMode: SUPPORTED_ERROR_HANDLING_MODE
43027
+ }));
43028
+ _t3 = unwrapResponse;
43029
+ _context2.n = 4;
43030
+ return services.uploadFile(selectedFile);
43031
+ case 4:
43032
+ uploaded = _t3(_context2.v);
43033
+ objectKey = (uploaded === null || uploaded === void 0 ? void 0 : uploaded.objectKey) || (uploaded === null || uploaded === void 0 ? void 0 : uploaded.name) || (uploaded === null || uploaded === void 0 ? void 0 : uploaded.url);
43034
+ if (objectKey) {
43035
+ _context2.n = 5;
43036
+ break;
43037
+ }
43038
+ throw new Error('uploaded objectKey is missing');
43039
+ case 5:
43040
+ _context2.n = 6;
43041
+ return services.previewImport(context.serviceContext, {
43042
+ businessFunctionCode: context.businessFunctionCode,
43043
+ templateCode: values.templateCode,
43044
+ importStrategy: values.strategy,
43045
+ errorHandlingMode: SUPPORTED_ERROR_HANDLING_MODE,
43046
+ objectKey: objectKey,
43047
+ sourceFileName: selectedFile.name
43048
+ });
43049
+ case 6:
43050
+ response = _context2.v;
43051
+ if (!isConcurrentLimit(response)) {
43052
+ _context2.n = 7;
43053
+ break;
43054
+ }
43055
+ antd.message.warning('当前导入导出任务较多,请稍后重试');
43056
+ return _context2.a(2, false);
43057
+ case 7:
43058
+ created = unwrapResponse(response);
43059
+ if (created === null || created === void 0 ? void 0 : created.taskId) {
43060
+ _context2.n = 8;
43061
+ break;
43062
+ }
43063
+ throw new Error((created === null || created === void 0 ? void 0 : created.msg) || 'preview taskId is missing');
43064
+ case 8:
43065
+ setPreview(created);
43066
+ onTaskCreated === null || onTaskCreated === void 0 ? void 0 : onTaskCreated(normalizeTask(_objectSpread2(_objectSpread2({
43067
+ taskType: 'IMPORT_VALIDATION',
43068
+ taskStatus: 'PENDING'
43069
+ }, created), {}, {
43070
+ serviceContext: context.serviceContext
43071
+ })));
43072
+ _context2.n = 9;
43073
+ return waitForPreviewTask(created.taskId, created);
43074
+ case 9:
43075
+ completed = _context2.v;
43076
+ setPreview(completed);
43077
+ setStep(1);
43078
+ _context2.n = 12;
43079
+ break;
43080
+ case 10:
43081
+ _context2.p = 10;
43082
+ _t4 = _context2.v;
43083
+ if (!isConcurrentLimit(_t4)) {
43084
+ _context2.n = 11;
43085
+ break;
43086
+ }
43087
+ antd.message.warning('当前导入导出任务较多,请稍后重试');
43088
+ return _context2.a(2, false);
43089
+ case 11:
43090
+ antd.message.error('文件解析失败,请稍后重试');
43091
+ case 12:
43092
+ _context2.p = 12;
43093
+ setParsing(false);
43094
+ return _context2.f(12);
43095
+ case 13:
43096
+ return _context2.a(2, false);
43097
+ }
43098
+ }, _callee2, null, [[2, 10, 12, 13]]);
43099
+ }));
43100
+ return function parse() {
43101
+ return _ref3.apply(this, arguments);
43102
+ };
43103
+ }();
43104
+ var selectedTemplate = templates.find(function (item) {
43105
+ return item.templateCode === selectedTemplateCode;
43106
+ });
43107
+ var personalTemplates = templates.filter(function (item) {
43108
+ return item.visibility === 'PERSONAL';
43109
+ });
43110
+ var publicTemplates = templates.filter(function (item) {
43111
+ return item.visibility !== 'PERSONAL';
43112
+ });
43113
+ var selectedTemplateFieldCount = (_selectedTemplate$fie = selectedTemplate === null || selectedTemplate === void 0 ? void 0 : selectedTemplate.fieldCount) !== null && _selectedTemplate$fie !== void 0 ? _selectedTemplate$fie : selectedTemplate === null || selectedTemplate === void 0 ? void 0 : (_selectedTemplate$fie2 = selectedTemplate.fieldNames) === null || _selectedTemplate$fie2 === void 0 ? void 0 : _selectedTemplate$fie2.length;
43114
+ var execute = /*#__PURE__*/function () {
43115
+ var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {
43116
+ var expiresAt, submitted, _preview$result, previewId, res, _t5;
43117
+ return _regenerator().w(function (_context3) {
43118
+ while (1) switch (_context3.p = _context3.n) {
43119
+ case 0:
43120
+ expiresAt = Number(preview === null || preview === void 0 ? void 0 : preview.expiresAt);
43121
+ if (!(Number.isFinite(expiresAt) && expiresAt <= Date.now())) {
43122
+ _context3.n = 1;
43123
+ break;
43124
+ }
43125
+ expirePreview();
43126
+ return _context3.a(2);
43127
+ case 1:
43128
+ if (!((preview === null || preview === void 0 ? void 0 : preview.canExecute) !== true)) {
43129
+ _context3.n = 2;
43130
+ break;
43131
+ }
43132
+ antd.message.warning('当前校验结果没有可执行的合格业务单据');
43133
+ return _context3.a(2);
43134
+ case 2:
43135
+ submitted = false;
43136
+ setExecuting(true);
43137
+ _context3.p = 3;
43138
+ previewId = (preview === null || preview === void 0 ? void 0 : preview.previewId) || (preview === null || preview === void 0 ? void 0 : (_preview$result = preview.result) === null || _preview$result === void 0 ? void 0 : _preview$result.previewId);
43139
+ if (previewId) {
43140
+ _context3.n = 4;
43141
+ break;
43142
+ }
43143
+ throw new Error('previewId is missing');
43144
+ case 4:
43145
+ submitted = true;
43146
+ _context3.n = 5;
43147
+ return services.executeImport(context.serviceContext, {
43148
+ previewId: previewId
43149
+ });
43150
+ case 5:
43151
+ res = _context3.v;
43152
+ if (!isConcurrentLimit(res)) {
43153
+ _context3.n = 6;
43154
+ break;
43155
+ }
43156
+ antd.message.warning('当前导入导出任务较多,请稍后重试');
43157
+ return _context3.a(2);
43158
+ case 6:
43159
+ onTaskCreated === null || onTaskCreated === void 0 ? void 0 : onTaskCreated(normalizeTask(_objectSpread2(_objectSpread2({
43160
+ taskType: 'IMPORT_EXECUTION',
43161
+ taskStatus: 'PENDING'
43162
+ }, unwrapResponse(res)), {}, {
43163
+ serviceContext: context.serviceContext
43164
+ })));
43165
+ antd.message.success('已创建导入任务');
43166
+ onClose();
43167
+ _context3.n = 12;
43168
+ break;
43169
+ case 7:
43170
+ _context3.p = 7;
43171
+ _t5 = _context3.v;
43172
+ if (!isConcurrentLimit(_t5)) {
43173
+ _context3.n = 8;
43174
+ break;
43175
+ }
43176
+ antd.message.warning('当前导入导出任务较多,请稍后重试');
43177
+ return _context3.a(2);
43178
+ case 8:
43179
+ if (!isPreviewExpiredError(_t5)) {
43180
+ _context3.n = 9;
43181
+ break;
43182
+ }
43183
+ expirePreview();
43184
+ return _context3.a(2);
43185
+ case 9:
43186
+ if (!isPreviewConsumedError(_t5)) {
43187
+ _context3.n = 10;
43188
+ break;
43189
+ }
43190
+ setPreview(function (current) {
43191
+ return current ? _objectSpread2(_objectSpread2({}, current), {}, {
43192
+ canExecute: false
43193
+ }) : current;
43194
+ });
43195
+ antd.message.error(PREVIEW_CONSUMED_MESSAGE);
43196
+ return _context3.a(2);
43197
+ case 10:
43198
+ if (!submitted) {
43199
+ _context3.n = 11;
43200
+ break;
43201
+ }
43202
+ setPreview(function (current) {
43203
+ return current ? _objectSpread2(_objectSpread2({}, current), {}, {
43204
+ canExecute: false
43205
+ }) : current;
43206
+ });
43207
+ antd.message.error('执行结果待核对,请勿重复提交,请在任务中心核对业务数据');
43208
+ return _context3.a(2);
43209
+ case 11:
43210
+ antd.message.error('执行导入失败,请重新上传并校验');
43211
+ case 12:
43212
+ _context3.p = 12;
43213
+ setExecuting(false);
43214
+ return _context3.f(12);
43215
+ case 13:
43216
+ return _context3.a(2);
43217
+ }
43218
+ }, _callee3, null, [[3, 7, 12, 13]]);
43219
+ }));
43220
+ return function execute() {
43221
+ return _ref4.apply(this, arguments);
43222
+ };
43223
+ }();
43224
+ var downloadValidationErrorFile = /*#__PURE__*/function () {
43225
+ var _ref5 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {
43226
+ var expiresAt, _preview$result2, previewId, response, result, link, _t6;
43227
+ return _regenerator().w(function (_context4) {
43228
+ while (1) switch (_context4.p = _context4.n) {
43229
+ case 0:
43230
+ expiresAt = Number(preview === null || preview === void 0 ? void 0 : preview.expiresAt);
43231
+ if (!(Number.isFinite(expiresAt) && expiresAt <= Date.now())) {
43232
+ _context4.n = 1;
43233
+ break;
43234
+ }
43235
+ expirePreview();
43236
+ return _context4.a(2);
43237
+ case 1:
43238
+ if (!((preview === null || preview === void 0 ? void 0 : preview.errorFileAvailable) !== true)) {
43239
+ _context4.n = 2;
43240
+ break;
43241
+ }
43242
+ antd.message.warning('当前校验结果没有可下载的错误文件');
43243
+ return _context4.a(2);
43244
+ case 2:
43245
+ setDownloadingErrorFile(true);
43246
+ _context4.p = 3;
43247
+ previewId = (preview === null || preview === void 0 ? void 0 : preview.previewId) || (preview === null || preview === void 0 ? void 0 : (_preview$result2 = preview.result) === null || _preview$result2 === void 0 ? void 0 : _preview$result2.previewId);
43248
+ if (previewId) {
43249
+ _context4.n = 4;
43250
+ break;
43251
+ }
43252
+ throw new Error('previewId is missing');
43253
+ case 4:
43254
+ _context4.n = 5;
43255
+ return services.downloadValidationErrorFile(context.serviceContext, {
43256
+ previewId: previewId
43257
+ });
43258
+ case 5:
43259
+ response = _context4.v;
43260
+ result = unwrapResponse(response);
43261
+ if (result === null || result === void 0 ? void 0 : result.fileUrl) {
43262
+ _context4.n = 6;
43263
+ break;
43264
+ }
43265
+ throw new Error('validation error fileUrl is missing');
43266
+ case 6:
43267
+ link = document.createElement('a');
43268
+ link.href = result.fileUrl;
43269
+ link.download = "".concat(fileName || '导入文件', "-\u9519\u8BEF\u6570\u636E.xlsx");
43270
+ document.body.appendChild(link);
43271
+ link.click();
43272
+ document.body.removeChild(link);
43273
+ antd.message.success('错误文件下载已开始');
43274
+ _context4.n = 9;
43275
+ break;
43276
+ case 7:
43277
+ _context4.p = 7;
43278
+ _t6 = _context4.v;
43279
+ if (!isPreviewExpiredError(_t6)) {
43280
+ _context4.n = 8;
43281
+ break;
43282
+ }
43283
+ expirePreview();
43284
+ return _context4.a(2);
43285
+ case 8:
43286
+ antd.message.error('错误文件下载失败,请稍后重试');
43287
+ case 9:
43288
+ _context4.p = 9;
43289
+ setDownloadingErrorFile(false);
43290
+ return _context4.f(9);
43291
+ case 10:
43292
+ return _context4.a(2);
43293
+ }
43294
+ }, _callee4, null, [[3, 7, 9, 10]]);
43295
+ }));
43296
+ return function downloadValidationErrorFile() {
43297
+ return _ref5.apply(this, arguments);
43298
+ };
43299
+ }();
43300
+ var downloadSelectedTemplate = /*#__PURE__*/function () {
43301
+ var _ref6 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5() {
43302
+ var templateCode, file, selected, url, link, _t7;
43303
+ return _regenerator().w(function (_context5) {
43304
+ while (1) switch (_context5.p = _context5.n) {
43305
+ case 0:
43306
+ templateCode = form.getFieldValue('templateCode');
43307
+ if (templateCode) {
43308
+ _context5.n = 1;
43309
+ break;
43310
+ }
43311
+ antd.message.warning('请先选择模板');
43312
+ return _context5.a(2);
43313
+ case 1:
43314
+ setDownloading(true);
43315
+ _context5.p = 2;
43316
+ _context5.n = 3;
43317
+ return services.downloadTemplate(templateCode, context);
43318
+ case 3:
43319
+ file = _context5.v;
43320
+ selected = templates.find(function (item) {
43321
+ return item.templateCode === templateCode;
43322
+ });
43323
+ url = URL.createObjectURL(file instanceof Blob ? file : new Blob([file]));
43324
+ link = document.createElement('a');
43325
+ link.href = url;
43326
+ link.download = "".concat((selected === null || selected === void 0 ? void 0 : selected.templateName) || templateCode, ".xlsx");
43327
+ document.body.appendChild(link);
43328
+ link.click();
43329
+ document.body.removeChild(link);
43330
+ URL.revokeObjectURL(url);
43331
+ antd.message.success('模板下载成功');
43332
+ _context5.n = 5;
43333
+ break;
43334
+ case 4:
43335
+ _context5.p = 4;
43336
+ _t7 = _context5.v;
43337
+ antd.message.error('模板下载失败,请稍后重试');
43338
+ case 5:
43339
+ _context5.p = 5;
43340
+ setDownloading(false);
43341
+ return _context5.f(5);
43342
+ case 6:
43343
+ return _context5.a(2);
43344
+ }
43345
+ }, _callee5, null, [[2, 4, 5, 6]]);
43346
+ }));
43347
+ return function downloadSelectedTemplate() {
43348
+ return _ref6.apply(this, arguments);
43349
+ };
43350
+ }();
43351
+ return /*#__PURE__*/React__default['default'].createElement(antd.Modal, {
43352
+ width: 920,
43353
+ title: /*#__PURE__*/React__default['default'].createElement("div", {
43354
+ className: styles$2.modalTitle
43355
+ }, /*#__PURE__*/React__default['default'].createElement("span", {
43356
+ className: styles$2.modalTitleIcon
43357
+ }, /*#__PURE__*/React__default['default'].createElement(icons.FileExcelOutlined, null)), /*#__PURE__*/React__default['default'].createElement("span", null, /*#__PURE__*/React__default['default'].createElement("span", {
43358
+ className: styles$2.modalTitleText
43359
+ }, documentName || '业务单据', "\u5BFC\u5165"), /*#__PURE__*/React__default['default'].createElement("span", {
43360
+ className: styles$2.modalTitleDescription
43361
+ }, "\u4E0B\u8F7D\u6A21\u677F\u3001\u586B\u5199\u6570\u636E\u5E76\u4E0A\u4F20\u6821\u9A8C"))),
43362
+ visible: visible,
43363
+ footer: step === 0 ? [/*#__PURE__*/React__default['default'].createElement(antd.Button, {
43364
+ key: "cancel",
43365
+ onClick: onClose
43366
+ }, "\u53D6\u6D88"), /*#__PURE__*/React__default['default'].createElement(antd.Button, {
43367
+ key: "parse",
43368
+ type: "primary",
43369
+ icon: /*#__PURE__*/React__default['default'].createElement(icons.UploadOutlined, null),
43370
+ loading: parsing,
43371
+ disabled: !selectedTemplateCode || !selectedFile,
43372
+ onClick: parse
43373
+ }, "\u4E0A\u4F20\u5E76\u89E3\u6790")] : null,
43374
+ onCancel: onClose,
43375
+ wrapClassName: styles$2.importModal,
43376
+ destroyOnClose: true
43377
+ }, /*#__PURE__*/React__default['default'].createElement("div", {
43378
+ className: styles$2.stepsPanel
43379
+ }, /*#__PURE__*/React__default['default'].createElement(antd.Steps, {
43380
+ current: step,
43381
+ size: "small"
43382
+ }, /*#__PURE__*/React__default['default'].createElement(antd.Steps.Step, {
43383
+ title: "\u914D\u7F6E\u5E76\u4E0A\u4F20"
43384
+ }), /*#__PURE__*/React__default['default'].createElement(antd.Steps.Step, {
43385
+ title: "\u6821\u9A8C\u5E76\u5BFC\u5165"
43386
+ }))), step === 0 && (/*#__PURE__*/React__default['default'].createElement(antd.Form, {
43387
+ form: form,
43388
+ layout: "vertical",
43389
+ className: styles$2.form
43390
+ }, /*#__PURE__*/React__default['default'].createElement("section", {
43391
+ className: styles$2.section
43392
+ }, /*#__PURE__*/React__default['default'].createElement("div", {
43393
+ className: styles$2.sectionHeader
43394
+ }, /*#__PURE__*/React__default['default'].createElement("span", {
43395
+ className: styles$2.sectionIndex
43396
+ }, "1"), /*#__PURE__*/React__default['default'].createElement("span", null, /*#__PURE__*/React__default['default'].createElement("span", {
43397
+ className: styles$2.sectionTitle
43398
+ }, "\u9009\u62E9\u5BFC\u5165\u6A21\u677F"), /*#__PURE__*/React__default['default'].createElement("span", {
43399
+ className: styles$2.sectionDescription
43400
+ }, "\u8BF7\u5148\u4E0B\u8F7D\u5E76\u4F7F\u7528\u5F53\u524D\u6A21\u677F\u6574\u7406\u6570\u636E"))), /*#__PURE__*/React__default['default'].createElement("div", {
43401
+ className: styles$2.templateRow
43402
+ }, /*#__PURE__*/React__default['default'].createElement(antd.Form.Item, {
43403
+ label: "\u5BFC\u5165\u6A21\u677F",
43404
+ name: "templateCode",
43405
+ className: styles$2.templateField,
43406
+ rules: [{
43407
+ required: true,
43408
+ message: '请选择导入模板'
43409
+ }]
43410
+ }, /*#__PURE__*/React__default['default'].createElement(antd.Select, {
43411
+ showSearch: true,
43412
+ optionFilterProp: "children",
43413
+ placeholder: "\u8BF7\u9009\u62E9\u5BFC\u5165\u6A21\u677F",
43414
+ onChange: setSelectedTemplateCode
43415
+ }, personalTemplates.length > 0 && (/*#__PURE__*/React__default['default'].createElement(antd.Select.OptGroup, {
43416
+ label: "\u4E2A\u4EBA\u6A21\u677F"
43417
+ }, personalTemplates.map(function (item) {
43418
+ return /*#__PURE__*/React__default['default'].createElement(antd.Select.Option, {
43419
+ key: item.templateCode,
43420
+ value: item.templateCode
43421
+ }, item.templateName);
43422
+ }))), publicTemplates.length > 0 && (/*#__PURE__*/React__default['default'].createElement(antd.Select.OptGroup, {
43423
+ label: "\u516C\u5171\u6A21\u677F"
43424
+ }, publicTemplates.map(function (item) {
43425
+ return /*#__PURE__*/React__default['default'].createElement(antd.Select.Option, {
43426
+ key: item.templateCode,
43427
+ value: item.templateCode
43428
+ }, item.templateName);
43429
+ }))))), /*#__PURE__*/React__default['default'].createElement(antd.Button, {
43430
+ className: styles$2.downloadButton,
43431
+ icon: /*#__PURE__*/React__default['default'].createElement(icons.DownloadOutlined, null),
43432
+ loading: downloading,
43433
+ onClick: downloadSelectedTemplate
43434
+ }, "\u4E0B\u8F7D\u6A21\u677F")), selectedTemplate && (/*#__PURE__*/React__default['default'].createElement(antd.Descriptions, {
43435
+ bordered: true,
43436
+ size: "small",
43437
+ column: {
43438
+ xs: 1,
43439
+ sm: 3
43440
+ },
43441
+ className: styles$2.templateSummary
43442
+ }, /*#__PURE__*/React__default['default'].createElement(antd.Descriptions.Item, {
43443
+ label: "\u6A21\u677F\u540D\u79F0"
43444
+ }, selectedTemplate.templateName), /*#__PURE__*/React__default['default'].createElement(antd.Descriptions.Item, {
43445
+ label: "\u4E1A\u52A1\u5355\u636E"
43446
+ }, documentName || selectedTemplate.businessFunctionCode || '-'), /*#__PURE__*/React__default['default'].createElement(antd.Descriptions.Item, {
43447
+ label: "\u5B57\u6BB5\u6620\u5C04"
43448
+ }, selectedTemplateFieldCount == null ? '以模板配置为准' : "".concat(selectedTemplateFieldCount, " \u4E2A\u5B57\u6BB5"))))), /*#__PURE__*/React__default['default'].createElement("section", {
43449
+ className: styles$2.section
43450
+ }, /*#__PURE__*/React__default['default'].createElement("div", {
43451
+ className: styles$2.sectionHeader
43452
+ }, /*#__PURE__*/React__default['default'].createElement("span", {
43453
+ className: styles$2.sectionIndex
43454
+ }, "2"), /*#__PURE__*/React__default['default'].createElement("span", null, /*#__PURE__*/React__default['default'].createElement("span", {
43455
+ className: styles$2.sectionTitle
43456
+ }, "\u8BBE\u7F6E\u5BFC\u5165\u89C4\u5219"), /*#__PURE__*/React__default['default'].createElement("span", {
43457
+ className: styles$2.sectionDescription
43458
+ }, "\u9009\u62E9\u6570\u636E\u5199\u5165\u65B9\u5F0F\u4E0E\u5F02\u5E38\u5904\u7406\u65B9\u5F0F"))), /*#__PURE__*/React__default['default'].createElement("div", {
43459
+ className: styles$2.settingGrid
43460
+ }, /*#__PURE__*/React__default['default'].createElement(antd.Form.Item, {
43461
+ className: styles$2.settingItem,
43462
+ label: /*#__PURE__*/React__default['default'].createElement(antd.Space, null, "\u5BFC\u5165\u7B56\u7565", /*#__PURE__*/React__default['default'].createElement(antd.Tooltip, {
43463
+ title: "\u4EC5\u65B0\u589E\uFF1A\u5DF2\u6709\u6570\u636E\u62A5\u9519\uFF1B\u4EC5\u66F4\u65B0\uFF1A\u4E0D\u5B58\u5728\u7684\u6570\u636E\u62A5\u9519\uFF1B\u66F4\u65B0\u5E76\u65B0\u589E\uFF1A\u5DF2\u6709\u6570\u636E\u66F4\u65B0\uFF0C\u4E0D\u5B58\u5728\u7684\u6570\u636E\u65B0\u589E\u3002"
43464
+ }, /*#__PURE__*/React__default['default'].createElement(icons.QuestionCircleOutlined, null))),
43465
+ name: "strategy"
43466
+ }, /*#__PURE__*/React__default['default'].createElement(antd.Radio.Group, {
43467
+ className: styles$2.radioGroup
43468
+ }, /*#__PURE__*/React__default['default'].createElement(antd.Radio, {
43469
+ value: "CREATE_ONLY"
43470
+ }, "\u4EC5\u65B0\u589E"), /*#__PURE__*/React__default['default'].createElement(antd.Radio, {
43471
+ value: "UPDATE_ONLY"
43472
+ }, "\u4EC5\u66F4\u65B0"), /*#__PURE__*/React__default['default'].createElement(antd.Radio, {
43473
+ value: "UPSERT"
43474
+ }, "\u66F4\u65B0\u5E76\u65B0\u589E"))), /*#__PURE__*/React__default['default'].createElement(antd.Form.Item, {
43475
+ className: styles$2.settingItem,
43476
+ label: "\u9519\u8BEF\u5904\u7406",
43477
+ name: "errorHandlingMode"
43478
+ }, /*#__PURE__*/React__default['default'].createElement(antd.Radio.Group, {
43479
+ className: styles$2.radioGroup
43480
+ }, /*#__PURE__*/React__default['default'].createElement(antd.Radio, {
43481
+ value: "ALL_ROLLBACK",
43482
+ disabled: true
43483
+ }, "\u5168\u90E8\u56DE\u6EDA"), /*#__PURE__*/React__default['default'].createElement(antd.Radio, {
43484
+ value: "PARTIAL_SUCCESS"
43485
+ }, "\u90E8\u5206\u6210\u529F\uFF08\u5141\u8BB8\u90E8\u5206\u5931\u8D25\uFF09"))))), /*#__PURE__*/React__default['default'].createElement("section", {
43486
+ className: "".concat(styles$2.section, " ").concat(styles$2.uploadSection)
43487
+ }, /*#__PURE__*/React__default['default'].createElement("div", {
43488
+ className: styles$2.sectionHeader
43489
+ }, /*#__PURE__*/React__default['default'].createElement("span", {
43490
+ className: styles$2.sectionIndex
43491
+ }, "3"), /*#__PURE__*/React__default['default'].createElement("span", null, /*#__PURE__*/React__default['default'].createElement("span", {
43492
+ className: styles$2.sectionTitle
43493
+ }, "\u4E0A\u4F20\u6570\u636E\u6587\u4EF6"), /*#__PURE__*/React__default['default'].createElement("span", {
43494
+ className: styles$2.sectionDescription
43495
+ }, "\u4E0A\u4F20\u540E\u7CFB\u7EDF\u5C06\u5148\u6821\u9A8C\u6570\u636E\uFF0C\u4E0D\u4F1A\u76F4\u63A5\u5199\u5165\u4E1A\u52A1\u5355\u636E"))), /*#__PURE__*/React__default['default'].createElement(antd.Upload.Dragger, {
43496
+ className: styles$2.uploadDragger,
43497
+ beforeUpload: selectFile,
43498
+ fileList: selectedFile ? [selectedFile] : [],
43499
+ onRemove: function onRemove() {
43500
+ setSelectedFile(undefined);
43501
+ setFileName('');
43502
+ setPreview(undefined);
43503
+ },
43504
+ multiple: false,
43505
+ accept: ".xls,.xlsx,.csv"
43506
+ }, /*#__PURE__*/React__default['default'].createElement("p", {
43507
+ className: "ant-upload-drag-icon"
43508
+ }, /*#__PURE__*/React__default['default'].createElement(icons.InboxOutlined, null)), /*#__PURE__*/React__default['default'].createElement("p", {
43509
+ className: "ant-upload-text"
43510
+ }, "\u70B9\u51FB\u6216\u62D6\u62FD\u6587\u4EF6\u5230\u6B64\u533A\u57DF\u4E0A\u4F20"), /*#__PURE__*/React__default['default'].createElement("p", {
43511
+ className: "ant-upload-hint"
43512
+ }, "\u652F\u6301 XLSX\u3001XLS\u3001CSV\uFF0C\u5355\u4E2A\u6587\u4EF6\u4E0D\u8D85\u8FC7 10 MB")), /*#__PURE__*/React__default['default'].createElement(antd.Alert, {
43513
+ className: styles$2.uploadAlert,
43514
+ type: "info",
43515
+ showIcon: true,
43516
+ message: "\u884C\u6570\u4E0A\u9650\u7531\u7CFB\u7EDF\u914D\u7F6E\u51B3\u5B9A\uFF0C\u9ED8\u8BA4\u6700\u591A 100,000 \u884C\uFF1B\u7CFB\u7EDF\u7E41\u5FD9\u65F6\u6587\u4EF6\u4E0D\u4F1A\u8FDB\u5165\u89E3\u6790\u3002"
43517
+ }), parsing && (/*#__PURE__*/React__default['default'].createElement("div", {
43518
+ className: styles$2.progressPanel
43519
+ }, /*#__PURE__*/React__default['default'].createElement("div", {
43520
+ className: styles$2.progressTitle
43521
+ }, fileName, " \xB7 ", (preview === null || preview === void 0 ? void 0 : preview.stageName) || '文件解析中'), /*#__PURE__*/React__default['default'].createElement(antd.Progress, {
43522
+ percent: (preview === null || preview === void 0 ? void 0 : preview.progress) || 0,
43523
+ size: "small"
43524
+ })))))), step === 1 && (/*#__PURE__*/React__default['default'].createElement(Preview, {
43525
+ preview: preview,
43526
+ executing: executing,
43527
+ downloadingErrorFile: downloadingErrorFile,
43528
+ onBack: function onBack() {
43529
+ return setStep(0);
43530
+ },
43531
+ onExecute: execute,
43532
+ onDownloadErrorFile: downloadValidationErrorFile
43533
+ })));
43534
+ };
43535
+
43536
+ var statusNames = {
43537
+ CREATED: '等待执行',
43538
+ RUNNING: '执行中',
43539
+ WAITING_EXECUTE: '等待确认',
43540
+ VERIFYING: '结果核对中',
43541
+ SUCCESS: '成功',
43542
+ PARTIAL_SUCCESS: '部分成功',
43543
+ PASSED: '校验通过',
43544
+ COMPLETED_WITH_ERRORS: '校验完成(含异常)',
43545
+ FAILED: '失败',
43546
+ CANCELLED: '已取消'
43547
+ };
43548
+ /**
43549
+ * 展示当前业务功能最近的文件任务。
43550
+ */
43551
+ var TaskDrawer = function TaskDrawer(_ref) {
43552
+ var _detail$successCount, _detail$failedCount, _detail$skippedCount;
43553
+ var businessFunctionCodes = _ref.businessFunctionCodes,
43554
+ services = _ref.services,
43555
+ taskCenterPath = _ref.taskCenterPath,
43556
+ onNavigateTaskCenter = _ref.onNavigateTaskCenter;
43557
+ var _useState = React$1.useState(false),
43558
+ _useState2 = _slicedToArray(_useState, 2),
43559
+ visible = _useState2[0],
43560
+ setVisible = _useState2[1];
43561
+ var _useState3 = React$1.useState(''),
43562
+ _useState4 = _slicedToArray(_useState3, 2),
43563
+ keyword = _useState4[0],
43564
+ setKeyword = _useState4[1];
43565
+ var _useState5 = React$1.useState([]),
43566
+ _useState6 = _slicedToArray(_useState5, 2),
43567
+ tasks = _useState6[0],
43568
+ setTasks = _useState6[1];
43569
+ var _useState7 = React$1.useState(false),
43570
+ _useState8 = _slicedToArray(_useState7, 2),
43571
+ loading = _useState8[0],
43572
+ setLoading = _useState8[1];
43573
+ var _useState9 = React$1.useState(),
43574
+ _useState0 = _slicedToArray(_useState9, 2),
43575
+ detail = _useState0[0],
43576
+ setDetail = _useState0[1];
43577
+ var _useState1 = React$1.useState(false),
43578
+ _useState10 = _slicedToArray(_useState1, 2),
43579
+ unreadFailure = _useState10[0],
43580
+ setUnreadFailure = _useState10[1];
43581
+ var businessFunctionCodeKey = businessFunctionCodes.join('|');
43582
+ React$1.useEffect(function () {
43583
+ if (!visible) return;
43584
+ setLoading(true);
43585
+ var currentBusinessFunctionCodes = businessFunctionCodeKey.split('|').filter(Boolean);
43586
+ Promise.all(currentBusinessFunctionCodes.map(function (businessFunctionCode) {
43587
+ return services.queryRecentTasks({
43588
+ businessFunctionCode: businessFunctionCode,
43589
+ days: 3
43590
+ });
43591
+ })).then(function (responses) {
43592
+ var taskIds = new Set();
43593
+ var recent = responses.reduce(function (items, response) {
43594
+ return [].concat(_toConsumableArray(items), _toConsumableArray(getItems(response)));
43595
+ }, []).map(normalizeTask).filter(function (task) {
43596
+ if (!task.taskId || taskIds.has(task.taskId)) return false;
43597
+ taskIds.add(task.taskId);
43598
+ return true;
43599
+ });
43600
+ setTasks(recent);
43601
+ setUnreadFailure(false);
43602
+ }).catch(function () {
43603
+ return antd.message.error('最近文件任务加载失败,请稍后重试');
43604
+ }).finally(function () {
43605
+ return setLoading(false);
43606
+ });
43607
+ }, [visible, businessFunctionCodeKey, services]);
43608
+ React$1.useEffect(function () {
43609
+ if (!visible && tasks.some(function (item) {
43610
+ return item.taskStatus === 'FAILED' || item.taskStatus === 'PARTIAL_SUCCESS' || item.taskStatus === 'COMPLETED_WITH_ERRORS';
43611
+ })) {
43612
+ setUnreadFailure(true);
43613
+ }
43614
+ }, [visible, tasks]);
43615
+ var items = React$1.useMemo(function () {
43616
+ return tasks.filter(function (item) {
43617
+ var _item$templateName, _item$taskId;
43618
+ return !keyword || ((_item$templateName = item.templateName) === null || _item$templateName === void 0 ? void 0 : _item$templateName.includes(keyword)) || ((_item$taskId = item.taskId) === null || _item$taskId === void 0 ? void 0 : _item$taskId.includes(keyword));
43619
+ });
43620
+ }, [tasks, keyword]);
43621
+ var openFile = function openFile(url, fileName) {
43622
+ var link = document.createElement('a');
43623
+ link.href = url;
43624
+ link.download = fileName;
43625
+ document.body.appendChild(link);
43626
+ link.click();
43627
+ document.body.removeChild(link);
43628
+ antd.message.success('文件下载已开始');
43629
+ };
43630
+ return /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement(antd.Badge, {
43631
+ dot: unreadFailure
43632
+ }, /*#__PURE__*/React__default['default'].createElement(antd.Button, {
43633
+ onClick: function onClick() {
43634
+ setUnreadFailure(false);
43635
+ setVisible(true);
43636
+ }
43637
+ }, "\u6587\u4EF6\u4EFB\u52A1")), /*#__PURE__*/React__default['default'].createElement(antd.Drawer, {
43638
+ width: 400,
43639
+ title: "\u6700\u8FD1\u6587\u4EF6\u4EFB\u52A1",
43640
+ visible: visible,
43641
+ onClose: function onClose() {
43642
+ return setVisible(false);
43643
+ }
43644
+ }, /*#__PURE__*/React__default['default'].createElement(antd.Input.Search, {
43645
+ allowClear: true,
43646
+ placeholder: "\u641C\u7D22\u6A21\u677F\u540D\u79F0\u6216\u4EFB\u52A1\u7F16\u53F7",
43647
+ value: keyword,
43648
+ onChange: function onChange(event) {
43649
+ return setKeyword(event.target.value);
43650
+ }
43651
+ }), /*#__PURE__*/React__default['default'].createElement(antd.Spin, {
43652
+ spinning: loading
43653
+ }, /*#__PURE__*/React__default['default'].createElement(antd.List, {
43654
+ dataSource: items,
43655
+ locale: {
43656
+ emptyText: (/*#__PURE__*/React__default['default'].createElement(antd.Empty, {
43657
+ image: antd.Empty.PRESENTED_IMAGE_SIMPLE,
43658
+ description: "\u6700\u8FD13\u5929\u6682\u65E0\u5BFC\u5165\u5BFC\u51FA\u4EFB\u52A1"
43659
+ }))
43660
+ },
43661
+ renderItem: function renderItem(item) {
43662
+ return /*#__PURE__*/React__default['default'].createElement(antd.List.Item, {
43663
+ style: {
43664
+ cursor: 'pointer'
43665
+ },
43666
+ onClick: function onClick() {
43667
+ return setDetail(item);
43668
+ },
43669
+ actions: [item.resultDownloadUrl ? (/*#__PURE__*/React__default['default'].createElement(antd.Button, {
43670
+ type: "link",
43671
+ size: "small",
43672
+ onClick: function onClick(event) {
43673
+ event.stopPropagation();
43674
+ openFile(item.resultDownloadUrl, "".concat(item.taskId, "-\u7ED3\u679C\u6587\u4EF6"));
43675
+ }
43676
+ }, "\u4E0B\u8F7D")) : null, item.errorDownloadUrl ? (/*#__PURE__*/React__default['default'].createElement(antd.Button, {
43677
+ type: "link",
43678
+ size: "small",
43679
+ danger: true,
43680
+ onClick: function onClick(event) {
43681
+ event.stopPropagation();
43682
+ openFile(item.errorDownloadUrl, "".concat(item.taskId, "-\u9519\u8BEF\u6587\u4EF6"));
43683
+ }
43684
+ }, "\u5BFC\u51FA\u9519\u8BEF")) : null].filter(Boolean)
43685
+ }, /*#__PURE__*/React__default['default'].createElement(antd.List.Item.Meta, {
43686
+ title: /*#__PURE__*/React__default['default'].createElement(antd.Space, null, taskTypeName(item.taskType), /*#__PURE__*/React__default['default'].createElement(antd.Tag, null, statusNames[item.taskStatus] || item.taskStatus)),
43687
+ description: /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement("div", null, item.taskId), /*#__PURE__*/React__default['default'].createElement(antd.Progress, {
43688
+ percent: item.progress || 0,
43689
+ size: "small"
43690
+ }))
43691
+ }));
43692
+ }
43693
+ })), taskCenterPath && onNavigateTaskCenter && (/*#__PURE__*/React__default['default'].createElement(antd.Button, {
43694
+ type: "link",
43695
+ onClick: function onClick() {
43696
+ setVisible(false);
43697
+ onNavigateTaskCenter(taskCenterPath);
43698
+ }
43699
+ }, "\u67E5\u770B\u5168\u90E8"))), /*#__PURE__*/React__default['default'].createElement(antd.Modal, {
43700
+ width: 720,
43701
+ title: "\u4EFB\u52A1\u8BE6\u60C5 \xB7 ".concat((detail === null || detail === void 0 ? void 0 : detail.taskId) || ''),
43702
+ visible: !!detail,
43703
+ footer: null,
43704
+ onCancel: function onCancel() {
43705
+ return setDetail(undefined);
43706
+ },
43707
+ destroyOnClose: true
43708
+ }, detail && (/*#__PURE__*/React__default['default'].createElement(antd.Descriptions, {
43709
+ bordered: true,
43710
+ size: "small",
43711
+ column: 2
43712
+ }, /*#__PURE__*/React__default['default'].createElement(antd.Descriptions.Item, {
43713
+ label: "\u7C7B\u578B"
43714
+ }, taskTypeName(detail.taskType)), /*#__PURE__*/React__default['default'].createElement(antd.Descriptions.Item, {
43715
+ label: "\u72B6\u6001"
43716
+ }, statusNames[detail.taskStatus] || detail.taskStatus), /*#__PURE__*/React__default['default'].createElement(antd.Descriptions.Item, {
43717
+ label: "\u6A21\u677F"
43718
+ }, detail.templateName || '-'), /*#__PURE__*/React__default['default'].createElement(antd.Descriptions.Item, {
43719
+ label: "\u64CD\u4F5C\u4EBA"
43720
+ }, detail.operatorName || '-'), /*#__PURE__*/React__default['default'].createElement(antd.Descriptions.Item, {
43721
+ label: "\u6587\u4EF6\u540D"
43722
+ }, detail.fileName || '-'), /*#__PURE__*/React__default['default'].createElement(antd.Descriptions.Item, {
43723
+ label: "\u521B\u5EFA\u65F6\u95F4"
43724
+ }, detail.createdTime || '-'), /*#__PURE__*/React__default['default'].createElement(antd.Descriptions.Item, {
43725
+ label: "\u6210\u529F\u884C\u6570"
43726
+ }, (_detail$successCount = detail.successCount) !== null && _detail$successCount !== void 0 ? _detail$successCount : '-'), /*#__PURE__*/React__default['default'].createElement(antd.Descriptions.Item, {
43727
+ label: "\u5931\u8D25\u884C\u6570"
43728
+ }, (_detail$failedCount = detail.failedCount) !== null && _detail$failedCount !== void 0 ? _detail$failedCount : '-'), /*#__PURE__*/React__default['default'].createElement(antd.Descriptions.Item, {
43729
+ label: "\u8DF3\u8FC7\u884C\u6570"
43730
+ }, (_detail$skippedCount = detail.skippedCount) !== null && _detail$skippedCount !== void 0 ? _detail$skippedCount : '-'), /*#__PURE__*/React__default['default'].createElement(antd.Descriptions.Item, {
43731
+ label: "\u8017\u65F6"
43732
+ }, detail.elapsedSeconds == null ? '-' : "".concat(detail.elapsedSeconds, "s"))))));
43733
+ };
43734
+
43735
+ var POLL_INTERVAL_MS$1 = 2000;
43736
+ var terminalStatuses = ['SUCCESS', 'PARTIAL_SUCCESS', 'PASSED', 'COMPLETED_WITH_ERRORS', 'FAILED', 'CANCELLED'];
43737
+ var statusView = {
43738
+ PENDING: {
43739
+ color: 'default',
43740
+ text: '等待执行'
43741
+ },
43742
+ CREATED: {
43743
+ color: 'default',
43744
+ text: '等待执行'
43745
+ },
43746
+ RUNNING: {
43747
+ color: 'processing',
43748
+ text: '执行中'
43749
+ },
43750
+ WAITING_EXECUTE: {
43751
+ color: 'warning',
43752
+ text: '等待确认'
43753
+ },
43754
+ VERIFYING: {
43755
+ color: 'processing',
43756
+ text: '结果核对中'
43757
+ },
43758
+ SUCCESS: {
43759
+ color: 'success',
43760
+ text: '成功'
43761
+ },
43762
+ PARTIAL_SUCCESS: {
43763
+ color: 'warning',
43764
+ text: '部分成功'
43765
+ },
43766
+ PASSED: {
43767
+ color: 'success',
43768
+ text: '校验通过'
43769
+ },
43770
+ COMPLETED_WITH_ERRORS: {
43771
+ color: 'warning',
43772
+ text: '校验完成(含异常)'
43773
+ },
43774
+ FAILED: {
43775
+ color: 'error',
43776
+ text: '失败'
43777
+ },
43778
+ CANCELLED: {
43779
+ color: 'default',
43780
+ text: '已取消'
43781
+ }
43782
+ };
43783
+ var taskTypeColors = {
43784
+ IMPORT_VALIDATION: 'blue',
43785
+ IMPORT_EXECUTION: 'geekblue',
43786
+ IMPORT: 'geekblue',
43787
+ EXPORT: 'purple',
43788
+ TEMPLATE_DOWNLOAD: 'cyan'
43789
+ };
43790
+ var triggerDownload = function triggerDownload(url, fileName) {
43791
+ var link = document.createElement('a');
43792
+ link.href = url;
43793
+ link.download = fileName;
43794
+ document.body.appendChild(link);
43795
+ link.click();
43796
+ document.body.removeChild(link);
43797
+ antd.message.success('文件下载已开始');
43798
+ };
43799
+ /**
43800
+ * 轮询并展示当前页面创建的文件任务进度。
43801
+ */
43802
+ var TaskProgress = function TaskProgress(_ref) {
43803
+ var tasks = _ref.tasks,
43804
+ services = _ref.services,
43805
+ taskCenterPath = _ref.taskCenterPath,
43806
+ onNavigateTaskCenter = _ref.onNavigateTaskCenter,
43807
+ onTaskUpdated = _ref.onTaskUpdated,
43808
+ onClose = _ref.onClose;
43809
+ var _useState = React$1.useState(false),
43810
+ _useState2 = _slicedToArray(_useState, 2),
43811
+ collapsed = _useState2[0],
43812
+ setCollapsed = _useState2[1];
43813
+ var runningTasks = React$1.useMemo(function () {
43814
+ return tasks.filter(function (task) {
43815
+ return Boolean(task.taskId) && !terminalStatuses.includes(task.taskStatus);
43816
+ });
43817
+ }, [tasks]);
43818
+ var pollingKey = runningTasks.map(function (task) {
43819
+ return "".concat(task.taskId, ":").concat(task.serviceContext || '');
43820
+ }).join('|');
43821
+ React$1.useEffect(function () {
43822
+ if (runningTasks.length === 0) return undefined;
43823
+ var stopped = false;
43824
+ var timer;
43825
+ var _poll = /*#__PURE__*/function () {
43826
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {
43827
+ return _regenerator().w(function (_context2) {
43828
+ while (1) switch (_context2.n) {
43829
+ case 0:
43830
+ _context2.n = 1;
43831
+ return Promise.all(runningTasks.map(/*#__PURE__*/function () {
43832
+ var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(task) {
43833
+ var response, _t;
43834
+ return _regenerator().w(function (_context) {
43835
+ while (1) switch (_context.p = _context.n) {
43836
+ case 0:
43837
+ if (task.serviceContext) {
43838
+ _context.n = 1;
43839
+ break;
43840
+ }
43841
+ return _context.a(2);
43842
+ case 1:
43843
+ _context.p = 1;
43844
+ _context.n = 2;
43845
+ return services.queryTask(task.serviceContext, task.taskId);
43846
+ case 2:
43847
+ response = _context.v;
43848
+ if (!stopped) {
43849
+ onTaskUpdated(_objectSpread2(_objectSpread2(_objectSpread2({}, task), normalizeTask(unwrapResponse(response))), {}, {
43850
+ serviceContext: task.serviceContext
43851
+ }));
43852
+ }
43853
+ _context.n = 4;
43854
+ break;
43855
+ case 3:
43856
+ _context.p = 3;
43857
+ _t = _context.v;
43858
+ case 4:
43859
+ return _context.a(2);
43860
+ }
43861
+ }, _callee, null, [[1, 3]]);
43862
+ }));
43863
+ return function (_x) {
43864
+ return _ref3.apply(this, arguments);
43865
+ };
43866
+ }()));
43867
+ case 1:
43868
+ if (!stopped) {
43869
+ timer = window.setTimeout(_poll, POLL_INTERVAL_MS$1);
43870
+ }
43871
+ case 2:
43872
+ return _context2.a(2);
43873
+ }
43874
+ }, _callee2);
43875
+ }));
43876
+ return function poll() {
43877
+ return _ref2.apply(this, arguments);
43878
+ };
43879
+ }();
43880
+ _poll();
43881
+ return function () {
43882
+ stopped = true;
43883
+ if (timer != null) window.clearTimeout(timer);
43884
+ };
43885
+ }, [pollingKey, services, onTaskUpdated]);
43886
+ if (tasks.length === 0) return null;
43887
+ var primaryTask = runningTasks[0] || tasks[0];
43888
+ return /*#__PURE__*/React__default['default'].createElement(antd.Card, {
43889
+ size: "small",
43890
+ title: /*#__PURE__*/React__default['default'].createElement(antd.Space, null, "\u6587\u4EF6\u4EFB\u52A1", /*#__PURE__*/React__default['default'].createElement(antd.Badge, {
43891
+ count: tasks.length
43892
+ })),
43893
+ extra: /*#__PURE__*/React__default['default'].createElement(antd.Space, null, taskCenterPath && onNavigateTaskCenter && (/*#__PURE__*/React__default['default'].createElement(antd.Button, {
43894
+ type: "link",
43895
+ size: "small",
43896
+ onClick: function onClick() {
43897
+ return onNavigateTaskCenter(taskCenterPath);
43898
+ }
43899
+ }, "\u5168\u90E8")), /*#__PURE__*/React__default['default'].createElement(antd.Button, {
43900
+ type: "link",
43901
+ size: "small",
43902
+ onClick: onClose
43903
+ }, "\u5173\u95ED"), /*#__PURE__*/React__default['default'].createElement(antd.Button, {
43904
+ type: "text",
43905
+ size: "small",
43906
+ "aria-label": collapsed ? '展开文件任务' : '收起文件任务',
43907
+ icon: collapsed ? /*#__PURE__*/React__default['default'].createElement(icons.UpOutlined, null) : /*#__PURE__*/React__default['default'].createElement(icons.DownOutlined, null),
43908
+ onClick: function onClick() {
43909
+ return setCollapsed(function (value) {
43910
+ return !value;
43911
+ });
43912
+ }
43913
+ })),
43914
+ style: {
43915
+ position: 'fixed',
43916
+ right: 24,
43917
+ bottom: 24,
43918
+ width: 360,
43919
+ zIndex: 40
43920
+ },
43921
+ bodyStyle: {
43922
+ maxHeight: 'min(520px, calc(100vh - 180px))',
43923
+ overflowY: 'auto'
43924
+ }
43925
+ }, collapsed ? (/*#__PURE__*/React__default['default'].createElement(antd.Space, {
43926
+ direction: "vertical",
43927
+ style: {
43928
+ width: '100%'
43929
+ }
43930
+ }, /*#__PURE__*/React__default['default'].createElement(antd.Tag, {
43931
+ color: taskTypeColors[primaryTask.taskType] || 'default'
43932
+ }, taskTypeName(primaryTask.taskType)), /*#__PURE__*/React__default['default'].createElement(antd.Progress, {
43933
+ percent: primaryTask.progress || 0,
43934
+ size: "small"
43935
+ }))) : tasks.map(function (task) {
43936
+ var status = statusView[task.taskStatus] || {
43937
+ color: 'default',
43938
+ text: task.taskStatus
43939
+ };
43940
+ var operationLabel = taskTypeName(task.taskType);
43941
+ return /*#__PURE__*/React__default['default'].createElement("div", {
43942
+ key: task.taskId,
43943
+ style: {
43944
+ padding: '10px 0',
43945
+ borderBottom: '1px solid #f0f0f0'
43946
+ }
43947
+ }, /*#__PURE__*/React__default['default'].createElement(antd.Tag, {
43948
+ color: taskTypeColors[task.taskType] || 'default'
43949
+ }, operationLabel), /*#__PURE__*/React__default['default'].createElement(antd.Space, {
43950
+ style: {
43951
+ marginTop: 6
43952
+ }
43953
+ }, /*#__PURE__*/React__default['default'].createElement(antd.Tag, {
43954
+ color: status.color
43955
+ }, status.text), /*#__PURE__*/React__default['default'].createElement("span", null, "\u5DF2\u5904\u7406 ", task.processedCount || 0, task.totalCount == null ? ' 行' : " / ".concat(task.totalCount, " \u884C")), task.elapsedSeconds != null && (/*#__PURE__*/React__default['default'].createElement("span", null, "\u8017\u65F6 ", task.elapsedSeconds, "s"))), /*#__PURE__*/React__default['default'].createElement(antd.Progress, {
43956
+ percent: task.progress || 0,
43957
+ size: "small"
43958
+ }), task.taskStatus === 'FAILED' && task.errorMessage && (/*#__PURE__*/React__default['default'].createElement(antd.Tooltip, {
43959
+ title: task.errorMessage
43960
+ }, /*#__PURE__*/React__default['default'].createElement("div", {
43961
+ "aria-label": task.errorMessage,
43962
+ style: {
43963
+ color: '#e82d1e',
43964
+ marginBottom: 4,
43965
+ overflow: 'hidden',
43966
+ textOverflow: 'ellipsis',
43967
+ whiteSpace: 'nowrap'
43968
+ }
43969
+ }, task.errorMessage))), /*#__PURE__*/React__default['default'].createElement(antd.Space, null, task.resultDownloadUrl && (/*#__PURE__*/React__default['default'].createElement(antd.Button, {
43970
+ type: "link",
43971
+ size: "small",
43972
+ onClick: function onClick() {
43973
+ return triggerDownload(task.resultDownloadUrl, "".concat(task.templateName || task.taskId, "-\u7ED3\u679C\u6587\u4EF6"));
43974
+ }
43975
+ }, "\u4E0B\u8F7D\u7ED3\u679C\u6587\u4EF6")), task.errorDownloadUrl && (/*#__PURE__*/React__default['default'].createElement(antd.Button, {
43976
+ type: "link",
43977
+ size: "small",
43978
+ danger: true,
43979
+ onClick: function onClick() {
43980
+ return triggerDownload(task.errorDownloadUrl, "".concat(task.templateName || task.taskId, "-\u9519\u8BEF\u6587\u4EF6"));
43981
+ }
43982
+ }, "\u4E0B\u8F7D\u9519\u8BEF\u6587\u4EF6"))));
43983
+ }));
43984
+ };
43985
+
43986
+ /**
43987
+ * 根据业务配置和后端服务上下文生成一次导入或导出请求上下文。
43988
+ */
43989
+ var createRequestContext = function createRequestContext(config, businessFunctionCode, serviceContext, operationType) {
43990
+ var _config$getQueryParam;
43991
+ return _objectSpread2({
43992
+ businessFunctionCode: businessFunctionCode,
43993
+ serviceContext: serviceContext,
43994
+ operationType: operationType
43995
+ }, operationType === 'EXPORT' ? {
43996
+ conditions: ((_config$getQueryParam = config.getQueryParams) === null || _config$getQueryParam === void 0 ? void 0 : _config$getQueryParam.call(config)) || {}
43997
+ } : {});
43998
+ };
43999
+
44000
+ /**
44001
+ * 根据操作类型和按钮权限编码解析关联的业务功能编码。
44002
+ *
44003
+ * 导入使用独立入口;快速导出和模板导出共用任一已配置的导出入口。
44004
+ */
44005
+ var resolveBusinessFunctionCode = function resolveBusinessFunctionCode(operationType, authCodes) {
44006
+ if (operationType === 'IMPORT') {
44007
+ return getRelationTemplateCode(authCodes.importCode);
44008
+ }
44009
+ return getRelationTemplateCode(authCodes.quickExportCode) || getRelationTemplateCode(authCodes.templateExportCode);
44010
+ };
44011
+
44012
+ /**
44013
+ * 判断是否启用多工作表能力。
44014
+ */
44015
+ var isMultiSheetEnabled = function isMultiSheetEnabled(config) {
44016
+ return (config === null || config === void 0 ? void 0 : config.multiSheet) === true;
44017
+ };
44018
+ /**
44019
+ * 判断是否启用横向导出能力。
44020
+ */
44021
+ var isHorizontalExportEnabled = function isHorizontalExportEnabled(config) {
44022
+ return (config === null || config === void 0 ? void 0 : config.horizontalExport) === true;
44023
+ };
44024
+ /**
44025
+ * 判断是否启用大文件导出能力。
44026
+ */
44027
+ var isLargeFileExportEnabled = function isLargeFileExportEnabled(config) {
44028
+ return (config === null || config === void 0 ? void 0 : config.largeFile) === true;
44029
+ };
44030
+
44031
+ var BUSINESS_FUNCTION_UNAVAILABLE = '业务功能未配置或已停用,请联系管理员维护业务功能档案';
44032
+ /**
44033
+ * 统一承载导入、快速导出、模板导出和文件任务入口。
44034
+ */
44035
+ var ImportExportActions = function ImportExportActions(_ref) {
44036
+ var config = _ref.config,
44037
+ serviceOverrides = _ref.services,
44038
+ importCode = _ref.importCode,
44039
+ quickExportCode = _ref.quickExportCode,
44040
+ templateExportCode = _ref.templateExportCode,
44041
+ _ref$taskCenterPath = _ref.taskCenterPath,
44042
+ taskCenterPath = _ref$taskCenterPath === void 0 ? '/configure/importExport/taskCenter' : _ref$taskCenterPath,
44043
+ _ref$showTaskDrawer = _ref.showTaskDrawer,
44044
+ showTaskDrawer = _ref$showTaskDrawer === void 0 ? true : _ref$showTaskDrawer,
44045
+ onNavigateTaskCenter = _ref.onNavigateTaskCenter;
44046
+ var _useState = React$1.useState(false),
44047
+ _useState2 = _slicedToArray(_useState, 2),
44048
+ importVisible = _useState2[0],
44049
+ setImportVisible = _useState2[1];
44050
+ var _useState3 = React$1.useState(false),
44051
+ _useState4 = _slicedToArray(_useState3, 2),
44052
+ importRouteLoading = _useState4[0],
44053
+ setImportRouteLoading = _useState4[1];
44054
+ var _useState5 = React$1.useState(),
44055
+ _useState6 = _slicedToArray(_useState5, 2),
44056
+ importContext = _useState6[0],
44057
+ setImportContext = _useState6[1];
44058
+ var _useState7 = React$1.useState([]),
44059
+ _useState8 = _slicedToArray(_useState7, 2),
44060
+ tasks = _useState8[0],
44061
+ setTasks = _useState8[1];
44062
+ var services = React$1.useMemo(function () {
44063
+ return resolveImportExportServices(serviceOverrides);
44064
+ }, [serviceOverrides]);
44065
+ var showImport = !!authFunc(importCode);
44066
+ var showQuickExport = !!authFunc(quickExportCode);
44067
+ var showTemplateExport = !!authFunc(templateExportCode);
44068
+ var authCodes = {
44069
+ importCode: importCode,
44070
+ quickExportCode: quickExportCode,
44071
+ templateExportCode: templateExportCode
44072
+ };
44073
+ var taskBusinessFunctionCodes = Array.from(new Set([resolveBusinessFunctionCode('IMPORT', authCodes), resolveBusinessFunctionCode('EXPORT', authCodes)].filter(Boolean)));
44074
+ /**
44075
+ * 解析当前操作使用的业务功能和服务上下文。
44076
+ */
44077
+ var _resolveRequestContext = /*#__PURE__*/function () {
44078
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(operationType) {
44079
+ var businessFunctionCode, _response$data, response, resolved, _t;
44080
+ return _regenerator().w(function (_context) {
44081
+ while (1) switch (_context.p = _context.n) {
44082
+ case 0:
44083
+ businessFunctionCode = resolveBusinessFunctionCode(operationType, authCodes);
44084
+ if (businessFunctionCode) {
44085
+ _context.n = 1;
44086
+ break;
44087
+ }
44088
+ antd.message.warning(BUSINESS_FUNCTION_UNAVAILABLE);
44089
+ return _context.a(2, undefined);
44090
+ case 1:
44091
+ _context.p = 1;
44092
+ _context.n = 2;
44093
+ return services.resolveBusinessFunction(businessFunctionCode);
44094
+ case 2:
44095
+ response = _context.v;
44096
+ resolved = (response === null || response === void 0 ? void 0 : (_response$data = response.data) === null || _response$data === void 0 ? void 0 : _response$data.data) || (response === null || response === void 0 ? void 0 : response.data) || response;
44097
+ if (!(!(resolved === null || resolved === void 0 ? void 0 : resolved.serviceContext) || Number(resolved.status) !== 1)) {
44098
+ _context.n = 3;
44099
+ break;
44100
+ }
44101
+ throw new Error(BUSINESS_FUNCTION_UNAVAILABLE);
44102
+ case 3:
44103
+ return _context.a(2, createRequestContext(config, businessFunctionCode, resolved.serviceContext, operationType));
44104
+ case 4:
44105
+ _context.p = 4;
44106
+ _t = _context.v;
44107
+ antd.message.warning(BUSINESS_FUNCTION_UNAVAILABLE);
44108
+ return _context.a(2, undefined);
44109
+ }
44110
+ }, _callee, null, [[1, 4]]);
44111
+ }));
44112
+ return function resolveRequestContext(_x) {
44113
+ return _ref2.apply(this, arguments);
44114
+ };
44115
+ }();
44116
+ var openImport = /*#__PURE__*/function () {
44117
+ var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {
44118
+ var context;
44119
+ return _regenerator().w(function (_context2) {
44120
+ while (1) switch (_context2.p = _context2.n) {
44121
+ case 0:
44122
+ setImportRouteLoading(true);
44123
+ _context2.p = 1;
44124
+ _context2.n = 2;
44125
+ return _resolveRequestContext('IMPORT');
44126
+ case 2:
44127
+ context = _context2.v;
44128
+ if (context) {
44129
+ _context2.n = 3;
44130
+ break;
44131
+ }
44132
+ return _context2.a(2);
44133
+ case 3:
44134
+ setImportContext(context);
44135
+ setImportVisible(true);
44136
+ case 4:
44137
+ _context2.p = 4;
44138
+ setImportRouteLoading(false);
44139
+ return _context2.f(4);
44140
+ case 5:
44141
+ return _context2.a(2);
44142
+ }
44143
+ }, _callee2, null, [[1,, 4, 5]]);
44144
+ }));
44145
+ return function openImport() {
44146
+ return _ref3.apply(this, arguments);
44147
+ };
44148
+ }();
44149
+ var addTask = React$1.useCallback(function (task) {
44150
+ if (!(task === null || task === void 0 ? void 0 : task.taskId)) return;
44151
+ setTasks(function (items) {
44152
+ return [task].concat(_toConsumableArray(items.filter(function (item) {
44153
+ return item.taskId !== task.taskId;
44154
+ })));
44155
+ });
44156
+ }, []);
44157
+ return /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement(antd.Space, null, showImport && (/*#__PURE__*/React__default['default'].createElement(antd.Button, {
44158
+ loading: importRouteLoading,
44159
+ onClick: openImport
44160
+ }, "\u5BFC\u5165")), (showQuickExport || showTemplateExport) && (/*#__PURE__*/React__default['default'].createElement(ExportButton, {
44161
+ config: config,
44162
+ services: services,
44163
+ resolveRequestContext: function resolveRequestContext() {
44164
+ return _resolveRequestContext('EXPORT');
44165
+ },
44166
+ showQuickExport: showQuickExport,
44167
+ showTemplateExport: showTemplateExport,
44168
+ onTaskCreated: addTask
44169
+ })), showTaskDrawer && (/*#__PURE__*/React__default['default'].createElement(TaskDrawer, {
44170
+ businessFunctionCodes: taskBusinessFunctionCodes,
44171
+ services: services,
44172
+ taskCenterPath: taskCenterPath,
44173
+ onNavigateTaskCenter: onNavigateTaskCenter
44174
+ }))), importContext && (/*#__PURE__*/React__default['default'].createElement(ImportWizard, {
44175
+ visible: importVisible,
44176
+ context: importContext,
44177
+ documentName: config.documentName,
44178
+ services: services,
44179
+ onClose: function onClose() {
44180
+ return setImportVisible(false);
44181
+ },
44182
+ onTaskCreated: addTask
44183
+ })), /*#__PURE__*/React__default['default'].createElement(TaskProgress, {
44184
+ tasks: tasks,
44185
+ services: services,
44186
+ taskCenterPath: taskCenterPath,
44187
+ onNavigateTaskCenter: onNavigateTaskCenter,
44188
+ onTaskUpdated: addTask,
44189
+ onClose: function onClose() {
44190
+ return setTasks([]);
44191
+ }
44192
+ }));
44193
+ };
44194
+
41740
44195
  exports.AddSelect = AddSelect;
41741
44196
  exports.AddSkcSelect = AddSkcSelect;
41742
44197
  exports.AddSkuSelect = AddSkuSelect;
@@ -41757,11 +44212,14 @@ exports.DataImport = DataImport;
41757
44212
  exports.DataValidation = DataValidation;
41758
44213
  exports.DetailPageWrapper = index$3;
41759
44214
  exports.EllipsisTooltip = EllipsisTooltip;
44215
+ exports.ExportButton = ExportButton;
41760
44216
  exports.ExportIcon = ExportIcon;
41761
44217
  exports.ExtendedCollapse = index$8;
41762
44218
  exports.GuideWrapper = GuideWrapper;
41763
44219
  exports.HandleTotalCount = HandleTotalCount;
41764
44220
  exports.HomePageWrapper = index$4;
44221
+ exports.ImportExportActions = ImportExportActions;
44222
+ exports.ImportWizard = ImportWizard;
41765
44223
  exports.JsonQueryTable = JsonQueryTable;
41766
44224
  exports.ModalUtils = ModalUtils;
41767
44225
  exports.MoreTreeTable = index$6;
@@ -41778,13 +44236,20 @@ exports.StateFlow = index$2;
41778
44236
  exports.SulaColumnSettingTable = ColumnSettingSulaTable;
41779
44237
  exports.SystemLog = SystemLog;
41780
44238
  exports.TableColumnSetting = TableColumnSetting;
44239
+ exports.TaskDrawer = TaskDrawer;
44240
+ exports.TaskProgress = TaskProgress;
41781
44241
  exports.TreeSearchSelect = TreeSearchSelect;
41782
44242
  exports.TrialCalculation = PathDisplay;
41783
44243
  exports.authFunc = authFunc;
44244
+ exports.buildSdkUrl = buildSdkUrl;
41784
44245
  exports.calculateValidPeriod = calculateValidPeriod;
41785
44246
  exports.checkQuantityAccuracy = checkQuantityAccuracy;
44247
+ exports.concurrentLimitCode = concurrentLimitCode;
41786
44248
  exports.coverToParallel = _coverToParallel;
44249
+ exports.createImportExportServices = createImportExportServices;
44250
+ exports.createRequestContext = createRequestContext;
41787
44251
  exports.createUniqID = createUniqID;
44252
+ exports.defaultImportExportServices = defaultImportExportServices;
41788
44253
  exports.downloadExcel = downloadExcel;
41789
44254
  exports.ergodicMenuRoutes = ergodicMenuRoutes;
41790
44255
  exports.formContainerAndItemLayout = formContainerAndItemLayout;
@@ -41801,11 +44266,13 @@ exports.getDictionaryTextByValue = getDictionaryTextByValue;
41801
44266
  exports.getEmployeeCode = getEmployeeCode;
41802
44267
  exports.getEmployeeId = getEmployeeId;
41803
44268
  exports.getItemDefaultWidth = getItemDefaultWidth$1;
44269
+ exports.getItems = getItems;
41804
44270
  exports.getJoinDictionaryText = getJoinDictionaryText;
41805
44271
  exports.getLastKey = getLastKey;
41806
44272
  exports.getLimitMenuDataKey = getLimitMenuDataKey;
41807
44273
  exports.getLocalStorageSaveKey = getLocalStorageSaveKey;
41808
44274
  exports.getMenuAuthDataKey = getMenuAuthDataKey;
44275
+ exports.getRelationTemplateCode = getRelationTemplateCode;
41809
44276
  exports.getSessionId = getSessionId;
41810
44277
  exports.getSkuImg = getSkuImg;
41811
44278
  exports.getTenantList = getTenantList;
@@ -41838,6 +44305,10 @@ exports.handleTextWarpCustom = handleTextWarpCustom;
41838
44305
  exports.handleTooltip = handleTooltip$1;
41839
44306
  exports.handleTooltipHours = handleTooltipHours$1;
41840
44307
  exports.handleUserPhone = handleUserPhone;
44308
+ exports.isConcurrentLimit = isConcurrentLimit;
44309
+ exports.isHorizontalExportEnabled = isHorizontalExportEnabled;
44310
+ exports.isLargeFileExportEnabled = isLargeFileExportEnabled;
44311
+ exports.isMultiSheetEnabled = isMultiSheetEnabled;
41841
44312
  exports.judgeIsEmpty = judgeIsEmpty;
41842
44313
  exports.judgeIsRequestError = judgeIsRequestError;
41843
44314
  exports.judgeIsRequestSuccess = judgeIsRequestSuccess;
@@ -41845,6 +44316,8 @@ exports.keyToWord = keyToWord;
41845
44316
  exports.memoizeOneFormatter = memoizeOneFormatter;
41846
44317
  exports.noEmptyArr = noEmptyArr;
41847
44318
  exports.noEmptyArray = noEmptyArray;
44319
+ exports.normalizeServiceContext = normalizeServiceContext;
44320
+ exports.normalizeTask = normalizeTask;
41848
44321
  exports.paramsControl = paramsControl;
41849
44322
  exports.parseWidth = parseWidth;
41850
44323
  exports.precisionQuantity = precisionQuantity;
@@ -41855,6 +44328,8 @@ exports.removeCurrentTenantId = removeCurrentTenantId;
41855
44328
  exports.removeTenantList = removeTenantList;
41856
44329
  exports.renderFixed2 = renderFixed2;
41857
44330
  exports.renderNumberText = renderNumberText;
44331
+ exports.resolveBusinessFunctionCode = resolveBusinessFunctionCode;
44332
+ exports.resolveImportExportServices = resolveImportExportServices;
41858
44333
  exports.saveCurrentTenantId = saveCurrentTenantId;
41859
44334
  exports.saveTenantList = saveTenantList;
41860
44335
  exports.setConfigTableColumns = setConfigTableColumns;
@@ -41862,7 +44337,9 @@ exports.shouldUseAuth = shouldUseAuth;
41862
44337
  exports.socketFunctions = socketFunctions;
41863
44338
  exports.sulaTableRenderTooltip = sulaTableRenderTooltip;
41864
44339
  exports.tableColumnsImage = tableColumnsImage$1;
44340
+ exports.taskTypeName = taskTypeName;
41865
44341
  exports.textIcon = textIcon;
44342
+ exports.unwrapResponse = unwrapResponse;
41866
44343
  exports.updateGuanDate = updateGuanDate;
41867
44344
  exports.userColumns = userColumns$1;
41868
44345
  exports.userInfoCard = userInfoCard$1;