sa2kit 1.6.30 → 1.6.32
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-4W47OFEK.mjs +6 -0
- package/dist/{AliyunOSSProvider-KJYRIZES.mjs.map → AliyunOSSProvider-4W47OFEK.mjs.map} +1 -1
- package/dist/AliyunOSSProvider-HCNGDJL7.js +15 -0
- package/dist/{AliyunOSSProvider-FWAKUB2T.js.map → AliyunOSSProvider-HCNGDJL7.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-RTPMUOZ2.mjs.map → LocalStorageProvider-3RVPCQB3.mjs.map} +1 -1
- package/dist/LocalStorageProvider-PP7MA5OT.js +15 -0
- package/dist/{LocalStorageProvider-XSRCUXOU.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-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-DUHZ7VZP.js → chunk-7VRT55ZD.js} +3 -3
- package/dist/chunk-7VRT55ZD.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-EI27JKND.mjs +1988 -0
- package/dist/chunk-EI27JKND.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-TV3VKRJK.mjs → chunk-HDMIOOZY.mjs} +38 -68
- package/dist/chunk-HDMIOOZY.mjs.map +1 -0
- package/dist/{chunk-OPPF3326.js → chunk-HJ6MH7J7.js} +39 -69
- package/dist/chunk-HJ6MH7J7.js.map +1 -0
- package/dist/chunk-KO73EBUT.js +80 -0
- package/dist/chunk-KO73EBUT.js.map +1 -0
- package/dist/{chunk-6YKMCPQI.mjs → chunk-KZKIH4AS.mjs} +4 -4
- package/dist/chunk-KZKIH4AS.mjs.map +1 -0
- package/dist/{chunk-LX4XX6W7.js → chunk-L47ZOYHL.js} +15 -89
- package/dist/chunk-L47ZOYHL.js.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-LZHMNOED.js → chunk-Q5EDCKQA.js} +26 -26
- 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-JZXJQMVE.js → chunk-UIFFDRTE.js} +11 -11
- package/dist/chunk-UIFFDRTE.js.map +1 -0
- package/dist/{chunk-T5OZHYVM.mjs → chunk-UKT3PLON.mjs} +13 -85
- package/dist/chunk-UKT3PLON.mjs.map +1 -0
- package/dist/{chunk-UOFTHYIH.js → chunk-UL6XJGUZ.js} +4 -4
- package/dist/chunk-UL6XJGUZ.js.map +1 -0
- package/dist/chunk-VVWQTO4Y.mjs +77 -0
- package/dist/chunk-VVWQTO4Y.mjs.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-XGBE4SUV.js +2093 -0
- package/dist/chunk-XGBE4SUV.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-ZI25QCHD.mjs → chunk-YOTQG4NP.mjs} +25 -25
- 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.d.mts +185 -100
- package/dist/index.d.ts +185 -100
- package/dist/index.js +225 -249
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +80 -104
- package/dist/index.mjs.map +1 -1
- package/dist/logger/index.js +6 -6
- package/dist/logger/index.mjs +1 -1
- package/dist/mikuFusionGame/index.d.mts +112 -0
- package/dist/mikuFusionGame/index.d.ts +112 -0
- package/dist/mikuFusionGame/index.js +680 -0
- package/dist/mikuFusionGame/index.js.map +1 -0
- package/dist/mikuFusionGame/index.mjs +667 -0
- package/dist/mikuFusionGame/index.mjs.map +1 -0
- 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 +15 -14
- package/dist/storage/index.mjs +3 -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 +25 -31
- package/dist/AliyunOSSProvider-FWAKUB2T.js +0 -15
- package/dist/AliyunOSSProvider-KJYRIZES.mjs +0 -6
- package/dist/ConfigService-7MEZXKJ5.js +0 -21
- package/dist/ConfigService-BV57YYFW.mjs +0 -4
- package/dist/LocalStorageProvider-RTPMUOZ2.mjs +0 -6
- package/dist/LocalStorageProvider-XSRCUXOU.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-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 +0 -1727
- package/dist/chunk-DW2ZTOCV.js.map +0 -1
- package/dist/chunk-E7RGBAYJ.js.map +0 -1
- package/dist/chunk-JZXJQMVE.js.map +0 -1
- package/dist/chunk-KQGP6BTS.mjs.map +0 -1
- package/dist/chunk-LFG6FPM5.mjs +0 -1597
- package/dist/chunk-LFG6FPM5.mjs.map +0 -1
- package/dist/chunk-LX4XX6W7.js.map +0 -1
- package/dist/chunk-LZHMNOED.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-OPPF3326.js.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-TOC5FSHP.js.map +0 -1
- package/dist/chunk-TV3VKRJK.mjs.map +0 -1
- package/dist/chunk-UOFTHYIH.js.map +0 -1
- package/dist/chunk-VRTRSEEH.mjs.map +0 -1
- package/dist/chunk-ZI25QCHD.mjs.map +0 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { CDNProviderError, FileProcessingError, FileServiceError, FileUploadError, StorageProviderError } from '../chunk-CIVO4R6N.mjs';
|
|
2
2
|
import '../chunk-BJTO5JO5.mjs';
|
|
3
3
|
import React2, { useState, useRef, useCallback, useEffect } from 'react';
|
|
4
|
+
import { clsx } from 'clsx';
|
|
4
5
|
import { Upload, AlertCircle, CheckCircle2, Loader2, X, Image, Film, Music, FileText } from 'lucide-react';
|
|
5
6
|
|
|
6
7
|
// src/universalFile/constants.ts
|
|
@@ -59,19 +60,19 @@ var DOCUMENT_EXTENSIONS = [
|
|
|
59
60
|
var API_BASE_PATH = "/api/universal-file";
|
|
60
61
|
var API_ENDPOINTS = {
|
|
61
62
|
/** 上传文件 */
|
|
62
|
-
UPLOAD:
|
|
63
|
+
UPLOAD: API_BASE_PATH + "/upload",
|
|
63
64
|
/** 获取文件URL */
|
|
64
|
-
GET_URL: (fileId) =>
|
|
65
|
+
GET_URL: (fileId) => API_BASE_PATH + "/files/" + fileId + "/url",
|
|
65
66
|
/** 获取文件元数据 */
|
|
66
|
-
GET_METADATA: (fileId) =>
|
|
67
|
+
GET_METADATA: (fileId) => API_BASE_PATH + "/files/" + fileId,
|
|
67
68
|
/** 删除文件 */
|
|
68
|
-
DELETE: (fileId) =>
|
|
69
|
+
DELETE: (fileId) => API_BASE_PATH + "/files/" + fileId,
|
|
69
70
|
/** 查询文件列表 */
|
|
70
|
-
QUERY:
|
|
71
|
+
QUERY: API_BASE_PATH + "/files",
|
|
71
72
|
/** 批量删除 */
|
|
72
|
-
BATCH_DELETE:
|
|
73
|
+
BATCH_DELETE: API_BASE_PATH + "/files/batch-delete",
|
|
73
74
|
/** 获取上传进度 */
|
|
74
|
-
GET_PROGRESS: (fileId) =>
|
|
75
|
+
GET_PROGRESS: (fileId) => API_BASE_PATH + "/upload/" + fileId + "/progress"
|
|
75
76
|
};
|
|
76
77
|
var ERROR_CODES = {
|
|
77
78
|
/** 文件上传错误 */
|
|
@@ -110,7 +111,7 @@ function formatFileSize(bytes) {
|
|
|
110
111
|
const units = ["B", "KB", "MB", "GB", "TB"];
|
|
111
112
|
const k = 1024;
|
|
112
113
|
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
113
|
-
return
|
|
114
|
+
return (bytes / Math.pow(k, i)).toFixed(2) + " " + units[i];
|
|
114
115
|
}
|
|
115
116
|
function parseFileSize(sizeStr) {
|
|
116
117
|
const match = sizeStr.match(/^(\d+(?:\.\d+)?)\s*([KMGT]?B)$/i);
|
|
@@ -198,7 +199,7 @@ function sanitizeFileName(fileName) {
|
|
|
198
199
|
}
|
|
199
200
|
function generateUniqueFileName(originalName, fileId) {
|
|
200
201
|
const ext = getFileExtension(originalName);
|
|
201
|
-
return
|
|
202
|
+
return fileId + ext;
|
|
202
203
|
}
|
|
203
204
|
function generateStoragePath(moduleId, fileName, options) {
|
|
204
205
|
const parts = [];
|
|
@@ -235,7 +236,7 @@ function validateFileSize(file, maxSize) {
|
|
|
235
236
|
if (file.size > maxSize) {
|
|
236
237
|
return {
|
|
237
238
|
valid: false,
|
|
238
|
-
error:
|
|
239
|
+
error: "\u6587\u4EF6\u5927\u5C0F\u8D85\u8FC7\u9650\u5236: " + formatFileSize(file.size) + " > " + formatFileSize(maxSize)
|
|
239
240
|
};
|
|
240
241
|
}
|
|
241
242
|
return { valid: true };
|
|
@@ -245,7 +246,7 @@ function validateFileType(file, allowedTypes) {
|
|
|
245
246
|
if (!isMimeTypeSupported(mimeType, allowedTypes)) {
|
|
246
247
|
return {
|
|
247
248
|
valid: false,
|
|
248
|
-
error:
|
|
249
|
+
error: "\u4E0D\u652F\u6301\u7684\u6587\u4EF6\u7C7B\u578B: " + mimeType
|
|
249
250
|
};
|
|
250
251
|
}
|
|
251
252
|
return { valid: true };
|
|
@@ -284,7 +285,7 @@ function buildQueryString(params) {
|
|
|
284
285
|
}
|
|
285
286
|
});
|
|
286
287
|
const queryString = searchParams.toString();
|
|
287
|
-
return queryString ?
|
|
288
|
+
return queryString ? "?" + queryString : "";
|
|
288
289
|
}
|
|
289
290
|
function parseQueryString(url) {
|
|
290
291
|
const params = {};
|
|
@@ -381,7 +382,7 @@ var UniversalFileClient = class {
|
|
|
381
382
|
* 上传文件
|
|
382
383
|
*/
|
|
383
384
|
async uploadFile(fileInfo, onProgress) {
|
|
384
|
-
const url =
|
|
385
|
+
const url = this.config.baseUrl + API_ENDPOINTS.UPLOAD;
|
|
385
386
|
const startTime = Date.now();
|
|
386
387
|
const formData = new FormData();
|
|
387
388
|
formData.append("file", fileInfo.file);
|
|
@@ -464,7 +465,7 @@ var UniversalFileClient = class {
|
|
|
464
465
|
}
|
|
465
466
|
} else {
|
|
466
467
|
console.error("\u274C [UniversalFileClient] \u4E0A\u4F20\u5931\u8D25:", xhr.status, xhr.statusText, xhr.responseText);
|
|
467
|
-
reject(new Error(
|
|
468
|
+
reject(new Error("\u4E0A\u4F20\u5931\u8D25: " + xhr.statusText));
|
|
468
469
|
}
|
|
469
470
|
});
|
|
470
471
|
xhr.addEventListener("error", (event) => {
|
|
@@ -508,7 +509,7 @@ var UniversalFileClient = class {
|
|
|
508
509
|
} catch (error) {
|
|
509
510
|
throw createFileError(
|
|
510
511
|
ERROR_CODES.FILE_UPLOAD_ERROR,
|
|
511
|
-
|
|
512
|
+
"\u6587\u4EF6\u4E0A\u4F20\u5931\u8D25: " + formatErrorMessage(error),
|
|
512
513
|
{ fileInfo, originalError: error }
|
|
513
514
|
);
|
|
514
515
|
}
|
|
@@ -518,21 +519,21 @@ var UniversalFileClient = class {
|
|
|
518
519
|
* 获取文件访问URL
|
|
519
520
|
*/
|
|
520
521
|
async getFileUrl(fileId, expiresIn) {
|
|
521
|
-
const url =
|
|
522
|
+
const url = this.config.baseUrl + API_ENDPOINTS.GET_URL(fileId) + (expiresIn ? `?expiresIn=${expiresIn}` : "");
|
|
522
523
|
try {
|
|
523
524
|
const response = await this.fetchWithTimeout(url, {
|
|
524
525
|
method: "GET",
|
|
525
526
|
headers: this.getHeaders()
|
|
526
527
|
});
|
|
527
528
|
if (!response.ok) {
|
|
528
|
-
throw new Error(
|
|
529
|
+
throw new Error("\u83B7\u53D6\u6587\u4EF6URL\u5931\u8D25: " + response.statusText);
|
|
529
530
|
}
|
|
530
531
|
const data = await response.json();
|
|
531
532
|
return data.url;
|
|
532
533
|
} catch (error) {
|
|
533
534
|
throw createFileError(
|
|
534
535
|
ERROR_CODES.NETWORK_ERROR,
|
|
535
|
-
|
|
536
|
+
"\u83B7\u53D6\u6587\u4EF6URL\u5931\u8D25: " + formatErrorMessage(error),
|
|
536
537
|
{ fileId, expiresIn, originalError: error }
|
|
537
538
|
);
|
|
538
539
|
}
|
|
@@ -541,7 +542,7 @@ var UniversalFileClient = class {
|
|
|
541
542
|
* 获取文件元数据
|
|
542
543
|
*/
|
|
543
544
|
async getFileMetadata(fileId) {
|
|
544
|
-
const url =
|
|
545
|
+
const url = this.config.baseUrl + API_ENDPOINTS.GET_METADATA(fileId);
|
|
545
546
|
try {
|
|
546
547
|
const response = await this.fetchWithTimeout(url, {
|
|
547
548
|
method: "GET",
|
|
@@ -551,14 +552,14 @@ var UniversalFileClient = class {
|
|
|
551
552
|
if (response.status === 404) {
|
|
552
553
|
throw createFileError(ERROR_CODES.FILE_NOT_FOUND, "\u6587\u4EF6\u4E0D\u5B58\u5728", { fileId });
|
|
553
554
|
}
|
|
554
|
-
throw new Error(
|
|
555
|
+
throw new Error("\u83B7\u53D6\u6587\u4EF6\u5143\u6570\u636E\u5931\u8D25: " + response.statusText);
|
|
555
556
|
}
|
|
556
557
|
const data = await response.json();
|
|
557
558
|
return this.transformFileMetadataFromAPI(data.file);
|
|
558
559
|
} catch (error) {
|
|
559
560
|
throw createFileError(
|
|
560
561
|
ERROR_CODES.NETWORK_ERROR,
|
|
561
|
-
|
|
562
|
+
"\u83B7\u53D6\u6587\u4EF6\u5143\u6570\u636E\u5931\u8D25: " + formatErrorMessage(error),
|
|
562
563
|
{ fileId, originalError: error }
|
|
563
564
|
);
|
|
564
565
|
}
|
|
@@ -583,7 +584,7 @@ var UniversalFileClient = class {
|
|
|
583
584
|
page: options.page,
|
|
584
585
|
pageSize: options.pageSize
|
|
585
586
|
});
|
|
586
|
-
const url =
|
|
587
|
+
const url = this.config.baseUrl + API_ENDPOINTS.QUERY + queryString;
|
|
587
588
|
try {
|
|
588
589
|
const response = await this.fetchWithTimeout(url, {
|
|
589
590
|
method: "GET",
|
|
@@ -591,7 +592,7 @@ var UniversalFileClient = class {
|
|
|
591
592
|
});
|
|
592
593
|
if (!response.ok) {
|
|
593
594
|
console.error("\u274C [UniversalFileClient] \u67E5\u8BE2\u6587\u4EF6\u5217\u8868\u5931\u8D25:", response.status, response.statusText);
|
|
594
|
-
throw new Error(
|
|
595
|
+
throw new Error("\u67E5\u8BE2\u6587\u4EF6\u5217\u8868\u5931\u8D25: " + response.statusText);
|
|
595
596
|
}
|
|
596
597
|
const data = await response.json();
|
|
597
598
|
console.log("\u{1F4E5} [UniversalFileClient] \u67E5\u8BE2\u6587\u4EF6\u5217\u8868\u54CD\u5E94:", {
|
|
@@ -623,7 +624,7 @@ var UniversalFileClient = class {
|
|
|
623
624
|
} catch (error) {
|
|
624
625
|
throw createFileError(
|
|
625
626
|
ERROR_CODES.NETWORK_ERROR,
|
|
626
|
-
|
|
627
|
+
"\u67E5\u8BE2\u6587\u4EF6\u5217\u8868\u5931\u8D25: " + formatErrorMessage(error),
|
|
627
628
|
{ options, originalError: error }
|
|
628
629
|
);
|
|
629
630
|
}
|
|
@@ -633,7 +634,7 @@ var UniversalFileClient = class {
|
|
|
633
634
|
* 删除文件
|
|
634
635
|
*/
|
|
635
636
|
async deleteFile(fileId) {
|
|
636
|
-
const url =
|
|
637
|
+
const url = this.config.baseUrl + API_ENDPOINTS.DELETE(fileId);
|
|
637
638
|
try {
|
|
638
639
|
const response = await this.fetchWithTimeout(url, {
|
|
639
640
|
method: "DELETE",
|
|
@@ -643,12 +644,12 @@ var UniversalFileClient = class {
|
|
|
643
644
|
if (response.status === 404) {
|
|
644
645
|
throw createFileError(ERROR_CODES.FILE_NOT_FOUND, "\u6587\u4EF6\u4E0D\u5B58\u5728", { fileId });
|
|
645
646
|
}
|
|
646
|
-
throw new Error(
|
|
647
|
+
throw new Error("\u5220\u9664\u6587\u4EF6\u5931\u8D25: " + response.statusText);
|
|
647
648
|
}
|
|
648
649
|
} catch (error) {
|
|
649
650
|
throw createFileError(
|
|
650
651
|
ERROR_CODES.NETWORK_ERROR,
|
|
651
|
-
|
|
652
|
+
"\u5220\u9664\u6587\u4EF6\u5931\u8D25: " + formatErrorMessage(error),
|
|
652
653
|
{ fileId, originalError: error }
|
|
653
654
|
);
|
|
654
655
|
}
|
|
@@ -657,7 +658,7 @@ var UniversalFileClient = class {
|
|
|
657
658
|
* 批量删除文件
|
|
658
659
|
*/
|
|
659
660
|
async batchDeleteFiles(fileIds) {
|
|
660
|
-
const url =
|
|
661
|
+
const url = this.config.baseUrl + API_ENDPOINTS.BATCH_DELETE;
|
|
661
662
|
try {
|
|
662
663
|
const response = await this.fetchWithTimeout(url, {
|
|
663
664
|
method: "POST",
|
|
@@ -668,14 +669,14 @@ var UniversalFileClient = class {
|
|
|
668
669
|
body: JSON.stringify({ fileIds })
|
|
669
670
|
});
|
|
670
671
|
if (!response.ok) {
|
|
671
|
-
throw new Error(
|
|
672
|
+
throw new Error("\u6279\u91CF\u5220\u9664\u6587\u4EF6\u5931\u8D25: " + response.statusText);
|
|
672
673
|
}
|
|
673
674
|
const data = await response.json();
|
|
674
675
|
return data.result;
|
|
675
676
|
} catch (error) {
|
|
676
677
|
throw createFileError(
|
|
677
678
|
ERROR_CODES.NETWORK_ERROR,
|
|
678
|
-
|
|
679
|
+
"\u6279\u91CF\u5220\u9664\u6587\u4EF6\u5931\u8D25: " + formatErrorMessage(error),
|
|
679
680
|
{ fileIds, originalError: error }
|
|
680
681
|
);
|
|
681
682
|
}
|
|
@@ -685,21 +686,21 @@ var UniversalFileClient = class {
|
|
|
685
686
|
* 获取上传进度
|
|
686
687
|
*/
|
|
687
688
|
async getUploadProgress(fileId) {
|
|
688
|
-
const url =
|
|
689
|
+
const url = this.config.baseUrl + API_ENDPOINTS.GET_PROGRESS(fileId);
|
|
689
690
|
try {
|
|
690
691
|
const response = await this.fetchWithTimeout(url, {
|
|
691
692
|
method: "GET",
|
|
692
693
|
headers: this.getHeaders()
|
|
693
694
|
});
|
|
694
695
|
if (!response.ok) {
|
|
695
|
-
throw new Error(
|
|
696
|
+
throw new Error("\u83B7\u53D6\u4E0A\u4F20\u8FDB\u5EA6\u5931\u8D25: " + response.statusText);
|
|
696
697
|
}
|
|
697
698
|
const data = await response.json();
|
|
698
699
|
return data.progress;
|
|
699
700
|
} catch (error) {
|
|
700
701
|
throw createFileError(
|
|
701
702
|
ERROR_CODES.NETWORK_ERROR,
|
|
702
|
-
|
|
703
|
+
"\u83B7\u53D6\u4E0A\u4F20\u8FDB\u5EA6\u5931\u8D25: " + formatErrorMessage(error),
|
|
703
704
|
{ fileId, originalError: error }
|
|
704
705
|
);
|
|
705
706
|
}
|
|
@@ -800,16 +801,16 @@ var FileUploader = ({
|
|
|
800
801
|
};
|
|
801
802
|
const validateFile2 = (file) => {
|
|
802
803
|
if (file.size > maxFileSize * 1024 * 1024) {
|
|
803
|
-
return
|
|
804
|
+
return "\u6587\u4EF6\u5927\u5C0F\u4E0D\u80FD\u8D85\u8FC7 " + maxFileSize + "MB";
|
|
804
805
|
}
|
|
805
806
|
if (acceptedTypes.length > 0 && !acceptedTypes.includes(file.type)) {
|
|
806
|
-
return
|
|
807
|
+
return "\u4E0D\u652F\u6301\u7684\u6587\u4EF6\u7C7B\u578B: " + file.type;
|
|
807
808
|
}
|
|
808
809
|
return null;
|
|
809
810
|
};
|
|
810
811
|
const uploadFile = useCallback(
|
|
811
812
|
async (file) => {
|
|
812
|
-
const fileId =
|
|
813
|
+
const fileId = "upload_" + Date.now() + "_" + Math.random().toString(36).substr(2, 9);
|
|
813
814
|
const error = validateFile2(file);
|
|
814
815
|
if (error) {
|
|
815
816
|
onUploadError?.(error);
|
|
@@ -881,7 +882,7 @@ var FileUploader = ({
|
|
|
881
882
|
(files) => {
|
|
882
883
|
const fileArray = Array.from(files);
|
|
883
884
|
if (completedFiles.length + uploadingFiles.length + fileArray.length > maxFiles) {
|
|
884
|
-
onUploadError?.(
|
|
885
|
+
onUploadError?.("\u6700\u591A\u53EA\u80FD\u4E0A\u4F20 " + maxFiles + " \u4E2A\u6587\u4EF6");
|
|
885
886
|
return;
|
|
886
887
|
}
|
|
887
888
|
fileArray.forEach(uploadFile);
|
|
@@ -934,7 +935,7 @@ var FileUploader = ({
|
|
|
934
935
|
case "pending":
|
|
935
936
|
return "\u51C6\u5907\u4E2D...";
|
|
936
937
|
case "uploading":
|
|
937
|
-
return
|
|
938
|
+
return "\u4E0A\u4F20\u4E2D " + progress.progress.toFixed(1) + "%";
|
|
938
939
|
case "processing":
|
|
939
940
|
return "\u5904\u7406\u4E2D...";
|
|
940
941
|
case "completed":
|
|
@@ -945,16 +946,16 @@ var FileUploader = ({
|
|
|
945
946
|
return "\u672A\u77E5\u72B6\u6001";
|
|
946
947
|
}
|
|
947
948
|
};
|
|
948
|
-
const containerClasses =
|
|
949
|
-
border-2 border-dashed rounded-lg transition-all duration-200
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
const uploadAreaClasses =
|
|
955
|
-
p-6 text-center
|
|
956
|
-
|
|
957
|
-
|
|
949
|
+
const containerClasses = clsx(
|
|
950
|
+
"border-2 border-dashed rounded-lg transition-all duration-200",
|
|
951
|
+
isDragOver ? "border-blue-400 bg-blue-50 dark:bg-blue-900/20" : "border-gray-300 dark:border-gray-600",
|
|
952
|
+
disabled ? "opacity-50 cursor-not-allowed" : "hover:border-blue-400 cursor-pointer",
|
|
953
|
+
className
|
|
954
|
+
);
|
|
955
|
+
const uploadAreaClasses = clsx(
|
|
956
|
+
"p-6 text-center",
|
|
957
|
+
mode === "compact" ? "p-4" : mode === "detailed" ? "p-8" : "p-6"
|
|
958
|
+
);
|
|
958
959
|
return /* @__PURE__ */ React2.createElement("div", { className: "w-full space-y-4" }, /* @__PURE__ */ React2.createElement(
|
|
959
960
|
"div",
|
|
960
961
|
{
|
|
@@ -967,7 +968,7 @@ var FileUploader = ({
|
|
|
967
968
|
/* @__PURE__ */ React2.createElement("div", { className: uploadAreaClasses }, /* @__PURE__ */ React2.createElement(
|
|
968
969
|
Upload,
|
|
969
970
|
{
|
|
970
|
-
className:
|
|
971
|
+
className: clsx("mx-auto mb-4 text-gray-400", mode === "compact" ? "w-8 h-8 mb-2" : "w-12 h-12")
|
|
971
972
|
}
|
|
972
973
|
), mode === "compact" ? /* @__PURE__ */ React2.createElement("p", { className: "text-sm text-gray-600 dark:text-gray-400" }, "\u70B9\u51FB\u4E0A\u4F20\u6216\u62D6\u62FD\u6587\u4EF6\u5230\u8FD9\u91CC") : /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement("h3", { className: "text-lg font-semibold text-gray-700 dark:text-gray-300 mb-2" }, "\u4E0A\u4F20\u6587\u4EF6"), /* @__PURE__ */ React2.createElement("p", { className: "text-gray-600 dark:text-gray-400 mb-2" }, "\u70B9\u51FB\u9009\u62E9\u6587\u4EF6\u6216\u62D6\u62FD\u6587\u4EF6\u5230\u8FD9\u91CC"), mode === "detailed" && /* @__PURE__ */ React2.createElement("div", { className: "text-sm text-gray-500 space-y-1" }, acceptedTypes.length > 0 && /* @__PURE__ */ React2.createElement("p", null, "\u652F\u6301\u683C\u5F0F: ", acceptedTypes.join(", ")), /* @__PURE__ */ React2.createElement("p", null, "\u6700\u5927\u5927\u5C0F: ", maxFileSize, "MB | \u6700\u591A\u6587\u4EF6: ", maxFiles, "\u4E2A")))),
|
|
973
974
|
/* @__PURE__ */ React2.createElement(
|
|
@@ -993,7 +994,7 @@ var FileUploader = ({
|
|
|
993
994
|
"div",
|
|
994
995
|
{
|
|
995
996
|
className: "bg-blue-500 h-2 rounded-full transition-all duration-300",
|
|
996
|
-
style: { width:
|
|
997
|
+
style: { width: uploadingFile.progress.progress + "%" }
|
|
997
998
|
}
|
|
998
999
|
)), /* @__PURE__ */ React2.createElement("p", { className: "text-xs text-gray-500" }, formatProgress(uploadingFile.progress)))),
|
|
999
1000
|
/* @__PURE__ */ React2.createElement(
|
|
@@ -1165,7 +1166,7 @@ var UniversalFileManager = ({
|
|
|
1165
1166
|
});
|
|
1166
1167
|
}, [onFileSelect, state.files]);
|
|
1167
1168
|
const handleDeleteFiles = useCallback(async (fileIds) => {
|
|
1168
|
-
if (!window.confirm(
|
|
1169
|
+
if (!window.confirm("\u786E\u5B9A\u8981\u5220\u9664\u9009\u4E2D\u7684 " + fileIds.length + " \u4E2A\u6587\u4EF6\u5417\uFF1F")) {
|
|
1169
1170
|
return;
|
|
1170
1171
|
}
|
|
1171
1172
|
setState((prev) => ({ ...prev, loading: true }));
|
|
@@ -1277,7 +1278,7 @@ var UniversalFileManager = ({
|
|
|
1277
1278
|
"div",
|
|
1278
1279
|
{
|
|
1279
1280
|
key: file.id,
|
|
1280
|
-
className:
|
|
1281
|
+
className: clsx("relative border rounded-lg p-4 cursor-pointer transition-all duration-200 hover:shadow-md", isSelected ? "border-blue-500 bg-blue-50" : "border-gray-200 hover:border-gray-300"),
|
|
1281
1282
|
onClick: () => handleFileSelect(file.id, !isSelected)
|
|
1282
1283
|
},
|
|
1283
1284
|
allowBatch && /* @__PURE__ */ React2.createElement("div", { className: "absolute top-2 left-2" }, /* @__PURE__ */ React2.createElement(
|
|
@@ -1438,7 +1439,7 @@ var UniversalFileManager = ({
|
|
|
1438
1439
|
key: action.key,
|
|
1439
1440
|
onClick: () => action.onClick(selectedFileList),
|
|
1440
1441
|
disabled: isDisabled,
|
|
1441
|
-
className:
|
|
1442
|
+
className: clsx("px-3 py-1 text-sm border rounded", isDisabled ? "text-gray-400 border-gray-200 cursor-not-allowed" : "text-blue-600 border-blue-300 hover:bg-blue-50")
|
|
1442
1443
|
},
|
|
1443
1444
|
action.icon && /* @__PURE__ */ React2.createElement("span", { className: "mr-1" }, action.icon),
|
|
1444
1445
|
action.label
|
|
@@ -1446,7 +1447,7 @@ var UniversalFileManager = ({
|
|
|
1446
1447
|
}))), /* @__PURE__ */ React2.createElement("div", { className: "flex items-center space-x-4" }, /* @__PURE__ */ React2.createElement(
|
|
1447
1448
|
"select",
|
|
1448
1449
|
{
|
|
1449
|
-
value:
|
|
1450
|
+
value: state.sortBy + "-" + state.sortOrder,
|
|
1450
1451
|
onChange: (e) => {
|
|
1451
1452
|
const [sortBy, sortOrder] = e.target.value.split("-");
|
|
1452
1453
|
setState((prev) => ({ ...prev, sortBy, sortOrder }));
|
|
@@ -1490,7 +1491,7 @@ var UniversalFileManager = ({
|
|
|
1490
1491
|
{
|
|
1491
1492
|
key: pageNum,
|
|
1492
1493
|
onClick: () => handlePageChange(pageNum),
|
|
1493
|
-
className:
|
|
1494
|
+
className: clsx("px-3 py-1 text-sm border rounded", pageNum === page ? "bg-blue-600 text-white border-blue-600" : "hover:bg-gray-50")
|
|
1494
1495
|
},
|
|
1495
1496
|
pageNum
|
|
1496
1497
|
)), /* @__PURE__ */ React2.createElement(
|
|
@@ -1517,7 +1518,7 @@ var UniversalFileManager = ({
|
|
|
1517
1518
|
className: "mt-2 text-blue-600 hover:text-blue-800"
|
|
1518
1519
|
},
|
|
1519
1520
|
"\u70B9\u51FB\u4E0A\u4F20\u7B2C\u4E00\u4E2A\u6587\u4EF6"
|
|
1520
|
-
))) : /* @__PURE__ */ React2.createElement("div", { className:
|
|
1521
|
+
))) : /* @__PURE__ */ React2.createElement("div", { className: clsx("grid gap-4", mode === "grid" ? "grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-6" : "grid-cols-1") }, state.files.map(renderFileItem))), renderPagination(), state.previewFile && showPreview && /* @__PURE__ */ React2.createElement(
|
|
1521
1522
|
FilePreviewModal,
|
|
1522
1523
|
{
|
|
1523
1524
|
file: state.previewFile,
|
|
@@ -1545,7 +1546,7 @@ var FilePreviewModal = ({ file, onClose }) => {
|
|
|
1545
1546
|
return /* @__PURE__ */ React2.createElement(
|
|
1546
1547
|
"img",
|
|
1547
1548
|
{
|
|
1548
|
-
src: file.cdnUrl ||
|
|
1549
|
+
src: file.cdnUrl || "/api/files/" + file.id + "/download",
|
|
1549
1550
|
alt: file.originalName,
|
|
1550
1551
|
className: "max-w-full max-h-full object-contain"
|
|
1551
1552
|
}
|
|
@@ -1555,7 +1556,7 @@ var FilePreviewModal = ({ file, onClose }) => {
|
|
|
1555
1556
|
return /* @__PURE__ */ React2.createElement(
|
|
1556
1557
|
"video",
|
|
1557
1558
|
{
|
|
1558
|
-
src: file.cdnUrl ||
|
|
1559
|
+
src: file.cdnUrl || "/api/files/" + file.id + "/download",
|
|
1559
1560
|
controls: true,
|
|
1560
1561
|
className: "max-w-full max-h-full"
|
|
1561
1562
|
},
|
|
@@ -1566,7 +1567,7 @@ var FilePreviewModal = ({ file, onClose }) => {
|
|
|
1566
1567
|
return /* @__PURE__ */ React2.createElement("div", { className: "flex flex-col items-center space-y-4" }, /* @__PURE__ */ React2.createElement("div", { className: "text-6xl" }, "\u{1F3B5}"), /* @__PURE__ */ React2.createElement(
|
|
1567
1568
|
"audio",
|
|
1568
1569
|
{
|
|
1569
|
-
src: file.cdnUrl ||
|
|
1570
|
+
src: file.cdnUrl || "/api/files/" + file.id + "/download",
|
|
1570
1571
|
controls: true,
|
|
1571
1572
|
className: "w-full max-w-md"
|
|
1572
1573
|
},
|
|
@@ -1577,7 +1578,7 @@ var FilePreviewModal = ({ file, onClose }) => {
|
|
|
1577
1578
|
return /* @__PURE__ */ React2.createElement(
|
|
1578
1579
|
"iframe",
|
|
1579
1580
|
{
|
|
1580
|
-
src:
|
|
1581
|
+
src: (file.cdnUrl || "/api/files/" + file.id + "/download") + "#toolbar=0",
|
|
1581
1582
|
className: "w-full h-full min-h-96",
|
|
1582
1583
|
title: file.originalName
|
|
1583
1584
|
}
|
|
@@ -1586,7 +1587,7 @@ var FilePreviewModal = ({ file, onClose }) => {
|
|
|
1586
1587
|
return /* @__PURE__ */ React2.createElement("div", { className: "flex flex-col items-center justify-center h-64 text-gray-500" }, /* @__PURE__ */ React2.createElement("div", { className: "text-4xl mb-4" }, "\u{1F4C4}"), /* @__PURE__ */ React2.createElement("p", null, "\u6B64\u6587\u4EF6\u7C7B\u578B\u6682\u4E0D\u652F\u6301\u9884\u89C8"), /* @__PURE__ */ React2.createElement(
|
|
1587
1588
|
"a",
|
|
1588
1589
|
{
|
|
1589
|
-
href: file.cdnUrl ||
|
|
1590
|
+
href: file.cdnUrl || "/api/files/" + file.id + "/download",
|
|
1590
1591
|
download: file.originalName,
|
|
1591
1592
|
className: "mt-4 px-4 py-2 text-blue-600 border border-blue-300 rounded hover:bg-blue-50"
|
|
1592
1593
|
},
|
|
@@ -1725,7 +1726,7 @@ var FolderManager = ({
|
|
|
1725
1726
|
}));
|
|
1726
1727
|
}, []);
|
|
1727
1728
|
const deleteFolder = useCallback(async (folderId, folderName) => {
|
|
1728
|
-
if (!window.confirm(
|
|
1729
|
+
if (!window.confirm('\u786E\u5B9A\u8981\u5220\u9664\u6587\u4EF6\u5939"' + folderName + '"\u5417\uFF1F\u6B64\u64CD\u4F5C\u5C06\u5220\u9664\u6587\u4EF6\u5939\u5185\u7684\u6240\u6709\u6587\u4EF6\u3002')) {
|
|
1729
1730
|
return;
|
|
1730
1731
|
}
|
|
1731
1732
|
if (!onFolderDelete) return;
|
|
@@ -1784,8 +1785,8 @@ var FolderManager = ({
|
|
|
1784
1785
|
return /* @__PURE__ */ React2.createElement("div", { key: folder.id, className: "select-none" }, /* @__PURE__ */ React2.createElement(
|
|
1785
1786
|
"div",
|
|
1786
1787
|
{
|
|
1787
|
-
className:
|
|
1788
|
-
style: { paddingLeft:
|
|
1788
|
+
className: clsx("flex items-center py-1 px-2 rounded-md cursor-pointer transition-colors", isSelected ? "bg-blue-100 text-blue-800" : isDragOver ? "bg-green-100" : "hover:bg-gray-100"),
|
|
1789
|
+
style: { paddingLeft: level * 16 + 8 + "px" },
|
|
1789
1790
|
onClick: () => selectFolder(folder.id),
|
|
1790
1791
|
onContextMenu: (e) => handleContextMenu(e, folder.id),
|
|
1791
1792
|
onDragOver: allowDrag ? (e) => handleDragOver(e, folder.id) : void 0,
|
|
@@ -1801,7 +1802,7 @@ var FolderManager = ({
|
|
|
1801
1802
|
},
|
|
1802
1803
|
className: "mr-1 p-1 hover:bg-gray-200 rounded"
|
|
1803
1804
|
},
|
|
1804
|
-
/* @__PURE__ */ React2.createElement("span", { className:
|
|
1805
|
+
/* @__PURE__ */ React2.createElement("span", { className: clsx("text-xs transition-transform", isExpanded ? "rotate-90" : "") }, "\u25B6")
|
|
1805
1806
|
),
|
|
1806
1807
|
/* @__PURE__ */ React2.createElement("span", { className: "mr-2 text-yellow-600" }, isExpanded ? "\u{1F4C2}" : "\u{1F4C1}"),
|
|
1807
1808
|
/* @__PURE__ */ React2.createElement("div", { className: "flex-1 flex items-center justify-between" }, isEditing ? /* @__PURE__ */ React2.createElement(
|
|
@@ -1827,7 +1828,7 @@ var FolderManager = ({
|
|
|
1827
1828
|
"div",
|
|
1828
1829
|
{
|
|
1829
1830
|
className: "flex items-center py-1 px-2 ml-4",
|
|
1830
|
-
style: { paddingLeft:
|
|
1831
|
+
style: { paddingLeft: (level + 1) * 16 + 8 + "px" }
|
|
1831
1832
|
},
|
|
1832
1833
|
/* @__PURE__ */ React2.createElement("span", { className: "mr-2 text-yellow-600" }, "\u{1F4C1}"),
|
|
1833
1834
|
/* @__PURE__ */ React2.createElement(
|
|
@@ -2016,7 +2017,7 @@ var FileShareModal = ({
|
|
|
2016
2017
|
try {
|
|
2017
2018
|
const expiresAt = getExpiresAt();
|
|
2018
2019
|
const mockShareInfo = {
|
|
2019
|
-
shareUrl:
|
|
2020
|
+
shareUrl: window.location.origin + "/share/" + generateShareCode(),
|
|
2020
2021
|
password: shareOptions.requirePassword ? shareOptions.password : void 0,
|
|
2021
2022
|
expiresAt,
|
|
2022
2023
|
permission: shareOptions.permission,
|
|
@@ -2055,7 +2056,7 @@ var FileShareModal = ({
|
|
|
2055
2056
|
if (files.length === 1 && files[0]) {
|
|
2056
2057
|
return files[0].originalName;
|
|
2057
2058
|
}
|
|
2058
|
-
return
|
|
2059
|
+
return files.length + " \u4E2A\u6587\u4EF6";
|
|
2059
2060
|
}, [files]);
|
|
2060
2061
|
const renderShareSettings = () => {
|
|
2061
2062
|
if (shareInfo) return null;
|
|
@@ -2209,10 +2210,10 @@ var FileShareModal = ({
|
|
|
2209
2210
|
{
|
|
2210
2211
|
onClick: () => {
|
|
2211
2212
|
const shareText = [
|
|
2212
|
-
|
|
2213
|
-
|
|
2214
|
-
shareInfo.password ?
|
|
2215
|
-
shareInfo.expiresAt ?
|
|
2213
|
+
"\u6587\u4EF6\u5206\u4EAB\uFF1A" + formatFileList(),
|
|
2214
|
+
"\u94FE\u63A5\uFF1A" + shareInfo.shareUrl,
|
|
2215
|
+
shareInfo.password ? "\u5BC6\u7801\uFF1A" + shareInfo.password : "",
|
|
2216
|
+
shareInfo.expiresAt ? "\u8FC7\u671F\u65F6\u95F4\uFF1A" + shareInfo.expiresAt.toLocaleString() : "\u6C38\u4E0D\u8FC7\u671F"
|
|
2216
2217
|
].filter(Boolean).join("\n");
|
|
2217
2218
|
copyToClipboard(shareText);
|
|
2218
2219
|
},
|