fix: 修复上传头像时,如果图片加载失败,弹框一直loading的问题

pull/335/head
li_shifeng 2026-02-28 10:00:39 +08:00
parent dd69d7c1a5
commit 586978f1b0
2 changed files with 16 additions and 2 deletions

View File

@ -41,8 +41,8 @@ const [Modal, modalApi] = useVbenModal({
onConfirm: handleOk, onConfirm: handleOk,
onOpenChange(isOpen) { onOpenChange(isOpen) {
if (isOpen) { if (isOpen) {
// loading CropperImage loading handleReady // loading loading
modalLoading(true); modalLoading(!!src.value);
} else { } else {
// //
previewSource.value = ''; previewSource.value = '';
@ -65,10 +65,14 @@ function handleBeforeUpload(file: File) {
reader.readAsDataURL(file); reader.readAsDataURL(file);
src.value = ''; src.value = '';
previewSource.value = ''; previewSource.value = '';
modalLoading(true);
reader.addEventListener('load', (e) => { reader.addEventListener('load', (e) => {
src.value = (e.target?.result as string) ?? ''; src.value = (e.target?.result as string) ?? '';
filename = file.name; filename = file.name;
}); });
reader.addEventListener('error', () => {
modalLoading(false);
});
return false; return false;
} }
@ -82,6 +86,10 @@ function handleReady(cropperInstance: CropperType) {
modalLoading(false); modalLoading(false);
} }
function handleCropperError() {
modalLoading(false);
}
function handlerToolbar(event: string, arg?: number) { function handlerToolbar(event: string, arg?: number) {
if (event === 'scaleX') { if (event === 'scaleX') {
scaleX = arg = scaleX === -1 ? 1 : -1; scaleX = arg = scaleX === -1 ? 1 : -1;
@ -133,6 +141,7 @@ async function handleOk() {
:src="src" :src="src"
height="300px" height="300px"
@cropend="handleCropend" @cropend="handleCropend"
@cropend-error="handleCropperError"
@ready="handleReady" @ready="handleReady"
/> />
</div> </div>

View File

@ -143,6 +143,10 @@ function getRoundedCanvas() {
context.fill(); context.fill();
return canvas; return canvas;
} }
function handleImageError() {
emit('cropendError');
}
</script> </script>
<template> <template>
@ -154,6 +158,7 @@ function getRoundedCanvas() {
:crossorigin="crossorigin" :crossorigin="crossorigin"
:src="src" :src="src"
:style="getImageStyle" :style="getImageStyle"
@error="handleImageError"
class="h-auto max-w-full" class="h-auto max-w-full"
/> />
</div> </div>