1
1
<script setup lang="ts">
2
- import { MAX_SMALL_FILE_SIZE } from ' ~/config/upload'
2
+ import {
3
+ MAX_SMALL_FILE_SIZE ,
4
+ MAX_LARGE_FILE_SIZE ,
5
+ USER_DAILY_UPLOAD_LIMIT
6
+ } from ' ~/config/upload'
3
7
import {
4
8
initToolsetUploadSchema ,
5
9
completeToolsetUploadSchema ,
@@ -20,18 +24,29 @@ const emits = defineEmits<{
20
24
onClose: []
21
25
}>()
22
26
27
+ const MB = 1024 * 1024
28
+
29
+ const { moemoepoint, dailyToolsetUploadCount } = storeToRefs (
30
+ usePersistUserStore ()
31
+ )
23
32
const fileInput = ref <HTMLInputElement >()
24
33
const selectedFile = ref <File | null >(null )
25
34
26
35
const progress = ref (0 )
36
+ const isDragging = ref (false )
27
37
const uploadStatus =
28
38
ref <(typeof KUN_GALGAME_TOOLSET_UPLOAD_STATUS_CONST )[number ]>(' idle' )
29
- const isDragging = ref (false )
30
39
31
40
const isLarge = computed (() => {
32
41
const f = selectedFile .value
33
42
return !! f && f .size > MAX_SMALL_FILE_SIZE
34
43
})
44
+ const userUploadLimit = computed (
45
+ () =>
46
+ USER_DAILY_UPLOAD_LIMIT +
47
+ moemoepoint .value * MB -
48
+ dailyToolsetUploadCount .value
49
+ )
35
50
36
51
const statusMessage = computed (() => {
37
52
if (uploadStatus .value === ' largeUploading' ) {
@@ -41,12 +56,37 @@ const statusMessage = computed(() => {
41
56
}
42
57
})
43
58
59
+ const checkFileValid = (file : File | null ) => {
60
+ if (! file ) {
61
+ return false
62
+ }
63
+ if (! isValidArchive (file .name || ' ' )) {
64
+ useMessage (' 我们仅支持 .7z, .zip, .rar 压缩格式上传' , ' warn' )
65
+ return false
66
+ }
67
+ if (file .size > MAX_LARGE_FILE_SIZE ) {
68
+ useMessage (
69
+ ` 文件大小超过最大文件限制 ${MAX_LARGE_FILE_SIZE / MB } MB ` ,
70
+ ' warn'
71
+ )
72
+ return false
73
+ }
74
+ if (file .size > userUploadLimit .value ) {
75
+ useMessage (
76
+ ` 文件大小超过您的可用上传额度 ${(userUploadLimit .value / MB ).toFixed (1 )} MB ` ,
77
+ ' warn'
78
+ )
79
+ return false
80
+ }
81
+ return true
82
+ }
83
+
44
84
const pick = () => fileInput .value ?.click ()
45
85
const onChange = (e : Event ) => {
46
86
const t = e .target as HTMLInputElement
47
87
const targetFile = t .files && t .files [0 ] ? t .files [0 ] : null
48
- if ( ! isValidArchive ( targetFile ?. name || ' ' )) {
49
- useMessage ( ' 我们仅支持 .7z, .zip, .rar 压缩格式上传 ' , ' warn ' )
88
+ const res = checkFileValid ( targetFile )
89
+ if ( ! res ) {
50
90
return
51
91
}
52
92
selectedFile .value = targetFile
@@ -57,8 +97,8 @@ const onDrop = (e: DragEvent) => {
57
97
isDragging .value = false
58
98
const dt = e .dataTransfer
59
99
if (dt ?.files && dt .files .length > 0 ) {
60
- if ( ! isValidArchive ( dt .files [0 ]. name || ' ' )) {
61
- useMessage ( ' 我们仅支持 .7z, .zip, .rar 压缩格式上传 ' , ' warn ' )
100
+ const res = checkFileValid ( dt .files [0 ])
101
+ if ( ! res ) {
62
102
return
63
103
}
64
104
selectedFile .value = dt .files [0 ]
@@ -313,19 +353,12 @@ const submit = async () => {
313
353
>
314
354
{{
315
355
isLarge
316
- ? `文件大于 ${MAX_SMALL_FILE_SIZE / (1024 * 1024) }MB, 分片上传`
317
- : `文件小于 ${MAX_SMALL_FILE_SIZE / (1024 * 1024) }MB, 直接上传`
356
+ ? `文件大于 ${MAX_SMALL_FILE_SIZE / MB }MB, 分片上传`
357
+ : `文件小于 ${MAX_SMALL_FILE_SIZE / MB }MB, 直接上传`
318
358
}}
319
359
</span >
320
360
</div >
321
361
322
- <!-- <div class="bg-default-200 h-2 w-full rounded">
323
- <div
324
- class="bg-primary-500 h-2 rounded"
325
- :style="{ width: `${progress}%` }"
326
- />
327
- </div> -->
328
-
329
362
<KunProgress :value =" progress" />
330
363
331
364
<div
0 commit comments