Intermediate: Merge pull request '#23-cleanup-&-enhancements' (#24) from #23-cleanup-&-enhancements into main

Reviewed-on: Ehrenamt/member-administration-ui#24
This commit is contained in:
Julian Krauser 2025-01-03 14:21:56 +00:00
commit f2ace3a2e5
204 changed files with 442 additions and 435 deletions

View file

@ -1,9 +1,9 @@
<template> <template>
<div class="flex flex-col text-gray-400 text-sm mt-4 items-center"> <div class="flex flex-col text-gray-400 text-sm mt-4 items-center">
<div class="flex flex-row gap-2 justify-center"> <div class="flex flex-row gap-2 justify-center">
<a ref="https://jk-effects.com/privacy" target="_blank">Datenschutz</a> <a href="https://jk-effects.com/privacy" target="_blank">Datenschutz</a>
<a ref="https://jk-effects.com/imprint" target="_blank">Impressum</a> <a href="https://jk-effects.com/imprint" target="_blank">Impressum</a>
</div> </div>
<a href="https://jk-effects.com" target="_blank"> &copy; Admin-Portal by JK Effects </a> <a href="https://jk-effects.com" target="_blank"> &copy; Admin-Portal by JK Effects </a>
</div> </div>
</template> </template>

View file

@ -1,9 +1,10 @@
<template> <template>
<div class="grow flex flex-col gap-2 overflow-hidden"> <div class="grow flex flex-col gap-2 overflow-hidden">
<div v-if="useSearch" class="relative self-end"> <div v-if="useSearch" class="relative self-end flex flex-row items-center gap-2">
<Spinner v-if="deferingSearch" />
<input <input
type="text" type="text"
class="w-64 rounded-md shadow-sm relative block px-3 py-2 pr-5 border border-gray-300 placeholder-gray-500 text-gray-900 rounded-b-md focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 focus:z-10 sm:text-sm" class="!max-w-64 !w-64 rounded-md shadow-sm relative block px-3 py-2 pr-5 border border-gray-300 placeholder-gray-500 text-gray-900 rounded-b-md focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 focus:z-10 sm:text-sm"
placeholder="Suche" placeholder="Suche"
v-model="searchString" v-model="searchString"
/> />
@ -87,15 +88,22 @@ const slots = defineSlots<{
const timer = ref(undefined) as undefined | any; const timer = ref(undefined) as undefined | any;
const currentPage = ref(0); const currentPage = ref(0);
const searchString = ref(""); const searchString = ref("");
const deferingSearch = ref(false)
watch(searchString, async () => { watch(searchString, async () => {
deferingSearch.value = true
clearTimeout(timer.value); clearTimeout(timer.value);
timer.value = setTimeout(() => { timer.value = setTimeout(() => {
currentPage.value = 0; currentPage.value = 0;
deferingSearch.value = false
emit("search", searchString.value); emit("search", searchString.value);
}, 600); }, 600);
}); });
watch(() => props.totalCount, async () => {
currentPage.value = 0;
});
const emit = defineEmits({ const emit = defineEmits({
submit(id: number) { submit(id: number) {
return typeof id == "number"; return typeof id == "number";
@ -104,7 +112,7 @@ const emit = defineEmits({
return typeof offset == "number" && typeof offset == "number" && typeof searchString == "number"; return typeof offset == "number" && typeof offset == "number" && typeof searchString == "number";
}, },
search(search: string) { search(search: string) {
return typeof search == "number"; return typeof search == "string";
}, },
clickRow(elem: T) { clickRow(elem: T) {
return true; return true;
@ -151,7 +159,8 @@ const loadPage = (newPage: number | ".") => {
if (pageEnd > entryCount.value) pageEnd = entryCount.value; if (pageEnd > entryCount.value) pageEnd = entryCount.value;
let loadedElementCount = filterData(props.items, searchString.value, pageStart, pageEnd).length; let loadedElementCount = filterData(props.items, searchString.value, pageStart, pageEnd).length;
if (loadedElementCount < props.maxEntriesPerPage) console.log(loadedElementCount, props.maxEntriesPerPage, pageStart, pageEnd)
if (loadedElementCount < props.maxEntriesPerPage && (pageEnd != props.totalCount || loadedElementCount == 0))
emit("loadData", pageStart, props.maxEntriesPerPage, searchString.value); emit("loadData", pageStart, props.maxEntriesPerPage, searchString.value);
currentPage.value = newPage; currentPage.value = newPage;

View file

@ -105,8 +105,8 @@ import { defineComponent } from "vue";
import { mapState, mapActions } from "pinia"; import { mapState, mapActions } from "pinia";
import { RouterLink } from "vue-router"; import { RouterLink } from "vue-router";
import { useModalStore } from "@/stores/modal"; import { useModalStore } from "@/stores/modal";
import { useCalendarTypeStore } from "@/stores/admin/calendarType"; import { useCalendarTypeStore } from "@/stores/admin/settings/calendarType";
import type { CalendarTypeViewModel } from "@/viewmodels/admin/calendarType.models"; import type { CalendarTypeViewModel } from "@/viewmodels/admin/settings/calendarType.models";
import { Listbox, ListboxButton, ListboxOptions, ListboxOption, ListboxLabel } from "@headlessui/vue"; import { Listbox, ListboxButton, ListboxOptions, ListboxOption, ListboxLabel } from "@headlessui/vue";
import { CheckIcon, ChevronUpDownIcon } from "@heroicons/vue/20/solid"; import { CheckIcon, ChevronUpDownIcon } from "@heroicons/vue/20/solid";
import TextCopy from "@/components/TextCopy.vue"; import TextCopy from "@/components/TextCopy.vue";

View file

@ -143,12 +143,12 @@ import { useModalStore } from "@/stores/modal";
import Spinner from "@/components/Spinner.vue"; import Spinner from "@/components/Spinner.vue";
import SuccessCheckmark from "@/components/SuccessCheckmark.vue"; import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { useCalendarStore } from "@/stores/admin/calendar"; import { useCalendarStore } from "@/stores/admin/club/calendar";
import type { CreateCalendarViewModel } from "@/viewmodels/admin/calendar.models"; import type { CreateCalendarViewModel } from "@/viewmodels/admin/club/calendar.models";
import { Listbox, ListboxButton, ListboxOptions, ListboxOption, ListboxLabel } from "@headlessui/vue"; import { Listbox, ListboxButton, ListboxOptions, ListboxOption, ListboxLabel } from "@headlessui/vue";
import { CheckIcon, ChevronUpDownIcon } from "@heroicons/vue/20/solid"; import { CheckIcon, ChevronUpDownIcon } from "@heroicons/vue/20/solid";
import { useCalendarTypeStore } from "@/stores/admin/calendarType"; import { useCalendarTypeStore } from "@/stores/admin/settings/calendarType";
import type { CalendarTypeViewModel } from "@/viewmodels/admin/calendarType.models"; import type { CalendarTypeViewModel } from "@/viewmodels/admin/settings/calendarType.models";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -51,7 +51,7 @@ import { useModalStore } from "@/stores/modal";
import Spinner from "@/components/Spinner.vue"; import Spinner from "@/components/Spinner.vue";
import SuccessCheckmark from "@/components/SuccessCheckmark.vue"; import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { useCalendarStore } from "@/stores/admin/calendar"; import { useCalendarStore } from "@/stores/admin/club/calendar";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -185,16 +185,16 @@ import { useModalStore } from "@/stores/modal";
import Spinner from "@/components/Spinner.vue"; import Spinner from "@/components/Spinner.vue";
import SuccessCheckmark from "@/components/SuccessCheckmark.vue"; import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { useCalendarStore } from "@/stores/admin/calendar"; import { useCalendarStore } from "@/stores/admin/club/calendar";
import type { import type {
CalendarViewModel, CalendarViewModel,
CreateCalendarViewModel, CreateCalendarViewModel,
UpdateCalendarViewModel, UpdateCalendarViewModel,
} from "@/viewmodels/admin/calendar.models"; } from "@/viewmodels/admin/club/calendar.models";
import { Listbox, ListboxButton, ListboxOptions, ListboxOption, ListboxLabel } from "@headlessui/vue"; import { Listbox, ListboxButton, ListboxOptions, ListboxOption, ListboxLabel } from "@headlessui/vue";
import { CheckIcon, ChevronUpDownIcon, TrashIcon } from "@heroicons/vue/20/solid"; import { CheckIcon, ChevronUpDownIcon, TrashIcon } from "@heroicons/vue/20/solid";
import { useCalendarTypeStore } from "@/stores/admin/calendarType"; import { useCalendarTypeStore } from "@/stores/admin/settings/calendarType";
import type { CalendarTypeViewModel } from "@/viewmodels/admin/calendarType.models"; import type { CalendarTypeViewModel } from "@/viewmodels/admin/settings/calendarType.models";
import cloneDeep from "lodash.clonedeep"; import cloneDeep from "lodash.clonedeep";
import isEqual from "lodash.isequal"; import isEqual from "lodash.isequal";
import { useAbilityStore } from "@/stores/ability"; import { useAbilityStore } from "@/stores/ability";

View file

@ -66,6 +66,10 @@
<label for="birthdate">Geburtsdatum</label> <label for="birthdate">Geburtsdatum</label>
<input type="date" id="birthdate" required /> <input type="date" id="birthdate" required />
</div> </div>
<div>
<label for="internalId">Interne ID (optional)</label>
<input type="text" id="internalId" />
</div>
<div class="flex flex-row gap-2"> <div class="flex flex-row gap-2">
<button primary type="submit" :disabled="status == 'loading' || status?.status == 'success'">erstellen</button> <button primary type="submit" :disabled="status == 'loading' || status?.status == 'success'">erstellen</button>
<Spinner v-if="status == 'loading'" class="my-auto" /> <Spinner v-if="status == 'loading'" class="my-auto" />
@ -94,8 +98,8 @@ import FailureXMark from "@/components/FailureXMark.vue";
import { Listbox, ListboxButton, ListboxOptions, ListboxOption, ListboxLabel } from "@headlessui/vue"; import { Listbox, ListboxButton, ListboxOptions, ListboxOption, ListboxLabel } from "@headlessui/vue";
import { CheckIcon, ChevronUpDownIcon } from "@heroicons/vue/20/solid"; import { CheckIcon, ChevronUpDownIcon } from "@heroicons/vue/20/solid";
import { Salutation } from "@/enums/salutation"; import { Salutation } from "@/enums/salutation";
import { useMemberStore } from "@/stores/admin/member"; import { useMemberStore } from "@/stores/admin/club/member/member";
import type { CreateMemberViewModel } from "@/viewmodels/admin/member.models"; import type { CreateMemberViewModel } from "@/viewmodels/admin/club/member/member.models";
</script> </script>
<script lang="ts"> <script lang="ts">
@ -127,6 +131,7 @@ export default defineComponent({
lastname: formData.lastname.value, lastname: formData.lastname.value,
nameaffix: formData.nameaffix.value, nameaffix: formData.nameaffix.value,
birthdate: formData.birthdate.value, birthdate: formData.birthdate.value,
internalId: formData.internalId.value,
}; };
this.createMember(createMember) this.createMember(createMember)
.then(() => { .then(() => {

View file

@ -44,8 +44,8 @@ import FailureXMark from "@/components/FailureXMark.vue";
import { Listbox, ListboxButton, ListboxOptions, ListboxOption, ListboxLabel } from "@headlessui/vue"; import { Listbox, ListboxButton, ListboxOptions, ListboxOption, ListboxLabel } from "@headlessui/vue";
import { CheckIcon, ChevronUpDownIcon } from "@heroicons/vue/20/solid"; import { CheckIcon, ChevronUpDownIcon } from "@heroicons/vue/20/solid";
import { Salutation } from "@/enums/salutation"; import { Salutation } from "@/enums/salutation";
import { useMemberStore } from "@/stores/admin/member"; import { useMemberStore } from "@/stores/admin/club/member/member";
import type { CreateMemberViewModel } from "@/viewmodels/admin/member.models"; import type { CreateMemberViewModel } from "@/viewmodels/admin/club/member/member.models";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -97,14 +97,14 @@ import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { Listbox, ListboxButton, ListboxOptions, ListboxOption, ListboxLabel } from "@headlessui/vue"; import { Listbox, ListboxButton, ListboxOptions, ListboxOption, ListboxLabel } from "@headlessui/vue";
import { CheckIcon, ChevronUpDownIcon } from "@heroicons/vue/20/solid"; import { CheckIcon, ChevronUpDownIcon } from "@heroicons/vue/20/solid";
import { useMembershipStatusStore } from "@/stores/admin/membershipStatus"; import { useMembershipStatusStore } from "@/stores/admin/settings/membershipStatus";
import type { MembershipStatusViewModel } from "@/viewmodels/admin/membershipStatus.models"; import type { MembershipStatusViewModel } from "@/viewmodels/admin/settings/membershipStatus.models";
import type { CreateMembershipViewModel } from "@/viewmodels/admin/membership.models"; import type { CreateMembershipViewModel } from "@/viewmodels/admin/club/member/membership.models";
import { useMembershipStore } from "@/stores/admin/membership"; import { useMembershipStore } from "@/stores/admin/club/member/membership";
import { useAwardStore } from "@/stores/admin/award"; import { useAwardStore } from "@/stores/admin/settings/award";
import type { AwardViewModel } from "@/viewmodels/admin/award.models"; import type { AwardViewModel } from "@/viewmodels/admin/settings/award.models";
import type { CreateMemberAwardViewModel } from "@/viewmodels/admin/memberAward.models"; import type { CreateMemberAwardViewModel } from "@/viewmodels/admin/club/member/memberAward.models";
import { useMemberAwardStore } from "@/stores/admin/memberAward"; import { useMemberAwardStore } from "@/stores/admin/club/member/memberAward";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -38,7 +38,7 @@ import { useModalStore } from "@/stores/modal";
import Spinner from "@/components/Spinner.vue"; import Spinner from "@/components/Spinner.vue";
import SuccessCheckmark from "@/components/SuccessCheckmark.vue"; import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { useMemberAwardStore } from "@/stores/admin/memberAward"; import { useMemberAwardStore } from "@/stores/admin/club/member/memberAward";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -98,13 +98,13 @@ import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { Listbox, ListboxButton, ListboxOptions, ListboxOption, ListboxLabel } from "@headlessui/vue"; import { Listbox, ListboxButton, ListboxOptions, ListboxOption, ListboxLabel } from "@headlessui/vue";
import { CheckIcon, ChevronUpDownIcon } from "@heroicons/vue/20/solid"; import { CheckIcon, ChevronUpDownIcon } from "@heroicons/vue/20/solid";
import { useAwardStore } from "@/stores/admin/award"; import { useAwardStore } from "@/stores/admin/settings/award";
import type { import type {
CreateMemberAwardViewModel, CreateMemberAwardViewModel,
MemberAwardViewModel, MemberAwardViewModel,
UpdateMemberAwardViewModel, UpdateMemberAwardViewModel,
} from "@/viewmodels/admin/memberAward.models"; } from "@/viewmodels/admin/club/member/memberAward.models";
import { useMemberAwardStore } from "@/stores/admin/memberAward"; import { useMemberAwardStore } from "@/stores/admin/club/member/memberAward";
import isEqual from "lodash.isequal"; import isEqual from "lodash.isequal";
import cloneDeep from "lodash.clonedeep"; import cloneDeep from "lodash.clonedeep";
</script> </script>

View file

@ -16,7 +16,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { defineAsyncComponent, defineComponent, markRaw, type PropType } from "vue"; import { defineAsyncComponent, defineComponent, markRaw, type PropType } from "vue";
import { mapState, mapActions } from "pinia"; import { mapState, mapActions } from "pinia";
import type { MemberAwardViewModel } from "@/viewmodels/admin/memberAward.models"; import type { MemberAwardViewModel } from "@/viewmodels/admin/club/member/memberAward.models";
import { PencilIcon, TrashIcon } from "@heroicons/vue/24/outline"; import { PencilIcon, TrashIcon } from "@heroicons/vue/24/outline";
import { useModalStore } from "@/stores/modal"; import { useModalStore } from "@/stores/modal";
import { useAbilityStore } from "@/stores/ability"; import { useAbilityStore } from "@/stores/ability";

View file

@ -125,10 +125,10 @@ import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { Listbox, ListboxButton, ListboxOptions, ListboxOption, ListboxLabel } from "@headlessui/vue"; import { Listbox, ListboxButton, ListboxOptions, ListboxOption, ListboxLabel } from "@headlessui/vue";
import { CheckIcon, ChevronUpDownIcon } from "@heroicons/vue/20/solid"; import { CheckIcon, ChevronUpDownIcon } from "@heroicons/vue/20/solid";
import { useCommunicationStore } from "@/stores/admin/communication"; import { useCommunicationStore } from "@/stores/admin/club/member/communication";
import type { CreateCommunicationViewModel } from "@/viewmodels/admin/communication.models"; import type { CreateCommunicationViewModel } from "@/viewmodels/admin/club/member/communication.models";
import { useCommunicationTypeStore } from "@/stores/admin/communicationType"; import { useCommunicationTypeStore } from "@/stores/admin/settings/communicationType";
import type { CommunicationTypeViewModel } from "@/viewmodels/admin/communicationType.models"; import type { CommunicationTypeViewModel } from "@/viewmodels/admin/settings/communicationType.models";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -41,7 +41,7 @@ import { useModalStore } from "@/stores/modal";
import Spinner from "@/components/Spinner.vue"; import Spinner from "@/components/Spinner.vue";
import SuccessCheckmark from "@/components/SuccessCheckmark.vue"; import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { useCommunicationStore } from "@/stores/admin/communication"; import { useCommunicationStore } from "@/stores/admin/club/member/communication";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -71,12 +71,12 @@ import { useModalStore } from "@/stores/modal";
import Spinner from "@/components/Spinner.vue"; import Spinner from "@/components/Spinner.vue";
import SuccessCheckmark from "@/components/SuccessCheckmark.vue"; import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { useCommunicationStore } from "@/stores/admin/communication"; import { useCommunicationStore } from "@/stores/admin/club/member/communication";
import type { import type {
CreateCommunicationViewModel, CreateCommunicationViewModel,
CommunicationViewModel, CommunicationViewModel,
UpdateCommunicationViewModel, UpdateCommunicationViewModel,
} from "@/viewmodels/admin/communication.models"; } from "@/viewmodels/admin/club/member/communication.models";
import isEqual from "lodash.isequal"; import isEqual from "lodash.isequal";
import cloneDeep from "lodash.clonedeep"; import cloneDeep from "lodash.clonedeep";
</script> </script>

View file

@ -16,7 +16,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { defineAsyncComponent, defineComponent, markRaw, type PropType } from "vue"; import { defineAsyncComponent, defineComponent, markRaw, type PropType } from "vue";
import { mapState, mapActions } from "pinia"; import { mapState, mapActions } from "pinia";
import type { CommunicationViewModel } from "@/viewmodels/admin/communication.models"; import type { CommunicationViewModel } from "@/viewmodels/admin/club/member/communication.models";
import { EnvelopeIcon, PencilIcon, TrashIcon, FireIcon } from "@heroicons/vue/24/outline"; import { EnvelopeIcon, PencilIcon, TrashIcon, FireIcon } from "@heroicons/vue/24/outline";
import { useModalStore } from "@/stores/modal"; import { useModalStore } from "@/stores/modal";
import { useAbilityStore } from "@/stores/ability"; import { useAbilityStore } from "@/stores/ability";

View file

@ -99,14 +99,14 @@ import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { Listbox, ListboxButton, ListboxOptions, ListboxOption, ListboxLabel } from "@headlessui/vue"; import { Listbox, ListboxButton, ListboxOptions, ListboxOption, ListboxLabel } from "@headlessui/vue";
import { CheckIcon, ChevronUpDownIcon } from "@heroicons/vue/20/solid"; import { CheckIcon, ChevronUpDownIcon } from "@heroicons/vue/20/solid";
import { useMembershipStatusStore } from "@/stores/admin/membershipStatus"; import { useMembershipStatusStore } from "@/stores/admin/settings/membershipStatus";
import type { MembershipStatusViewModel } from "@/viewmodels/admin/membershipStatus.models"; import type { MembershipStatusViewModel } from "@/viewmodels/admin/settings/membershipStatus.models";
import type { CreateMembershipViewModel } from "@/viewmodels/admin/membership.models"; import type { CreateMembershipViewModel } from "@/viewmodels/admin/club/member/membership.models";
import { useMembershipStore } from "@/stores/admin/membership"; import { useMembershipStore } from "@/stores/admin/club/member/membership";
import { useExecutivePositionStore } from "@/stores/admin/executivePosition"; import { useExecutivePositionStore } from "@/stores/admin/settings/executivePosition";
import type { ExecutivePositionViewModel } from "@/viewmodels/admin/executivePosition.models"; import type { ExecutivePositionViewModel } from "@/viewmodels/admin/settings/executivePosition.models";
import type { CreateMemberExecutivePositionViewModel } from "@/viewmodels/admin/memberExecutivePosition.models"; import type { CreateMemberExecutivePositionViewModel } from "@/viewmodels/admin/club/member/memberExecutivePosition.models";
import { useMemberExecutivePositionStore } from "@/stores/admin/memberExecutivePosition"; import { useMemberExecutivePositionStore } from "@/stores/admin/club/member/memberExecutivePosition";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -38,7 +38,7 @@ import { useModalStore } from "@/stores/modal";
import Spinner from "@/components/Spinner.vue"; import Spinner from "@/components/Spinner.vue";
import SuccessCheckmark from "@/components/SuccessCheckmark.vue"; import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { useMemberExecutivePositionStore } from "@/stores/admin/memberExecutivePosition"; import { useMemberExecutivePositionStore } from "@/stores/admin/club/member/memberExecutivePosition";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -104,13 +104,13 @@ import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { Listbox, ListboxButton, ListboxOptions, ListboxOption, ListboxLabel } from "@headlessui/vue"; import { Listbox, ListboxButton, ListboxOptions, ListboxOption, ListboxLabel } from "@headlessui/vue";
import { CheckIcon, ChevronUpDownIcon } from "@heroicons/vue/20/solid"; import { CheckIcon, ChevronUpDownIcon } from "@heroicons/vue/20/solid";
import { useExecutivePositionStore } from "@/stores/admin/executivePosition"; import { useExecutivePositionStore } from "@/stores/admin/settings/executivePosition";
import type { import type {
CreateMemberExecutivePositionViewModel, CreateMemberExecutivePositionViewModel,
MemberExecutivePositionViewModel, MemberExecutivePositionViewModel,
UpdateMemberExecutivePositionViewModel, UpdateMemberExecutivePositionViewModel,
} from "@/viewmodels/admin/memberExecutivePosition.models"; } from "@/viewmodels/admin/club/member/memberExecutivePosition.models";
import { useMemberExecutivePositionStore } from "@/stores/admin/memberExecutivePosition"; import { useMemberExecutivePositionStore } from "@/stores/admin/club/member/memberExecutivePosition";
import isEqual from "lodash.isequal"; import isEqual from "lodash.isequal";
import cloneDeep from "lodash.clonedeep"; import cloneDeep from "lodash.clonedeep";
</script> </script>

View file

@ -14,7 +14,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { defineAsyncComponent, defineComponent, markRaw, type PropType } from "vue"; import { defineAsyncComponent, defineComponent, markRaw, type PropType } from "vue";
import { mapState, mapActions } from "pinia"; import { mapState, mapActions } from "pinia";
import type { MemberExecutivePositionViewModel } from "@/viewmodels/admin/memberExecutivePosition.models"; import type { MemberExecutivePositionViewModel } from "@/viewmodels/admin/club/member/memberExecutivePosition.models";
import { PencilIcon, TrashIcon } from "@heroicons/vue/24/outline"; import { PencilIcon, TrashIcon } from "@heroicons/vue/24/outline";
import { useModalStore } from "@/stores/modal"; import { useModalStore } from "@/stores/modal";
import { useAbilityStore } from "@/stores/ability"; import { useAbilityStore } from "@/stores/ability";

View file

@ -1,42 +1,26 @@
<template> <template>
<div class="flex flex-col h-fit w-full border border-primary rounded-md"> <RouterLink
<RouterLink :to="{ name: 'admin-club-member-overview', params: { memberId: member.id } }"
:to="{ name: 'admin-club-member-overview', params: { memberId: member.id } }" class="flex flex-col h-fit w-full border border-primary rounded-md"
>
<div
class="bg-primary p-2 text-white flex flex-row justify-between items-center" class="bg-primary p-2 text-white flex flex-row justify-between items-center"
> >
<p>{{ member.lastname }}, {{ member.firstname }} {{ member.nameaffix ? `- ${member.nameaffix}` : "" }}</p> <p>{{ member.lastname }}, {{ member.firstname }} {{ member.nameaffix ? `- ${member.nameaffix}` : "" }}</p>
<div v-if="false" class="flex flex-row">
<RouterLink
v-if="can('read', 'club', 'member')"
:to="{ name: 'admin-club-member-overview', params: { memberId: member.id } }"
>
<CircleStackIcon class="w-5 h-5 p-1 box-content cursor-pointer" />
</RouterLink>
<RouterLink
v-if="can('update', 'club', 'member')"
:to="{ name: 'admin-club-member-edit', params: { id: member.id } }"
>
<PencilIcon class="w-5 h-5 p-1 box-content cursor-pointer" />
</RouterLink>
<div v-if="can('delete', 'club', 'member')" @click="openDeleteModal">
<TrashIcon class="w-5 h-5 p-1 box-content cursor-pointer" />
</div>
</div>
</RouterLink>
<div class="p-2">
<p>beigetreten: {{ member.firstMembershipEntry?.start }}</p>
<p v-if="member.lastMembershipEntry?.end">ausgetreten: {{ member.lastMembershipEntry?.end }}</p>
</div> </div>
</div> <div class="p-2">
<p v-if="member.internalId">Interne ID: {{ member.internalId }}</p>
<p>beigetreten: {{ member.firstMembershipEntry?.start }}</p>
<p v-if="member.lastMembershipEntry?.end">ausgetreten: {{ member.lastMembershipEntry?.end }}, da {{member.lastMembershipEntry?.terminationReason ?? '- kein Grund angegeben'}}</p>
</div>
</RouterLink>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { defineComponent, defineAsyncComponent, markRaw, type PropType } from "vue"; import { defineComponent, type PropType } from "vue";
import { mapState, mapActions } from "pinia"; import { mapState, mapActions } from "pinia";
import { PencilIcon, TrashIcon, CircleStackIcon } from "@heroicons/vue/24/outline";
import { useAbilityStore } from "@/stores/ability"; import { useAbilityStore } from "@/stores/ability";
import { useModalStore } from "@/stores/modal"; import type { MemberViewModel } from "@/viewmodels/admin/club/member/member.models";
import type { MemberViewModel } from "@/viewmodels/admin/member.models";
</script> </script>
<script lang="ts"> <script lang="ts">
@ -47,14 +31,5 @@ export default defineComponent({
computed: { computed: {
...mapState(useAbilityStore, ["can"]), ...mapState(useAbilityStore, ["can"]),
}, },
methods: {
...mapActions(useModalStore, ["openModal"]),
openDeleteModal() {
// this.openModal(
// markRaw(defineAsyncComponent(() => import("@/components/admin/.vue"))),
// this.member.id
// );
},
},
}); });
</script> </script>

View file

@ -106,14 +106,14 @@ import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { Listbox, ListboxButton, ListboxOptions, ListboxOption, ListboxLabel } from "@headlessui/vue"; import { Listbox, ListboxButton, ListboxOptions, ListboxOption, ListboxLabel } from "@headlessui/vue";
import { CheckIcon, ChevronUpDownIcon } from "@heroicons/vue/20/solid"; import { CheckIcon, ChevronUpDownIcon } from "@heroicons/vue/20/solid";
import { useMembershipStatusStore } from "@/stores/admin/membershipStatus"; import { useMembershipStatusStore } from "@/stores/admin/settings/membershipStatus";
import type { MembershipStatusViewModel } from "@/viewmodels/admin/membershipStatus.models"; import type { MembershipStatusViewModel } from "@/viewmodels/admin/settings/membershipStatus.models";
import type { CreateMembershipViewModel } from "@/viewmodels/admin/membership.models"; import type { CreateMembershipViewModel } from "@/viewmodels/admin/club/member/membership.models";
import { useMembershipStore } from "@/stores/admin/membership"; import { useMembershipStore } from "@/stores/admin/club/member/membership";
import { useQualificationStore } from "@/stores/admin/qualification"; import { useQualificationStore } from "@/stores/admin/settings/qualification";
import type { QualificationViewModel } from "@/viewmodels/admin/qualification.models"; import type { QualificationViewModel } from "@/viewmodels/admin/settings/qualification.models";
import type { CreateMemberQualificationViewModel } from "@/viewmodels/admin/memberQualification.models"; import type { CreateMemberQualificationViewModel } from "@/viewmodels/admin/club/member/memberQualification.models";
import { useMemberQualificationStore } from "@/stores/admin/memberQualification"; import { useMemberQualificationStore } from "@/stores/admin/club/member/memberQualification";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -41,8 +41,8 @@ import { useModalStore } from "@/stores/modal";
import Spinner from "@/components/Spinner.vue"; import Spinner from "@/components/Spinner.vue";
import SuccessCheckmark from "@/components/SuccessCheckmark.vue"; import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { useQualificationStore } from "@/stores/admin/qualification"; import { useQualificationStore } from "@/stores/admin/settings/qualification";
import { useMemberQualificationStore } from "@/stores/admin/memberQualification"; import { useMemberQualificationStore } from "@/stores/admin/club/member/memberQualification";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -105,13 +105,13 @@ import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { Listbox, ListboxButton, ListboxOptions, ListboxOption, ListboxLabel } from "@headlessui/vue"; import { Listbox, ListboxButton, ListboxOptions, ListboxOption, ListboxLabel } from "@headlessui/vue";
import { CheckIcon, ChevronUpDownIcon } from "@heroicons/vue/20/solid"; import { CheckIcon, ChevronUpDownIcon } from "@heroicons/vue/20/solid";
import { useQualificationStore } from "@/stores/admin/qualification"; import { useQualificationStore } from "@/stores/admin/settings/qualification";
import type { import type {
CreateMemberQualificationViewModel, CreateMemberQualificationViewModel,
MemberQualificationViewModel, MemberQualificationViewModel,
UpdateMemberQualificationViewModel, UpdateMemberQualificationViewModel,
} from "@/viewmodels/admin/memberQualification.models"; } from "@/viewmodels/admin/club/member/memberQualification.models";
import { useMemberQualificationStore } from "@/stores/admin/memberQualification"; import { useMemberQualificationStore } from "@/stores/admin/club/member/memberQualification";
import isEqual from "lodash.isequal"; import isEqual from "lodash.isequal";
import cloneDeep from "lodash.clonedeep"; import cloneDeep from "lodash.clonedeep";
</script> </script>

View file

@ -17,7 +17,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { defineAsyncComponent, defineComponent, markRaw, type PropType } from "vue"; import { defineAsyncComponent, defineComponent, markRaw, type PropType } from "vue";
import { mapState, mapActions } from "pinia"; import { mapState, mapActions } from "pinia";
import type { MemberQualificationViewModel } from "@/viewmodels/admin/memberQualification.models"; import type { MemberQualificationViewModel } from "@/viewmodels/admin/club/member/memberQualification.models";
import { PencilIcon, TrashIcon } from "@heroicons/vue/24/outline"; import { PencilIcon, TrashIcon } from "@heroicons/vue/24/outline";
import { useModalStore } from "@/stores/modal"; import { useModalStore } from "@/stores/modal";
import { useAbilityStore } from "@/stores/ability"; import { useAbilityStore } from "@/stores/ability";

View file

@ -63,10 +63,6 @@
</div> </div>
</Listbox> </Listbox>
</div> </div>
<div>
<label for="internalId">Interne ID (optional)</label>
<input type="text" id="internalId" />
</div>
<div> <div>
<label for="start">Startdatum</label> <label for="start">Startdatum</label>
<input type="date" id="start" required /> <input type="date" id="start" required />
@ -98,10 +94,10 @@ import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { Listbox, ListboxButton, ListboxOptions, ListboxOption, ListboxLabel } from "@headlessui/vue"; import { Listbox, ListboxButton, ListboxOptions, ListboxOption, ListboxLabel } from "@headlessui/vue";
import { CheckIcon, ChevronUpDownIcon } from "@heroicons/vue/20/solid"; import { CheckIcon, ChevronUpDownIcon } from "@heroicons/vue/20/solid";
import { useMembershipStatusStore } from "@/stores/admin/membershipStatus"; import { useMembershipStatusStore } from "@/stores/admin/settings/membershipStatus";
import type { MembershipStatusViewModel } from "@/viewmodels/admin/membershipStatus.models"; import type { MembershipStatusViewModel } from "@/viewmodels/admin/settings/membershipStatus.models";
import type { CreateMembershipViewModel } from "@/viewmodels/admin/membership.models"; import type { CreateMembershipViewModel } from "@/viewmodels/admin/club/member/membership.models";
import { useMembershipStore } from "@/stores/admin/membership"; import { useMembershipStore } from "@/stores/admin/club/member/membership";
</script> </script>
<script lang="ts"> <script lang="ts">
@ -132,7 +128,6 @@ export default defineComponent({
if (this.selectedStatus == undefined) return; if (this.selectedStatus == undefined) return;
let formData = e.target.elements; let formData = e.target.elements;
let createMember: CreateMembershipViewModel = { let createMember: CreateMembershipViewModel = {
internalId: formData.internalId.value,
start: formData.start.value, start: formData.start.value,
statusId: this.selectedStatus.id, statusId: this.selectedStatus.id,
}; };

View file

@ -40,7 +40,7 @@ import { useModalStore } from "@/stores/modal";
import Spinner from "@/components/Spinner.vue"; import Spinner from "@/components/Spinner.vue";
import SuccessCheckmark from "@/components/SuccessCheckmark.vue"; import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { useMembershipStore } from "@/stores/admin/membership"; import { useMembershipStore } from "@/stores/admin/club/member/membership";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -63,10 +63,6 @@
</div> </div>
</Listbox> </Listbox>
</div> </div>
<div>
<label for="internalId">Interne ID (optional)</label>
<input type="text" id="internalId" v-model="membership.internalId" />
</div>
<div> <div>
<label for="start">Startdatum</label> <label for="start">Startdatum</label>
<input type="date" id="start" required v-model="membership.start" /> <input type="date" id="start" required v-model="membership.start" />
@ -105,13 +101,13 @@ import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { Listbox, ListboxButton, ListboxOptions, ListboxOption, ListboxLabel } from "@headlessui/vue"; import { Listbox, ListboxButton, ListboxOptions, ListboxOption, ListboxLabel } from "@headlessui/vue";
import { CheckIcon, ChevronUpDownIcon } from "@heroicons/vue/20/solid"; import { CheckIcon, ChevronUpDownIcon } from "@heroicons/vue/20/solid";
import { useMembershipStatusStore } from "@/stores/admin/membershipStatus"; import { useMembershipStatusStore } from "@/stores/admin/settings/membershipStatus";
import type { import type {
CreateMembershipViewModel, CreateMembershipViewModel,
MembershipViewModel, MembershipViewModel,
UpdateMembershipViewModel, UpdateMembershipViewModel,
} from "@/viewmodels/admin/membership.models"; } from "@/viewmodels/admin/club/member/membership.models";
import { useMembershipStore } from "@/stores/admin/membership"; import { useMembershipStore } from "@/stores/admin/club/member/membership";
import isEqual from "lodash.isequal"; import isEqual from "lodash.isequal";
import cloneDeep from "lodash.clonedeep"; import cloneDeep from "lodash.clonedeep";
</script> </script>
@ -169,7 +165,6 @@ export default defineComponent({
let formData = e.target.elements; let formData = e.target.elements;
let updateMembership: UpdateMembershipViewModel = { let updateMembership: UpdateMembershipViewModel = {
id: this.membership.id, id: this.membership.id,
internalId: formData.internalId.value,
start: formData.start.value, start: formData.start.value,
end: formData.end.value, end: formData.end.value,
terminationReason: formData.terminationReason.value, terminationReason: formData.terminationReason.value,

View file

@ -8,9 +8,8 @@
<PencilIcon v-if="can('update', 'club', 'member')" class="w-5 h-5 cursor-pointer" @click="openEditModal" /> <PencilIcon v-if="can('update', 'club', 'member')" class="w-5 h-5 cursor-pointer" @click="openEditModal" />
<TrashIcon v-if="can('delete', 'club', 'member')" class="w-5 h-5 cursor-pointer" @click="openDeleteModal" /> <TrashIcon v-if="can('delete', 'club', 'member')" class="w-5 h-5 cursor-pointer" @click="openDeleteModal" />
</div> </div>
<div v-if="membership.terminationReason || membership.internalId" class="p-2"> <div v-if="membership.terminationReason" class="p-2">
<p v-if="membership.internalId">Interne ID: {{ membership.internalId }}</p> <p v-if="membership.terminationReason">Grund: {{ membership.terminationReason }}</p>
<p v-if="membership.terminationReason">beendet, weil: {{ membership.terminationReason }}</p>
</div> </div>
</div> </div>
</template> </template>
@ -18,7 +17,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { defineAsyncComponent, defineComponent, markRaw, type PropType } from "vue"; import { defineAsyncComponent, defineComponent, markRaw, type PropType } from "vue";
import { mapState, mapActions } from "pinia"; import { mapState, mapActions } from "pinia";
import type { MembershipViewModel } from "@/viewmodels/admin/membership.models"; import type { MembershipViewModel } from "@/viewmodels/admin/club/member/membership.models";
import { PencilIcon, TrashIcon } from "@heroicons/vue/24/outline"; import { PencilIcon, TrashIcon } from "@heroicons/vue/24/outline";
import { useModalStore } from "@/stores/modal"; import { useModalStore } from "@/stores/modal";
import { useAbilityStore } from "@/stores/ability"; import { useAbilityStore } from "@/stores/ability";

View file

@ -34,10 +34,10 @@ import { useModalStore } from "@/stores/modal";
import Spinner from "@/components/Spinner.vue"; import Spinner from "@/components/Spinner.vue";
import SuccessCheckmark from "@/components/SuccessCheckmark.vue"; import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { useProtocolStore } from "@/stores/admin/protocol"; import { useProtocolStore } from "@/stores/admin/club/protocol/protocol";
import type { CreateProtocolViewModel } from "@/viewmodels/admin/protocol.models"; import type { CreateProtocolViewModel } from "@/viewmodels/admin/club/protocol/protocol.models";
import { useNewsletterStore } from "../../../../stores/admin/newsletter"; import { useNewsletterStore } from "../../../../stores/admin/club/newsletter/newsletter";
import type { CreateNewsletterViewModel } from "../../../../viewmodels/admin/newsletter.models"; import type { CreateNewsletterViewModel } from "../../../../viewmodels/admin/club/newsletter/newsletter.models";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -17,8 +17,8 @@ import { useModalStore } from "@/stores/modal";
import Spinner from "@/components/Spinner.vue"; import Spinner from "@/components/Spinner.vue";
import SuccessCheckmark from "@/components/SuccessCheckmark.vue"; import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { useProtocolStore } from "@/stores/admin/protocol"; import { useProtocolStore } from "@/stores/admin/club/protocol/protocol";
import type { CreateProtocolViewModel } from "@/viewmodels/admin/protocol.models"; import type { CreateProtocolViewModel } from "@/viewmodels/admin/club/protocol/protocol.models";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -16,7 +16,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { defineComponent, type PropType } from "vue"; import { defineComponent, type PropType } from "vue";
import { mapState, mapActions } from "pinia"; import { mapState, mapActions } from "pinia";
import type { NewsletterViewModel } from "@/viewmodels/admin/newsletter.models"; import type { NewsletterViewModel } from "@/viewmodels/admin/club/newsletter/newsletter.models";
import { PaperAirplaneIcon } from "@heroicons/vue/24/outline"; import { PaperAirplaneIcon } from "@heroicons/vue/24/outline";
</script> </script>

View file

@ -15,7 +15,7 @@ import { mapState, mapActions } from "pinia";
import { useModalStore } from "@/stores/modal"; import { useModalStore } from "@/stores/modal";
import Spinner from "@/components/Spinner.vue"; import Spinner from "@/components/Spinner.vue";
import type { AxiosResponse } from "axios"; import type { AxiosResponse } from "axios";
import { useNewsletterPrintoutStore } from "@/stores/admin/newsletterPrintout"; import { useNewsletterPrintoutStore } from "@/stores/admin/club/newsletter/newsletterPrintout";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -16,10 +16,10 @@
<script setup lang="ts"> <script setup lang="ts">
import { defineComponent } from "vue"; import { defineComponent } from "vue";
import { mapState, mapActions } from "pinia"; import { mapState, mapActions } from "pinia";
import { useNewsletterStore } from "@/stores/admin/newsletter"; import { useNewsletterStore } from "@/stores/admin/club/newsletter/newsletter";
import { ArrowPathIcon, CloudArrowUpIcon, CloudIcon, ExclamationTriangleIcon } from "@heroicons/vue/24/outline"; import { ArrowPathIcon, CloudArrowUpIcon, CloudIcon, ExclamationTriangleIcon } from "@heroicons/vue/24/outline";
import { useNewsletterDatesStore } from "@/stores/admin/newsletterDates"; import { useNewsletterDatesStore } from "@/stores/admin/club/newsletter/newsletterDates";
import { useNewsletterRecipientsStore } from "@/stores/admin/newsletterRecipients"; import { useNewsletterRecipientsStore } from "@/stores/admin/club/newsletter/newsletterRecipients";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -38,8 +38,8 @@ import { useModalStore } from "@/stores/modal";
import Spinner from "@/components/Spinner.vue"; import Spinner from "@/components/Spinner.vue";
import SuccessCheckmark from "@/components/SuccessCheckmark.vue"; import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { useProtocolStore } from "@/stores/admin/protocol"; import { useProtocolStore } from "@/stores/admin/club/protocol/protocol";
import type { CreateProtocolViewModel } from "@/viewmodels/admin/protocol.models"; import type { CreateProtocolViewModel } from "@/viewmodels/admin/club/protocol/protocol.models";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -17,8 +17,8 @@ import { useModalStore } from "@/stores/modal";
import Spinner from "@/components/Spinner.vue"; import Spinner from "@/components/Spinner.vue";
import SuccessCheckmark from "@/components/SuccessCheckmark.vue"; import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { useProtocolStore } from "@/stores/admin/protocol"; import { useProtocolStore } from "@/stores/admin/club/protocol/protocol";
import type { CreateProtocolViewModel } from "@/viewmodels/admin/protocol.models"; import type { CreateProtocolViewModel } from "@/viewmodels/admin/club/protocol/protocol.models";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -15,7 +15,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { defineComponent, type PropType } from "vue"; import { defineComponent, type PropType } from "vue";
import { mapState, mapActions } from "pinia"; import { mapState, mapActions } from "pinia";
import type { ProtocolViewModel } from "@/viewmodels/admin/protocol.models"; import type { ProtocolViewModel } from "@/viewmodels/admin/club/protocol/protocol.models";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -13,7 +13,7 @@ import { defineComponent } from "vue";
import { mapState, mapActions } from "pinia"; import { mapState, mapActions } from "pinia";
import { useModalStore } from "@/stores/modal"; import { useModalStore } from "@/stores/modal";
import Spinner from "@/components/Spinner.vue"; import Spinner from "@/components/Spinner.vue";
import { useProtocolPrintoutStore } from "@/stores/admin/protocolPrintout"; import { useProtocolPrintoutStore } from "@/stores/admin/club/protocol/protocolPrintout";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -16,12 +16,12 @@
<script setup lang="ts"> <script setup lang="ts">
import { defineComponent } from "vue"; import { defineComponent } from "vue";
import { mapState, mapActions } from "pinia"; import { mapState, mapActions } from "pinia";
import { useProtocolStore } from "@/stores/admin/protocol"; import { useProtocolStore } from "@/stores/admin/club/protocol/protocol";
import { ArrowPathIcon, CloudArrowUpIcon, CloudIcon, ExclamationTriangleIcon } from "@heroicons/vue/24/outline"; import { ArrowPathIcon, CloudArrowUpIcon, CloudIcon, ExclamationTriangleIcon } from "@heroicons/vue/24/outline";
import { useProtocolAgendaStore } from "@/stores/admin/protocolAgenda"; import { useProtocolAgendaStore } from "@/stores/admin/club/protocol/protocolAgenda";
import { useProtocolPresenceStore } from "@/stores/admin/protocolPresence"; import { useProtocolPresenceStore } from "@/stores/admin/club/protocol/protocolPresence";
import { useProtocolDecisionStore } from "@/stores/admin/protocolDecision"; import { useProtocolDecisionStore } from "@/stores/admin/club/protocol/protocolDecision";
import { useProtocolVotingStore } from "@/stores/admin/protocolVoting"; import { useProtocolVotingStore } from "@/stores/admin/club/protocol/protocolVoting";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -23,7 +23,7 @@ import { mapState, mapActions } from "pinia";
import { PencilIcon, TrashIcon } from "@heroicons/vue/24/outline"; import { PencilIcon, TrashIcon } from "@heroicons/vue/24/outline";
import { useAbilityStore } from "@/stores/ability"; import { useAbilityStore } from "@/stores/ability";
import { useModalStore } from "@/stores/modal"; import { useModalStore } from "@/stores/modal";
import type { AwardViewModel } from "@/viewmodels/admin/award.models"; import type { AwardViewModel } from "@/viewmodels/admin/settings/award.models";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -32,8 +32,8 @@ import { useModalStore } from "@/stores/modal";
import Spinner from "@/components/Spinner.vue"; import Spinner from "@/components/Spinner.vue";
import SuccessCheckmark from "@/components/SuccessCheckmark.vue"; import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { useAwardStore } from "@/stores/admin/award"; import { useAwardStore } from "@/stores/admin/settings/award";
import type { CreateAwardViewModel } from "@/viewmodels/admin/award.models"; import type { CreateAwardViewModel } from "@/viewmodels/admin/settings/award.models";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -29,8 +29,8 @@ import { useModalStore } from "@/stores/modal";
import Spinner from "@/components/Spinner.vue"; import Spinner from "@/components/Spinner.vue";
import SuccessCheckmark from "@/components/SuccessCheckmark.vue"; import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { useRoleStore } from "@/stores/admin/role"; import { useRoleStore } from "@/stores/admin/user/role";
import { useAwardStore } from "@/stores/admin/award"; import { useAwardStore } from "@/stores/admin/settings/award";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -30,7 +30,7 @@ import { mapState, mapActions } from "pinia";
import { PencilIcon, TrashIcon, EyeIcon } from "@heroicons/vue/24/outline"; import { PencilIcon, TrashIcon, EyeIcon } from "@heroicons/vue/24/outline";
import { useAbilityStore } from "@/stores/ability"; import { useAbilityStore } from "@/stores/ability";
import { useModalStore } from "@/stores/modal"; import { useModalStore } from "@/stores/modal";
import type { CalendarTypeViewModel } from "@/viewmodels/admin/calendarType.models"; import type { CalendarTypeViewModel } from "@/viewmodels/admin/settings/calendarType.models";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -51,8 +51,8 @@ import { useModalStore } from "@/stores/modal";
import Spinner from "@/components/Spinner.vue"; import Spinner from "@/components/Spinner.vue";
import SuccessCheckmark from "@/components/SuccessCheckmark.vue"; import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { useCalendarTypeStore } from "@/stores/admin/calendarType"; import { useCalendarTypeStore } from "@/stores/admin/settings/calendarType";
import type { CreateCalendarTypeViewModel } from "@/viewmodels/admin/calendarType.models"; import type { CreateCalendarTypeViewModel } from "@/viewmodels/admin/settings/calendarType.models";
import { Listbox, ListboxButton, ListboxOptions, ListboxOption, ListboxLabel } from "@headlessui/vue"; import { Listbox, ListboxButton, ListboxOptions, ListboxOption, ListboxLabel } from "@headlessui/vue";
import { CheckIcon, ChevronUpDownIcon } from "@heroicons/vue/20/solid"; import { CheckIcon, ChevronUpDownIcon } from "@heroicons/vue/20/solid";
</script> </script>

View file

@ -29,7 +29,7 @@ import { useModalStore } from "@/stores/modal";
import Spinner from "@/components/Spinner.vue"; import Spinner from "@/components/Spinner.vue";
import SuccessCheckmark from "@/components/SuccessCheckmark.vue"; import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { useCalendarTypeStore } from "@/stores/admin/calendarType"; import { useCalendarTypeStore } from "@/stores/admin/settings/calendarType";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -33,7 +33,7 @@ import { mapState, mapActions } from "pinia";
import { PencilIcon, TrashIcon } from "@heroicons/vue/24/outline"; import { PencilIcon, TrashIcon } from "@heroicons/vue/24/outline";
import { useAbilityStore } from "@/stores/ability"; import { useAbilityStore } from "@/stores/ability";
import { useModalStore } from "@/stores/modal"; import { useModalStore } from "@/stores/modal";
import type { CommunicationTypeViewModel } from "@/viewmodels/admin/communicationType.models"; import type { CommunicationTypeViewModel } from "@/viewmodels/admin/settings/communicationType.models";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -78,8 +78,8 @@ import { useModalStore } from "@/stores/modal";
import Spinner from "@/components/Spinner.vue"; import Spinner from "@/components/Spinner.vue";
import SuccessCheckmark from "@/components/SuccessCheckmark.vue"; import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { useCommunicationTypeStore } from "@/stores/admin/communicationType"; import { useCommunicationTypeStore } from "@/stores/admin/settings/communicationType";
import type { CreateCommunicationTypeViewModel } from "@/viewmodels/admin/communicationType.models"; import type { CreateCommunicationTypeViewModel } from "@/viewmodels/admin/settings/communicationType.models";
import { Listbox, ListboxButton, ListboxOptions, ListboxOption, ListboxLabel } from "@headlessui/vue"; import { Listbox, ListboxButton, ListboxOptions, ListboxOption, ListboxLabel } from "@headlessui/vue";
import { CheckIcon, ChevronUpDownIcon } from "@heroicons/vue/20/solid"; import { CheckIcon, ChevronUpDownIcon } from "@heroicons/vue/20/solid";
import type { CommunicationFieldType } from "@/types/fieldTypes"; import type { CommunicationFieldType } from "@/types/fieldTypes";

View file

@ -29,7 +29,7 @@ import { useModalStore } from "@/stores/modal";
import Spinner from "@/components/Spinner.vue"; import Spinner from "@/components/Spinner.vue";
import SuccessCheckmark from "@/components/SuccessCheckmark.vue"; import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { useCommunicationTypeStore } from "@/stores/admin/communicationType"; import { useCommunicationTypeStore } from "@/stores/admin/settings/communicationType";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -32,8 +32,8 @@ import { useModalStore } from "@/stores/modal";
import Spinner from "@/components/Spinner.vue"; import Spinner from "@/components/Spinner.vue";
import SuccessCheckmark from "@/components/SuccessCheckmark.vue"; import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { useExecutivePositionStore } from "@/stores/admin/executivePosition"; import { useExecutivePositionStore } from "@/stores/admin/settings/executivePosition";
import type { CreateExecutivePositionViewModel } from "@/viewmodels/admin/executivePosition.models"; import type { CreateExecutivePositionViewModel } from "@/viewmodels/admin/settings/executivePosition.models";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -29,8 +29,8 @@ import { useModalStore } from "@/stores/modal";
import Spinner from "@/components/Spinner.vue"; import Spinner from "@/components/Spinner.vue";
import SuccessCheckmark from "@/components/SuccessCheckmark.vue"; import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { useRoleStore } from "@/stores/admin/role"; import { useRoleStore } from "@/stores/admin/user/role";
import { useExecutivePositionStore } from "@/stores/admin/executivePosition"; import { useExecutivePositionStore } from "@/stores/admin/settings/executivePosition";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -23,7 +23,7 @@ import { mapState, mapActions } from "pinia";
import { PencilIcon, TrashIcon } from "@heroicons/vue/24/outline"; import { PencilIcon, TrashIcon } from "@heroicons/vue/24/outline";
import { useAbilityStore } from "@/stores/ability"; import { useAbilityStore } from "@/stores/ability";
import { useModalStore } from "@/stores/modal"; import { useModalStore } from "@/stores/modal";
import type { ExecutivePositionViewModel } from "@/viewmodels/admin/executivePosition.models"; import type { ExecutivePositionViewModel } from "@/viewmodels/admin/settings/executivePosition.models";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -32,8 +32,8 @@ import { useModalStore } from "@/stores/modal";
import Spinner from "@/components/Spinner.vue"; import Spinner from "@/components/Spinner.vue";
import SuccessCheckmark from "@/components/SuccessCheckmark.vue"; import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { useMembershipStatusStore } from "@/stores/admin/membershipStatus"; import { useMembershipStatusStore } from "@/stores/admin/settings/membershipStatus";
import type { CreateMembershipStatusViewModel } from "@/viewmodels/admin/membershipStatus.models"; import type { CreateMembershipStatusViewModel } from "@/viewmodels/admin/settings/membershipStatus.models";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -29,8 +29,8 @@ import { useModalStore } from "@/stores/modal";
import Spinner from "@/components/Spinner.vue"; import Spinner from "@/components/Spinner.vue";
import SuccessCheckmark from "@/components/SuccessCheckmark.vue"; import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { useRoleStore } from "@/stores/admin/role"; import { useRoleStore } from "@/stores/admin/user/role";
import { useMembershipStatusStore } from "@/stores/admin/membershipStatus"; import { useMembershipStatusStore } from "@/stores/admin/settings/membershipStatus";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -23,7 +23,7 @@ import { mapState, mapActions } from "pinia";
import { PencilIcon, TrashIcon } from "@heroicons/vue/24/outline"; import { PencilIcon, TrashIcon } from "@heroicons/vue/24/outline";
import { useAbilityStore } from "@/stores/ability"; import { useAbilityStore } from "@/stores/ability";
import { useModalStore } from "@/stores/modal"; import { useModalStore } from "@/stores/modal";
import type { MembershipStatusViewModel } from "@/viewmodels/admin/membershipStatus.models"; import type { MembershipStatusViewModel } from "@/viewmodels/admin/settings/membershipStatus.models";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -29,14 +29,14 @@
import { defineComponent, type PropType } from "vue"; import { defineComponent, type PropType } from "vue";
import { mapState, mapActions } from "pinia"; import { mapState, mapActions } from "pinia";
import { ArchiveBoxArrowDownIcon, ArchiveBoxXMarkIcon } from "@heroicons/vue/24/outline"; import { ArchiveBoxArrowDownIcon, ArchiveBoxXMarkIcon } from "@heroicons/vue/24/outline";
import { useNewsletterConfigStore } from "@/stores/admin/newsletterConfig"; import { useNewsletterConfigStore } from "@/stores/admin/settings/newsletterConfig";
import Spinner from "@/components/Spinner.vue"; import Spinner from "@/components/Spinner.vue";
import SuccessCheckmark from "@/components/SuccessCheckmark.vue"; import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { useModalStore } from "@/stores/modal"; import { useModalStore } from "@/stores/modal";
import { NewsletterConfigType } from "@/enums/newsletterConfigType"; import { NewsletterConfigType } from "@/enums/newsletterConfigType";
import type { AxiosResponse } from "axios"; import type { AxiosResponse } from "axios";
import type { CommunicationTypeViewModel } from "@/viewmodels/admin/communicationType.models"; import type { CommunicationTypeViewModel } from "@/viewmodels/admin/settings/communicationType.models";
import { useAbilityStore } from "@/stores/ability"; import { useAbilityStore } from "@/stores/ability";
</script> </script>

View file

@ -36,8 +36,8 @@ import { useModalStore } from "@/stores/modal";
import Spinner from "@/components/Spinner.vue"; import Spinner from "@/components/Spinner.vue";
import SuccessCheckmark from "@/components/SuccessCheckmark.vue"; import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { useQualificationStore } from "@/stores/admin/qualification"; import { useQualificationStore } from "@/stores/admin/settings/qualification";
import type { CreateQualificationViewModel } from "@/viewmodels/admin/qualification.models"; import type { CreateQualificationViewModel } from "@/viewmodels/admin/settings/qualification.models";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -29,8 +29,8 @@ import { useModalStore } from "@/stores/modal";
import Spinner from "@/components/Spinner.vue"; import Spinner from "@/components/Spinner.vue";
import SuccessCheckmark from "@/components/SuccessCheckmark.vue"; import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { useRoleStore } from "@/stores/admin/role"; import { useRoleStore } from "@/stores/admin/user/role";
import { useQualificationStore } from "@/stores/admin/qualification"; import { useQualificationStore } from "@/stores/admin/settings/qualification";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -29,7 +29,7 @@ import { mapState, mapActions } from "pinia";
import { PencilIcon, TrashIcon } from "@heroicons/vue/24/outline"; import { PencilIcon, TrashIcon } from "@heroicons/vue/24/outline";
import { useAbilityStore } from "@/stores/ability"; import { useAbilityStore } from "@/stores/ability";
import { useModalStore } from "@/stores/modal"; import { useModalStore } from "@/stores/modal";
import type { QualificationViewModel } from "@/viewmodels/admin/qualification.models"; import type { QualificationViewModel } from "@/viewmodels/admin/settings/qualification.models";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -32,9 +32,9 @@ import { useModalStore } from "@/stores/modal";
import Spinner from "@/components/Spinner.vue"; import Spinner from "@/components/Spinner.vue";
import SuccessCheckmark from "@/components/SuccessCheckmark.vue"; import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { useQueryStoreStore } from "@/stores/admin/queryStore"; import { useQueryStoreStore } from "@/stores/admin/settings/queryStore";
import type { CreateQueryViewModel } from "@/viewmodels/admin/query.models"; import type { CreateQueryViewModel } from "@/viewmodels/admin/settings/query.models";
import { useQueryBuilderStore } from "@/stores/admin/queryBuilder"; import { useQueryBuilderStore } from "@/stores/admin/club/queryBuilder";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -29,7 +29,7 @@ import { useModalStore } from "@/stores/modal";
import Spinner from "@/components/Spinner.vue"; import Spinner from "@/components/Spinner.vue";
import SuccessCheckmark from "@/components/SuccessCheckmark.vue"; import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { useQueryStoreStore } from "@/stores/admin/queryStore"; import { useQueryStoreStore } from "@/stores/admin/settings/queryStore";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -23,8 +23,8 @@ import { mapState, mapActions, mapWritableState } from "pinia";
import { EyeIcon, PencilIcon, TrashIcon } from "@heroicons/vue/24/outline"; import { EyeIcon, PencilIcon, TrashIcon } from "@heroicons/vue/24/outline";
import { useAbilityStore } from "@/stores/ability"; import { useAbilityStore } from "@/stores/ability";
import { useModalStore } from "@/stores/modal"; import { useModalStore } from "@/stores/modal";
import type { QueryViewModel } from "@/viewmodels/admin/query.models"; import type { QueryViewModel } from "@/viewmodels/admin/settings/query.models";
import { useQueryBuilderStore } from "@/stores/admin/queryBuilder"; import { useQueryBuilderStore } from "@/stores/admin/club/queryBuilder";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -34,9 +34,9 @@ import { useModalStore } from "@/stores/modal";
import Spinner from "@/components/Spinner.vue"; import Spinner from "@/components/Spinner.vue";
import SuccessCheckmark from "@/components/SuccessCheckmark.vue"; import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { useQueryStoreStore } from "@/stores/admin/queryStore"; import { useQueryStoreStore } from "@/stores/admin/settings/queryStore";
import type { CreateQueryViewModel, UpdateQueryViewModel } from "@/viewmodels/admin/query.models"; import type { CreateQueryViewModel, UpdateQueryViewModel } from "@/viewmodels/admin/settings/query.models";
import { useQueryBuilderStore } from "@/stores/admin/queryBuilder"; import { useQueryBuilderStore } from "@/stores/admin/club/queryBuilder";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -36,8 +36,8 @@ import { useModalStore } from "@/stores/modal";
import Spinner from "@/components/Spinner.vue"; import Spinner from "@/components/Spinner.vue";
import SuccessCheckmark from "@/components/SuccessCheckmark.vue"; import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { useTemplateStore } from "@/stores/admin/template"; import { useTemplateStore } from "@/stores/admin/settings/template";
import type { CreateTemplateViewModel } from "@/viewmodels/admin/template.models"; import type { CreateTemplateViewModel } from "@/viewmodels/admin/settings/template.models";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -29,8 +29,8 @@ import { useModalStore } from "@/stores/modal";
import Spinner from "@/components/Spinner.vue"; import Spinner from "@/components/Spinner.vue";
import SuccessCheckmark from "@/components/SuccessCheckmark.vue"; import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { useQueryStoreStore } from "@/stores/admin/queryStore"; import { useQueryStoreStore } from "@/stores/admin/settings/queryStore";
import { useTemplateStore } from "@/stores/admin/template"; import { useTemplateStore } from "@/stores/admin/settings/template";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -35,8 +35,8 @@ import { mapState, mapActions } from "pinia";
import { PencilIcon, TrashIcon, DocumentDuplicateIcon } from "@heroicons/vue/24/outline"; import { PencilIcon, TrashIcon, DocumentDuplicateIcon } from "@heroicons/vue/24/outline";
import { useAbilityStore } from "@/stores/ability"; import { useAbilityStore } from "@/stores/ability";
import { useModalStore } from "@/stores/modal"; import { useModalStore } from "@/stores/modal";
import type { TemplateViewModel } from "@/viewmodels/admin/template.models"; import type { TemplateViewModel } from "@/viewmodels/admin/settings/template.models";
import { useTemplateStore } from "@/stores/admin/template"; import { useTemplateStore } from "@/stores/admin/settings/template";
import Spinner from "@/components/Spinner.vue"; import Spinner from "@/components/Spinner.vue";
import SuccessCheckmark from "@/components/SuccessCheckmark.vue"; import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";

View file

@ -14,7 +14,7 @@ import { defineComponent } from "vue";
import { mapState, mapActions } from "pinia"; import { mapState, mapActions } from "pinia";
import { useModalStore } from "@/stores/modal"; import { useModalStore } from "@/stores/modal";
import Spinner from "@/components/Spinner.vue"; import Spinner from "@/components/Spinner.vue";
import { useTemplateUsageStore } from "@/stores/admin/templateUsage"; import { useTemplateUsageStore } from "@/stores/admin/settings/templateUsage";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -18,12 +18,18 @@
</div> </div>
</div> </div>
<div class="flex flex-col p-2 gap-2"> <div class="flex flex-col p-2 gap-2">
<div class="flex flex-row gap-2 items-center"> <div class="flex flex-col md:flex-row gap-2 md:items-center">
<p class="min-w-16">Kopfzeile:</p> <div class="flex flex-row w-full gap-2 items-center">
<select ref="header" id="header" :value="templateUsage.header?.id ?? 'def'"> <p class="min-w-16">Kopfzeile:</p>
<option value="def">Standard-Vorlage verwenden</option> <select ref="header" id="header" :value="templateUsage.header?.id ?? 'def'">
<option v-for="template in templates" :key="template.id" :value="template.id">{{ template.template }}</option> <option value="def">Standard-Vorlage verwenden</option>
</select> <option v-for="template in templates" :key="template.id" :value="template.id">{{ template.template }}</option>
</select>
</div>
<div class="flex flex-row gap-2 items-center">
<p class="whitespace-nowrap">Höhe [mm]:</p>
<input id="headerHeight" type="number" :min="15" v-model="templateUsage.headerHeight" class="!w-24" placeholder="15">
</div>
</div> </div>
<div class="flex flex-row gap-2 items-center"> <div class="flex flex-row gap-2 items-center">
<p class="min-w-16">Hauptteil:</p> <p class="min-w-16">Hauptteil:</p>
@ -32,12 +38,18 @@
<option v-for="template in templates" :key="template.id" :value="template.id">{{ template.template }}</option> <option v-for="template in templates" :key="template.id" :value="template.id">{{ template.template }}</option>
</select> </select>
</div> </div>
<div class="flex flex-row gap-2 items-center"> <div class="flex flex-col md:flex-row gap-2 md:items-center">
<p class="min-w-16">Fußzeile:</p> <div class="flex flex-row w-full gap-2 items-center">
<select ref="footer" id="footer" :value="templateUsage.footer?.id ?? 'def'"> <p class="min-w-16">Fußzeile:</p>
<option value="def">Standard-Vorlage verwenden</option> <select ref="footer" id="footer" :value="templateUsage.footer?.id ?? 'def'">
<option v-for="template in templates" :key="template.id" :value="template.id">{{ template.template }}</option> <option value="def">Standard-Vorlage verwenden</option>
</select> <option v-for="template in templates" :key="template.id" :value="template.id">{{ template.template }}</option>
</select>
</div>
<div class="flex flex-row gap-2 items-center">
<p class="whitespace-nowrap">Höhe [mm]:</p>
<input id="footerHeight" type="number" :min="15" v-model="templateUsage.footerHeight" class="!w-24" placeholder="15">
</div>
</div> </div>
</div> </div>
</form> </form>
@ -47,9 +59,9 @@
import { defineAsyncComponent, defineComponent, markRaw, type PropType } from "vue"; import { defineAsyncComponent, defineComponent, markRaw, type PropType } from "vue";
import { mapState, mapActions } from "pinia"; import { mapState, mapActions } from "pinia";
import { ArchiveBoxArrowDownIcon, ArchiveBoxXMarkIcon, EyeIcon } from "@heroicons/vue/24/outline"; import { ArchiveBoxArrowDownIcon, ArchiveBoxXMarkIcon, EyeIcon } from "@heroicons/vue/24/outline";
import type { TemplateUsageViewModel } from "@/viewmodels/admin/templateUsage.models"; import type { TemplateUsageViewModel } from "@/viewmodels/admin/settings/templateUsage.models";
import { useTemplateStore } from "@/stores/admin/template"; import { useTemplateStore } from "@/stores/admin/settings/template";
import { useTemplateUsageStore } from "@/stores/admin/templateUsage"; import { useTemplateUsageStore } from "@/stores/admin/settings/templateUsage";
import Spinner from "@/components/Spinner.vue"; import Spinner from "@/components/Spinner.vue";
import SuccessCheckmark from "@/components/SuccessCheckmark.vue"; import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
@ -91,6 +103,8 @@ export default defineComponent({
const headerId = fromData.header.value === "def" ? null : fromData.header.value; const headerId = fromData.header.value === "def" ? null : fromData.header.value;
const bodyId = fromData.body.value === "def" ? null : fromData.body.value; const bodyId = fromData.body.value === "def" ? null : fromData.body.value;
const footerId = fromData.footer.value === "def" ? null : fromData.footer.value; const footerId = fromData.footer.value === "def" ? null : fromData.footer.value;
const headerHeight = fromData.footer.value === "" ? null : parseInt(fromData.headerHeight.value);
const footerHeight = fromData.footer.value === "" ? null : parseInt(fromData.footerHeight.value);
this.status = "loading" this.status = "loading"
this.updateTemplateUsage({ this.updateTemplateUsage({
@ -98,6 +112,8 @@ export default defineComponent({
headerId: headerId, headerId: headerId,
bodyId: bodyId, bodyId: bodyId,
footerId: footerId, footerId: footerId,
headerHeight:headerHeight,
footerHeight: footerHeight
}) })
.then(() => { .then(() => {
this.status = { status: "success" }; this.status = { status: "success" };

View file

@ -32,7 +32,7 @@ import { useModalStore } from "@/stores/modal";
import Spinner from "@/components/Spinner.vue"; import Spinner from "@/components/Spinner.vue";
import SuccessCheckmark from "@/components/SuccessCheckmark.vue"; import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { useRoleStore } from "@/stores/admin/role"; import { useRoleStore } from "@/stores/admin/user/role";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -29,7 +29,7 @@ import { useModalStore } from "@/stores/modal";
import Spinner from "@/components/Spinner.vue"; import Spinner from "@/components/Spinner.vue";
import SuccessCheckmark from "@/components/SuccessCheckmark.vue"; import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { useRoleStore } from "@/stores/admin/role"; import { useRoleStore } from "@/stores/admin/user/role";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -27,7 +27,7 @@
import { defineComponent, defineAsyncComponent, markRaw, type PropType } from "vue"; import { defineComponent, defineAsyncComponent, markRaw, type PropType } from "vue";
import { mapState, mapActions } from "pinia"; import { mapState, mapActions } from "pinia";
import { PencilIcon, WrenchScrewdriverIcon, TrashIcon } from "@heroicons/vue/24/outline"; import { PencilIcon, WrenchScrewdriverIcon, TrashIcon } from "@heroicons/vue/24/outline";
import type { RoleViewModel } from "@/viewmodels/admin/role.models"; import type { RoleViewModel } from "@/viewmodels/admin/user/role.models";
import { RouterLink } from "vue-router"; import { RouterLink } from "vue-router";
import { useAbilityStore } from "@/stores/ability"; import { useAbilityStore } from "@/stores/ability";
import { useModalStore } from "@/stores/modal"; import { useModalStore } from "@/stores/modal";

View file

@ -29,7 +29,7 @@ import { useModalStore } from "@/stores/modal";
import Spinner from "@/components/Spinner.vue"; import Spinner from "@/components/Spinner.vue";
import SuccessCheckmark from "@/components/SuccessCheckmark.vue"; import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { useUserStore } from "@/stores/admin/user"; import { useUserStore } from "@/stores/admin/user/user";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -24,10 +24,10 @@
<script setup lang="ts"> <script setup lang="ts">
import { defineComponent, type PropType } from "vue"; import { defineComponent, type PropType } from "vue";
import { mapState, mapActions } from "pinia"; import { mapState, mapActions } from "pinia";
import type { InviteViewModel } from "@/viewmodels/admin/invite.models"; import type { InviteViewModel } from "@/viewmodels/admin/user/invite.models";
import { PencilIcon, UserGroupIcon, WrenchScrewdriverIcon, TrashIcon } from "@heroicons/vue/24/outline"; import { PencilIcon, UserGroupIcon, WrenchScrewdriverIcon, TrashIcon } from "@heroicons/vue/24/outline";
import { useAbilityStore } from "@/stores/ability"; import { useAbilityStore } from "@/stores/ability";
import { useInviteStore } from "@/stores/admin/invite"; import { useInviteStore } from "@/stores/admin/user/invite";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -45,8 +45,8 @@ import { useModalStore } from "@/stores/modal";
import Spinner from "@/components/Spinner.vue"; import Spinner from "@/components/Spinner.vue";
import SuccessCheckmark from "@/components/SuccessCheckmark.vue"; import SuccessCheckmark from "@/components/SuccessCheckmark.vue";
import FailureXMark from "@/components/FailureXMark.vue"; import FailureXMark from "@/components/FailureXMark.vue";
import { useInviteStore } from "@/stores/admin/invite"; import { useInviteStore } from "@/stores/admin/user/invite";
import type { CreateInviteViewModel } from "@/viewmodels/admin/invite.models"; import type { CreateInviteViewModel } from "@/viewmodels/admin/user/invite.models";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -53,7 +53,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { defineComponent, defineAsyncComponent, markRaw, type PropType } from "vue"; import { defineComponent, defineAsyncComponent, markRaw, type PropType } from "vue";
import { mapState, mapActions } from "pinia"; import { mapState, mapActions } from "pinia";
import type { UserViewModel } from "@/viewmodels/admin/user.models"; import type { UserViewModel } from "@/viewmodels/admin/user/user.models";
import { PencilIcon, UserGroupIcon, WrenchScrewdriverIcon, TrashIcon } from "@heroicons/vue/24/outline"; import { PencilIcon, UserGroupIcon, WrenchScrewdriverIcon, TrashIcon } from "@heroicons/vue/24/outline";
import { useAbilityStore } from "@/stores/ability"; import { useAbilityStore } from "@/stores/ability";
import { useModalStore } from "@/stores/modal"; import { useModalStore } from "@/stores/modal";

View file

@ -97,11 +97,11 @@ import {
TrashIcon, TrashIcon,
SparklesIcon, SparklesIcon,
} from "@heroicons/vue/24/outline"; } from "@heroicons/vue/24/outline";
import { useQueryBuilderStore } from "@/stores/admin/queryBuilder"; import { useQueryBuilderStore } from "@/stores/admin/club/queryBuilder";
import { useModalStore } from "@/stores/modal"; import { useModalStore } from "@/stores/modal";
import Table from "./Table.vue"; import Table from "./Table.vue";
import { useAbilityStore } from "@/stores/ability"; import { useAbilityStore } from "@/stores/ability";
import { useQueryStoreStore } from "@/stores/admin/queryStore"; import { useQueryStoreStore } from "@/stores/admin/settings/queryStore";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -25,7 +25,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { defineComponent, type PropType } from "vue"; import { defineComponent, type PropType } from "vue";
import { mapActions, mapState } from "pinia"; import { mapActions, mapState } from "pinia";
import { useQueryBuilderStore } from "@/stores/admin/queryBuilder"; import { useQueryBuilderStore } from "@/stores/admin/club/queryBuilder";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -61,7 +61,7 @@ import {
type WhereOperation, type WhereOperation,
type WhereType, type WhereType,
} from "@/types/dynamicQueries"; } from "@/types/dynamicQueries";
import { useQueryBuilderStore } from "@/stores/admin/queryBuilder"; import { useQueryBuilderStore } from "@/stores/admin/club/queryBuilder";
import { TrashIcon } from "@heroicons/vue/24/outline"; import { TrashIcon } from "@heroicons/vue/24/outline";
</script> </script>

View file

@ -22,7 +22,7 @@
import { defineComponent, type PropType } from "vue"; import { defineComponent, type PropType } from "vue";
import { mapActions, mapState } from "pinia"; import { mapActions, mapState } from "pinia";
import type { DynamicQueryStructure } from "@/types/dynamicQueries"; import type { DynamicQueryStructure } from "@/types/dynamicQueries";
import { useQueryBuilderStore } from "@/stores/admin/queryBuilder"; import { useQueryBuilderStore } from "@/stores/admin/club/queryBuilder";
import { PlusIcon } from "@heroicons/vue/24/outline"; import { PlusIcon } from "@heroicons/vue/24/outline";
import JoinTable from "./JoinTable.vue"; import JoinTable from "./JoinTable.vue";
</script> </script>

View file

@ -21,7 +21,7 @@
import { defineComponent, type PropType } from "vue"; import { defineComponent, type PropType } from "vue";
import { mapActions, mapState } from "pinia"; import { mapActions, mapState } from "pinia";
import type { DynamicQueryStructure } from "@/types/dynamicQueries"; import type { DynamicQueryStructure } from "@/types/dynamicQueries";
import { useQueryBuilderStore } from "@/stores/admin/queryBuilder"; import { useQueryBuilderStore } from "@/stores/admin/club/queryBuilder";
import Table from "./Table.vue"; import Table from "./Table.vue";
import { TrashIcon } from "@heroicons/vue/24/outline"; import { TrashIcon } from "@heroicons/vue/24/outline";
import { joinTableName } from "@/helpers/queryFormatter"; import { joinTableName } from "@/helpers/queryFormatter";

View file

@ -20,7 +20,7 @@
import { defineComponent, type PropType } from "vue"; import { defineComponent, type PropType } from "vue";
import { mapActions, mapState } from "pinia"; import { mapActions, mapState } from "pinia";
import type { ConditionStructure, WhereType } from "@/types/dynamicQueries"; import type { ConditionStructure, WhereType } from "@/types/dynamicQueries";
import { useQueryBuilderStore } from "@/stores/admin/queryBuilder"; import { useQueryBuilderStore } from "@/stores/admin/club/queryBuilder";
import { TrashIcon } from "@heroicons/vue/24/outline"; import { TrashIcon } from "@heroicons/vue/24/outline";
import NestedWhere from "./NestedWhere.vue"; import NestedWhere from "./NestedWhere.vue";
</script> </script>

View file

@ -33,7 +33,7 @@
import { defineComponent, type PropType } from "vue"; import { defineComponent, type PropType } from "vue";
import { mapActions, mapState } from "pinia"; import { mapActions, mapState } from "pinia";
import type { ConditionStructure } from "@/types/dynamicQueries"; import type { ConditionStructure } from "@/types/dynamicQueries";
import { useQueryBuilderStore } from "@/stores/admin/queryBuilder"; import { useQueryBuilderStore } from "@/stores/admin/club/queryBuilder";
import NestedCondition from "./NestedCondition.vue"; import NestedCondition from "./NestedCondition.vue";
import Condition from "./Condition.vue"; import Condition from "./Condition.vue";
import { PlusIcon, RectangleStackIcon } from "@heroicons/vue/24/outline"; import { PlusIcon, RectangleStackIcon } from "@heroicons/vue/24/outline";

View file

@ -23,7 +23,7 @@
import { defineComponent, type PropType } from "vue"; import { defineComponent, type PropType } from "vue";
import { mapActions, mapState } from "pinia"; import { mapActions, mapState } from "pinia";
import type { OrderByStructure } from "@/types/dynamicQueries"; import type { OrderByStructure } from "@/types/dynamicQueries";
import { useQueryBuilderStore } from "@/stores/admin/queryBuilder"; import { useQueryBuilderStore } from "@/stores/admin/club/queryBuilder";
import OrderStructure from "./OrderStructure.vue"; import OrderStructure from "./OrderStructure.vue";
import { PlusIcon } from "@heroicons/vue/24/outline"; import { PlusIcon } from "@heroicons/vue/24/outline";
</script> </script>

View file

@ -22,7 +22,7 @@
import { defineComponent, type PropType } from "vue"; import { defineComponent, type PropType } from "vue";
import { mapActions, mapState } from "pinia"; import { mapActions, mapState } from "pinia";
import type { OrderByStructure, OrderByType } from "@/types/dynamicQueries"; import type { OrderByStructure, OrderByType } from "@/types/dynamicQueries";
import { useQueryBuilderStore } from "@/stores/admin/queryBuilder"; import { useQueryBuilderStore } from "@/stores/admin/club/queryBuilder";
import { TrashIcon } from "@heroicons/vue/24/outline"; import { TrashIcon } from "@heroicons/vue/24/outline";
</script> </script>

View file

@ -12,7 +12,7 @@
import { defineComponent, type PropType } from "vue"; import { defineComponent, type PropType } from "vue";
import { mapActions, mapState } from "pinia"; import { mapActions, mapState } from "pinia";
import type { ConditionStructure, DynamicQueryStructure, OrderByStructure } from "@/types/dynamicQueries"; import type { ConditionStructure, DynamicQueryStructure, OrderByStructure } from "@/types/dynamicQueries";
import { useQueryBuilderStore } from "@/stores/admin/queryBuilder"; import { useQueryBuilderStore } from "@/stores/admin/club/queryBuilder";
import ColumnSelect from "./ColumnSelect.vue"; import ColumnSelect from "./ColumnSelect.vue";
import Where from "./Where.vue"; import Where from "./Where.vue";
import Order from "./Order.vue"; import Order from "./Order.vue";

View file

@ -13,7 +13,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { defineComponent } from "vue"; import { defineComponent } from "vue";
import { mapState } from "pinia"; import { mapState } from "pinia";
import { useQueryBuilderStore } from "@/stores/admin/queryBuilder"; import { useQueryBuilderStore } from "@/stores/admin/club/queryBuilder";
</script> </script>
<script lang="ts"> <script lang="ts">

View file

@ -34,7 +34,7 @@
import { defineComponent, type PropType } from "vue"; import { defineComponent, type PropType } from "vue";
import { mapActions, mapState } from "pinia"; import { mapActions, mapState } from "pinia";
import type { ConditionStructure } from "@/types/dynamicQueries"; import type { ConditionStructure } from "@/types/dynamicQueries";
import { useQueryBuilderStore } from "@/stores/admin/queryBuilder"; import { useQueryBuilderStore } from "@/stores/admin/club/queryBuilder";
import NestedCondition from "./NestedCondition.vue"; import NestedCondition from "./NestedCondition.vue";
import Condition from "./Condition.vue"; import Condition from "./Condition.vue";
import { PlusIcon, RectangleStackIcon } from "@heroicons/vue/24/outline"; import { PlusIcon, RectangleStackIcon } from "@heroicons/vue/24/outline";

View file

@ -320,12 +320,12 @@ const router = createRouter({
{ {
path: "", path: "",
name: "admin-settings-qualification", name: "admin-settings-qualification",
component: () => import("@/views/admin/settings/Qualification.vue"), component: () => import("@/views/admin/settings/qualification/Qualification.vue"),
}, },
{ {
path: ":id/edit", path: ":id/edit",
name: "admin-settings-qualification-edit", name: "admin-settings-qualification-edit",
component: () => import("@/views/admin/settings/QualificationEdit.vue"), component: () => import("@/views/admin/settings/qualification/QualificationEdit.vue"),
meta: { type: "update", section: "settings", module: "qualification" }, meta: { type: "update", section: "settings", module: "qualification" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
props: true, props: true,
@ -342,12 +342,12 @@ const router = createRouter({
{ {
path: "", path: "",
name: "admin-settings-award", name: "admin-settings-award",
component: () => import("@/views/admin/settings/Award.vue"), component: () => import("@/views/admin/settings/award/Award.vue"),
}, },
{ {
path: ":id/edit", path: ":id/edit",
name: "admin-settings-award-edit", name: "admin-settings-award-edit",
component: () => import("@/views/admin/settings/AwardEdit.vue"), component: () => import("@/views/admin/settings/award/AwardEdit.vue"),
meta: { type: "update", section: "settings", module: "award" }, meta: { type: "update", section: "settings", module: "award" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
props: true, props: true,
@ -364,14 +364,14 @@ const router = createRouter({
{ {
path: "", path: "",
name: "admin-settings-executive_position", name: "admin-settings-executive_position",
component: () => import("@/views/admin/settings/ExecutivePosition.vue"), component: () => import("@/views/admin/settings/executivePosition/ExecutivePosition.vue"),
meta: { type: "read", section: "settings", module: "executive_position" }, meta: { type: "read", section: "settings", module: "executive_position" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
}, },
{ {
path: ":id/edit", path: ":id/edit",
name: "admin-settings-executive_position-edit", name: "admin-settings-executive_position-edit",
component: () => import("@/views/admin/settings/ExecutivePositionEdit.vue"), component: () => import("@/views/admin/settings/executivePosition/ExecutivePositionEdit.vue"),
meta: { type: "update", section: "settings", module: "executive_position" }, meta: { type: "update", section: "settings", module: "executive_position" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
props: true, props: true,
@ -388,12 +388,12 @@ const router = createRouter({
{ {
path: "", path: "",
name: "admin-settings-communication_type", name: "admin-settings-communication_type",
component: () => import("@/views/admin/settings/CommunicationType.vue"), component: () => import("@/views/admin/settings/communicationType/CommunicationType.vue"),
}, },
{ {
path: ":id/edit", path: ":id/edit",
name: "admin-settings-communication_type-edit", name: "admin-settings-communication_type-edit",
component: () => import("@/views/admin/settings/CommunicationTypeEdit.vue"), component: () => import("@/views/admin/settings/communicationType/CommunicationTypeEdit.vue"),
meta: { type: "update", section: "settings", module: "communication_type" }, meta: { type: "update", section: "settings", module: "communication_type" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
props: true, props: true,
@ -410,12 +410,12 @@ const router = createRouter({
{ {
path: "", path: "",
name: "admin-settings-membership_status", name: "admin-settings-membership_status",
component: () => import("@/views/admin/settings/MembershipStatus.vue"), component: () => import("@/views/admin/settings/membershipStatus/MembershipStatus.vue"),
}, },
{ {
path: ":id/edit", path: ":id/edit",
name: "admin-settings-membership_status-edit", name: "admin-settings-membership_status-edit",
component: () => import("@/views/admin/settings/MembershipStatusEdit.vue"), component: () => import("@/views/admin/settings/membershipStatus/MembershipStatusEdit.vue"),
meta: { type: "update", section: "settings", module: "membership_status" }, meta: { type: "update", section: "settings", module: "membership_status" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
props: true, props: true,
@ -432,12 +432,12 @@ const router = createRouter({
{ {
path: "", path: "",
name: "admin-settings-calendar_type", name: "admin-settings-calendar_type",
component: () => import("@/views/admin/settings/CalendarType.vue"), component: () => import("@/views/admin/settings/calendarType/CalendarType.vue"),
}, },
{ {
path: ":id/edit", path: ":id/edit",
name: "admin-settings-calendar_type-edit", name: "admin-settings-calendar_type-edit",
component: () => import("@/views/admin/settings/CalendarTypeEdit.vue"), component: () => import("@/views/admin/settings/calendarType/CalendarTypeEdit.vue"),
meta: { type: "update", section: "settings", module: "calendar_type" }, meta: { type: "update", section: "settings", module: "calendar_type" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
props: true, props: true,
@ -447,7 +447,7 @@ const router = createRouter({
{ {
path: "query-store", path: "query-store",
name: "admin-settings-query_store", name: "admin-settings-query_store",
component: () => import("@/views/admin/settings/QueryStore.vue"), component: () => import("@/views/admin/settings/queryStore/QueryStore.vue"),
meta: { type: "read", section: "settings", module: "query_store" }, meta: { type: "read", section: "settings", module: "query_store" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
}, },
@ -519,17 +519,17 @@ const router = createRouter({
{ {
path: "", path: "",
name: "admin-user-user", name: "admin-user-user",
component: () => import("@/views/admin/user/User.vue"), component: () => import("@/views/admin/user/user/User.vue"),
}, },
{ {
path: "invites", path: "invites",
name: "admin-user-user-invites", name: "admin-user-user-invites",
component: () => import("@/views/admin/user/Invite.vue"), component: () => import("@/views/admin/user/user/Invite.vue"),
}, },
{ {
path: ":id/edit", path: ":id/edit",
name: "admin-user-user-edit", name: "admin-user-user-edit",
component: () => import("@/views/admin/user/UserEdit.vue"), component: () => import("@/views/admin/user/user/UserEdit.vue"),
meta: { type: "update", section: "user", module: "user" }, meta: { type: "update", section: "user", module: "user" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
props: true, props: true,
@ -537,7 +537,7 @@ const router = createRouter({
{ {
path: ":id/permission", path: ":id/permission",
name: "admin-user-user-permission", name: "admin-user-user-permission",
component: () => import("@/views/admin/user/UserEditPermission.vue"), component: () => import("@/views/admin/user/user/UserEditPermission.vue"),
meta: { type: "update", section: "user", module: "user" }, meta: { type: "update", section: "user", module: "user" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
props: true, props: true,
@ -545,7 +545,7 @@ const router = createRouter({
{ {
path: ":id/roles", path: ":id/roles",
name: "admin-user-user-roles", name: "admin-user-user-roles",
component: () => import("@/views/admin/user/UserEditRoles.vue"), component: () => import("@/views/admin/user/user/UserEditRoles.vue"),
meta: { type: "update", section: "user", module: "user" }, meta: { type: "update", section: "user", module: "user" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
props: true, props: true,
@ -562,12 +562,12 @@ const router = createRouter({
{ {
path: "", path: "",
name: "admin-user-role", name: "admin-user-role",
component: () => import("@/views/admin/user/Role.vue"), component: () => import("@/views/admin/user/role/Role.vue"),
}, },
{ {
path: ":id/edit", path: ":id/edit",
name: "admin-user-role-edit", name: "admin-user-role-edit",
component: () => import("@/views/admin/user/RoleEdit.vue"), component: () => import("@/views/admin/user/role/RoleEdit.vue"),
meta: { type: "update", section: "user", module: "role" }, meta: { type: "update", section: "user", module: "role" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
props: true, props: true,
@ -575,7 +575,7 @@ const router = createRouter({
{ {
path: ":id/permission", path: ":id/permission",
name: "admin-user-role-permission", name: "admin-user-role-permission",
component: () => import("@/views/admin/user/RoleEditPermission.vue"), component: () => import("@/views/admin/user/role/RoleEditPermission.vue"),
meta: { type: "update", section: "user", module: "role" }, meta: { type: "update", section: "user", module: "role" },
beforeEnter: [abilityAndNavUpdate], beforeEnter: [abilityAndNavUpdate],
props: true, props: true,

View file

@ -1,9 +1,9 @@
import { useCommunicationStore } from "@/stores/admin/communication"; import { useCommunicationStore } from "@/stores/admin/club/member/communication";
import { useMemberStore } from "@/stores/admin/member"; import { useMemberStore } from "@/stores/admin/club/member/member";
import { useMemberAwardStore } from "@/stores/admin/memberAward"; import { useMemberAwardStore } from "@/stores/admin/club/member/memberAward";
import { useMemberExecutivePositionStore } from "@/stores/admin/memberExecutivePosition"; import { useMemberExecutivePositionStore } from "@/stores/admin/club/member/memberExecutivePosition";
import { useMemberQualificationStore } from "@/stores/admin/memberQualification"; import { useMemberQualificationStore } from "@/stores/admin/club/member/memberQualification";
import { useMembershipStore } from "@/stores/admin/membership"; import { useMembershipStore } from "@/stores/admin/club/member/membership";
export async function setMemberId(to: any, from: any, next: any) { export async function setMemberId(to: any, from: any, next: any) {
const member = useMemberStore(); const member = useMemberStore();

View file

@ -1,7 +1,7 @@
import { useNewsletterStore } from "@/stores/admin/newsletter"; import { useNewsletterStore } from "@/stores/admin/club/newsletter/newsletter";
import { useNewsletterDatesStore } from "@/stores/admin/newsletterDates"; import { useNewsletterDatesStore } from "@/stores/admin/club/newsletter/newsletterDates";
import { useNewsletterRecipientsStore } from "@/stores/admin/newsletterRecipients"; import { useNewsletterRecipientsStore } from "@/stores/admin/club/newsletter/newsletterRecipients";
import { useNewsletterPrintoutStore } from "../stores/admin/newsletterPrintout"; import { useNewsletterPrintoutStore } from "../stores/admin/club/newsletter/newsletterPrintout";
export async function setNewsletterId(to: any, from: any, next: any) { export async function setNewsletterId(to: any, from: any, next: any) {
const newsletter = useNewsletterStore(); const newsletter = useNewsletterStore();

View file

@ -1,9 +1,9 @@
import { useProtocolStore } from "@/stores/admin/protocol"; import { useProtocolStore } from "@/stores/admin/club/protocol/protocol";
import { useProtocolAgendaStore } from "@/stores/admin/protocolAgenda"; import { useProtocolAgendaStore } from "@/stores/admin/club/protocol/protocolAgenda";
import { useProtocolDecisionStore } from "@/stores/admin/protocolDecision"; import { useProtocolDecisionStore } from "@/stores/admin/club/protocol/protocolDecision";
import { useProtocolPresenceStore } from "@/stores/admin/protocolPresence"; import { useProtocolPresenceStore } from "@/stores/admin/club/protocol/protocolPresence";
import { useProtocolVotingStore } from "@/stores/admin/protocolVoting"; import { useProtocolVotingStore } from "@/stores/admin/club/protocol/protocolVoting";
import { useProtocolPrintoutStore } from "../stores/admin/protocolPrintout"; import { useProtocolPrintoutStore } from "../stores/admin/club/protocol/protocolPrintout";
export async function setProtocolId(to: any, from: any, next: any) { export async function setProtocolId(to: any, from: any, next: any) {
const protocol = useProtocolStore(); const protocol = useProtocolStore();

View file

@ -3,7 +3,7 @@ import type {
CreateCalendarViewModel, CreateCalendarViewModel,
UpdateCalendarViewModel, UpdateCalendarViewModel,
CalendarViewModel, CalendarViewModel,
} from "@/viewmodels/admin/calendar.models"; } from "@/viewmodels/admin/club/calendar.models";
import { http } from "@/serverCom"; import { http } from "@/serverCom";
import type { AxiosResponse } from "axios"; import type { AxiosResponse } from "axios";

View file

@ -1,14 +1,14 @@
import { defineStore } from "pinia"; import { defineStore } from "pinia";
import type { CreateMemberViewModel, UpdateMemberViewModel } from "@/viewmodels/admin/member.models"; import type { CreateMemberViewModel, UpdateMemberViewModel } from "@/viewmodels/admin/club/member/member.models";
import { http } from "@/serverCom"; import { http } from "@/serverCom";
import type { AxiosResponse } from "axios"; import type { AxiosResponse } from "axios";
import type { MemberViewModel } from "@/viewmodels/admin/member.models"; import type { MemberViewModel } from "@/viewmodels/admin/club/member/member.models";
import { useMemberStore } from "./member"; import { useMemberStore } from "./member";
import type { import type {
CreateCommunicationViewModel, CreateCommunicationViewModel,
CommunicationViewModel, CommunicationViewModel,
UpdateCommunicationViewModel, UpdateCommunicationViewModel,
} from "@/viewmodels/admin/communication.models"; } from "@/viewmodels/admin/club/member/communication.models";
export const useCommunicationStore = defineStore("communication", { export const useCommunicationStore = defineStore("communication", {
state: () => { state: () => {

View file

@ -1,8 +1,8 @@
import { defineStore } from "pinia"; import { defineStore } from "pinia";
import type { CreateMemberViewModel, UpdateMemberViewModel } from "@/viewmodels/admin/member.models"; import type { CreateMemberViewModel, UpdateMemberViewModel } from "@/viewmodels/admin/club/member/member.models";
import { http } from "@/serverCom"; import { http } from "@/serverCom";
import type { AxiosResponse } from "axios"; import type { AxiosResponse } from "axios";
import type { MemberViewModel } from "@/viewmodels/admin/member.models"; import type { MemberViewModel } from "@/viewmodels/admin/club/member/member.models";
export const useMemberStore = defineStore("member", { export const useMemberStore = defineStore("member", {
state: () => { state: () => {
@ -16,11 +16,11 @@ export const useMemberStore = defineStore("member", {
}; };
}, },
actions: { actions: {
fetchMembers(offset = 0, count = 25, clear = false) { fetchMembers(offset = 0, count = 25, search = "", clear = false) {
if (clear) this.members = []; if (clear) this.members = [];
this.loading = "loading"; this.loading = "loading";
http http
.get(`/admin/member?offset=${offset}&count=${count}`) .get(`/admin/member?offset=${offset}&count=${count}${search != "" ? "&search=" + search : ""}`)
.then((result) => { .then((result) => {
this.totalCount = result.data.total; this.totalCount = result.data.total;
result.data.members result.data.members
@ -62,6 +62,7 @@ export const useMemberStore = defineStore("member", {
lastname: member.lastname, lastname: member.lastname,
nameaffix: member.nameaffix, nameaffix: member.nameaffix,
birthdate: member.birthdate, birthdate: member.birthdate,
internalId: member.internalId,
}); });
this.fetchMembers(); this.fetchMembers();
return result; return result;
@ -73,6 +74,7 @@ export const useMemberStore = defineStore("member", {
lastname: member.lastname, lastname: member.lastname,
nameaffix: member.nameaffix, nameaffix: member.nameaffix,
birthdate: member.birthdate, birthdate: member.birthdate,
internalId: member.internalId,
}); });
this.fetchMembers(); this.fetchMembers();
return result; return result;

View file

@ -1,14 +1,14 @@
import { defineStore } from "pinia"; import { defineStore } from "pinia";
import type { CreateMemberViewModel, UpdateMemberViewModel } from "@/viewmodels/admin/member.models"; import type { CreateMemberViewModel, UpdateMemberViewModel } from "@/viewmodels/admin/club/member/member.models";
import { http } from "@/serverCom"; import { http } from "@/serverCom";
import type { AxiosResponse } from "axios"; import type { AxiosResponse } from "axios";
import type { MemberViewModel } from "@/viewmodels/admin/member.models"; import type { MemberViewModel } from "@/viewmodels/admin/club/member/member.models";
import { useMemberStore } from "./member"; import { useMemberStore } from "./member";
import type { import type {
CreateMemberAwardViewModel, CreateMemberAwardViewModel,
MemberAwardViewModel, MemberAwardViewModel,
UpdateMemberAwardViewModel, UpdateMemberAwardViewModel,
} from "@/viewmodels/admin/memberAward.models"; } from "@/viewmodels/admin/club/member/memberAward.models";
export const useMemberAwardStore = defineStore("memberAward", { export const useMemberAwardStore = defineStore("memberAward", {
state: () => { state: () => {

View file

@ -1,14 +1,14 @@
import { defineStore } from "pinia"; import { defineStore } from "pinia";
import type { CreateMemberViewModel, UpdateMemberViewModel } from "@/viewmodels/admin/member.models"; import type { CreateMemberViewModel, UpdateMemberViewModel } from "@/viewmodels/admin/club/member/member.models";
import { http } from "@/serverCom"; import { http } from "@/serverCom";
import type { AxiosResponse } from "axios"; import type { AxiosResponse } from "axios";
import type { MemberViewModel } from "@/viewmodels/admin/member.models"; import type { MemberViewModel } from "@/viewmodels/admin/club/member/member.models";
import { useMemberStore } from "./member"; import { useMemberStore } from "./member";
import type { import type {
CreateMemberExecutivePositionViewModel, CreateMemberExecutivePositionViewModel,
MemberExecutivePositionViewModel, MemberExecutivePositionViewModel,
UpdateMemberExecutivePositionViewModel, UpdateMemberExecutivePositionViewModel,
} from "@/viewmodels/admin/memberExecutivePosition.models"; } from "@/viewmodels/admin/club/member/memberExecutivePosition.models";
export const useMemberExecutivePositionStore = defineStore("memberExecutivePosition", { export const useMemberExecutivePositionStore = defineStore("memberExecutivePosition", {
state: () => { state: () => {

View file

@ -1,14 +1,14 @@
import { defineStore } from "pinia"; import { defineStore } from "pinia";
import type { CreateMemberViewModel, UpdateMemberViewModel } from "@/viewmodels/admin/member.models"; import type { CreateMemberViewModel, UpdateMemberViewModel } from "@/viewmodels/admin/club/member/member.models";
import { http } from "@/serverCom"; import { http } from "@/serverCom";
import type { AxiosResponse } from "axios"; import type { AxiosResponse } from "axios";
import type { MemberViewModel } from "@/viewmodels/admin/member.models"; import type { MemberViewModel } from "@/viewmodels/admin/club/member/member.models";
import { useMemberStore } from "./member"; import { useMemberStore } from "./member";
import type { import type {
CreateMemberQualificationViewModel, CreateMemberQualificationViewModel,
MemberQualificationViewModel, MemberQualificationViewModel,
UpdateMemberQualificationViewModel, UpdateMemberQualificationViewModel,
} from "@/viewmodels/admin/memberQualification.models"; } from "@/viewmodels/admin/club/member/memberQualification.models";
export const useMemberQualificationStore = defineStore("memberQualification", { export const useMemberQualificationStore = defineStore("memberQualification", {
state: () => { state: () => {

View file

@ -1,14 +1,14 @@
import { defineStore } from "pinia"; import { defineStore } from "pinia";
import type { CreateMemberViewModel, UpdateMemberViewModel } from "@/viewmodels/admin/member.models"; import type { CreateMemberViewModel, UpdateMemberViewModel } from "@/viewmodels/admin/club/member/member.models";
import { http } from "@/serverCom"; import { http } from "@/serverCom";
import type { AxiosResponse } from "axios"; import type { AxiosResponse } from "axios";
import type { MemberViewModel } from "@/viewmodels/admin/member.models"; import type { MemberViewModel } from "@/viewmodels/admin/club/member/member.models";
import { useMemberStore } from "./member"; import { useMemberStore } from "./member";
import type { import type {
CreateMembershipViewModel, CreateMembershipViewModel,
MembershipViewModel, MembershipViewModel,
UpdateMembershipViewModel, UpdateMembershipViewModel,
} from "@/viewmodels/admin/membership.models"; } from "@/viewmodels/admin/club/member/membership.models";
export const useMembershipStore = defineStore("membership", { export const useMembershipStore = defineStore("membership", {
state: () => { state: () => {
@ -38,7 +38,6 @@ export const useMembershipStore = defineStore("membership", {
async createMembership(membership: CreateMembershipViewModel): Promise<AxiosResponse<any, any>> { async createMembership(membership: CreateMembershipViewModel): Promise<AxiosResponse<any, any>> {
const memberId = useMemberStore().activeMember; const memberId = useMemberStore().activeMember;
const result = await http.post(`/admin/member/${memberId}/membership`, { const result = await http.post(`/admin/member/${memberId}/membership`, {
internalId: membership.internalId,
start: membership.start, start: membership.start,
statusId: membership.statusId, statusId: membership.statusId,
}); });
@ -48,7 +47,6 @@ export const useMembershipStore = defineStore("membership", {
async updateMembership(membership: UpdateMembershipViewModel): Promise<AxiosResponse<any, any>> { async updateMembership(membership: UpdateMembershipViewModel): Promise<AxiosResponse<any, any>> {
const memberId = useMemberStore().activeMember; const memberId = useMemberStore().activeMember;
const result = await http.patch(`/admin/member/${memberId}/membership/${membership.id}`, { const result = await http.patch(`/admin/member/${memberId}/membership/${membership.id}`, {
internalId: membership.internalId,
start: membership.start, start: membership.start,
end: membership.end, end: membership.end,
terminationReason: membership.terminationReason, terminationReason: membership.terminationReason,

View file

@ -1,8 +1,8 @@
import { defineStore } from "pinia"; import { defineStore } from "pinia";
import type { CreateNewsletterViewModel, SyncNewsletterViewModel } from "@/viewmodels/admin/newsletter.models"; import type { CreateNewsletterViewModel, SyncNewsletterViewModel } from "@/viewmodels/admin/club/newsletter/newsletter.models";
import { http } from "@/serverCom"; import { http } from "@/serverCom";
import type { AxiosResponse } from "axios"; import type { AxiosResponse } from "axios";
import type { NewsletterViewModel } from "@/viewmodels/admin/newsletter.models"; import type { NewsletterViewModel } from "@/viewmodels/admin/club/newsletter/newsletter.models";
import cloneDeep from "lodash.clonedeep"; import cloneDeep from "lodash.clonedeep";
import isEqual from "lodash.isequal"; import isEqual from "lodash.isequal";
import difference from "lodash.difference"; import difference from "lodash.difference";

View file

@ -1,6 +1,6 @@
import { defineStore } from "pinia"; import { defineStore } from "pinia";
import { http } from "@/serverCom"; import { http } from "@/serverCom";
import type { NewsletterDatesViewModel, SyncNewsletterDatesViewModel } from "@/viewmodels/admin/newsletterDates.models"; import type { NewsletterDatesViewModel, SyncNewsletterDatesViewModel } from "@/viewmodels/admin/club/newsletter/newsletterDates.models";
import { useNewsletterStore } from "./newsletter"; import { useNewsletterStore } from "./newsletter";
import cloneDeep from "lodash.clonedeep"; import cloneDeep from "lodash.clonedeep";
import isEqual from "lodash.isequal"; import isEqual from "lodash.isequal";

Some files were not shown because too many files have changed in this diff Show more