added missing pages

This commit is contained in:
Torsten Schulz
2024-06-24 11:55:59 +02:00
parent 8b89d8b800
commit bc5a606176
15 changed files with 250 additions and 30 deletions

View File

@@ -77,25 +77,25 @@ const filterContactPersons = async (req, res) => {
console.log(configString, typeof configString);
const config = JSON.parse(configString);
const where = {};
const having = [];
console.log(config, typeof config);
console.log(config.selection);
if (config.selection.id && config.selection.id === 'all') {
// No additional filter needed for "all"
} else if (config.selection.id) {
where.id = config.selection.id;
} else {
const filters = [];
if (config.selection.types && config.selection.types.length > 0) {
filters.push({ '$positions.id$': { [Op.in]: config.selection.types } });
having.push({ '$positions.id$': { [Op.in]: config.selection.types } });
}
if (config.selection.places && config.selection.places.length > 0) {
filters.push({ '$events.eventPlaceId$': { [Op.in]: config.selection.places } });
having.push({ '$events.eventPlaceId$': { [Op.in]: config.selection.places } });
}
if (filters.length > 0) {
where[Op.and] = filters;
if (config.selection.positions && config.selection.positions.length > 0) {
having.push({ '$positions.id$': { [Op.in]: config.selection.positions } });
}
}
@@ -106,13 +106,16 @@ const filterContactPersons = async (req, res) => {
model: Position,
as: 'positions',
through: { attributes: [] },
required: true, // Ensure only contact persons with matching positions are included
},
{
model: Event,
as: 'events',
through: { attributes: [] },
required: false,
},
],
having: having.length > 0 ? { [Op.and]: having } : undefined,
});
res.json(contactPersons);

Binary file not shown.

After

Width:  |  Height:  |  Size: 848 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

View File

