|
@@ -174,6 +174,7 @@
|
|
|
:before-remove="handleBeforeRemove"
|
|
:before-remove="handleBeforeRemove"
|
|
|
:disabled="hasUnuploadedImages"
|
|
:disabled="hasUnuploadedImages"
|
|
|
:limit="9"
|
|
:limit="9"
|
|
|
|
|
+ :multiple="true"
|
|
|
:on-change="handleDetailUploadChange"
|
|
:on-change="handleDetailUploadChange"
|
|
|
:on-exceed="handleDetailUploadExceed"
|
|
:on-exceed="handleDetailUploadExceed"
|
|
|
:on-preview="handlePictureCardPreview"
|
|
:on-preview="handlePictureCardPreview"
|
|
@@ -713,14 +714,21 @@ const handleTitleUploadChange: UploadProps["onChange"] = async (uploadFile, uplo
|
|
|
titleFileList.value.push(uploadFile);
|
|
titleFileList.value.push(uploadFile);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- const readyFiles = titleFileList.value.filter(file => file.status === "ready");
|
|
|
|
|
- if (readyFiles.length) {
|
|
|
|
|
- readyFiles.forEach(file => {
|
|
|
|
|
- if (!pendingUploadFiles.value.some(item => item.uid === file.uid)) {
|
|
|
|
|
- pendingUploadFiles.value.push(file);
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ // 使用 nextTick 确保所有文件的 onChange 事件都处理完毕后再统一处理队列
|
|
|
|
|
+ await nextTick();
|
|
|
|
|
+
|
|
|
|
|
+ // 重新收集所有待上传的文件(包括新添加的和之前未上传的)
|
|
|
|
|
+ const readyFiles = titleFileList.value.filter(file => (file.status === "ready" || file.status === undefined) && file.raw);
|
|
|
|
|
+
|
|
|
|
|
+ // 清空并重新填充待上传队列
|
|
|
|
|
+ pendingUploadFiles.value = [];
|
|
|
|
|
+ readyFiles.forEach(file => {
|
|
|
|
|
+ if (!pendingUploadFiles.value.some(item => item.uid === file.uid)) {
|
|
|
|
|
+ pendingUploadFiles.value.push(file);
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ // 处理上传队列
|
|
|
processUploadQueue("title");
|
|
processUploadQueue("title");
|
|
|
};
|
|
};
|
|
|
|
|
|
|
@@ -782,14 +790,21 @@ const handleDetailUploadChange: UploadProps["onChange"] = async (uploadFile, upl
|
|
|
detailFileList.value.push(uploadFile);
|
|
detailFileList.value.push(uploadFile);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- const readyFiles = detailFileList.value.filter(file => file.status === "ready");
|
|
|
|
|
- if (readyFiles.length) {
|
|
|
|
|
- readyFiles.forEach(file => {
|
|
|
|
|
- if (!pendingUploadFiles.value.some(item => item.uid === file.uid)) {
|
|
|
|
|
- pendingUploadFiles.value.push(file);
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ // 使用 nextTick 确保所有文件的 onChange 事件都处理完毕后再统一处理队列
|
|
|
|
|
+ await nextTick();
|
|
|
|
|
+
|
|
|
|
|
+ // 重新收集所有待上传的文件(包括新添加的和之前未上传的)
|
|
|
|
|
+ const readyFiles = detailFileList.value.filter(file => (file.status === "ready" || file.status === undefined) && file.raw);
|
|
|
|
|
+
|
|
|
|
|
+ // 清空并重新填充待上传队列
|
|
|
|
|
+ pendingUploadFiles.value = [];
|
|
|
|
|
+ readyFiles.forEach(file => {
|
|
|
|
|
+ if (!pendingUploadFiles.value.some(item => item.uid === file.uid)) {
|
|
|
|
|
+ pendingUploadFiles.value.push(file);
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ // 处理上传队列
|
|
|
processUploadQueue("detail");
|
|
processUploadQueue("detail");
|
|
|
};
|
|
};
|
|
|
|
|
|
|
@@ -797,14 +812,27 @@ const handleDetailUploadChange: UploadProps["onChange"] = async (uploadFile, upl
|
|
|
* 处理上传队列 - 逐个上传文件
|
|
* 处理上传队列 - 逐个上传文件
|
|
|
*/
|
|
*/
|
|
|
const processUploadQueue = async (type: string) => {
|
|
const processUploadQueue = async (type: string) => {
|
|
|
|
|
+ // 如果正在上传或队列为空,直接返回
|
|
|
if (uploading.value || pendingUploadFiles.value.length === 0) {
|
|
if (uploading.value || pendingUploadFiles.value.length === 0) {
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ // 从队列中取出第一个文件
|
|
|
const file = pendingUploadFiles.value.shift();
|
|
const file = pendingUploadFiles.value.shift();
|
|
|
- if (file) {
|
|
|
|
|
- await uploadSingleFile(file, type);
|
|
|
|
|
|
|
+ if (!file || !file.raw) {
|
|
|
|
|
+ // 如果文件无效,继续处理下一个
|
|
|
processUploadQueue(type);
|
|
processUploadQueue(type);
|
|
|
|
|
+ return;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ // 上传文件
|
|
|
|
|
+ await uploadSingleFile(file, type);
|
|
|
|
|
+
|
|
|
|
|
+ // 上传完成后,继续处理队列中的下一个文件
|
|
|
|
|
+ // 使用 setTimeout 确保状态已更新
|
|
|
|
|
+ setTimeout(() => {
|
|
|
|
|
+ processUploadQueue(type);
|
|
|
|
|
+ }, 100);
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
/**
|