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
|
@@ -116,7 +116,7 @@ declare const API_BASE_PATH = "/api/universal-file";
|
|
|
116
116
|
/** API端点 */
|
|
117
117
|
declare const API_ENDPOINTS: {
|
|
118
118
|
/** 上传文件 */
|
|
119
|
-
readonly UPLOAD:
|
|
119
|
+
readonly UPLOAD: string;
|
|
120
120
|
/** 获取文件URL */
|
|
121
121
|
readonly GET_URL: (fileId: string) => string;
|
|
122
122
|
/** 获取文件元数据 */
|
|
@@ -124,9 +124,9 @@ declare const API_ENDPOINTS: {
|
|
|
124
124
|
/** 删除文件 */
|
|
125
125
|
readonly DELETE: (fileId: string) => string;
|
|
126
126
|
/** 查询文件列表 */
|
|
127
|
-
readonly QUERY:
|
|
127
|
+
readonly QUERY: string;
|
|
128
128
|
/** 批量删除 */
|
|
129
|
-
readonly BATCH_DELETE:
|
|
129
|
+
readonly BATCH_DELETE: string;
|
|
130
130
|
/** 获取上传进度 */
|
|
131
131
|
readonly GET_PROGRESS: (fileId: string) => string;
|
|
132
132
|
};
|
|
@@ -116,7 +116,7 @@ declare const API_BASE_PATH = "/api/universal-file";
|
|
|
116
116
|
/** API端点 */
|
|
117
117
|
declare const API_ENDPOINTS: {
|
|
118
118
|
/** 上传文件 */
|
|
119
|
-
readonly UPLOAD:
|
|
119
|
+
readonly UPLOAD: string;
|
|
120
120
|
/** 获取文件URL */
|
|
121
121
|
readonly GET_URL: (fileId: string) => string;
|
|
122
122
|
/** 获取文件元数据 */
|
|
@@ -124,9 +124,9 @@ declare const API_ENDPOINTS: {
|
|
|
124
124
|
/** 删除文件 */
|
|
125
125
|
readonly DELETE: (fileId: string) => string;
|
|
126
126
|
/** 查询文件列表 */
|
|
127
|
-
readonly QUERY:
|
|
127
|
+
readonly QUERY: string;
|
|
128
128
|
/** 批量删除 */
|
|
129
|
-
readonly BATCH_DELETE:
|
|
129
|
+
readonly BATCH_DELETE: string;
|
|
130
130
|
/** 获取上传进度 */
|
|
131
131
|
readonly GET_PROGRESS: (fileId: string) => string;
|
|
132
132
|
};
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
var chunkZRAW3HXA_js = require('../chunk-ZRAW3HXA.js');
|
|
4
4
|
require('../chunk-DGUM43GV.js');
|
|
5
5
|
var React2 = require('react');
|
|
6
|
+
var clsx = require('clsx');
|
|
6
7
|
var lucideReact = require('lucide-react');
|
|
7
8
|
|
|
8
9
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
@@ -65,19 +66,19 @@ var DOCUMENT_EXTENSIONS = [
|
|
|
65
66
|
var API_BASE_PATH = "/api/universal-file";
|
|
66
67
|
var API_ENDPOINTS = {
|
|
67
68
|
/** 上传文件 */
|
|
68
|
-
UPLOAD:
|
|
69
|
+
UPLOAD: API_BASE_PATH + "/upload",
|
|
69
70
|
/** 获取文件URL */
|
|
70
|
-
GET_URL: (fileId) =>
|
|
71
|
+
GET_URL: (fileId) => API_BASE_PATH + "/files/" + fileId + "/url",
|
|
71
72
|
/** 获取文件元数据 */
|
|
72
|
-
GET_METADATA: (fileId) =>
|
|
73
|
+
GET_METADATA: (fileId) => API_BASE_PATH + "/files/" + fileId,
|
|
73
74
|
/** 删除文件 */
|
|
74
|
-
DELETE: (fileId) =>
|
|
75
|
+
DELETE: (fileId) => API_BASE_PATH + "/files/" + fileId,
|
|
75
76
|
/** 查询文件列表 */
|
|
76
|
-
QUERY:
|
|
77
|
+
QUERY: API_BASE_PATH + "/files",
|
|
77
78
|
/** 批量删除 */
|
|
78
|
-
BATCH_DELETE:
|
|
79
|
+
BATCH_DELETE: API_BASE_PATH + "/files/batch-delete",
|
|
79
80
|
/** 获取上传进度 */
|
|
80
|
-
GET_PROGRESS: (fileId) =>
|
|
81
|
+
GET_PROGRESS: (fileId) => API_BASE_PATH + "/upload/" + fileId + "/progress"
|
|
81
82
|
};
|
|
82
83
|
var ERROR_CODES = {
|
|
83
84
|
/** 文件上传错误 */
|
|
@@ -116,7 +117,7 @@ function formatFileSize(bytes) {
|
|
|
116
117
|
const units = ["B", "KB", "MB", "GB", "TB"];
|
|
117
118
|
const k = 1024;
|
|
118
119
|
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
119
|
-
return
|
|
120
|
+
return (bytes / Math.pow(k, i)).toFixed(2) + " " + units[i];
|
|
120
121
|
}
|
|
121
122
|
function parseFileSize(sizeStr) {
|
|
122
123
|
const match = sizeStr.match(/^(\d+(?:\.\d+)?)\s*([KMGT]?B)$/i);
|
|
@@ -204,7 +205,7 @@ function sanitizeFileName(fileName) {
|
|
|
204
205
|
}
|
|
205
206
|
function generateUniqueFileName(originalName, fileId) {
|
|
206
207
|
const ext = getFileExtension(originalName);
|
|
207
|
-
return
|
|
208
|
+
return fileId + ext;
|
|
208
209
|
}
|
|
209
210
|
function generateStoragePath(moduleId, fileName, options) {
|
|
210
211
|
const parts = [];
|
|
@@ -241,7 +242,7 @@ function validateFileSize(file, maxSize) {
|
|
|
241
242
|
if (file.size > maxSize) {
|
|
242
243
|
return {
|
|
243
244
|
valid: false,
|
|
244
|
-
error:
|
|
245
|
+
error: "\u6587\u4EF6\u5927\u5C0F\u8D85\u8FC7\u9650\u5236: " + formatFileSize(file.size) + " > " + formatFileSize(maxSize)
|
|
245
246
|
};
|
|
246
247
|
}
|
|
247
248
|
return { valid: true };
|
|
@@ -251,7 +252,7 @@ function validateFileType(file, allowedTypes) {
|
|
|
251
252
|
if (!isMimeTypeSupported(mimeType, allowedTypes)) {
|
|
252
253
|
return {
|
|
253
254
|
valid: false,
|
|
254
|
-
error:
|
|
255
|
+
error: "\u4E0D\u652F\u6301\u7684\u6587\u4EF6\u7C7B\u578B: " + mimeType
|
|
255
256
|
};
|
|
256
257
|
}
|
|
257
258
|
return { valid: true };
|
|
@@ -290,7 +291,7 @@ function buildQueryString(params) {
|
|
|
290
291
|
}
|
|
291
292
|
});
|
|
292
293
|
const queryString = searchParams.toString();
|
|
293
|
-
return queryString ?
|
|
294
|
+
return queryString ? "?" + queryString : "";
|
|
294
295
|
}
|
|
295
296
|
function parseQueryString(url) {
|
|
296
297
|
const params = {};
|
|
@@ -387,7 +388,7 @@ var UniversalFileClient = class {
|
|
|
387
388
|
* 上传文件
|
|
388
389
|
*/
|
|
389
390
|
async uploadFile(fileInfo, onProgress) {
|
|
390
|
-
const url =
|
|
391
|
+
const url = this.config.baseUrl + API_ENDPOINTS.UPLOAD;
|
|
391
392
|
const startTime = Date.now();
|
|
392
393
|
const formData = new FormData();
|
|
393
394
|
formData.append("file", fileInfo.file);
|
|
@@ -470,7 +471,7 @@ var UniversalFileClient = class {
|
|
|
470
471
|
}
|
|
471
472
|
} else {
|
|
472
473
|
console.error("\u274C [UniversalFileClient] \u4E0A\u4F20\u5931\u8D25:", xhr.status, xhr.statusText, xhr.responseText);
|
|
473
|
-
reject(new Error(
|
|
474
|
+
reject(new Error("\u4E0A\u4F20\u5931\u8D25: " + xhr.statusText));
|
|
474
475
|
}
|
|
475
476
|
});
|
|
476
477
|
xhr.addEventListener("error", (event) => {
|
|
@@ -514,7 +515,7 @@ var UniversalFileClient = class {
|
|
|
514
515
|
} catch (error) {
|
|
515
516
|
throw createFileError(
|
|
516
517
|
ERROR_CODES.FILE_UPLOAD_ERROR,
|
|
517
|
-
|
|
518
|
+
"\u6587\u4EF6\u4E0A\u4F20\u5931\u8D25: " + formatErrorMessage(error),
|
|
518
519
|
{ fileInfo, originalError: error }
|
|
519
520
|
);
|
|
520
521
|
}
|
|
@@ -524,21 +525,21 @@ var UniversalFileClient = class {
|
|
|
524
525
|
* 获取文件访问URL
|
|
525
526
|
*/
|
|
526
527
|
async getFileUrl(fileId, expiresIn) {
|
|
527
|
-
const url =
|
|
528
|
+
const url = this.config.baseUrl + API_ENDPOINTS.GET_URL(fileId) + (expiresIn ? `?expiresIn=${expiresIn}` : "");
|
|
528
529
|
try {
|
|
529
530
|
const response = await this.fetchWithTimeout(url, {
|
|
530
531
|
method: "GET",
|
|
531
532
|
headers: this.getHeaders()
|
|
532
533
|
});
|
|
533
534
|
if (!response.ok) {
|
|
534
|
-
throw new Error(
|
|
535
|
+
throw new Error("\u83B7\u53D6\u6587\u4EF6URL\u5931\u8D25: " + response.statusText);
|
|
535
536
|
}
|
|
536
537
|
const data = await response.json();
|
|
537
538
|
return data.url;
|
|
538
539
|
} catch (error) {
|
|
539
540
|
throw createFileError(
|
|
540
541
|
ERROR_CODES.NETWORK_ERROR,
|
|
541
|
-
|
|
542
|
+
"\u83B7\u53D6\u6587\u4EF6URL\u5931\u8D25: " + formatErrorMessage(error),
|
|
542
543
|
{ fileId, expiresIn, originalError: error }
|
|
543
544
|
);
|
|
544
545
|
}
|
|
@@ -547,7 +548,7 @@ var UniversalFileClient = class {
|
|
|
547
548
|
* 获取文件元数据
|
|
548
549
|
*/
|
|
549
550
|
async getFileMetadata(fileId) {
|
|
550
|
-
const url =
|
|
551
|
+
const url = this.config.baseUrl + API_ENDPOINTS.GET_METADATA(fileId);
|
|
551
552
|
try {
|
|
552
553
|
const response = await this.fetchWithTimeout(url, {
|
|
553
554
|
method: "GET",
|
|
@@ -557,14 +558,14 @@ var UniversalFileClient = class {
|
|
|
557
558
|
if (response.status === 404) {
|
|
558
559
|
throw createFileError(ERROR_CODES.FILE_NOT_FOUND, "\u6587\u4EF6\u4E0D\u5B58\u5728", { fileId });
|
|
559
560
|
}
|
|
560
|
-
throw new Error(
|
|
561
|
+
throw new Error("\u83B7\u53D6\u6587\u4EF6\u5143\u6570\u636E\u5931\u8D25: " + response.statusText);
|
|
561
562
|
}
|
|
562
563
|
const data = await response.json();
|
|
563
564
|
return this.transformFileMetadataFromAPI(data.file);
|
|
564
565
|
} catch (error) {
|
|
565
566
|
throw createFileError(
|
|
566
567
|
ERROR_CODES.NETWORK_ERROR,
|
|
567
|
-
|
|
568
|
+
"\u83B7\u53D6\u6587\u4EF6\u5143\u6570\u636E\u5931\u8D25: " + formatErrorMessage(error),
|
|
568
569
|
{ fileId, originalError: error }
|
|
569
570
|
);
|
|
570
571
|
}
|
|
@@ -589,7 +590,7 @@ var UniversalFileClient = class {
|
|
|
589
590
|
page: options.page,
|
|
590
591
|
pageSize: options.pageSize
|
|
591
592
|
});
|
|
592
|
-
const url =
|
|
593
|
+
const url = this.config.baseUrl + API_ENDPOINTS.QUERY + queryString;
|
|
593
594
|
try {
|
|
594
595
|
const response = await this.fetchWithTimeout(url, {
|
|
595
596
|
method: "GET",
|
|
@@ -597,7 +598,7 @@ var UniversalFileClient = class {
|
|
|
597
598
|
});
|
|
598
599
|
if (!response.ok) {
|
|
599
600
|
console.error("\u274C [UniversalFileClient] \u67E5\u8BE2\u6587\u4EF6\u5217\u8868\u5931\u8D25:", response.status, response.statusText);
|
|
600
|
-
throw new Error(
|
|
601
|
+
throw new Error("\u67E5\u8BE2\u6587\u4EF6\u5217\u8868\u5931\u8D25: " + response.statusText);
|
|
601
602
|
}
|
|
602
603
|
const data = await response.json();
|
|
603
604
|
console.log("\u{1F4E5} [UniversalFileClient] \u67E5\u8BE2\u6587\u4EF6\u5217\u8868\u54CD\u5E94:", {
|
|
@@ -629,7 +630,7 @@ var UniversalFileClient = class {
|
|
|
629
630
|
} catch (error) {
|
|
630
631
|
throw createFileError(
|
|
631
632
|
ERROR_CODES.NETWORK_ERROR,
|
|
632
|
-
|
|
633
|
+
"\u67E5\u8BE2\u6587\u4EF6\u5217\u8868\u5931\u8D25: " + formatErrorMessage(error),
|
|
633
634
|
{ options, originalError: error }
|
|
634
635
|
);
|
|
635
636
|
}
|
|
@@ -639,7 +640,7 @@ var UniversalFileClient = class {
|
|
|
639
640
|
* 删除文件
|
|
640
641
|
*/
|
|
641
642
|
async deleteFile(fileId) {
|
|
642
|
-
const url =
|
|
643
|
+
const url = this.config.baseUrl + API_ENDPOINTS.DELETE(fileId);
|
|
643
644
|
try {
|
|
644
645
|
const response = await this.fetchWithTimeout(url, {
|
|
645
646
|
method: "DELETE",
|
|
@@ -649,12 +650,12 @@ var UniversalFileClient = class {
|
|
|
649
650
|
if (response.status === 404) {
|
|
650
651
|
throw createFileError(ERROR_CODES.FILE_NOT_FOUND, "\u6587\u4EF6\u4E0D\u5B58\u5728", { fileId });
|
|
651
652
|
}
|
|
652
|
-
throw new Error(
|
|
653
|
+
throw new Error("\u5220\u9664\u6587\u4EF6\u5931\u8D25: " + response.statusText);
|
|
653
654
|
}
|
|
654
655
|
} catch (error) {
|
|
655
656
|
throw createFileError(
|
|
656
657
|
ERROR_CODES.NETWORK_ERROR,
|
|
657
|
-
|
|
658
|
+
"\u5220\u9664\u6587\u4EF6\u5931\u8D25: " + formatErrorMessage(error),
|
|
658
659
|
{ fileId, originalError: error }
|
|
659
660
|
);
|
|
660
661
|
}
|
|
@@ -663,7 +664,7 @@ var UniversalFileClient = class {
|
|
|
663
664
|
* 批量删除文件
|
|
664
665
|
*/
|
|
665
666
|
async batchDeleteFiles(fileIds) {
|
|
666
|
-
const url =
|
|
667
|
+
const url = this.config.baseUrl + API_ENDPOINTS.BATCH_DELETE;
|
|
667
668
|
try {
|
|
668
669
|
const response = await this.fetchWithTimeout(url, {
|
|
669
670
|
method: "POST",
|
|
@@ -674,14 +675,14 @@ var UniversalFileClient = class {
|
|
|
674
675
|
body: JSON.stringify({ fileIds })
|
|
675
676
|
});
|
|
676
677
|
if (!response.ok) {
|
|
677
|
-
throw new Error(
|
|
678
|
+
throw new Error("\u6279\u91CF\u5220\u9664\u6587\u4EF6\u5931\u8D25: " + response.statusText);
|
|
678
679
|
}
|
|
679
680
|
const data = await response.json();
|
|
680
681
|
return data.result;
|
|
681
682
|
} catch (error) {
|
|
682
683
|
throw createFileError(
|
|
683
684
|
ERROR_CODES.NETWORK_ERROR,
|
|
684
|
-
|
|
685
|
+
"\u6279\u91CF\u5220\u9664\u6587\u4EF6\u5931\u8D25: " + formatErrorMessage(error),
|
|
685
686
|
{ fileIds, originalError: error }
|
|
686
687
|
);
|
|
687
688
|
}
|
|
@@ -691,21 +692,21 @@ var UniversalFileClient = class {
|
|
|
691
692
|
* 获取上传进度
|
|
692
693
|
*/
|
|
693
694
|
async getUploadProgress(fileId) {
|
|
694
|
-
const url =
|
|
695
|
+
const url = this.config.baseUrl + API_ENDPOINTS.GET_PROGRESS(fileId);
|
|
695
696
|
try {
|
|
696
697
|
const response = await this.fetchWithTimeout(url, {
|
|
697
698
|
method: "GET",
|
|
698
699
|
headers: this.getHeaders()
|
|
699
700
|
});
|
|
700
701
|
if (!response.ok) {
|
|
701
|
-
throw new Error(
|
|
702
|
+
throw new Error("\u83B7\u53D6\u4E0A\u4F20\u8FDB\u5EA6\u5931\u8D25: " + response.statusText);
|
|
702
703
|
}
|
|
703
704
|
const data = await response.json();
|
|
704
705
|
return data.progress;
|
|
705
706
|
} catch (error) {
|
|
706
707
|
throw createFileError(
|
|
707
708
|
ERROR_CODES.NETWORK_ERROR,
|
|
708
|
-
|
|
709
|
+
"\u83B7\u53D6\u4E0A\u4F20\u8FDB\u5EA6\u5931\u8D25: " + formatErrorMessage(error),
|
|
709
710
|
{ fileId, originalError: error }
|
|
710
711
|
);
|
|
711
712
|
}
|
|
@@ -806,16 +807,16 @@ var FileUploader = ({
|
|
|
806
807
|
};
|
|
807
808
|
const validateFile2 = (file) => {
|
|
808
809
|
if (file.size > maxFileSize * 1024 * 1024) {
|
|
809
|
-
return
|
|
810
|
+
return "\u6587\u4EF6\u5927\u5C0F\u4E0D\u80FD\u8D85\u8FC7 " + maxFileSize + "MB";
|
|
810
811
|
}
|
|
811
812
|
if (acceptedTypes.length > 0 && !acceptedTypes.includes(file.type)) {
|
|
812
|
-
return
|
|
813
|
+
return "\u4E0D\u652F\u6301\u7684\u6587\u4EF6\u7C7B\u578B: " + file.type;
|
|
813
814
|
}
|
|
814
815
|
return null;
|
|
815
816
|
};
|
|
816
817
|
const uploadFile = React2.useCallback(
|
|
817
818
|
async (file) => {
|
|
818
|
-
const fileId =
|
|
819
|
+
const fileId = "upload_" + Date.now() + "_" + Math.random().toString(36).substr(2, 9);
|
|
819
820
|
const error = validateFile2(file);
|
|
820
821
|
if (error) {
|
|
821
822
|
onUploadError?.(error);
|
|
@@ -887,7 +888,7 @@ var FileUploader = ({
|
|
|
887
888
|
(files) => {
|
|
888
889
|
const fileArray = Array.from(files);
|
|
889
890
|
if (completedFiles.length + uploadingFiles.length + fileArray.length > maxFiles) {
|
|
890
|
-
onUploadError?.(
|
|
891
|
+
onUploadError?.("\u6700\u591A\u53EA\u80FD\u4E0A\u4F20 " + maxFiles + " \u4E2A\u6587\u4EF6");
|
|
891
892
|
return;
|
|
892
893
|
}
|
|
893
894
|
fileArray.forEach(uploadFile);
|
|
@@ -940,7 +941,7 @@ var FileUploader = ({
|
|
|
940
941
|
case "pending":
|
|
941
942
|
return "\u51C6\u5907\u4E2D...";
|
|
942
943
|
case "uploading":
|
|
943
|
-
return
|
|
944
|
+
return "\u4E0A\u4F20\u4E2D " + progress.progress.toFixed(1) + "%";
|
|
944
945
|
case "processing":
|
|
945
946
|
return "\u5904\u7406\u4E2D...";
|
|
946
947
|
case "completed":
|
|
@@ -951,16 +952,16 @@ var FileUploader = ({
|
|
|
951
952
|
return "\u672A\u77E5\u72B6\u6001";
|
|
952
953
|
}
|
|
953
954
|
};
|
|
954
|
-
const containerClasses =
|
|
955
|
-
border-2 border-dashed rounded-lg transition-all duration-200
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
const uploadAreaClasses =
|
|
961
|
-
p-6 text-center
|
|
962
|
-
|
|
963
|
-
|
|
955
|
+
const containerClasses = clsx.clsx(
|
|
956
|
+
"border-2 border-dashed rounded-lg transition-all duration-200",
|
|
957
|
+
isDragOver ? "border-blue-400 bg-blue-50 dark:bg-blue-900/20" : "border-gray-300 dark:border-gray-600",
|
|
958
|
+
disabled ? "opacity-50 cursor-not-allowed" : "hover:border-blue-400 cursor-pointer",
|
|
959
|
+
className
|
|
960
|
+
);
|
|
961
|
+
const uploadAreaClasses = clsx.clsx(
|
|
962
|
+
"p-6 text-center",
|
|
963
|
+
mode === "compact" ? "p-4" : mode === "detailed" ? "p-8" : "p-6"
|
|
964
|
+
);
|
|
964
965
|
return /* @__PURE__ */ React2__default.default.createElement("div", { className: "w-full space-y-4" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
965
966
|
"div",
|
|
966
967
|
{
|
|
@@ -973,7 +974,7 @@ var FileUploader = ({
|
|
|
973
974
|
/* @__PURE__ */ React2__default.default.createElement("div", { className: uploadAreaClasses }, /* @__PURE__ */ React2__default.default.createElement(
|
|
974
975
|
lucideReact.Upload,
|
|
975
976
|
{
|
|
976
|
-
className:
|
|
977
|
+
className: clsx.clsx("mx-auto mb-4 text-gray-400", mode === "compact" ? "w-8 h-8 mb-2" : "w-12 h-12")
|
|
977
978
|
}
|
|
978
979
|
), mode === "compact" ? /* @__PURE__ */ React2__default.default.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__default.default.createElement(React2__default.default.Fragment, null, /* @__PURE__ */ React2__default.default.createElement("h3", { className: "text-lg font-semibold text-gray-700 dark:text-gray-300 mb-2" }, "\u4E0A\u4F20\u6587\u4EF6"), /* @__PURE__ */ React2__default.default.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__default.default.createElement("div", { className: "text-sm text-gray-500 space-y-1" }, acceptedTypes.length > 0 && /* @__PURE__ */ React2__default.default.createElement("p", null, "\u652F\u6301\u683C\u5F0F: ", acceptedTypes.join(", ")), /* @__PURE__ */ React2__default.default.createElement("p", null, "\u6700\u5927\u5927\u5C0F: ", maxFileSize, "MB | \u6700\u591A\u6587\u4EF6: ", maxFiles, "\u4E2A")))),
|
|
979
980
|
/* @__PURE__ */ React2__default.default.createElement(
|
|
@@ -999,7 +1000,7 @@ var FileUploader = ({
|
|
|
999
1000
|
"div",
|
|
1000
1001
|
{
|
|
1001
1002
|
className: "bg-blue-500 h-2 rounded-full transition-all duration-300",
|
|
1002
|
-
style: { width:
|
|
1003
|
+
style: { width: uploadingFile.progress.progress + "%" }
|
|
1003
1004
|
}
|
|
1004
1005
|
)), /* @__PURE__ */ React2__default.default.createElement("p", { className: "text-xs text-gray-500" }, formatProgress(uploadingFile.progress)))),
|
|
1005
1006
|
/* @__PURE__ */ React2__default.default.createElement(
|
|
@@ -1171,7 +1172,7 @@ var UniversalFileManager = ({
|
|
|
1171
1172
|
});
|
|
1172
1173
|
}, [onFileSelect, state.files]);
|
|
1173
1174
|
const handleDeleteFiles = React2.useCallback(async (fileIds) => {
|
|
1174
|
-
if (!window.confirm(
|
|
1175
|
+
if (!window.confirm("\u786E\u5B9A\u8981\u5220\u9664\u9009\u4E2D\u7684 " + fileIds.length + " \u4E2A\u6587\u4EF6\u5417\uFF1F")) {
|
|
1175
1176
|
return;
|
|
1176
1177
|
}
|
|
1177
1178
|
setState((prev) => ({ ...prev, loading: true }));
|
|
@@ -1283,7 +1284,7 @@ var UniversalFileManager = ({
|
|
|
1283
1284
|
"div",
|
|
1284
1285
|
{
|
|
1285
1286
|
key: file.id,
|
|
1286
|
-
className:
|
|
1287
|
+
className: clsx.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"),
|
|
1287
1288
|
onClick: () => handleFileSelect(file.id, !isSelected)
|
|
1288
1289
|
},
|
|
1289
1290
|
allowBatch && /* @__PURE__ */ React2__default.default.createElement("div", { className: "absolute top-2 left-2" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
@@ -1444,7 +1445,7 @@ var UniversalFileManager = ({
|
|
|
1444
1445
|
key: action.key,
|
|
1445
1446
|
onClick: () => action.onClick(selectedFileList),
|
|
1446
1447
|
disabled: isDisabled,
|
|
1447
|
-
className:
|
|
1448
|
+
className: clsx.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")
|
|
1448
1449
|
},
|
|
1449
1450
|
action.icon && /* @__PURE__ */ React2__default.default.createElement("span", { className: "mr-1" }, action.icon),
|
|
1450
1451
|
action.label
|
|
@@ -1452,7 +1453,7 @@ var UniversalFileManager = ({
|
|
|
1452
1453
|
}))), /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center space-x-4" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
1453
1454
|
"select",
|
|
1454
1455
|
{
|
|
1455
|
-
value:
|
|
1456
|
+
value: state.sortBy + "-" + state.sortOrder,
|
|
1456
1457
|
onChange: (e) => {
|
|
1457
1458
|
const [sortBy, sortOrder] = e.target.value.split("-");
|
|
1458
1459
|
setState((prev) => ({ ...prev, sortBy, sortOrder }));
|
|
@@ -1496,7 +1497,7 @@ var UniversalFileManager = ({
|
|
|
1496
1497
|
{
|
|
1497
1498
|
key: pageNum,
|
|
1498
1499
|
onClick: () => handlePageChange(pageNum),
|
|
1499
|
-
className:
|
|
1500
|
+
className: clsx.clsx("px-3 py-1 text-sm border rounded", pageNum === page ? "bg-blue-600 text-white border-blue-600" : "hover:bg-gray-50")
|
|
1500
1501
|
},
|
|
1501
1502
|
pageNum
|
|
1502
1503
|
)), /* @__PURE__ */ React2__default.default.createElement(
|
|
@@ -1523,7 +1524,7 @@ var UniversalFileManager = ({
|
|
|
1523
1524
|
className: "mt-2 text-blue-600 hover:text-blue-800"
|
|
1524
1525
|
},
|
|
1525
1526
|
"\u70B9\u51FB\u4E0A\u4F20\u7B2C\u4E00\u4E2A\u6587\u4EF6"
|
|
1526
|
-
))) : /* @__PURE__ */ React2__default.default.createElement("div", { className:
|
|
1527
|
+
))) : /* @__PURE__ */ React2__default.default.createElement("div", { className: clsx.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__default.default.createElement(
|
|
1527
1528
|
FilePreviewModal,
|
|
1528
1529
|
{
|
|
1529
1530
|
file: state.previewFile,
|
|
@@ -1551,7 +1552,7 @@ var FilePreviewModal = ({ file, onClose }) => {
|
|
|
1551
1552
|
return /* @__PURE__ */ React2__default.default.createElement(
|
|
1552
1553
|
"img",
|
|
1553
1554
|
{
|
|
1554
|
-
src: file.cdnUrl ||
|
|
1555
|
+
src: file.cdnUrl || "/api/files/" + file.id + "/download",
|
|
1555
1556
|
alt: file.originalName,
|
|
1556
1557
|
className: "max-w-full max-h-full object-contain"
|
|
1557
1558
|
}
|
|
@@ -1561,7 +1562,7 @@ var FilePreviewModal = ({ file, onClose }) => {
|
|
|
1561
1562
|
return /* @__PURE__ */ React2__default.default.createElement(
|
|
1562
1563
|
"video",
|
|
1563
1564
|
{
|
|
1564
|
-
src: file.cdnUrl ||
|
|
1565
|
+
src: file.cdnUrl || "/api/files/" + file.id + "/download",
|
|
1565
1566
|
controls: true,
|
|
1566
1567
|
className: "max-w-full max-h-full"
|
|
1567
1568
|
},
|
|
@@ -1572,7 +1573,7 @@ var FilePreviewModal = ({ file, onClose }) => {
|
|
|
1572
1573
|
return /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex flex-col items-center space-y-4" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "text-6xl" }, "\u{1F3B5}"), /* @__PURE__ */ React2__default.default.createElement(
|
|
1573
1574
|
"audio",
|
|
1574
1575
|
{
|
|
1575
|
-
src: file.cdnUrl ||
|
|
1576
|
+
src: file.cdnUrl || "/api/files/" + file.id + "/download",
|
|
1576
1577
|
controls: true,
|
|
1577
1578
|
className: "w-full max-w-md"
|
|
1578
1579
|
},
|
|
@@ -1583,7 +1584,7 @@ var FilePreviewModal = ({ file, onClose }) => {
|
|
|
1583
1584
|
return /* @__PURE__ */ React2__default.default.createElement(
|
|
1584
1585
|
"iframe",
|
|
1585
1586
|
{
|
|
1586
|
-
src:
|
|
1587
|
+
src: (file.cdnUrl || "/api/files/" + file.id + "/download") + "#toolbar=0",
|
|
1587
1588
|
className: "w-full h-full min-h-96",
|
|
1588
1589
|
title: file.originalName
|
|
1589
1590
|
}
|
|
@@ -1592,7 +1593,7 @@ var FilePreviewModal = ({ file, onClose }) => {
|
|
|
1592
1593
|
return /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex flex-col items-center justify-center h-64 text-gray-500" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "text-4xl mb-4" }, "\u{1F4C4}"), /* @__PURE__ */ React2__default.default.createElement("p", null, "\u6B64\u6587\u4EF6\u7C7B\u578B\u6682\u4E0D\u652F\u6301\u9884\u89C8"), /* @__PURE__ */ React2__default.default.createElement(
|
|
1593
1594
|
"a",
|
|
1594
1595
|
{
|
|
1595
|
-
href: file.cdnUrl ||
|
|
1596
|
+
href: file.cdnUrl || "/api/files/" + file.id + "/download",
|
|
1596
1597
|
download: file.originalName,
|
|
1597
1598
|
className: "mt-4 px-4 py-2 text-blue-600 border border-blue-300 rounded hover:bg-blue-50"
|
|
1598
1599
|
},
|
|
@@ -1731,7 +1732,7 @@ var FolderManager = ({
|
|
|
1731
1732
|
}));
|
|
1732
1733
|
}, []);
|
|
1733
1734
|
const deleteFolder = React2.useCallback(async (folderId, folderName) => {
|
|
1734
|
-
if (!window.confirm(
|
|
1735
|
+
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')) {
|
|
1735
1736
|
return;
|
|
1736
1737
|
}
|
|
1737
1738
|
if (!onFolderDelete) return;
|
|
@@ -1790,8 +1791,8 @@ var FolderManager = ({
|
|
|
1790
1791
|
return /* @__PURE__ */ React2__default.default.createElement("div", { key: folder.id, className: "select-none" }, /* @__PURE__ */ React2__default.default.createElement(
|
|
1791
1792
|
"div",
|
|
1792
1793
|
{
|
|
1793
|
-
className:
|
|
1794
|
-
style: { paddingLeft:
|
|
1794
|
+
className: clsx.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"),
|
|
1795
|
+
style: { paddingLeft: level * 16 + 8 + "px" },
|
|
1795
1796
|
onClick: () => selectFolder(folder.id),
|
|
1796
1797
|
onContextMenu: (e) => handleContextMenu(e, folder.id),
|
|
1797
1798
|
onDragOver: allowDrag ? (e) => handleDragOver(e, folder.id) : void 0,
|
|
@@ -1807,7 +1808,7 @@ var FolderManager = ({
|
|
|
1807
1808
|
},
|
|
1808
1809
|
className: "mr-1 p-1 hover:bg-gray-200 rounded"
|
|
1809
1810
|
},
|
|
1810
|
-
/* @__PURE__ */ React2__default.default.createElement("span", { className:
|
|
1811
|
+
/* @__PURE__ */ React2__default.default.createElement("span", { className: clsx.clsx("text-xs transition-transform", isExpanded ? "rotate-90" : "") }, "\u25B6")
|
|
1811
1812
|
),
|
|
1812
1813
|
/* @__PURE__ */ React2__default.default.createElement("span", { className: "mr-2 text-yellow-600" }, isExpanded ? "\u{1F4C2}" : "\u{1F4C1}"),
|
|
1813
1814
|
/* @__PURE__ */ React2__default.default.createElement("div", { className: "flex-1 flex items-center justify-between" }, isEditing ? /* @__PURE__ */ React2__default.default.createElement(
|
|
@@ -1833,7 +1834,7 @@ var FolderManager = ({
|
|
|
1833
1834
|
"div",
|
|
1834
1835
|
{
|
|
1835
1836
|
className: "flex items-center py-1 px-2 ml-4",
|
|
1836
|
-
style: { paddingLeft:
|
|
1837
|
+
style: { paddingLeft: (level + 1) * 16 + 8 + "px" }
|
|
1837
1838
|
},
|
|
1838
1839
|
/* @__PURE__ */ React2__default.default.createElement("span", { className: "mr-2 text-yellow-600" }, "\u{1F4C1}"),
|
|
1839
1840
|
/* @__PURE__ */ React2__default.default.createElement(
|
|
@@ -2022,7 +2023,7 @@ var FileShareModal = ({
|
|
|
2022
2023
|
try {
|
|
2023
2024
|
const expiresAt = getExpiresAt();
|
|
2024
2025
|
const mockShareInfo = {
|
|
2025
|
-
shareUrl:
|
|
2026
|
+
shareUrl: window.location.origin + "/share/" + generateShareCode(),
|
|
2026
2027
|
password: shareOptions.requirePassword ? shareOptions.password : void 0,
|
|
2027
2028
|
expiresAt,
|
|
2028
2029
|
permission: shareOptions.permission,
|
|
@@ -2061,7 +2062,7 @@ var FileShareModal = ({
|
|
|
2061
2062
|
if (files.length === 1 && files[0]) {
|
|
2062
2063
|
return files[0].originalName;
|
|
2063
2064
|
}
|
|
2064
|
-
return
|
|
2065
|
+
return files.length + " \u4E2A\u6587\u4EF6";
|
|
2065
2066
|
}, [files]);
|
|
2066
2067
|
const renderShareSettings = () => {
|
|
2067
2068
|
if (shareInfo) return null;
|
|
@@ -2215,10 +2216,10 @@ var FileShareModal = ({
|
|
|
2215
2216
|
{
|
|
2216
2217
|
onClick: () => {
|
|
2217
2218
|
const shareText = [
|
|
2218
|
-
|
|
2219
|
-
|
|
2220
|
-
shareInfo.password ?
|
|
2221
|
-
shareInfo.expiresAt ?
|
|
2219
|
+
"\u6587\u4EF6\u5206\u4EAB\uFF1A" + formatFileList(),
|
|
2220
|
+
"\u94FE\u63A5\uFF1A" + shareInfo.shareUrl,
|
|
2221
|
+
shareInfo.password ? "\u5BC6\u7801\uFF1A" + shareInfo.password : "",
|
|
2222
|
+
shareInfo.expiresAt ? "\u8FC7\u671F\u65F6\u95F4\uFF1A" + shareInfo.expiresAt.toLocaleString() : "\u6C38\u4E0D\u8FC7\u671F"
|
|
2222
2223
|
].filter(Boolean).join("\n");
|
|
2223
2224
|
copyToClipboard(shareText);
|
|
2224
2225
|
},
|