check mission existance before navigation

This commit is contained in:
Julian Krauser 2025-03-07 16:09:01 +01:00
parent 3b2a0ca231
commit a9a32801be
4 changed files with 22 additions and 2 deletions

View file

@ -7,6 +7,7 @@ import { abilityAndNavUpdate } from "./adminGuard";
import type { PermissionType, PermissionSection, PermissionModule } from "@/types/permissionTypes"; import type { PermissionType, PermissionSection, PermissionModule } from "@/types/permissionTypes";
import { config } from "../config"; import { config } from "../config";
import { setBackupPage } from "./backupGuard"; import { setBackupPage } from "./backupGuard";
import { checkMissionExists } from "./missionGuard";
const router = createRouter({ const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL), history: createWebHistory(import.meta.env.BASE_URL),
@ -112,7 +113,7 @@ const router = createRouter({
name: "admin-operation-mission-form", name: "admin-operation-mission-form",
component: () => import("@/views/admin/operation/mission/MissionOverview.vue"), component: () => import("@/views/admin/operation/mission/MissionOverview.vue"),
meta: { type: "read", section: "operation", module: "mission" }, meta: { type: "read", section: "operation", module: "mission" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate, checkMissionExists],
props: true, props: true,
}, },
], ],

View file

@ -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" });
});
}

View file

@ -61,7 +61,9 @@ http.interceptors.response.use(
.then(() => { .then(() => {
return http(originalRequest); return http(originalRequest);
}) })
.catch(() => {}); .catch(() => {
router.push({ name: "login" });
});
} }
const notificationStore = useNotificationStore(); const notificationStore = useNotificationStore();

View file

@ -40,6 +40,9 @@ export const useMissionStore = defineStore("mission", {
this.loading = "failed"; this.loading = "failed";
}); });
}, },
fetchMissionById(id: string): Promise<AxiosResponse<any, any>> {
return http.get(`/admin/mission/${id}`);
},
prependMission(mission: MissionShortViewModel) { prependMission(mission: MissionShortViewModel) {
this.missions.unshift(mission); this.missions.unshift(mission);
}, },