Add accordion for member confirmation

This commit is contained in:
philipp lang 2024-06-14 01:14:26 +02:00
parent efb6db8b0b
commit 194cff40d5
2 changed files with 44 additions and 4 deletions

View File

@ -0,0 +1,37 @@
<template>
<box size="sm" class="opacity-[0.8] hover:opacity-[1.0]" :type="type">
<a href="#" @click.prevent="emit('update:model-value', modelValue === index ? -1 : index)" class="flex items-center justify-between">
<div v-text="title"></div>
<chevron :class="{'rotate-180': modelValue === index}" class="w-4 h-4"></chevron>
</a>
<div v-if="modelValue === index">
<slot />
</div>
</box>
</template>
<script setup>
import Box from './Box.vue';
import Chevron from './icons/Chevron.vue';
const emit = defineEmits(['update:model-value']);
const props = defineProps({
type: {
required: true,
type: String,
},
title: {
required: true,
type: String,
},
modelValue: {
required: true,
type: Number,
},
index: {
required: true,
type: Number,
},
});
</script>

View File

@ -88,9 +88,8 @@
Hier siehst du noch einmal alle ausgewählten Mitglieder. Ggf sind hier pro Mitglied noch weitere Informationen erforderlich. Bitte gebe diese pro Mitglied an und klicke dann auf Hier siehst du noch einmal alle ausgewählten Mitglieder. Ggf sind hier pro Mitglied noch weitere Informationen erforderlich. Bitte gebe diese pro Mitglied an und klicke dann auf
"weiter". "weiter".
</p> </p>
<div class="grid items-center gap-2 mt-6" :style="{'grid-template-columns': `max-content repeat(${memberFields.length}, 1fr)`}"> <div class="grid gap-2 mt-6">
<template v-for="member in inner" :key="member.id"> <accordion v-model="openValue" :index="index" :title="member.innerFormName" v-for="(member, index) in inner" :key="index" type="success">
<div v-text="member.innerFormName"></div>
<template v-for="(memberField, memberIndex) in memberFields"> <template v-for="(memberField, memberIndex) in memberFields">
<v-checkbox <v-checkbox
v-if="memberField.type === 'CheckboxField'" v-if="memberField.type === 'CheckboxField'"
@ -106,6 +105,7 @@
:name="`${field.key}-memberattr-${member.id}-${memberField.key}`" :name="`${field.key}-memberattr-${member.id}-${memberField.key}`"
:id="`${field.key}-memberattr-${member.id}-${memberField.key}`" :id="`${field.key}-memberattr-${member.id}-${memberField.key}`"
:label="memberField.name" :label="memberField.name"
:allowcustom="false"
:options=" :options="
memberField.options.map((o) => { memberField.options.map((o) => {
return {id: o, name: o}; return {id: o, name: o};
@ -113,7 +113,7 @@
" "
></v-dropdown> ></v-dropdown>
</template> </template>
</template> </accordion>
</div> </div>
<div class="flex justify-center mt-5"> <div class="flex justify-center mt-5">
<v-btn @click.prevent="membersCompleted = true">Mitgliederdaten speichern</v-btn> <v-btn @click.prevent="membersCompleted = true">Mitgliederdaten speichern</v-btn>
@ -142,6 +142,7 @@ import Spinner from '../Spinner.vue';
import useAdremaLogin from '../../composables/useAdremaLogin.js'; import useAdremaLogin from '../../composables/useAdremaLogin.js';
import useEventMeta from '../../composables/useEventMeta.js'; import useEventMeta from '../../composables/useEventMeta.js';
import Pagination from '../Pagination.vue'; import Pagination from '../Pagination.vue';
import Accordion from '../Accordion.vue';
const eventMeta = useEventMeta(); const eventMeta = useEventMeta();
const {login, logout, user, loginData, searchData, searchForMember, resetSearchData, searchResults, searching} = useAdremaLogin(); const {login, logout, user, loginData, searchData, searchForMember, resetSearchData, searchResults, searching} = useAdremaLogin();
@ -168,6 +169,8 @@ const step = computed(() => {
return 4; return 4;
}); });
const openValue = ref(-1);
const membersAccepted = ref(false); const membersAccepted = ref(false);
const membersCompleted = ref(false); const membersCompleted = ref(false);
const emit = defineEmits(['update:modelValue']); const emit = defineEmits(['update:modelValue']);