From 69df9232e02ec9fd9381f2f6cd964d29e3cbe341 Mon Sep 17 00:00:00 2001 From: Dustella Date: Thu, 23 Jan 2025 22:06:53 +0800 Subject: [PATCH] refactor: new imageFetch --- src/components/DenseFramework.vue | 53 +++++++++++++++- src/components/ImageContainer.vue | 6 +- src/pages/balloon/single.vue | 61 ++++++++++--------- src/pages/balloon/year.vue | 20 ++---- src/pages/cosmic/stats.vue | 26 +------- src/pages/radar/v1.vue | 24 +------- src/pages/radar/v2.vue | 23 +------ src/pages/saber/day_cycle_power_wave_plot.vue | 26 +------- src/pages/saber/day_fft_ifft_plot.vue | 31 +--------- src/pages/saber/month_power_wave_plot.vue | 26 +------- src/pages/saber/plot_wave_fitting.vue | 26 +------- src/pages/tidi/waves.vue | 24 +------- 12 files changed, 97 insertions(+), 249 deletions(-) diff --git a/src/components/DenseFramework.vue b/src/components/DenseFramework.vue index bc742b5..b9b91fd 100644 --- a/src/components/DenseFramework.vue +++ b/src/components/DenseFramework.vue @@ -6,11 +6,55 @@ import { ResizablePanelGroup, } from '~/components/ui/resizable' -defineProps<{ - imageResult: ImageResult +const props = defineProps<{ + imageQuery: string + extraErrorHandle?: (resp: Response) => { + type: string + message: string + } + extraResponseHandle?: (resp: Response) => Promise }>() defineEmits(['submit']) +const imageResult = reactive({ + result: 'idle', + resourceId: '', + message: '请你选择一个模式和日期', +}) + +const urlRef = computed(() => { + return props.imageQuery +}) + +const { onFetchResponse, onFetchError, isFetching, execute } = baseFetch( + urlRef, + { immediate: false }, +) +watch(isFetching, (fetching) => { + if (fetching) { + imageResult.result = 'pending' + } +}) + +onFetchResponse(async (resp) => { + if (props.extraResponseHandle) { + const newResult = await props.extraResponseHandle(resp) + imageResult.result = newResult.result + imageResult.resourceId = newResult.resourceId + imageResult.message = newResult.message + } + else { + const blob = await resp.blob() + const url = URL.createObjectURL(blob) + imageResult.result = 'success' + imageResult.resourceId = url + } +}) + +onFetchError(async (error) => { + imageResult.result = 'error' + imageResult.message = error +})