diff --git a/src/components/admin/ForceSearchSelect.vue b/src/components/admin/ForceSearchSelect.vue
index da9346a..3ed7c7a 100644
--- a/src/components/admin/ForceSearchSelect.vue
+++ b/src/components/admin/ForceSearchSelect.vue
@@ -83,7 +83,7 @@ import {
TransitionRoot,
} from "@headlessui/vue";
import { CheckIcon, ChevronUpDownIcon } from "@heroicons/vue/20/solid";
-import { useForceStore } from "@/stores/admin/configuration/forces";
+import { useForceStore } from "@/stores/admin/configuration/force";
import type { ForceViewModel } from "@/viewmodels/admin/configuration/force.models";
import difference from "lodash.difference";
import Spinner from "../Spinner.vue";
diff --git a/src/components/admin/configuration/equipment/CreateEquipmentModal.vue b/src/components/admin/configuration/equipment/CreateEquipmentModal.vue
new file mode 100644
index 0000000..a094d93
--- /dev/null
+++ b/src/components/admin/configuration/equipment/CreateEquipmentModal.vue
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
diff --git a/src/components/admin/configuration/equipment/DeleteEquipmentModal.vue b/src/components/admin/configuration/equipment/DeleteEquipmentModal.vue
new file mode 100644
index 0000000..f3c35cd
--- /dev/null
+++ b/src/components/admin/configuration/equipment/DeleteEquipmentModal.vue
@@ -0,0 +1,85 @@
+
+
+
+
+
+ Fahrzeug {{ equipment?.name }} {{ equipment?.code ? `(${equipment.code})` : "" }} löschen?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/admin/configuration/equipment/EquipmentListItem.vue b/src/components/admin/configuration/equipment/EquipmentListItem.vue
new file mode 100644
index 0000000..5596099
--- /dev/null
+++ b/src/components/admin/configuration/equipment/EquipmentListItem.vue
@@ -0,0 +1,66 @@
+
+
+
+
{{ equipment.name }} {{ equipment.type }} {{ equipment.code }}
+
+
+
+
verfügbar ab: {{ equipment.commissioned }}
+
verfügbar bis: {{ equipment?.decommissioned ?? "---" }}
+
+
+
+
+
+
+
diff --git a/src/components/admin/configuration/equipment/UpdateEquipmentModal.vue b/src/components/admin/configuration/equipment/UpdateEquipmentModal.vue
new file mode 100644
index 0000000..fe017d1
--- /dev/null
+++ b/src/components/admin/configuration/equipment/UpdateEquipmentModal.vue
@@ -0,0 +1,140 @@
+
+
+
+
Fahrzeug aktualisieren
+
+
+
+
↺ laden fehlgeschlagen
+
+
+
+
+
+
+
+
+
diff --git a/src/components/admin/configuration/force/CreateForceModal.vue b/src/components/admin/configuration/force/CreateForceModal.vue
index f894e00..58d6c5e 100644
--- a/src/components/admin/configuration/force/CreateForceModal.vue
+++ b/src/components/admin/configuration/force/CreateForceModal.vue
@@ -56,7 +56,7 @@ import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue";
import { Listbox, ListboxButton, ListboxOptions, ListboxOption, ListboxLabel } from "@headlessui/vue";
import { CheckIcon, ChevronUpDownIcon } from "@heroicons/vue/20/solid";
-import { useForceStore } from "@/stores/admin/configuration/forces";
+import { useForceStore } from "@/stores/admin/configuration/force";
import type { CreateForceViewModel } from "@/viewmodels/admin/configuration/force.models";
diff --git a/src/components/admin/configuration/force/DeleteForceModal.vue b/src/components/admin/configuration/force/DeleteForceModal.vue
index 789cc1d..5b1ffa3 100644
--- a/src/components/admin/configuration/force/DeleteForceModal.vue
+++ b/src/components/admin/configuration/force/DeleteForceModal.vue
@@ -40,7 +40,7 @@ import { useModalStore } from "@/stores/modal";
import Spinner from "@/components/Spinner.vue";
import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue";
-import { useForceStore } from "@/stores/admin/configuration/forces";
+import { useForceStore } from "@/stores/admin/configuration/force";
import type { CreateForceViewModel } from "@/viewmodels/admin/configuration/force.models";
@@ -73,7 +73,6 @@ export default defineComponent({
.then(() => {
this.status = { status: "success" };
this.timeout = setTimeout(() => {
- this.$router.push({ name: "admin-configuration-force" });
this.closeModal();
}, 1500);
})
diff --git a/src/components/admin/configuration/force/ForceListItem.vue b/src/components/admin/configuration/force/ForceListItem.vue
index 7d4a736..cc2523d 100644
--- a/src/components/admin/configuration/force/ForceListItem.vue
+++ b/src/components/admin/configuration/force/ForceListItem.vue
@@ -3,6 +3,12 @@
{{ force.lastname }}, {{ force.firstname }} {{ force.nameaffix ? `- ${force.nameaffix}` : "" }}
+
@@ -24,7 +30,8 @@ import { mapState, mapActions } from "pinia";
import { useAbilityStore } from "@/stores/ability";
import type { ForceViewModel } from "@/viewmodels/admin/configuration/force.models";
import { useModalStore } from "../../../../stores/modal";
-import { PencilIcon, TrashIcon } from "@heroicons/vue/24/outline";
+import { ArrowRightStartOnRectangleIcon, PencilIcon, TrashIcon } from "@heroicons/vue/24/outline";
+import { useForceStore } from "../../../../stores/admin/configuration/force";
+
+
diff --git a/src/components/admin/configuration/vehicle/DeleteVehicleModal.vue b/src/components/admin/configuration/vehicle/DeleteVehicleModal.vue
new file mode 100644
index 0000000..d4b9862
--- /dev/null
+++ b/src/components/admin/configuration/vehicle/DeleteVehicleModal.vue
@@ -0,0 +1,83 @@
+
+
+
+
+
Fahrzeug {{ vehicle?.name }} {{ vehicle?.code ? `(${vehicle.code})` : "" }} löschen?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/admin/configuration/vehicle/UpdateVehicleModal.vue b/src/components/admin/configuration/vehicle/UpdateVehicleModal.vue
new file mode 100644
index 0000000..d481c98
--- /dev/null
+++ b/src/components/admin/configuration/vehicle/UpdateVehicleModal.vue
@@ -0,0 +1,140 @@
+
+
+
+
Fahrzeug aktualisieren
+
+
+
+
↺ laden fehlgeschlagen
+
+
+
+
+
+
+
+
+
diff --git a/src/components/admin/configuration/vehicle/VehicleListItem.vue b/src/components/admin/configuration/vehicle/VehicleListItem.vue
new file mode 100644
index 0000000..9d6b0ec
--- /dev/null
+++ b/src/components/admin/configuration/vehicle/VehicleListItem.vue
@@ -0,0 +1,62 @@
+
+
+
+
{{ vehicle.name }} {{ vehicle.type }} {{ vehicle.code }}
+
+
+
+
verfügbar ab: {{ vehicle.commissioned }}
+
verfügbar bis: {{ vehicle?.decommissioned ?? "---" }}
+
+
+
+
+
+
+
diff --git a/src/router/index.ts b/src/router/index.ts
index 716b911..0ed803f 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -126,14 +126,14 @@ const router = createRouter({
{
path: "equipment",
name: "admin-configuration-equipment",
- component: () => import("@/views/admin/configuration/force/Force.vue"),
+ component: () => import("@/views/admin/configuration/equipment/Equipment.vue"),
meta: { type: "read", section: "configuration", module: "equipment" },
beforeEnter: [abilityAndNavUpdate],
},
{
path: "vehicle",
name: "admin-configuration-vehicle",
- component: () => import("@/views/admin/configuration/force/Force.vue"),
+ component: () => import("@/views/admin/configuration/vehicle/Vehicle.vue"),
meta: { type: "read", section: "configuration", module: "vehicle" },
beforeEnter: [abilityAndNavUpdate],
},
diff --git a/src/stores/admin/configuration/equipment.ts b/src/stores/admin/configuration/equipment.ts
index 22e6578..05236c7 100644
--- a/src/stores/admin/configuration/equipment.ts
+++ b/src/stores/admin/configuration/equipment.ts
@@ -64,17 +64,21 @@ export const useEquipmentStore = defineStore("equipment", {
},
async createEquipment(equipment: CreateEquipmentViewModel): Promise
> {
const result = await http.post(`/admin/equipment`, equipment);
- this.fetchEquipments();
+ this.fetchEquipments(0, 25, "", true);
return result;
},
- async updateActiveEquipment(equipment: UpdateEquipmentViewModel): Promise> {
+ async updateEquipment(equipment: UpdateEquipmentViewModel): Promise> {
const result = await http.patch(`/admin/equipment/${equipment.id}`, equipment);
- this.fetchEquipments();
+ this.fetchEquipments(0, 25, "", true);
return result;
},
+ async decommissionEquipment(equipmentId: string) {
+ await http.patch(`/admin/equipment/${equipmentId}/decommission`).catch(() => {});
+ this.fetchEquipments(0, 25, "", true);
+ },
async deleteEquipment(equipment: number): Promise> {
const result = await http.delete(`/admin/equipment/${equipment}`);
- this.fetchEquipments();
+ this.fetchEquipments(0, 25, "", true);
return result;
},
},
diff --git a/src/stores/admin/configuration/forces.ts b/src/stores/admin/configuration/force.ts
similarity index 90%
rename from src/stores/admin/configuration/forces.ts
rename to src/stores/admin/configuration/force.ts
index 9786985..596ba61 100644
--- a/src/stores/admin/configuration/forces.ts
+++ b/src/stores/admin/configuration/force.ts
@@ -64,17 +64,21 @@ export const useForceStore = defineStore("force", {
},
async createForce(force: CreateForceViewModel): Promise> {
const result = await http.post(`/admin/force`, force);
- this.fetchForces();
+ this.fetchForces(0, 25, "", true);
return result;
},
async updateForce(force: UpdateForceViewModel): Promise> {
const result = await http.patch(`/admin/force/${force.id}`, force);
- this.fetchForces();
+ this.fetchForces(0, 25, "", true);
return result;
},
+ async decommissionForce(forceId: string) {
+ await http.patch(`/admin/force/${forceId}/decommission`).catch(() => {});
+ this.fetchForces(0, 25, "", true);
+ },
async deleteForce(force: number): Promise> {
const result = await http.delete(`/admin/force/${force}`);
- this.fetchForces();
+ this.fetchForces(0, 25, "", true);
return result;
},
},
diff --git a/src/stores/admin/configuration/vehicle.ts b/src/stores/admin/configuration/vehicle.ts
index 54beba9..53fd240 100644
--- a/src/stores/admin/configuration/vehicle.ts
+++ b/src/stores/admin/configuration/vehicle.ts
@@ -64,17 +64,21 @@ export const useVehicleStore = defineStore("vehicle", {
},
async createVehicle(vehicle: CreateVehicleViewModel): Promise> {
const result = await http.post(`/admin/vehicle`, vehicle);
- this.fetchVehicles();
+ this.fetchVehicles(0, 25, "", true);
return result;
},
- async updateActiveVehicle(vehicle: UpdateVehicleViewModel): Promise> {
+ async updateVehicle(vehicle: UpdateVehicleViewModel): Promise> {
const result = await http.patch(`/admin/vehicle/${vehicle.id}`, vehicle);
- this.fetchVehicles();
+ this.fetchVehicles(0, 25, "", true);
return result;
},
+ async decommissionVehicle(vehicleId: string) {
+ await http.patch(`/admin/vehicle/${vehicleId}/decommission`).catch(() => {});
+ this.fetchVehicles(0, 25, "", true);
+ },
async deleteVehicle(vehicle: number): Promise> {
const result = await http.delete(`/admin/vehicle/${vehicle}`);
- this.fetchVehicles();
+ this.fetchVehicles(0, 25, "", true);
return result;
},
},
diff --git a/src/views/admin/configuration/equipment/Equipment.vue b/src/views/admin/configuration/equipment/Equipment.vue
new file mode 100644
index 0000000..f5f09e4
--- /dev/null
+++ b/src/views/admin/configuration/equipment/Equipment.vue
@@ -0,0 +1,73 @@
+
+
+
+
+
Ausrüstung
+
+
+
+
+
fetchEquipments(offset, count, search)"
+ @search="(search) => fetchEquipments(0, maxEntriesPerPage, search, true)"
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/admin/configuration/force/Force.vue b/src/views/admin/configuration/force/Force.vue
index e8c5e4b..ac82d97 100644
--- a/src/views/admin/configuration/force/Force.vue
+++ b/src/views/admin/configuration/force/Force.vue
@@ -34,7 +34,7 @@
import { defineAsyncComponent, defineComponent, markRaw } from "vue";
import { mapActions, mapState } from "pinia";
import MainTemplate from "@/templates/Main.vue";
-import { useForceStore } from "@/stores/admin/configuration/forces";
+import { useForceStore } from "@/stores/admin/configuration/force";
import ForceListItem from "@/components/admin/configuration/force/ForceListItem.vue";
import { useModalStore } from "@/stores/modal";
import Pagination from "@/components/Pagination.vue";
diff --git a/src/views/admin/configuration/vehicle/Vehicle.vue b/src/views/admin/configuration/vehicle/Vehicle.vue
new file mode 100644
index 0000000..7cd732a
--- /dev/null
+++ b/src/views/admin/configuration/vehicle/Vehicle.vue
@@ -0,0 +1,71 @@
+
+
+
+
+
Fahrzeuge
+
+
+
+
+
fetchVehicles(offset, count, search)"
+ @search="(search) => fetchVehicles(0, maxEntriesPerPage, search, true)"
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+