From 4fc70895faea0380fc1411c6f54449c842576705 Mon Sep 17 00:00:00 2001 From: Dustella Date: Thu, 20 Feb 2025 14:55:37 +0800 Subject: [PATCH] refactor: routes --- package.json | 2 +- src/CONSTANT.ts | 108 ------------------ src/components/DefaultLayout.vue | 50 +++++++- .../dense/saber/day_cycle_power_wave_plot.vue | 2 +- .../dense/saber/day_fft_ifft_plot.vue | 2 +- .../dense/saber/month_power_wave_plot.vue | 2 +- .../dense/saber/plot_wave_fitting.vue | 2 +- src/composables/header.ts | 0 src/main.ts | 6 +- .../balloon/{ => gravity_wave}/single.vue | 23 +++- src/pages/balloon/{ => gravity_wave}/year.vue | 0 .../{single.vue => gravity_wave/perday.vue} | 4 +- .../{stats.vue => planet_wave/daily.vue} | 6 +- src/pages/debug.vue | 14 +++ .../{PW-single.vue => planet_wave/single.vue} | 0 .../{PW-stats.vue => planet_wave/stats.vue} | 0 .../{TW-single.vue => tidal_wave/single.vue} | 0 .../{TW-stats.vue => tidal_wave/stats.vue} | 0 src/pages/radar/v1.vue | 4 +- src/pages/radar/v2.vue | 4 +- src/pages/saber/gravity_wave/monthly.vue | 11 ++ .../single.vue => gravity_wave/perday.vue} | 8 ++ src/pages/saber/gw/stats.vue | 3 - src/pages/saber/planet_wave/monthly.vue | 65 +++++++++++ .../monthly.vue} | 14 +-- .../tidi/{waves.vue => planet_wave/daily.vue} | 43 ++++++- typed-router.d.ts | 26 +++-- 27 files changed, 244 insertions(+), 155 deletions(-) create mode 100644 src/composables/header.ts rename src/pages/balloon/{ => gravity_wave}/single.vue (84%) rename src/pages/balloon/{ => gravity_wave}/year.vue (100%) rename src/pages/cosmic/{single.vue => gravity_wave/perday.vue} (96%) rename src/pages/cosmic/{stats.vue => planet_wave/daily.vue} (86%) create mode 100644 src/pages/debug.vue rename src/pages/radar/{PW-single.vue => planet_wave/single.vue} (100%) rename src/pages/radar/{PW-stats.vue => planet_wave/stats.vue} (100%) rename src/pages/radar/{TW-single.vue => tidal_wave/single.vue} (100%) rename src/pages/radar/{TW-stats.vue => tidal_wave/stats.vue} (100%) create mode 100644 src/pages/saber/gravity_wave/monthly.vue rename src/pages/saber/{gw/single.vue => gravity_wave/perday.vue} (89%) delete mode 100644 src/pages/saber/gw/stats.vue create mode 100644 src/pages/saber/planet_wave/monthly.vue rename src/pages/tidi/{month_stats.vue => gravity_wave/monthly.vue} (87%) rename src/pages/tidi/{waves.vue => planet_wave/daily.vue} (66%) diff --git a/package.json b/package.json index e6030e3..681717a 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "packageManager": "pnpm@9.14.4", "scripts": { "build": "vite build", - "dev": "vite --port 10514 --open", + "dev": "vite --port 10514 --host", "lint": "eslint .", "typecheck": "vue-tsc --noEmit", "preview": "vite preview", diff --git a/src/CONSTANT.ts b/src/CONSTANT.ts index 03f36fd..0bab08c 100644 --- a/src/CONSTANT.ts +++ b/src/CONSTANT.ts @@ -2,111 +2,3 @@ const KURONEKO_API = 'http://100.89.232.74:18200' // export const API_BASE_URL = 'http://localhost:5000' export const API_BASE_URL = import.meta.env.PROD ? 'https://gca-api.dustella.net:8443' : KURONEKO_API // export const API_BASE_URL = 'https://gca-api.dustella.net:8443' - -export const headerData = { - user: { - name: 'shadcn', - email: 'm@example.com', - avatar: '/avatars/shadcn.jpg', - }, - navMain: [ - { - title: '流星雷达', - url: '#', - icon: 'ri-radar-fill', - isActive: true, - items: [ - { - title: '潮汐波提取', - url: '/radar/TW-single', - }, - { - title: '潮汐波统计', - url: '/radar/TW-stats', - }, - { - title: '行星波提取', - url: '/radar/PW-single', - }, - { - title: '行星波统计', - url: '/radar/PW-stats', - }, - ], - }, - { - title: 'SABER', - url: '#', - icon: 'game-icons:cracked-saber', - isActive: true, - items: [ - { - title: '重力波提取', - url: '/saber/gw/single', - }, - { - title: '重力波统计', - url: '/saber/gw/stats', - }, - ], - - }, - { - title: '探空气球', - url: '#', - icon: 'bxs:balloon', - isActive: true, - items: [ - { - title: '重力波单次', - url: '/balloon/single', - }, - { - title: '重力波统计', - url: '/balloon/year', - }, - ], - }, - { - title: 'TIDI', - url: '#', - icon: 'mdi:telescope', - isActive: true, - items: [ - { - title: '行星波振幅', - url: '/tidi/waves', - }, - { - title: '行星波月统计', - url: '/tidi/month_stats', - }, - ], - }, - { - title: 'COSMIC', - url: '#', - icon: 'mdi:telescope', - isActive: true, - items: [ - { - title: '行星波月统计', - url: '/cosmic/stats', - }, - { - title: '行星波单次', - url: '/cosmic/single', - }, - ], - }, - ], - - 关于: [ - { - name: 'Design Engineering', - url: '#', - icon: 'Frame', - }, - - ], -} as const diff --git a/src/components/DefaultLayout.vue b/src/components/DefaultLayout.vue index 8fa255a..154fc9f 100644 --- a/src/components/DefaultLayout.vue +++ b/src/components/DefaultLayout.vue @@ -35,7 +35,6 @@ import { } from '~/components/ui/sidebar' import { authCode, useBackendOnline } from '../composables' -import { headerData as data } from '../CONSTANT' const router = useRouter() @@ -45,6 +44,55 @@ function logout() { authCode.value = '' router.push('/auth') } +const IconMapping = { + 探空气球: 'bxs:balloon', + SABER: 'game-icons:cracked-saber', + 流星雷达: 'ri-radar-fill', + TIDI: 'mdi:telescope', + COSMIC: 'mdi:telescope', +} as Record + +function generateNavigationFromRoutes() { + const allRoutesWithMeta = router.getRoutes().filter( + (r) => { + // check if r.meta is {} + return Object.keys(r.meta).length > 0 && !!r.meta.group + }, + ) + // @ts-expect-error i expect grpup + const groupedItems = Object.groupBy(allRoutesWithMeta, r => r.meta.group) + return Object.entries(groupedItems).map(([group, routes]) => { + return { + title: group, + url: '#', + icon: IconMapping[group] ?? 'ri-radar-fill', + isActive: true, + items: routes!.map((r) => { + return { + title: r.meta.item_name as string, + url: r.path, + } + }), + } + }) +} +const data = { + user: { + name: 'shadcn', + email: 'm@example.com', + avatar: '/avatars/shadcn.jpg', + }, + navMain: generateNavigationFromRoutes(), + + 关于: [ + { + name: 'Design Engineering', + url: '#', + icon: 'Frame', + }, + + ], +} as const onMounted(() => { if (!authCode.value) { diff --git a/src/components/dense/saber/day_cycle_power_wave_plot.vue b/src/components/dense/saber/day_cycle_power_wave_plot.vue index cd03f7b..317b669 100644 --- a/src/components/dense/saber/day_cycle_power_wave_plot.vue +++ b/src/components/dense/saber/day_cycle_power_wave_plot.vue @@ -35,7 +35,7 @@ const urll = computed(() => { query.set('day', selected.day) query.set('cycle_no', selected.cycle_no.toString()) query.set('lat_range', selected.lat_range) - return `${API_BASE_URL}/saber/render/day_cycle_power_wave_plot?${query}` + return `${API_BASE_URL}/saber/render/gravity_wave/per_day/power_wave_plot?${query}` }) onMounted(async () => { diff --git a/src/components/dense/saber/day_fft_ifft_plot.vue b/src/components/dense/saber/day_fft_ifft_plot.vue index 7cbcb48..d05b4c8 100644 --- a/src/components/dense/saber/day_fft_ifft_plot.vue +++ b/src/components/dense/saber/day_fft_ifft_plot.vue @@ -38,7 +38,7 @@ const urll = computed(() => { query.set('day', selected.day) query.set('cycle_no', selected.cycle_no.toString()) query.set('lat_range', selected.lat_range) - return `${API_BASE_URL}/saber/render/day_fft_ifft_plot?${query}` + return `${API_BASE_URL}/saber/render/gravity_wave/per_day/fft_ifft?${query}` }) onMounted(async () => { diff --git a/src/components/dense/saber/month_power_wave_plot.vue b/src/components/dense/saber/month_power_wave_plot.vue index 95af660..c084bb3 100644 --- a/src/components/dense/saber/month_power_wave_plot.vue +++ b/src/components/dense/saber/month_power_wave_plot.vue @@ -31,7 +31,7 @@ const urll = computed(() => { const query = new URLSearchParams() query.set('path', selected.path) query.set('lat_range', selected.lat_range) - return `${API_BASE_URL}/saber/render/month_power_wave_plot?${query}` + return `${API_BASE_URL}/saber/render/gravity_wave/per_month/power_wave_plot?${query}` }) onMounted(async () => { diff --git a/src/components/dense/saber/plot_wave_fitting.vue b/src/components/dense/saber/plot_wave_fitting.vue index cd99fc1..a9cf6d7 100644 --- a/src/components/dense/saber/plot_wave_fitting.vue +++ b/src/components/dense/saber/plot_wave_fitting.vue @@ -35,7 +35,7 @@ const urll = computed(() => { query.set('day', selected.day) query.set('height_no', selected.height_no.toString()) query.set('lat_ranges', selected.lat_ranges) - return `${API_BASE_URL}/saber/render/plot_wave_fitting?${query}` + return `${API_BASE_URL}/saber/render/gravity_wave/per_day/wave_fitting?${query}` }) onMounted(async () => { diff --git a/src/composables/header.ts b/src/composables/header.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/main.ts b/src/main.ts index 801df2c..fbb7b93 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,6 +1,6 @@ import { createApp } from 'vue' import { createRouter, createWebHistory } from 'vue-router' -import { routes } from 'vue-router/auto-routes' +import { handleHotUpdate, routes } from 'vue-router/auto-routes' import App from './App.vue' import '@unocss/reset/tailwind.css' @@ -13,5 +13,9 @@ const router = createRouter({ routes, history: createWebHistory(import.meta.env.BASE_URL), }) +if (import.meta.hot) { + handleHotUpdate(router) +} + app.use(router) app.mount('#app') diff --git a/src/pages/balloon/single.vue b/src/pages/balloon/gravity_wave/single.vue similarity index 84% rename from src/pages/balloon/single.vue rename to src/pages/balloon/gravity_wave/single.vue index 5c3df37..42e974b 100644 --- a/src/pages/balloon/single.vue +++ b/src/pages/balloon/gravity_wave/single.vue @@ -18,17 +18,32 @@ const modes = [ ] as const const allPaths = ref([] as string[]) +const allStations = ref([] as string[]) + const selected = reactive({ selectedMode: '观测的二阶多项式拟合', selectedPath: '', station: 'LIN', }) +const currentPathesList = computed(() => { + const station = selected.station + return allPaths.value.filter((a: string) => a.includes(station)) +}) onMounted(async () => { await baseFetch(`${API_BASE_URL}/balloon/metadata`).json().then(({ data }) => { const das = data.value! allPaths.value = das selected.selectedPath = das[0] + + const _allStations = das.map((a: string) => { + const stationPattern = /data\/balloon\/(\w+)\// + return a.match(stationPattern)?.[1] + }) as string[] + + const stations = Array.from(new Set(_allStations)) + allStations.value = stations + selected.station = stations[0] }) }) @@ -58,7 +73,7 @@ const metadata = ref({} as Record) async function customHandle(resp: Response) { if (resp.status === 204) { const res: ImageResult = { - message: '这一天没有数据', + message: '这一天没有重力波', result: 'error', resourceId: '', } @@ -109,8 +124,8 @@ async function customHandle(resp: Response) { 台站 - - LIN + + {{ s }} @@ -123,7 +138,7 @@ async function customHandle(resp: Response) { 日期 - + {{ renderDate(path) }} diff --git a/src/pages/balloon/year.vue b/src/pages/balloon/gravity_wave/year.vue similarity index 100% rename from src/pages/balloon/year.vue rename to src/pages/balloon/gravity_wave/year.vue diff --git a/src/pages/cosmic/single.vue b/src/pages/cosmic/gravity_wave/perday.vue similarity index 96% rename from src/pages/cosmic/single.vue rename to src/pages/cosmic/gravity_wave/perday.vue index 52c33da..84f94b6 100644 --- a/src/pages/cosmic/single.vue +++ b/src/pages/cosmic/gravity_wave/perday.vue @@ -4,7 +4,7 @@ "title":"COSMIC单次", "description":"COSMIC重力波单次", "group":"COSMIC", - "item_name":"重力波单次" + "item_name":"重力波提取" } } @@ -52,7 +52,7 @@ const queryUrl = computed(() => { const day_No = getDayOfYear(theDate) query.set('day', day_No.toString()) query.set('mode', selected.mode) - return `/cosmic/render/single?${query}` + return `/cosmic/render/gravity_wave/perday?${query}` }) diff --git a/src/pages/cosmic/stats.vue b/src/pages/cosmic/planet_wave/daily.vue similarity index 86% rename from src/pages/cosmic/stats.vue rename to src/pages/cosmic/planet_wave/daily.vue index c9a50ee..6d4aef0 100644 --- a/src/pages/cosmic/stats.vue +++ b/src/pages/cosmic/planet_wave/daily.vue @@ -1,9 +1,9 @@ {"meta":{ "title":"COSMIC", - "description":"行星波月统计", + "description":"行星波统计", "group":"COSMIC", - "item_name":"行星波月统计" + "item_name":"行星波统计" }} @@ -16,7 +16,7 @@ const selectedT = ref<'5' | '10' | '16'>('5') const fetchUrl = computed(() => { const query = new URLSearchParams() query.set('T_', selectedT.value) - return `${API_BASE_URL}/cosmic/temp_render?${query}` + return `${API_BASE_URL}/cosmic/render/planet_wave/daily?${query}` }) diff --git a/src/pages/debug.vue b/src/pages/debug.vue new file mode 100644 index 0000000..f7506c9 --- /dev/null +++ b/src/pages/debug.vue @@ -0,0 +1,14 @@ + + + + + diff --git a/src/pages/radar/PW-single.vue b/src/pages/radar/planet_wave/single.vue similarity index 100% rename from src/pages/radar/PW-single.vue rename to src/pages/radar/planet_wave/single.vue diff --git a/src/pages/radar/PW-stats.vue b/src/pages/radar/planet_wave/stats.vue similarity index 100% rename from src/pages/radar/PW-stats.vue rename to src/pages/radar/planet_wave/stats.vue diff --git a/src/pages/radar/TW-single.vue b/src/pages/radar/tidal_wave/single.vue similarity index 100% rename from src/pages/radar/TW-single.vue rename to src/pages/radar/tidal_wave/single.vue diff --git a/src/pages/radar/TW-stats.vue b/src/pages/radar/tidal_wave/stats.vue similarity index 100% rename from src/pages/radar/TW-stats.vue rename to src/pages/radar/tidal_wave/stats.vue diff --git a/src/pages/radar/v1.vue b/src/pages/radar/v1.vue index 2ab97c4..886a839 100644 --- a/src/pages/radar/v1.vue +++ b/src/pages/radar/v1.vue @@ -1,4 +1,4 @@ - + + + + + diff --git a/src/pages/tidi/month_stats.vue b/src/pages/tidi/gravity_wave/monthly.vue similarity index 87% rename from src/pages/tidi/month_stats.vue rename to src/pages/tidi/gravity_wave/monthly.vue index 2563877..521636a 100644 --- a/src/pages/tidi/month_stats.vue +++ b/src/pages/tidi/gravity_wave/monthly.vue @@ -1,10 +1,10 @@ { "meta":{ - "title":"TIDI月统计", - "description":"TIDI月统计", + "title":"TIDI 重力波统计", + "description":"TIDI 重力波统计", "group":"TIDI", - "item_name":"月统计" + "item_name":"重力波统计" } } @@ -12,7 +12,7 @@