修改project文件夹中的DialogForm.vue
原来的:
watch
监听器中,监听了props.data
,并在其变化时将formData.value
设置为val
,同时将图片对象obj
推入photoFile.value
数组。如果props.data
被多次触发或者其值未按预期改变,可能会导致相同的图片被重复添加到photoFile
数组中。
在handleSuccess
方法中,更新了photoFile.value[0]
的url
和response.url
,但是没有从photoFile.value
中移除旧的文件对象,如果上传同一个文件,那么数组中就会有两个相同的图片对象。
watch(
() => props.data,
(val) => {
formData.value = val;
const obj = {
url: val.image
};
photoFile.value.push(obj); // 这里可能在val未改变image的情况下重复添加相同的图片
}
)
const handleSuccess = (params) => {
const photo = params.response.data;
formData.value.image = photo;
// 如果photoFile.value已经包含元素,应先清空或者替换,而不是直接修改
photoFile.value[0].response.url = photo;
photoFile.value[0].url = photo;
}
修改成:
1. 在添加新图片之前清空photoFile.value
数组。
2. 在handleSuccess
方法中,如果上传成功,则替换数组中的图片对象,而不是修改它。
watch(
() => props.data,
(val) => {
formData.value = val;
// 清空数组,防止重复添加
photoFile.value = [];
if (val.image) {
const obj = {
url: val.image
};
photoFile.value.push(obj);
}
}
)
const handleSuccess = (params) => {
const photo = params.response.data;
formData.value.image = photo;
// 替换数组中的图片对象,而不是修改它
photoFile.value = [{ url: photo, response: { url: photo } }];
}