sa2kit 1.6.29 → 1.6.31
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.
- package/dist/AliyunOSSProvider-P6TOVKMM.mjs +6 -0
- package/dist/{AliyunOSSProvider-I7I5YGLB.mjs.map → AliyunOSSProvider-P6TOVKMM.mjs.map} +1 -1
- package/dist/AliyunOSSProvider-Z5BRBCG6.js +15 -0
- package/dist/{AliyunOSSProvider-L7JWMKS4.js.map → AliyunOSSProvider-Z5BRBCG6.js.map} +1 -1
- package/dist/ConfigService-3DIC6C3Q.js +21 -0
- package/dist/{ConfigService-7MEZXKJ5.js.map → ConfigService-3DIC6C3Q.js.map} +1 -1
- package/dist/ConfigService-V6ZK273Z.mjs +4 -0
- package/dist/{ConfigService-BV57YYFW.mjs.map → ConfigService-V6ZK273Z.mjs.map} +1 -1
- package/dist/LocalStorageProvider-3RVPCQB3.mjs +6 -0
- package/dist/{LocalStorageProvider-FVLLHBHO.mjs.map → LocalStorageProvider-3RVPCQB3.mjs.map} +1 -1
- package/dist/LocalStorageProvider-PP7MA5OT.js +15 -0
- package/dist/{LocalStorageProvider-NBNHHWLY.js.map → LocalStorageProvider-PP7MA5OT.js.map} +1 -1
- package/dist/PMXParser-2VTA737I.js +13 -0
- package/dist/{PMXParser-YBS3B6HM.js.map → PMXParser-2VTA737I.js.map} +1 -1
- package/dist/PMXParser-RNVQL76A.mjs +4 -0
- package/dist/{PMXParser-L6IWHL4I.mjs.map → PMXParser-RNVQL76A.mjs.map} +1 -1
- package/dist/analytics/index.js +46 -45
- package/dist/analytics/index.js.map +1 -1
- package/dist/analytics/index.mjs +45 -44
- package/dist/analytics/index.mjs.map +1 -1
- package/dist/analytics/server/index.js +4 -4
- package/dist/analytics/server/index.js.map +1 -1
- package/dist/analytics/server/index.mjs +4 -4
- package/dist/analytics/server/index.mjs.map +1 -1
- package/dist/api/index.js +5 -5
- package/dist/api/index.js.map +1 -1
- package/dist/api/index.mjs +5 -5
- package/dist/api/index.mjs.map +1 -1
- package/dist/audioDetection/index.js +17 -16
- package/dist/audioDetection/index.js.map +1 -1
- package/dist/audioDetection/index.mjs +17 -16
- package/dist/audioDetection/index.mjs.map +1 -1
- package/dist/auth/client/index.js +4 -4
- package/dist/auth/client/index.mjs +1 -1
- package/dist/auth/components/index.js +3 -3
- package/dist/auth/components/index.js.map +1 -1
- package/dist/auth/components/index.mjs +3 -3
- package/dist/auth/components/index.mjs.map +1 -1
- package/dist/auth/index.js +29 -29
- package/dist/auth/index.mjs +5 -5
- package/dist/auth/middleware/index.js +3 -3
- package/dist/auth/middleware/index.mjs +2 -2
- package/dist/auth/routes/index.js +14 -14
- package/dist/auth/routes/index.mjs +2 -2
- package/dist/auth/services/index.js +7 -7
- package/dist/auth/services/index.mjs +1 -1
- package/dist/calendar/index.js +146 -182
- package/dist/calendar/index.js.map +1 -1
- package/dist/calendar/index.mjs +139 -175
- package/dist/calendar/index.mjs.map +1 -1
- package/dist/calendar/routes/index.js +1 -1
- package/dist/calendar/routes/index.js.map +1 -1
- package/dist/calendar/routes/index.mjs +1 -1
- package/dist/calendar/routes/index.mjs.map +1 -1
- package/dist/{chunk-5YQ5B7IZ.js → chunk-24HGREE6.js} +5 -5
- package/dist/{chunk-5YQ5B7IZ.js.map → chunk-24HGREE6.js.map} +1 -1
- package/dist/{chunk-6PRFP5EG.js → chunk-25OFOKNF.js} +6 -6
- package/dist/chunk-25OFOKNF.js.map +1 -0
- package/dist/{chunk-KQGP6BTS.mjs → chunk-3DXPQ4YV.mjs} +6 -6
- package/dist/chunk-3DXPQ4YV.mjs.map +1 -0
- package/dist/{chunk-3BGPZN4X.mjs → chunk-3NHAT7D4.mjs} +12 -12
- package/dist/chunk-3NHAT7D4.mjs.map +1 -0
- package/dist/{chunk-MW4BCIZC.mjs → chunk-4HC6M7FK.mjs} +3 -3
- package/dist/chunk-4HC6M7FK.mjs.map +1 -0
- package/dist/{chunk-ESRCX5TQ.mjs → chunk-52TN2QSS.mjs} +3 -3
- package/dist/{chunk-ESRCX5TQ.mjs.map → chunk-52TN2QSS.mjs.map} +1 -1
- package/dist/{chunk-DW2ZTOCV.js → chunk-5A7ERLKK.js} +105 -106
- package/dist/chunk-5A7ERLKK.js.map +1 -0
- package/dist/{chunk-CNTILN5J.mjs → chunk-5YQ62BKX.mjs} +20 -19
- package/dist/chunk-5YQ62BKX.mjs.map +1 -0
- package/dist/{chunk-6W5BMXJG.js → chunk-6OWNMJKG.js} +4 -4
- package/dist/{chunk-6W5BMXJG.js.map → chunk-6OWNMJKG.js.map} +1 -1
- package/dist/{chunk-WSNM4EU5.mjs → chunk-77M5AQG3.mjs} +37 -41
- package/dist/chunk-77M5AQG3.mjs.map +1 -0
- package/dist/{chunk-DUHZ7VZP.js → chunk-7VRT55ZD.js} +3 -3
- package/dist/chunk-7VRT55ZD.js.map +1 -0
- package/dist/{chunk-LX4XX6W7.js → chunk-C54W2CMK.js} +16 -16
- package/dist/chunk-C54W2CMK.js.map +1 -0
- package/dist/{chunk-3WOAPLEG.mjs → chunk-EB4NR623.mjs} +27 -26
- package/dist/chunk-EB4NR623.mjs.map +1 -0
- package/dist/{chunk-CD77U7LZ.js → chunk-GBPLX42J.js} +9 -9
- package/dist/chunk-GBPLX42J.js.map +1 -0
- package/dist/{chunk-TFQF2HDO.mjs → chunk-HDEOCX2L.mjs} +12 -12
- package/dist/chunk-HDEOCX2L.mjs.map +1 -0
- package/dist/{chunk-LFG6FPM5.mjs → chunk-KIP2CERU.mjs} +37 -38
- package/dist/chunk-KIP2CERU.mjs.map +1 -0
- package/dist/{chunk-6YKMCPQI.mjs → chunk-KZKIH4AS.mjs} +4 -4
- package/dist/chunk-KZKIH4AS.mjs.map +1 -0
- package/dist/{chunk-6MQUBPKB.mjs → chunk-LJ4CCSSY.mjs} +3 -3
- package/dist/{chunk-6MQUBPKB.mjs.map → chunk-LJ4CCSSY.mjs.map} +1 -1
- package/dist/{chunk-TOC5FSHP.js → chunk-NJ2SNXBJ.js} +12 -12
- package/dist/chunk-NJ2SNXBJ.js.map +1 -0
- package/dist/{chunk-OCR5DS4C.mjs → chunk-PE5EAHZK.mjs} +3 -3
- package/dist/chunk-PE5EAHZK.mjs.map +1 -0
- package/dist/{chunk-TKCYPDWU.js → chunk-Q5EDCKQA.js} +27 -29
- package/dist/chunk-Q5EDCKQA.js.map +1 -0
- package/dist/{chunk-CLKKZSPZ.js → chunk-RBKGYWME.js} +20 -19
- package/dist/chunk-RBKGYWME.js.map +1 -0
- package/dist/{chunk-VRTRSEEH.mjs → chunk-RSJSZ7QH.mjs} +11 -11
- package/dist/chunk-RSJSZ7QH.mjs.map +1 -0
- package/dist/{chunk-E7RGBAYJ.js → chunk-TDCDEBGP.js} +30 -29
- package/dist/chunk-TDCDEBGP.js.map +1 -0
- package/dist/{chunk-T5OZHYVM.mjs → chunk-TVROG2Q4.mjs} +15 -15
- package/dist/chunk-TVROG2Q4.mjs.map +1 -0
- package/dist/{chunk-JZXJQMVE.js → chunk-UIFFDRTE.js} +11 -11
- package/dist/chunk-UIFFDRTE.js.map +1 -0
- package/dist/{chunk-UOFTHYIH.js → chunk-UL6XJGUZ.js} +4 -4
- package/dist/chunk-UL6XJGUZ.js.map +1 -0
- package/dist/{chunk-A3UP56MS.js → chunk-WA67GZSZ.js} +3 -3
- package/dist/chunk-WA67GZSZ.js.map +1 -0
- package/dist/{chunk-OLHGZXN3.mjs → chunk-WEEXCPSE.mjs} +5 -5
- package/dist/chunk-WEEXCPSE.mjs.map +1 -0
- package/dist/{chunk-5GCHAXY5.js → chunk-X3UU7JHT.js} +38 -42
- package/dist/chunk-X3UU7JHT.js.map +1 -0
- package/dist/{chunk-QU5OT4DF.js → chunk-XJ7ZAGC5.js} +5 -5
- package/dist/chunk-XJ7ZAGC5.js.map +1 -0
- package/dist/{chunk-GSTLV3MB.mjs → chunk-YOTQG4NP.mjs} +26 -28
- package/dist/chunk-YOTQG4NP.mjs.map +1 -0
- package/dist/{chunk-QAT2RWAO.mjs → chunk-Z36R3P62.mjs} +7 -7
- package/dist/chunk-Z36R3P62.mjs.map +1 -0
- package/dist/{chunk-7Z5LLJ3A.js → chunk-ZWQJSZEY.js} +13 -13
- package/dist/chunk-ZWQJSZEY.js.map +1 -0
- package/dist/config/index.js +6 -6
- package/dist/config/index.js.map +1 -1
- package/dist/config/index.mjs +6 -6
- package/dist/config/index.mjs.map +1 -1
- package/dist/config/server/index.js +37 -37
- package/dist/config/server/index.js.map +1 -1
- package/dist/config/server/index.mjs +37 -37
- package/dist/config/server/index.mjs.map +1 -1
- package/dist/i18n/index.d.mts +2 -2
- package/dist/i18n/index.d.ts +2 -2
- package/dist/i18n/index.js +16 -17
- package/dist/i18n/index.js.map +1 -1
- package/dist/i18n/index.mjs +16 -17
- package/dist/i18n/index.mjs.map +1 -1
- package/dist/imageCrop/index.js +11 -10
- package/dist/imageCrop/index.js.map +1 -1
- package/dist/imageCrop/index.mjs +11 -10
- package/dist/imageCrop/index.mjs.map +1 -1
- package/dist/index.js +221 -246
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +79 -104
- package/dist/index.mjs.map +1 -1
- package/dist/logger/index.js +6 -6
- package/dist/logger/index.mjs +1 -1
- package/dist/mmd/admin/index.js +11 -10
- package/dist/mmd/admin/index.js.map +1 -1
- package/dist/mmd/admin/index.mjs +11 -10
- package/dist/mmd/admin/index.mjs.map +1 -1
- package/dist/mmd/index.js +223 -241
- package/dist/mmd/index.js.map +1 -1
- package/dist/mmd/index.mjs +220 -238
- package/dist/mmd/index.mjs.map +1 -1
- package/dist/mmd/server/index.js +6 -6
- package/dist/mmd/server/index.js.map +1 -1
- package/dist/mmd/server/index.mjs +6 -6
- package/dist/mmd/server/index.mjs.map +1 -1
- package/dist/music/index.js +16 -16
- package/dist/music/index.mjs +2 -2
- package/dist/music/server/index.js +8 -8
- package/dist/music/server/index.mjs +1 -1
- package/dist/request/index.js +2 -2
- package/dist/request/index.js.map +1 -1
- package/dist/request/index.mjs +2 -2
- package/dist/request/index.mjs.map +1 -1
- package/dist/storage/index.js +11 -11
- package/dist/storage/index.mjs +2 -2
- package/dist/testYourself/admin/index.js +3 -3
- package/dist/testYourself/admin/index.mjs +1 -1
- package/dist/testYourself/index.js +22 -22
- package/dist/testYourself/index.js.map +1 -1
- package/dist/testYourself/index.mjs +14 -14
- package/dist/testYourself/index.mjs.map +1 -1
- package/dist/testYourself/server/index.js +4 -4
- package/dist/testYourself/server/index.mjs +1 -1
- package/dist/universalExport/index.d.mts +3 -3
- package/dist/universalExport/index.d.ts +3 -3
- package/dist/universalExport/index.js +48 -47
- package/dist/universalExport/index.js.map +1 -1
- package/dist/universalExport/index.mjs +48 -47
- package/dist/universalExport/index.mjs.map +1 -1
- package/dist/universalExport/server/index.js +29 -29
- package/dist/universalExport/server/index.js.map +1 -1
- package/dist/universalExport/server/index.mjs +28 -28
- package/dist/universalExport/server/index.mjs.map +1 -1
- package/dist/universalFile/index.d.mts +3 -3
- package/dist/universalFile/index.d.ts +3 -3
- package/dist/universalFile/index.js +73 -72
- package/dist/universalFile/index.js.map +1 -1
- package/dist/universalFile/index.mjs +73 -72
- package/dist/universalFile/index.mjs.map +1 -1
- package/dist/universalFile/server/index.js +258 -260
- package/dist/universalFile/server/index.js.map +1 -1
- package/dist/universalFile/server/index.mjs +244 -246
- package/dist/universalFile/server/index.mjs.map +1 -1
- package/dist/utils/index.js +11 -11
- package/dist/utils/index.mjs +2 -2
- package/package.json +1 -1
- package/dist/AliyunOSSProvider-I7I5YGLB.mjs +0 -6
- package/dist/AliyunOSSProvider-L7JWMKS4.js +0 -15
- package/dist/ConfigService-7MEZXKJ5.js +0 -21
- package/dist/ConfigService-BV57YYFW.mjs +0 -4
- package/dist/LocalStorageProvider-FVLLHBHO.mjs +0 -6
- package/dist/LocalStorageProvider-NBNHHWLY.js +0 -15
- package/dist/PMXParser-L6IWHL4I.mjs +0 -4
- package/dist/PMXParser-YBS3B6HM.js +0 -13
- package/dist/chunk-3BGPZN4X.mjs.map +0 -1
- package/dist/chunk-3WOAPLEG.mjs.map +0 -1
- package/dist/chunk-5GCHAXY5.js.map +0 -1
- package/dist/chunk-6PRFP5EG.js.map +0 -1
- package/dist/chunk-6YKMCPQI.mjs.map +0 -1
- package/dist/chunk-7Z5LLJ3A.js.map +0 -1
- package/dist/chunk-A3UP56MS.js.map +0 -1
- package/dist/chunk-CD77U7LZ.js.map +0 -1
- package/dist/chunk-CLKKZSPZ.js.map +0 -1
- package/dist/chunk-CNTILN5J.mjs.map +0 -1
- package/dist/chunk-DUHZ7VZP.js.map +0 -1
- package/dist/chunk-DW2ZTOCV.js.map +0 -1
- package/dist/chunk-E7RGBAYJ.js.map +0 -1
- package/dist/chunk-GSTLV3MB.mjs.map +0 -1
- package/dist/chunk-JZXJQMVE.js.map +0 -1
- package/dist/chunk-KQGP6BTS.mjs.map +0 -1
- package/dist/chunk-LFG6FPM5.mjs.map +0 -1
- package/dist/chunk-LX4XX6W7.js.map +0 -1
- package/dist/chunk-MW4BCIZC.mjs.map +0 -1
- package/dist/chunk-OCR5DS4C.mjs.map +0 -1
- package/dist/chunk-OLHGZXN3.mjs.map +0 -1
- package/dist/chunk-QAT2RWAO.mjs.map +0 -1
- package/dist/chunk-QU5OT4DF.js.map +0 -1
- package/dist/chunk-T5OZHYVM.mjs.map +0 -1
- package/dist/chunk-TFQF2HDO.mjs.map +0 -1
- package/dist/chunk-TKCYPDWU.js.map +0 -1
- package/dist/chunk-TOC5FSHP.js.map +0 -1
- package/dist/chunk-UOFTHYIH.js.map +0 -1
- package/dist/chunk-VRTRSEEH.mjs.map +0 -1
- package/dist/chunk-WSNM4EU5.mjs.map +0 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { ExportConfigError, ExportDataError, ExportFileError, ExportServiceError } from '../chunk-LFB5EIIM.mjs';
|
|
2
2
|
import '../chunk-BJTO5JO5.mjs';
|
|
3
3
|
import React, { useState, useCallback, useEffect } from 'react';
|
|
4
|
+
import { clsx } from 'clsx';
|
|
4
5
|
import { Settings, X, Eye, EyeOff, MoveUp, MoveDown, Trash2, Group, Save, Loader2, Download, ChevronDown, Type, Database, FileText, FileSpreadsheet } from 'lucide-react';
|
|
5
6
|
|
|
6
7
|
// src/universalExport/constants.ts
|
|
@@ -29,19 +30,19 @@ var EXPORT_FORMAT_MIME_TYPES = {
|
|
|
29
30
|
var API_BASE_PATH = "/api/universal-export";
|
|
30
31
|
var API_ENDPOINTS = {
|
|
31
32
|
/** 获取配置列表 */
|
|
32
|
-
GET_CONFIGS:
|
|
33
|
+
GET_CONFIGS: API_BASE_PATH + "/configs",
|
|
33
34
|
/** 创建配置 */
|
|
34
|
-
CREATE_CONFIG:
|
|
35
|
+
CREATE_CONFIG: API_BASE_PATH + "/configs",
|
|
35
36
|
/** 更新配置 */
|
|
36
|
-
UPDATE_CONFIG: (configId) =>
|
|
37
|
+
UPDATE_CONFIG: (configId) => API_BASE_PATH + "/configs/" + configId,
|
|
37
38
|
/** 删除配置 */
|
|
38
|
-
DELETE_CONFIG: (configId) =>
|
|
39
|
+
DELETE_CONFIG: (configId) => API_BASE_PATH + "/configs/" + configId,
|
|
39
40
|
/** 触发导出 */
|
|
40
|
-
EXPORT_DATA:
|
|
41
|
+
EXPORT_DATA: API_BASE_PATH + "/export",
|
|
41
42
|
/** 查询导出进度 */
|
|
42
|
-
GET_PROGRESS: (exportId) =>
|
|
43
|
+
GET_PROGRESS: (exportId) => API_BASE_PATH + "/export/" + exportId + "/progress",
|
|
43
44
|
/** 下载导出文件 */
|
|
44
|
-
DOWNLOAD_FILE: (exportId) =>
|
|
45
|
+
DOWNLOAD_FILE: (exportId) => API_BASE_PATH + "/export/" + exportId + "/download"
|
|
45
46
|
};
|
|
46
47
|
var ERROR_CODES = {
|
|
47
48
|
/** 导出配置错误 */
|
|
@@ -66,7 +67,7 @@ function generateExportFileName(template, format) {
|
|
|
66
67
|
const dateStr = now.toISOString().split("T")[0] || "";
|
|
67
68
|
const timeStr = (now.toTimeString().split(" ")[0] || "").replace(/:/g, "-");
|
|
68
69
|
const extension = EXPORT_FORMAT_EXTENSIONS[format];
|
|
69
|
-
return template.replace("{date}", dateStr).replace("{time}", timeStr).replace("{timestamp}", now.getTime().toString()) +
|
|
70
|
+
return template.replace("{date}", dateStr).replace("{time}", timeStr).replace("{timestamp}", now.getTime().toString()) + "." + extension;
|
|
70
71
|
}
|
|
71
72
|
function validateFileName(fileName) {
|
|
72
73
|
const invalidChars = /[<>:"|?*\/\\]/;
|
|
@@ -84,7 +85,7 @@ function sanitizeFileName(fileName) {
|
|
|
84
85
|
function escapeCSVField(value, delimiter = ",") {
|
|
85
86
|
const valueStr = String(value || "");
|
|
86
87
|
if (valueStr.includes(delimiter) || valueStr.includes('"') || valueStr.includes("\n")) {
|
|
87
|
-
return
|
|
88
|
+
return '"' + valueStr.replace(/"/g, '""') + '"';
|
|
88
89
|
}
|
|
89
90
|
return valueStr;
|
|
90
91
|
}
|
|
@@ -117,12 +118,12 @@ var DEFAULT_FORMATTERS = {
|
|
|
117
118
|
// 货币格式化
|
|
118
119
|
currency: (value) => {
|
|
119
120
|
if (value === null || value === void 0) return "";
|
|
120
|
-
return
|
|
121
|
+
return "\xA5" + Number(value).toFixed(2);
|
|
121
122
|
},
|
|
122
123
|
// 百分比格式化
|
|
123
124
|
percentage: (value) => {
|
|
124
125
|
if (value === null || value === void 0) return "";
|
|
125
|
-
return
|
|
126
|
+
return (Number(value) * 100).toFixed(2) + "%";
|
|
126
127
|
},
|
|
127
128
|
// 布尔值格式化
|
|
128
129
|
boolean: (value) => {
|
|
@@ -191,24 +192,24 @@ function formatFileSize(bytes) {
|
|
|
191
192
|
const units = ["B", "KB", "MB", "GB", "TB"];
|
|
192
193
|
const k = 1024;
|
|
193
194
|
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
194
|
-
return
|
|
195
|
+
return (bytes / Math.pow(k, i)).toFixed(2) + " " + units[i];
|
|
195
196
|
}
|
|
196
197
|
function formatDuration(milliseconds) {
|
|
197
198
|
if (milliseconds < 1e3) {
|
|
198
|
-
return
|
|
199
|
+
return milliseconds + "ms";
|
|
199
200
|
}
|
|
200
201
|
const seconds = Math.floor(milliseconds / 1e3);
|
|
201
202
|
if (seconds < 60) {
|
|
202
|
-
return
|
|
203
|
+
return seconds + "\u79D2";
|
|
203
204
|
}
|
|
204
205
|
const minutes = Math.floor(seconds / 60);
|
|
205
206
|
const remainingSeconds = seconds % 60;
|
|
206
207
|
if (minutes < 60) {
|
|
207
|
-
return remainingSeconds > 0 ?
|
|
208
|
+
return remainingSeconds > 0 ? minutes + "\u5206" + remainingSeconds + "\u79D2" : minutes + "\u5206\u949F";
|
|
208
209
|
}
|
|
209
210
|
const hours = Math.floor(minutes / 60);
|
|
210
211
|
const remainingMinutes = minutes % 60;
|
|
211
|
-
return remainingMinutes > 0 ?
|
|
212
|
+
return remainingMinutes > 0 ? hours + "\u5C0F\u65F6" + remainingMinutes + "\u5206\u949F" : hours + "\u5C0F\u65F6";
|
|
212
213
|
}
|
|
213
214
|
function estimateEndTime(startTime, processedRows, totalRows) {
|
|
214
215
|
if (processedRows === 0 || totalRows === 0) {
|
|
@@ -273,21 +274,21 @@ var UniversalExportClient = class {
|
|
|
273
274
|
if (businessId) {
|
|
274
275
|
params.append("businessId", businessId);
|
|
275
276
|
}
|
|
276
|
-
const url =
|
|
277
|
+
const url = this.config.baseUrl + API_ENDPOINTS.GET_CONFIGS + "?" + params;
|
|
277
278
|
try {
|
|
278
279
|
const response = await this.fetchWithTimeout(url, {
|
|
279
280
|
method: "GET",
|
|
280
281
|
headers: this.getHeaders()
|
|
281
282
|
});
|
|
282
283
|
if (!response.ok) {
|
|
283
|
-
throw new Error(
|
|
284
|
+
throw new Error("\u83B7\u53D6\u914D\u7F6E\u5931\u8D25: " + response.statusText);
|
|
284
285
|
}
|
|
285
286
|
const data = await response.json();
|
|
286
287
|
return this.transformConfigsFromAPI(data.configs || []);
|
|
287
288
|
} catch (error) {
|
|
288
289
|
throw createExportError(
|
|
289
290
|
ERROR_CODES.NETWORK_ERROR,
|
|
290
|
-
|
|
291
|
+
"\u83B7\u53D6\u5BFC\u51FA\u914D\u7F6E\u5931\u8D25: " + formatErrorMessage(error),
|
|
291
292
|
{ moduleId, businessId, originalError: error }
|
|
292
293
|
);
|
|
293
294
|
}
|
|
@@ -296,7 +297,7 @@ var UniversalExportClient = class {
|
|
|
296
297
|
* 创建导出配置
|
|
297
298
|
*/
|
|
298
299
|
async createConfig(config) {
|
|
299
|
-
const url =
|
|
300
|
+
const url = this.config.baseUrl + API_ENDPOINTS.CREATE_CONFIG;
|
|
300
301
|
try {
|
|
301
302
|
const response = await this.fetchWithTimeout(url, {
|
|
302
303
|
method: "POST",
|
|
@@ -307,14 +308,14 @@ var UniversalExportClient = class {
|
|
|
307
308
|
body: JSON.stringify(config)
|
|
308
309
|
});
|
|
309
310
|
if (!response.ok) {
|
|
310
|
-
throw new Error(
|
|
311
|
+
throw new Error("\u521B\u5EFA\u914D\u7F6E\u5931\u8D25: " + response.statusText);
|
|
311
312
|
}
|
|
312
313
|
const data = await response.json();
|
|
313
314
|
return this.transformConfigFromAPI(data.config);
|
|
314
315
|
} catch (error) {
|
|
315
316
|
throw createExportError(
|
|
316
317
|
ERROR_CODES.NETWORK_ERROR,
|
|
317
|
-
|
|
318
|
+
"\u521B\u5EFA\u5BFC\u51FA\u914D\u7F6E\u5931\u8D25: " + formatErrorMessage(error),
|
|
318
319
|
{ config, originalError: error }
|
|
319
320
|
);
|
|
320
321
|
}
|
|
@@ -323,7 +324,7 @@ var UniversalExportClient = class {
|
|
|
323
324
|
* 更新导出配置
|
|
324
325
|
*/
|
|
325
326
|
async updateConfig(configId, updates) {
|
|
326
|
-
const url =
|
|
327
|
+
const url = this.config.baseUrl + API_ENDPOINTS.UPDATE_CONFIG(configId);
|
|
327
328
|
try {
|
|
328
329
|
const response = await this.fetchWithTimeout(url, {
|
|
329
330
|
method: "PUT",
|
|
@@ -334,14 +335,14 @@ var UniversalExportClient = class {
|
|
|
334
335
|
body: JSON.stringify(updates)
|
|
335
336
|
});
|
|
336
337
|
if (!response.ok) {
|
|
337
|
-
throw new Error(
|
|
338
|
+
throw new Error("\u66F4\u65B0\u914D\u7F6E\u5931\u8D25: " + response.statusText);
|
|
338
339
|
}
|
|
339
340
|
const data = await response.json();
|
|
340
341
|
return this.transformConfigFromAPI(data.config);
|
|
341
342
|
} catch (error) {
|
|
342
343
|
throw createExportError(
|
|
343
344
|
ERROR_CODES.NETWORK_ERROR,
|
|
344
|
-
|
|
345
|
+
"\u66F4\u65B0\u5BFC\u51FA\u914D\u7F6E\u5931\u8D25: " + formatErrorMessage(error),
|
|
345
346
|
{ configId, updates, originalError: error }
|
|
346
347
|
);
|
|
347
348
|
}
|
|
@@ -350,19 +351,19 @@ var UniversalExportClient = class {
|
|
|
350
351
|
* 删除导出配置
|
|
351
352
|
*/
|
|
352
353
|
async deleteConfig(configId) {
|
|
353
|
-
const url =
|
|
354
|
+
const url = this.config.baseUrl + API_ENDPOINTS.DELETE_CONFIG(configId);
|
|
354
355
|
try {
|
|
355
356
|
const response = await this.fetchWithTimeout(url, {
|
|
356
357
|
method: "DELETE",
|
|
357
358
|
headers: this.getHeaders()
|
|
358
359
|
});
|
|
359
360
|
if (!response.ok) {
|
|
360
|
-
throw new Error(
|
|
361
|
+
throw new Error("\u5220\u9664\u914D\u7F6E\u5931\u8D25: " + response.statusText);
|
|
361
362
|
}
|
|
362
363
|
} catch (error) {
|
|
363
364
|
throw createExportError(
|
|
364
365
|
ERROR_CODES.NETWORK_ERROR,
|
|
365
|
-
|
|
366
|
+
"\u5220\u9664\u5BFC\u51FA\u914D\u7F6E\u5931\u8D25: " + formatErrorMessage(error),
|
|
366
367
|
{ configId, originalError: error }
|
|
367
368
|
);
|
|
368
369
|
}
|
|
@@ -372,7 +373,7 @@ var UniversalExportClient = class {
|
|
|
372
373
|
* 触发数据导出
|
|
373
374
|
*/
|
|
374
375
|
async exportData(request) {
|
|
375
|
-
const url =
|
|
376
|
+
const url = this.config.baseUrl + API_ENDPOINTS.EXPORT_DATA;
|
|
376
377
|
try {
|
|
377
378
|
const isDataArray = Array.isArray(request.dataSource);
|
|
378
379
|
const requestBody = {
|
|
@@ -405,14 +406,14 @@ var UniversalExportClient = class {
|
|
|
405
406
|
} catch {
|
|
406
407
|
errorData = { message: errorText };
|
|
407
408
|
}
|
|
408
|
-
throw new Error(errorData.message ||
|
|
409
|
+
throw new Error(errorData.message || "\u5BFC\u51FA\u5931\u8D25: " + response.statusText);
|
|
409
410
|
}
|
|
410
411
|
const data = await response.json();
|
|
411
412
|
return this.transformExportResultFromAPI(data.result);
|
|
412
413
|
} catch (error) {
|
|
413
414
|
throw createExportError(
|
|
414
415
|
ERROR_CODES.EXPORT_DATA_ERROR,
|
|
415
|
-
|
|
416
|
+
"\u6570\u636E\u5BFC\u51FA\u5931\u8D25: " + formatErrorMessage(error),
|
|
416
417
|
{ request, originalError: error }
|
|
417
418
|
);
|
|
418
419
|
}
|
|
@@ -421,21 +422,21 @@ var UniversalExportClient = class {
|
|
|
421
422
|
* 查询导出进度
|
|
422
423
|
*/
|
|
423
424
|
async getExportProgress(exportId) {
|
|
424
|
-
const url =
|
|
425
|
+
const url = this.config.baseUrl + API_ENDPOINTS.GET_PROGRESS(exportId);
|
|
425
426
|
try {
|
|
426
427
|
const response = await this.fetchWithTimeout(url, {
|
|
427
428
|
method: "GET",
|
|
428
429
|
headers: this.getHeaders()
|
|
429
430
|
});
|
|
430
431
|
if (!response.ok) {
|
|
431
|
-
throw new Error(
|
|
432
|
+
throw new Error("\u83B7\u53D6\u5BFC\u51FA\u8FDB\u5EA6\u5931\u8D25: " + response.statusText);
|
|
432
433
|
}
|
|
433
434
|
const data = await response.json();
|
|
434
435
|
return this.transformProgressFromAPI(data.progress);
|
|
435
436
|
} catch (error) {
|
|
436
437
|
throw createExportError(
|
|
437
438
|
ERROR_CODES.NETWORK_ERROR,
|
|
438
|
-
|
|
439
|
+
"\u83B7\u53D6\u5BFC\u51FA\u8FDB\u5EA6\u5931\u8D25: " + formatErrorMessage(error),
|
|
439
440
|
{ exportId, originalError: error }
|
|
440
441
|
);
|
|
441
442
|
}
|
|
@@ -444,20 +445,20 @@ var UniversalExportClient = class {
|
|
|
444
445
|
* 下载导出文件
|
|
445
446
|
*/
|
|
446
447
|
async downloadExportFile(exportId) {
|
|
447
|
-
const url =
|
|
448
|
+
const url = this.config.baseUrl + API_ENDPOINTS.DOWNLOAD_FILE(exportId);
|
|
448
449
|
try {
|
|
449
450
|
const response = await this.fetchWithTimeout(url, {
|
|
450
451
|
method: "GET",
|
|
451
452
|
headers: this.getHeaders()
|
|
452
453
|
});
|
|
453
454
|
if (!response.ok) {
|
|
454
|
-
throw new Error(
|
|
455
|
+
throw new Error("\u4E0B\u8F7D\u6587\u4EF6\u5931\u8D25: " + response.statusText);
|
|
455
456
|
}
|
|
456
457
|
return await response.blob();
|
|
457
458
|
} catch (error) {
|
|
458
459
|
throw createExportError(
|
|
459
460
|
ERROR_CODES.NETWORK_ERROR,
|
|
460
|
-
|
|
461
|
+
"\u4E0B\u8F7D\u5BFC\u51FA\u6587\u4EF6\u5931\u8D25: " + formatErrorMessage(error),
|
|
461
462
|
{ exportId, originalError: error }
|
|
462
463
|
);
|
|
463
464
|
}
|
|
@@ -628,7 +629,7 @@ var ExportConfigEditor = ({
|
|
|
628
629
|
if (businessId) {
|
|
629
630
|
params.set("businessId", businessId);
|
|
630
631
|
}
|
|
631
|
-
const response = await fetch(
|
|
632
|
+
const response = await fetch("/api/universal-export/configs?" + params.toString());
|
|
632
633
|
if (response.ok) {
|
|
633
634
|
const data = await response.json();
|
|
634
635
|
setSavedConfigs(data.configs || []);
|
|
@@ -642,7 +643,7 @@ var ExportConfigEditor = ({
|
|
|
642
643
|
const deleteConfig = useCallback(async (configId) => {
|
|
643
644
|
setDeletingConfigId(configId);
|
|
644
645
|
try {
|
|
645
|
-
const response = await fetch(
|
|
646
|
+
const response = await fetch("/api/universal-export/configs/" + configId, {
|
|
646
647
|
method: "DELETE"
|
|
647
648
|
});
|
|
648
649
|
if (response.ok) {
|
|
@@ -668,7 +669,7 @@ var ExportConfigEditor = ({
|
|
|
668
669
|
if (!visible) return;
|
|
669
670
|
const scrollY = window.scrollY;
|
|
670
671
|
document.body.style.position = "fixed";
|
|
671
|
-
document.body.style.top =
|
|
672
|
+
document.body.style.top = "-" + scrollY + "px";
|
|
672
673
|
document.body.style.left = "0";
|
|
673
674
|
document.body.style.right = "0";
|
|
674
675
|
document.body.style.overflow = "hidden";
|
|
@@ -837,7 +838,7 @@ var ExportConfigEditor = ({
|
|
|
837
838
|
return /* @__PURE__ */ React.createElement(
|
|
838
839
|
"div",
|
|
839
840
|
{
|
|
840
|
-
className:
|
|
841
|
+
className: clsx("fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-[50] p-4", className),
|
|
841
842
|
onClick: onCancel
|
|
842
843
|
},
|
|
843
844
|
/* @__PURE__ */ React.createElement(
|
|
@@ -852,7 +853,7 @@ var ExportConfigEditor = ({
|
|
|
852
853
|
{
|
|
853
854
|
key: tab.id,
|
|
854
855
|
onClick: () => setActiveTab(tab.id),
|
|
855
|
-
className:
|
|
856
|
+
className: clsx("flex items-center gap-2 px-4 py-3 text-sm font-medium rounded-lg transition-colors", activeTab === tab.id ? "bg-white text-blue-600 shadow-sm border border-gray-200" : "text-gray-600 hover:text-gray-900")
|
|
856
857
|
},
|
|
857
858
|
tab.icon,
|
|
858
859
|
/* @__PURE__ */ React.createElement("span", null, tab.label)
|
|
@@ -1024,7 +1025,7 @@ var UniversalExportButton = ({
|
|
|
1024
1025
|
if ("message" in error && typeof error.message === "string") {
|
|
1025
1026
|
errorMessage = error.message;
|
|
1026
1027
|
} else if ("code" in error && "message" in error) {
|
|
1027
|
-
errorMessage =
|
|
1028
|
+
errorMessage = error.code + ": " + error.message;
|
|
1028
1029
|
}
|
|
1029
1030
|
} else if (typeof error === "string") {
|
|
1030
1031
|
errorMessage = error;
|
|
@@ -1078,7 +1079,7 @@ var UniversalExportButton = ({
|
|
|
1078
1079
|
"div",
|
|
1079
1080
|
{
|
|
1080
1081
|
className: "bg-blue-600 h-2 rounded-full transition-all duration-300",
|
|
1081
|
-
style: { width:
|
|
1082
|
+
style: { width: progress + "%" }
|
|
1082
1083
|
}
|
|
1083
1084
|
))));
|
|
1084
1085
|
};
|
|
@@ -1123,13 +1124,13 @@ var UniversalExportButton = ({
|
|
|
1123
1124
|
));
|
|
1124
1125
|
};
|
|
1125
1126
|
const buttonStyle = BUTTON_STYLES[variant][size];
|
|
1126
|
-
const baseClasses =
|
|
1127
|
-
return /* @__PURE__ */ React.createElement("div", { className:
|
|
1127
|
+
const baseClasses = "inline-flex items-center gap-2 rounded-lg font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed " + buttonStyle;
|
|
1128
|
+
return /* @__PURE__ */ React.createElement("div", { className: clsx("relative", className) }, /* @__PURE__ */ React.createElement(
|
|
1128
1129
|
"button",
|
|
1129
1130
|
{
|
|
1130
1131
|
onClick: () => setShowDropdown(!showDropdown),
|
|
1131
1132
|
disabled: disabled || isExporting,
|
|
1132
|
-
className:
|
|
1133
|
+
className: clsx(baseClasses, isExporting ? "cursor-not-allowed" : "")
|
|
1133
1134
|
},
|
|
1134
1135
|
isExporting ? /* @__PURE__ */ React.createElement(Loader2, { className: "w-4 h-4 animate-spin" }) : /* @__PURE__ */ React.createElement(Download, { className: "w-4 h-4" }),
|
|
1135
1136
|
/* @__PURE__ */ React.createElement("span", null, isExporting ? "\u5BFC\u51FA\u4E2D..." : buttonText),
|