From 52deafb19fde387a9a673b671de9598e6e89748b Mon Sep 17 00:00:00 2001 From: Dustella Date: Sat, 18 Jan 2025 22:00:26 +0800 Subject: [PATCH] added cosmic, added passcode --- auto-imports.d.ts | 2 + src/App.vue | 14 ++- src/components/CoolBack.vue | 111 ++++++++++++++++++ src/composables/fetch.ts | 21 ++++ src/composables/index.ts | 1 + src/pages/balloon/single.vue | 12 +- src/pages/balloon/year.vue | 4 +- src/pages/cosmic/stats.vue | 64 ++++++++++ src/pages/radar/v1.vue | 16 ++- src/pages/radar/v2.vue | 6 +- src/pages/saber/day_cycle_power_wave_plot.vue | 17 +-- src/pages/saber/day_fft_ifft_plot.vue | 12 +- src/pages/saber/month_power_wave_plot.vue | 8 +- src/pages/saber/plot_wave_fitting.vue | 12 +- src/pages/saber/utils.ts | 12 +- src/pages/tidi/waves.vue | 13 +- typed-router.d.ts | 1 + 17 files changed, 275 insertions(+), 51 deletions(-) create mode 100644 src/components/CoolBack.vue create mode 100644 src/composables/fetch.ts create mode 100644 src/pages/cosmic/stats.vue diff --git a/auto-imports.d.ts b/auto-imports.d.ts index b4500cf..16bc99e 100644 --- a/auto-imports.d.ts +++ b/auto-imports.d.ts @@ -9,6 +9,7 @@ declare global { const EffectScope: typeof import('vue')['EffectScope'] const asyncComputed: typeof import('@vueuse/core')['asyncComputed'] const autoResetRef: typeof import('@vueuse/core')['autoResetRef'] + const baseFetch: typeof import('./src/composables/fetch')['baseFetch'] const computed: typeof import('vue')['computed'] const computedAsync: typeof import('@vueuse/core')['computedAsync'] const computedEager: typeof import('@vueuse/core')['computedEager'] @@ -309,6 +310,7 @@ declare module 'vue' { readonly EffectScope: UnwrapRef readonly asyncComputed: UnwrapRef readonly autoResetRef: UnwrapRef + readonly baseFetch: UnwrapRef readonly computed: UnwrapRef readonly computedAsync: UnwrapRef readonly computedEager: UnwrapRef diff --git a/src/App.vue b/src/App.vue index 5fe6f05..d193954 100644 --- a/src/App.vue +++ b/src/App.vue @@ -107,11 +107,23 @@ const data = { isActive: true, items: [ { - title: '波动', + title: '行星波月统计', url: '/tidi/waves', }, ], }, + { + title: 'COSMIC', + url: '#', + icon: 'mdi:telescope', + isActive: true, + items: [ + { + title: '行星波月统计', + url: '/cosmic/stats', + }, + ], + }, ], 关于: [ diff --git a/src/components/CoolBack.vue b/src/components/CoolBack.vue new file mode 100644 index 0000000..151337e --- /dev/null +++ b/src/components/CoolBack.vue @@ -0,0 +1,111 @@ + + + diff --git a/src/composables/fetch.ts b/src/composables/fetch.ts new file mode 100644 index 0000000..d0e7ecd --- /dev/null +++ b/src/composables/fetch.ts @@ -0,0 +1,21 @@ +import { createFetch } from '@vueuse/core' +import { API_BASE_URL } from '~/CONSTANT' + +export const baseFetch = createFetch({ + baseUrl: API_BASE_URL, + options: { + async beforeFetch({ options }) { + const code = '0101' + options.headers = { + ...options.headers, + Authorization: `${code}`, + } + return { options } + }, + + }, + fetchOptions: { + mode: 'cors', + }, + +}) diff --git a/src/composables/index.ts b/src/composables/index.ts index e8d1566..473f088 100644 --- a/src/composables/index.ts +++ b/src/composables/index.ts @@ -1 +1,2 @@ export * from './dark' +export * from './fetch' diff --git a/src/pages/balloon/single.vue b/src/pages/balloon/single.vue index e821a09..72831ba 100644 --- a/src/pages/balloon/single.vue +++ b/src/pages/balloon/single.vue @@ -35,11 +35,12 @@ const form = useForm() const stagedDates = ref([]) onMounted(async () => { - await fetch(`${API_BASE_URL}/balloon/metadata`).then(resp => resp.json()).then((data) => { - stagedDates.value = data + await baseFetch(`${API_BASE_URL}/balloon/metadata`).json().then(({ data }) => { + const das = data.value! + stagedDates.value = das formSchema.value = z.object({ selectedMode: z.enum(modes).describe('选择一个模式'), - selectedDate: z.enum(data.map((d: string) => { + selectedDate: z.enum(das.map((d: string) => { const datePattern = /_\d{8}T\d{6}/ if (!datePattern.test(d)) { return '' @@ -51,7 +52,7 @@ onMounted(async () => { return capture[0] })), }).describe('选择一个日期') - form.setFieldValue('selectedDate', data[0]) + form.setFieldValue('selectedDate', data.value![0]) form.setFieldValue('selectedMode', modes[0]) }) }) @@ -60,8 +61,9 @@ async function get_image( selectedMode: string, selectedDate: string, ) { - const resp = await fetch(`${API_BASE_URL}/balloon/render/single?mode=${encodeURIComponent(selectedMode)}&path=${encodeURIComponent(selectedDate)}`) + const { response } = await baseFetch(`${API_BASE_URL}/balloon/render/single?mode=${encodeURIComponent(selectedMode)}&path=${encodeURIComponent(selectedDate)}`) // check for MIME Type, check if is png + const resp = response.value! const isPng = resp.headers.get('Content-Type') === 'image/png' if (!isPng) { imageResult.result = 'error' as const diff --git a/src/pages/balloon/year.vue b/src/pages/balloon/year.vue index f8b21cd..026ea68 100644 --- a/src/pages/balloon/year.vue +++ b/src/pages/balloon/year.vue @@ -44,8 +44,8 @@ const modes = [ async function refreshImage() { const url = `${API_BASE_URL}/balloon/render/year?mode=${encodeURIComponent(selectedMode.value)}&start_year=${startYear.value}&end_year=${endYear.value}` - const resp = await fetch(url) - const blob = await resp.blob() + const { data } = await baseFetch(url).arrayBuffer() + const blob = new Blob([data.value!]) const u = URL.createObjectURL(blob) imageResult.result = 'success' imageResult.imageUrl = u diff --git a/src/pages/cosmic/stats.vue b/src/pages/cosmic/stats.vue new file mode 100644 index 0000000..30f075f --- /dev/null +++ b/src/pages/cosmic/stats.vue @@ -0,0 +1,64 @@ + +{"meta":{ + "title":"COSMIC", + "description":"行星波月统计", + "group":"COSMIC", + "item_name":"行星波月统计" +}} + + + + + diff --git a/src/pages/radar/v1.vue b/src/pages/radar/v1.vue index 71705a5..66fe130 100644 --- a/src/pages/radar/v1.vue +++ b/src/pages/radar/v1.vue @@ -13,7 +13,7 @@ import type { ImageResult } from '~/components/ImageContainer.vue' import { API_BASE_URL } from '~/CONSTANT' -const selectedMode = ref('潮汐波') +const selectedMode = ref('2日行星波') const selectedWave = ref('潮汐波') const selectedDateType = ref('day') const selectedStation = ref('武汉左岭镇站') @@ -68,7 +68,7 @@ const queryUrl = computed(() => { return path }) -const { onFetchResponse, isFetching, execute } = useFetch(queryUrl, { immediate: false }) +const { onFetchResponse, isFetching, execute } = baseFetch(queryUrl, { immediate: false }) onFetchResponse(async (resp) => { const blob = await resp.blob() @@ -84,8 +84,8 @@ watch(isFetching, (fetching) => { }) onMounted(async () => { - const resp = await fetch(`${API_BASE_URL}/radar/metadata`) - const data = await resp.json() + const resp = await baseFetch(`${API_BASE_URL}/radar/metadata`).json() + const data = await resp.data.value // use regex to extract the year from the path, // ./radar/data\\武汉左岭镇站\\2017\\ZLT_MET01_DLL_L21_01D_20170316.txt const station_pattern = /data\/(.*?)\// @@ -109,6 +109,12 @@ onMounted(async () => { paths.value = data }) + +watch(selectedYear, (newV) => { + selectedDate.value = Array.from(dates.value).filter( + d => d.startsWith(newV), + )[0] +})