diff --git a/src/components/admin/operation/mission/MissionListItem.vue b/src/components/admin/operation/mission/MissionListItem.vue new file mode 100644 index 0000000..7720e22 --- /dev/null +++ b/src/components/admin/operation/mission/MissionListItem.vue @@ -0,0 +1,28 @@ + + + + + diff --git a/src/layouts/Sidebar.vue b/src/layouts/Sidebar.vue index 8133a15..bc78de8 100644 --- a/src/layouts/Sidebar.vue +++ b/src/layouts/Sidebar.vue @@ -7,7 +7,10 @@ > -
+
diff --git a/src/router/index.ts b/src/router/index.ts index 0ed803f..a3e7c00 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -96,9 +96,25 @@ const router = createRouter({ { path: "mission", name: "admin-operation-mission", - component: () => import("@/views/admin/ViewSelect.vue"), + component: () => import("@/views/RouterView.vue"), meta: { type: "read", section: "operation", module: "mission" }, beforeEnter: [abilityAndNavUpdate], + children: [ + { + path: "", + name: "admin-operation-mission-default", + component: () => import("@/views/admin/operation/mission/MissionList.vue"), + meta: { type: "read", section: "operation" }, + beforeEnter: [abilityAndNavUpdate], + }, + { + path: ":id", + name: "admin-operation-mission-form", + component: () => import("@/views/admin/operation/mission/MissionOverview.vue"), + meta: { type: "read", section: "operation", module: "force" }, + beforeEnter: [abilityAndNavUpdate], + }, + ], }, ], }, diff --git a/src/stores/admin/operation/mission.ts b/src/stores/admin/operation/mission.ts new file mode 100644 index 0000000..7721659 --- /dev/null +++ b/src/stores/admin/operation/mission.ts @@ -0,0 +1,42 @@ +import { defineStore } from "pinia"; +import type { MissionShortViewModel } from "@/viewmodels/admin/operation/mission.models"; +import { http } from "@/serverCom"; +import type { AxiosResponse } from "axios"; + +export const useMissionStore = defineStore("mission", { + state: () => { + return { + missions: [] as Array, + totalCount: 0 as number, + loading: "loading" as "loading" | "fetched" | "failed", + }; + }, + actions: { + fetchMissions(offset = 0, count = 25, clear = false) { + if (clear) this.missions = []; + this.loading = "loading"; + http + .get(`/admin/mission?offset=${offset}&count=${count}`) + .then((result) => { + this.totalCount = result.data.total; + result.data.missions + .filter((elem: MissionShortViewModel) => this.missions.findIndex((m) => m.id == elem.id) == -1) + .forEach((elem: MissionShortViewModel) => { + this.missions.push(elem); + }); + this.loading = "fetched"; + }) + .catch((err) => { + this.loading = "failed"; + }); + }, + prependMission(mission: MissionShortViewModel) { + this.missions.unshift(mission); + }, + async createMission(): Promise> { + const result = await http.post(`/admin/mission`); + this.fetchMissions(0, 25, true); + return result; + }, + }, +}); diff --git a/src/viewmodels/admin/operation/mission.models.ts b/src/viewmodels/admin/operation/mission.models.ts new file mode 100644 index 0000000..92dd387 --- /dev/null +++ b/src/viewmodels/admin/operation/mission.models.ts @@ -0,0 +1,5 @@ +export interface MissionShortViewModel { + id: string; + title: string; + keyword?: string; +} diff --git a/src/views/admin/configuration/equipment/Equipment.vue b/src/views/admin/configuration/equipment/Equipment.vue index f5f09e4..9ab3d84 100644 --- a/src/views/admin/configuration/equipment/Equipment.vue +++ b/src/views/admin/configuration/equipment/Equipment.vue @@ -21,7 +21,7 @@
-
diff --git a/src/views/admin/configuration/force/Force.vue b/src/views/admin/configuration/force/Force.vue index ac82d97..80f12e2 100644 --- a/src/views/admin/configuration/force/Force.vue +++ b/src/views/admin/configuration/force/Force.vue @@ -21,7 +21,7 @@
-
diff --git a/src/views/admin/configuration/vehicle/Vehicle.vue b/src/views/admin/configuration/vehicle/Vehicle.vue index 7cd732a..c7ecba9 100644 --- a/src/views/admin/configuration/vehicle/Vehicle.vue +++ b/src/views/admin/configuration/vehicle/Vehicle.vue @@ -21,7 +21,7 @@
-
diff --git a/src/views/admin/operation/mission/MissionList.vue b/src/views/admin/operation/mission/MissionList.vue new file mode 100644 index 0000000..d109603 --- /dev/null +++ b/src/views/admin/operation/mission/MissionList.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/src/views/admin/operation/mission/MissionOverview.vue b/src/views/admin/operation/mission/MissionOverview.vue new file mode 100644 index 0000000..9d9f756 --- /dev/null +++ b/src/views/admin/operation/mission/MissionOverview.vue @@ -0,0 +1,76 @@ + + + + +