diff --git a/src/router/index.ts b/src/router/index.ts index 16f34df..fb1471c 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -7,6 +7,7 @@ import { abilityAndNavUpdate } from "./adminGuard"; import type { PermissionType, PermissionSection, PermissionModule } from "@/types/permissionTypes"; import { config } from "../config"; import { setBackupPage } from "./backupGuard"; +import { checkMissionExists } from "./missionGuard"; const router = createRouter({ history: createWebHistory(import.meta.env.BASE_URL), @@ -112,7 +113,7 @@ const router = createRouter({ name: "admin-operation-mission-form", component: () => import("@/views/admin/operation/mission/MissionOverview.vue"), meta: { type: "read", section: "operation", module: "mission" }, - beforeEnter: [abilityAndNavUpdate], + beforeEnter: [abilityAndNavUpdate, checkMissionExists], props: true, }, ], diff --git a/src/router/missionGuard.ts b/src/router/missionGuard.ts new file mode 100644 index 0000000..208f19d --- /dev/null +++ b/src/router/missionGuard.ts @@ -0,0 +1,14 @@ +import { useMissionStore } from "../stores/admin/operation/mission"; + +export async function checkMissionExists(to: any, from: any, next: any) { + const mission = useMissionStore(); + + await mission + .fetchMissionById(to.params?.id ?? "") + .then(() => { + next(); + }) + .catch(() => { + next({ name: "admin-operation-mission" }); + }); +} diff --git a/src/serverCom.ts b/src/serverCom.ts index 301e7dd..18aa3c6 100644 --- a/src/serverCom.ts +++ b/src/serverCom.ts @@ -61,7 +61,9 @@ http.interceptors.response.use( .then(() => { return http(originalRequest); }) - .catch(() => {}); + .catch(() => { + router.push({ name: "login" }); + }); } const notificationStore = useNotificationStore(); diff --git a/src/stores/admin/operation/mission.ts b/src/stores/admin/operation/mission.ts index 802a39e..0bd04ac 100644 --- a/src/stores/admin/operation/mission.ts +++ b/src/stores/admin/operation/mission.ts @@ -40,6 +40,9 @@ export const useMissionStore = defineStore("mission", { this.loading = "failed"; }); }, + fetchMissionById(id: string): Promise> { + return http.get(`/admin/mission/${id}`); + }, prependMission(mission: MissionShortViewModel) { this.missions.unshift(mission); },