Skip to content

Commit 5f9a01f

Browse files
committed
feat(FaFileUpload): 增加文件夹上传和自定义上传请求功能
1 parent a77416f commit 5f9a01f

7 files changed

Lines changed: 248 additions & 311 deletions

File tree

‎apps/example/src/views/component_example/file_upload/_demo2.vue‎

100755100644
Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,21 @@ const files = ref<FileItem[]>([
55
{ name: 'logo.svg', size: 1024 * 1024, url: 'https://fantastic-admin.hurui.me/logo.svg' },
66
])
77
8+
function beforeUpload(file: File) {
9+
const isPng = file.type === 'image/png'
10+
const isLt200K = file.size <= 200 * 1024
11+
12+
if (!isPng) {
13+
faToast.error('只能上传 PNG 文件')
14+
return false
15+
}
16+
if (!isLt200K) {
17+
faToast.error('文件大小不能超过 200KB')
18+
return false
19+
}
20+
return true
21+
}
22+
823
function handleSuccess() {
924
faToast.success('模拟上传成功')
1025
}
@@ -21,9 +36,8 @@ function handleClick(fileItem: FileItem) {
2136
v-model="files"
2237
action="/fake/upload"
2338
:after-upload="(response) => response.data.url"
39+
:before-upload="beforeUpload"
2440
multiple
25-
:ext="['png']"
26-
:size="200 * 1024"
2741
:max="5"
2842
@on-success="handleSuccess"
2943
@on-click="handleClick"
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<script setup lang="ts">
2+
import type { FileItem, FileUploadRequestOptions } from '@fantastic-admin/components'
3+
4+
const files = ref<FileItem[]>([])
5+
6+
async function httpRequest({ file, onProgress }: FileUploadRequestOptions) {
7+
onProgress(30)
8+
await new Promise(resolve => setTimeout(resolve, 300))
9+
onProgress(100)
10+
11+
return {
12+
url: URL.createObjectURL(file),
13+
name: file.name,
14+
}
15+
}
16+
17+
function handleSuccess() {
18+
faToast.success('自定义上传完成')
19+
}
20+
</script>
21+
22+
<template>
23+
<FaFileUpload
24+
v-model="files"
25+
:http-request="httpRequest"
26+
:after-upload="response => response.url"
27+
:max="3"
28+
@on-success="handleSuccess"
29+
/>
30+
</template>
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<script setup lang="ts">
2+
import type { FileItem, FileUploadRequestOptions } from '@fantastic-admin/components'
3+
4+
const files = ref<FileItem[]>([])
5+
6+
async function httpRequest({ file, onProgress }: FileUploadRequestOptions) {
7+
onProgress(50)
8+
await new Promise(resolve => setTimeout(resolve, 200))
9+
onProgress(100)
10+
11+
return {
12+
url: URL.createObjectURL(file),
13+
name: file.name,
14+
}
15+
}
16+
</script>
17+
18+
<template>
19+
<FaFileUpload
20+
v-model="files"
21+
directory
22+
:max="0"
23+
:http-request="httpRequest"
24+
:after-upload="response => response.url"
25+
/>
26+
</template>

‎apps/example/src/views/component_example/file_upload/index.vue‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
import Demo1 from './_demo1.vue'
33
import Demo2 from './_demo2.vue'
44
import Demo3 from './_demo3.vue'
5+
import Demo4 from './_demo4.vue'
6+
import Demo5 from './_demo5.vue'
57
</script>
68

79
<template>
@@ -16,5 +18,11 @@ import Demo3 from './_demo3.vue'
1618
<FaPageMain title="自定义显示" main-class="p-4">
1719
<Demo3 />
1820
</FaPageMain>
21+
<FaPageMain title="自定义上传请求" main-class="p-4">
22+
<Demo4 />
23+
</FaPageMain>
24+
<FaPageMain title="文件夹上传" main-class="p-4">
25+
<Demo5 />
26+
</FaPageMain>
1927
</div>
2028
</template>

‎packages/components/index.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ export * from './src/drawer/index'
1111
export { default as FaDrawer } from './src/drawer/index.vue'
1212
export { default as FaDropdown } from './src/dropdown/index.vue'
1313
export { default as FaFileUpload } from './src/file-upload/index.vue'
14-
export type { FileItem } from './src/file-upload/index.vue'
14+
export type { FileItem, FileUploadRequestOptions } from './src/file-upload/index.vue'
1515
export { default as FaFixedBar } from './src/fixed-bar/index.vue'
1616
export { default as FaHoverCard } from './src/hover-card/index.vue'
1717
export { default as FaIcon } from './src/icon/index.vue'

0 commit comments

Comments
 (0)