diff --git a/front/components/Result/ImageCompressResult.vue b/front/components/Result/ImageCompressResult.vue index 52c988f..5195233 100644 --- a/front/components/Result/ImageCompressResult.vue +++ b/front/components/Result/ImageCompressResult.vue @@ -4,6 +4,10 @@ import { AsyncButton, Button } from "@/components/ui/button"; import { Skeleton } from "@/components/ui/skeleton"; import { filesize } from "filesize"; import useAppShare from "~/composables/useShare"; +import { toast } from "vue-sonner"; +const emit = defineEmits<{ + (e: "change", key: string): void; +}>(); const props = defineProps<{ data: { file: File; config: any; handle_type: string; file_id: string }; }>(); @@ -46,7 +50,12 @@ const { data: taskData, refetch } = useQuery({ size: number; }; }[]; - status: "success" | "processing" | "failed"; + status: "success" | "retry" | "archived"; + err?: { + message?: string; + retry?: number; + max_retry?: number; + }; }; }>(`/api/image/compress/${taskId.value}`); return data?.data; @@ -61,13 +70,25 @@ const { counter, pause } = useInterval(2000, { controls: true }); watch( () => counter.value, () => { - if (taskData.value?.status === "success") { + if (["success", "archived"].includes(taskData.value?.status ?? "")) { pause(); return; } refetch(); }, ); + +watch( + () => taskData.value?.err?.retry, + (newVal, oldVal) => { + if (!oldVal || !newVal || !taskData.value?.err?.max_retry) { + return; + } + if (newVal <= taskData.value?.err?.max_retry) { + toast.error(`处理错误: ${taskData.value?.err?.message}, 将再次重试`); + } + }, +);