fix: 缺少响应参数id的问题

This commit is contained in:
peerless_hero
2023-08-30 15:31:52 +08:00
parent aca6c46b9d
commit 4a8806223a

View File

@ -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) {
emit('preview', uploadFile)
}
const { pause, resume } = watchPausable(
() => props.fileList, (fileList) => {
userFiles.value = fileList.map(file => ({
...file, ...file,
status: 'success', status: 'success',
percentage: 100, percentage: 100,
uid: file.id, 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>