@@ -19,8 +19,8 @@
label="caption" track-by="id" />
</div>
<div v-if="selectedTypes.some(type => type.id === 'position')">
<label for="contact-select">Wählen Sie eine Position:</label>
<multiselect id="contact-select" v-model="selectedPositions" :options="positions" :multiple="false"
<label for="position-select">Wählen Sie eine Position:</label>
<multiselect id="position-select" v-model="selectedPositions" :options="positions" :multiple="false"
label="caption" track-by="id" />
</div>
<div v-if="selectedTypes.some(type => type.id === 'specific')">
@@ -41,8 +41,7 @@
<div>
<label for="displayStyle">Anzeigen als</label>
<select id="displayStyle" v-model="displayStyle">
<option v-for="style in displayStyles" :value="style.id" :key="style.id">{{ style.label }}
</option>
<option v-for="style in displayStyles" :value="style.id" :key="style.id">{{ style.label }}</option>
</select>
</div>
</div>
@@ -129,12 +128,13 @@ export default {
selectedContact.value = null;
} else if (selectedTypes.value.some(type => type.id === 'types')) {
selectedContact.value = null;
} else if (selectedPositions.value.some(type => type.id === 'position')) {
} else if (selectedTypes.value.some(type => type.id === 'position')) {
selectedContact.value = null;
}
};
const confirmAddContactConfiguration = () => {
console.log('Selected positions:', selectedPositions.value); // Log the selected positions
let configString = '';
const displayArray = Object.keys(displayOptions.value).filter((key) => displayOptions.value[key]);
let selection = {};
@@ -145,7 +145,7 @@ export default {
} else {
selection['types'] = selectedEventTypes.value.map((type) => type.id);
selection['places'] = selectedPlaces.value.map((place) => place.id);
selection['positions'] = selectedPositions.value((postion) => postion.id);
selection['positions'] = Array.isArray(selectedPositions.value) ? selectedPositions.value.map((position) => position.id) : [];
}
const contact = {
selection: selection,
@@ -153,6 +153,7 @@ export default {
style: displayStyle.value
}
configString = '{{ contact:' + JSON.stringify(contact) + ' }}';
console.log('Emitting config:', configString); // Log the emitted config
emit('confirm', configString);
closeAddContactDialog();
};

View File

@@ -1,7 +1,7 @@
<template>
<div v-if="config && config.style === 'box' && contacts && contacts.length && contacts.length > 0">
<div v-for="contact in contacts" :key="contact.id">
<h3>{{ contact.name }}</h3>
<div v-for="contact in contacts" :key="contact.id" class="contact-box">
<p>{{ contact.name }}</p>
<p v-if="displayOptions.includes('phone')">Telefon: {{ contact.phone }}</p>
<p v-if="displayOptions.includes('street')">Straße: {{ contact.street }}</p>
<p v-if="displayOptions.includes('zipcode')">Postleitzahl: {{ contact.zipcode }}</p>
@@ -62,5 +62,7 @@ export default {
</script>
<style scoped>
/* Add styles if needed */
.contact-box p {
margin: 0;
}
</style>

View File

@@ -0,0 +1,23 @@
<template>
<div class="some-page">
<ContentComponent :link="currentLink" />
</div>
</template>
<script>
import ContentComponent from '@/components/ContentComponent.vue';
export default {
name: 'SomePage',
components: {
ContentComponent,
},
computed: {
currentLink() {
return this.$route.path;
},
},
};
</script>
<style scoped></style>

View File

@@ -87,6 +87,7 @@
<WorshipDialog ref="worshipDialog" @confirm="insertWorshipList" />
<AddImageDialog ref="addImageDialog" @confirm="insertImage" />
<AddContactDialog ref="addContactDialog" @confirm="insertContact" />
<AddEventDialog ref="addEventDialog" @confirm="insertEvent" />
<AddLinkDialog ref="addLinkDialog" @confirm="insertLink" />
<AddDownloadDialog ref="addDownloadDialog" @confirm="insertDownload" />
@@ -116,6 +117,7 @@ import Color from '@tiptap/extension-color';
import { CustomTableCell, CustomTableHeader } from '../../extensions/CustomTableCell';
import WorshipDialog from '@/components/WorshipDialog.vue';
import AddImageDialog from '@/components/AddImageDialog.vue';
import AddContactDialog from '@/components/AddContactDialog.vue';
import AddEventDialog from '@/components/AddEventDialog.vue';
import AddLinkDialog from '@/components/AddLinkDialog.vue';
import AddDownloadDialog from '@/components/AddDownloadDialog.vue';
@@ -146,6 +148,7 @@ export default {
AlignLeftBoxIcon,
StatsReportIcon,
AddEventDialog,
AddContactDialog,
AddLinkDialog,
AddDownloadDialog,
AddInstitutionDialog,
@@ -160,6 +163,7 @@ export default {
const worshipDialog = ref(null);
const addImageDialog = ref(null);
const addEventDialog = ref(null);
const addContactDialog = ref(null);
const addLinkDialog = ref(null);
const addDownloadDialog = ref(null);
const addInstitutionDialog = ref(null);
@@ -303,6 +307,16 @@ export default {
}
};
const openAddContactDialog = () => {
addContactDialog.value.openAddContactDialog();
};
const insertContact = (contactPersonString) => {
if (editor.value) {
editor.value.chain().focus().insertContent(contactPersonString).run();
}
};
const openAddLinkDialog = () => {
addLinkDialog.value.openAddLinkDialog();
};
@@ -393,6 +407,9 @@ export default {
insertImage,
addEventDialog,
openAddEventsDialog: openAddEventDialog,
addContactDialog,
openAddContactDialog,
insertContact,
insertEvent,
addLinkDialog,
openAddLinkDialog,

View File

@@ -1,11 +1,23 @@
<template>
<div>
<h2>Kindergottesdiest</h2>
</div>
<div class="some-page">
<ContentComponent :link="currentLink" />
</div>
</template>
<script>
import ContentComponent from '@/components/ContentComponent.vue';
export default {
name: 'ChildrensWorshipContent',
name: 'SomePage',
components: {
ContentComponent,
},
computed: {
currentLink() {
return this.$route.path;
},
},
};
</script>
<style scoped></style>

View File

@@ -0,0 +1,25 @@
<template>
<div class="some-page">
<ContentComponent :link="currentLink" />
</div>
</template>
<script>
import ContentComponent from '@/components/ContentComponent.vue';
export default {
name: 'SomePage',
components: {
ContentComponent,
},
computed: {
currentLink() {
return this.$route.path;
},
},
};
</script>
<style scoped>
</style>

View File

@@ -0,0 +1,25 @@
<template>
<div class="some-page">
<ContentComponent :link="currentLink" />
</div>
</template>
<script>
import ContentComponent from '@/components/ContentComponent.vue';
export default {
name: 'SomePage',
components: {
ContentComponent,
},
computed: {
currentLink() {
return this.$route.path;
},
},
};
</script>
<style scoped>
</style>

View File

@@ -0,0 +1,25 @@
<template>
<div class="some-page">
<ContentComponent :link="currentLink" />
</div>
</template>
<script>
import ContentComponent from '@/components/ContentComponent.vue';
export default {
name: 'SomePage',
components: {
ContentComponent,
},
computed: {
currentLink() {
return this.$route.path;
},
},
};
</script>
<style scoped>
</style>

View File

@@ -0,0 +1,25 @@
<template>
<div class="some-page">
<ContentComponent :link="currentLink" />
</div>
</template>
<script>
import ContentComponent from '@/components/ContentComponent.vue';
export default {
name: 'SomePage',
components: {
ContentComponent,
},
computed: {
currentLink() {
return this.$route.path;
},
},
};
</script>
<style scoped>
</style>

View File

@@ -1,11 +1,25 @@
<template>
<div>
<h2>Flötenkinder</h2>
<div class="some-page">
<ContentComponent :link="currentLink" />
</div>
</template>
</template>
<script>
import ContentComponent from '@/components/ContentComponent.vue';
export default {
name: 'SomePage',
components: {
ContentComponent,
},
computed: {
currentLink() {
return this.$route.path;
},
},
};
</script>
<style scoped>
</style>
<script>
export default {
name: 'FlootChildrenContent',
};
</script>

View File

@@ -0,0 +1,25 @@
<template>
<div class="some-page">
<ContentComponent :link="currentLink" />
</div>
</template>
<script>
import ContentComponent from '@/components/ContentComponent.vue';
export default {
name: 'SomePage',
components: {
ContentComponent,
},
computed: {
currentLink() {
return this.$route.path;
},
},
};
</script>
<style scoped>
</style>

View File

@@ -0,0 +1,23 @@
<template>
<div class="some-page">
<ContentComponent :link="currentLink" />
</div>
</template>
<script>
import ContentComponent from '@/components/ContentComponent.vue';
export default {
name: 'SomePage',
components: {
ContentComponent,
},
computed: {
currentLink() {
return this.$route.path;
},
},
};
</script>
<style scoped></style>