refactor: 重写uploadFile组件

This commit is contained in:
SADYX 2024-07-08 17:41:28 +08:00
parent c8df5ed632
commit d9b9a0581e
2 changed files with 17 additions and 22 deletions

View File

@ -61,13 +61,18 @@ import { isString } from '@/utils/is'
import { useUpload } from '@/components/UploadFile/src/useUpload'
import { UploadFile } from 'element-plus/es/components/upload/src/upload'
type ResponseFile = {
name: string
url: string
}
defineOptions({ name: 'UploadFile' })
const message = useMessage() //
const emit = defineEmits(['update:modelValue'])
const props = defineProps({
modelValue: propTypes.oneOfType<string | string[]>([String, Array<String>]).isRequired,
modelValue: propTypes.oneOfType<ResponseFile[]>([Array<ResponseFile>]).isRequired,
fileType: propTypes.array.def(['doc', 'xls', 'ppt', 'txt', 'pdf']), // , ['png', 'jpg', 'jpeg']
fileSize: propTypes.number.def(5), // (MB)
limit: propTypes.number.def(5), //
@ -121,7 +126,7 @@ const handleFileSuccess: UploadProps['onSuccess'] = (res: any): void => {
//
const index = fileList.value.findIndex((item) => item.response?.data === res.data)
fileList.value.splice(index, 1)
uploadList.value.push({ name: res.data, url: res.data })
uploadList.value.push({ name: res.data.name ?? res.data.url, url: res.data.url })
if (uploadList.value.length == uploadNumber.value) {
fileList.value.push(...uploadList.value)
uploadList.value = []
@ -152,35 +157,25 @@ const handlePreview: UploadProps['onPreview'] = (uploadFile) => {
//
watch(
() => props.modelValue,
(val: string | string[]) => {
(val: ResponseFile[]) => {
console.log(val)
if (!val) {
fileList.value = [] // fix
return
}
fileList.value = [] //
// 1
if (isString(val)) {
fileList.value.push(
...val.split(',').map((url) => ({ name: url.substring(url.lastIndexOf('/') + 1), url }))
)
return
}
// 2
fileList.value.push(
...(val as string[]).map((url) => ({ name: url.substring(url.lastIndexOf('/') + 1), url }))
)
fileList.value = val.map(({ name, url }) => ({
name: name ?? url.substring(url.lastIndexOf('/') + 1),
url
}))
},
{ immediate: true, deep: true }
)
//
const emitUpdateModelValue = () => {
// 1
let result: string | string[] = fileList.value.map((file) => file.url!)
// 2
if (props.limit === 1 || isString(props.modelValue)) {
result = result.join(',')
}
const result = fileList.value.map(({ name, url }) => ({ name, url }))
emit('update:modelValue', result)
}
</script>

View File

@ -31,7 +31,7 @@ export const useUpload = () => {
// 模式二:后端上传
// 重写 el-upload httpRequest 文件上传成功会走成功的钩子,失败走失败的钩子
return new Promise((resolve, reject) => {
FileApi.updateFile({ file: options.file })
FileApi.updateFileEx({ file: options.file })
.then((res) => {
if (res.code === 0) {
resolve(res)