fix: 缺少响应参数id的问题
This commit is contained in:
@ -1,8 +1,8 @@
|
|||||||
<!--
|
<!--
|
||||||
* @Author: zhaojinfeng 121016171@qq.com
|
* @Author: zhaojinfeng 121016171@qq.com
|
||||||
* @Date: 2023-08-16 17:33:41
|
* @Date: 2023-08-16 17:33:41
|
||||||
* @LastEditors: zhaojinfeng 121016171@qq.com
|
* @LastEditors: peerless_hero peerless_hero@outlook.com
|
||||||
* @LastEditTime: 2023-08-22 14:16:22
|
* @LastEditTime: 2023-08-30 15:24:13
|
||||||
* @FilePath: \vue3\packages\upload-list\index.vue
|
* @FilePath: \vue3\packages\upload-list\index.vue
|
||||||
* @Description:
|
* @Description:
|
||||||
*
|
*
|
||||||
@ -14,6 +14,8 @@
|
|||||||
:disabled="disabled"
|
:disabled="disabled"
|
||||||
:before-upload="beforeUpload"
|
:before-upload="beforeUpload"
|
||||||
:http-request="httpRequest"
|
:http-request="httpRequest"
|
||||||
|
@preview="preview"
|
||||||
|
@success="success"
|
||||||
@remove="remove"
|
@remove="remove"
|
||||||
>
|
>
|
||||||
<slot>
|
<slot>
|
||||||
@ -49,6 +51,7 @@ const props = withDefaults(
|
|||||||
|
|
||||||
const emit = defineEmits<{
|
const emit = defineEmits<{
|
||||||
(event: 'update:file-list', file: FileVO[]): void
|
(event: 'update:file-list', file: FileVO[]): void
|
||||||
|
(event: 'preview', file: UploadFile): void
|
||||||
}>()
|
}>()
|
||||||
|
|
||||||
const userFiles = ref<UploadUserFile[]>([])
|
const userFiles = ref<UploadUserFile[]>([])
|
||||||
@ -79,19 +82,36 @@ async function httpRequest({ file, onProgress, onSuccess, onError }: UploadReque
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
userFiles.value = props.fileList.map(file => ({
|
function preview(uploadFile: UploadFile) {
|
||||||
...file,
|
emit('preview', uploadFile)
|
||||||
status: 'success',
|
}
|
||||||
percentage: 100,
|
|
||||||
uid: file.id,
|
const { pause, resume } = watchPausable(
|
||||||
}))
|
() => props.fileList, (fileList) => {
|
||||||
|
userFiles.value = fileList.map(file => ({
|
||||||
|
...file,
|
||||||
|
status: 'success',
|
||||||
|
percentage: 100,
|
||||||
|
uid: file.id,
|
||||||
|
}))
|
||||||
|
},
|
||||||
|
{ immediate: true },
|
||||||
|
)
|
||||||
|
|
||||||
|
function success(response: FileVO, uploadFile: UploadFile, uploadFiles: UploadFiles) {
|
||||||
|
// 将返回响应合并到文件上
|
||||||
|
Object.assign(uploadFile, response)
|
||||||
|
// 手动更新,暂停监听,避免因props.fileList更新再次更新uploadFile
|
||||||
|
pause()
|
||||||
|
emit('update:file-list', uploadFiles)
|
||||||
|
resume()
|
||||||
|
}
|
||||||
|
|
||||||
function remove(_uploadFile: UploadFile, uploadFiles: UploadFiles) {
|
function remove(_uploadFile: UploadFile, uploadFiles: UploadFiles) {
|
||||||
userFiles.value = uploadFiles
|
userFiles.value = uploadFiles
|
||||||
|
// 手动更新,暂停监听,避免因props.fileList更新再次更新uploadFile
|
||||||
|
pause()
|
||||||
emit('update:file-list', uploadFiles)
|
emit('update:file-list', uploadFiles)
|
||||||
|
resume()
|
||||||
}
|
}
|
||||||
|
|
||||||
watch(() => userFiles.value, (uploadFiles) => {
|
|
||||||
emit('update:file-list', uploadFiles)
|
|
||||||
})
|
|
||||||
</script>
|
</script>
|
||||||
|
Reference in New Issue
Block a user