Compare commits
3 Commits
main
...
backend-ov
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
68760ef22f | ||
|
|
7861b9cffb | ||
|
|
77e3dbde82 |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -27,5 +27,3 @@ server.key
|
|||||||
server.cert
|
server.cert
|
||||||
|
|
||||||
public/images/uploads/1ba24ea7-f52c-4179-896f-1909269cab58.jpg
|
public/images/uploads/1ba24ea7-f52c-4179-896f-1909269cab58.jpg
|
||||||
actualize.sh
|
|
||||||
files/uploads/GD 24.08.2025-04.01.2026 Stand 12.08.2025.docx
|
|
||||||
|
|||||||
@@ -2,4 +2,4 @@ module.exports = {
|
|||||||
presets: [
|
presets: [
|
||||||
'@vue/cli-plugin-babel/preset'
|
'@vue/cli-plugin-babel/preset'
|
||||||
]
|
]
|
||||||
};
|
}
|
||||||
|
|||||||
@@ -1,21 +1,21 @@
|
|||||||
{
|
{
|
||||||
"development": {
|
"development": {
|
||||||
"username": "miriamgemeinde",
|
"username": "miriam_user",
|
||||||
"password": "hitomisan",
|
"password": "qTCTTWwpEwy3vPDU",
|
||||||
"database": "miriamgemeinde",
|
"database": "miriamgemeinde",
|
||||||
"host": "localhost",
|
"host": "tsschulz.de",
|
||||||
"dialect": "mysql"
|
"dialect": "mysql"
|
||||||
},
|
},
|
||||||
"test": {
|
"test": {
|
||||||
"username": "miriam_user",
|
"username": "miriam_user",
|
||||||
"password": "hitomisan",
|
"password": "qTCTTWwpEwy3vPDU",
|
||||||
"database": "miriamgemeinde",
|
"database": "miriamgemeinde",
|
||||||
"host": "tsschulz.de",
|
"host": "tsschulz.de",
|
||||||
"dialect": "mysql"
|
"dialect": "mysql"
|
||||||
},
|
},
|
||||||
"production": {
|
"production": {
|
||||||
"username": "miriam_user",
|
"username": "miriam_user",
|
||||||
"password": "hitomisan",
|
"password": "qTCTTWwpEwy3vPDU",
|
||||||
"database": "miriamgemeinde",
|
"database": "miriamgemeinde",
|
||||||
"host": "tsschulz.de",
|
"host": "tsschulz.de",
|
||||||
"dialect": "mysql"
|
"dialect": "mysql"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
const { Sequelize } = require('sequelize');
|
const { Sequelize } = require('sequelize');
|
||||||
|
|
||||||
const sequelize = new Sequelize('miriamgemeinde', 'miriamgemeinde', 'hitomisan', {
|
const sequelize = new Sequelize('miriamgemeinde', 'miriam_user', 'qTCTTWwpEwy3vPDU', {
|
||||||
host: 'localhost',
|
host: 'tsschulz.de',
|
||||||
dialect: 'mysql',
|
dialect: 'mysql',
|
||||||
retry: {
|
retry: {
|
||||||
match: [
|
match: [
|
||||||
@@ -26,7 +26,7 @@ const sequelize = new Sequelize('miriamgemeinde', 'miriamgemeinde', 'hitomisan',
|
|||||||
async function connectWithRetry() {
|
async function connectWithRetry() {
|
||||||
try {
|
try {
|
||||||
await sequelize.authenticate();
|
await sequelize.authenticate();
|
||||||
console.log(`Connection has been established successfully. Database server: ${sequelize.config.host}`);
|
console.log('Connection has been established successfully.');
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Unable to connect to the database:', error);
|
console.error('Unable to connect to the database:', error);
|
||||||
setTimeout(connectWithRetry, 5000);
|
setTimeout(connectWithRetry, 5000);
|
||||||
|
|||||||
@@ -1,205 +1,59 @@
|
|||||||
const bcrypt = require('bcryptjs');
|
const AuthService = require('../services/AuthService');
|
||||||
const { User, PasswordResetToken } = require('../models');
|
const ErrorHandler = require('../utils/ErrorHandler');
|
||||||
const jwt = require('jsonwebtoken');
|
|
||||||
const { addTokenToBlacklist } = require('../utils/blacklist');
|
|
||||||
const { transporter, getPasswordResetEmailTemplate } = require('../config/email');
|
|
||||||
const crypto = require('crypto');
|
|
||||||
|
|
||||||
function delay(ms) {
|
/**
|
||||||
return new Promise(resolve => setTimeout(resolve, ms));
|
* Controller für Authentifizierungsendpunkte
|
||||||
}
|
*/
|
||||||
|
class AuthController {
|
||||||
|
/**
|
||||||
|
* Benutzerregistrierung
|
||||||
|
*/
|
||||||
|
static register = ErrorHandler.asyncHandler(async (req, res) => {
|
||||||
|
const result = await AuthService.register(req.body);
|
||||||
|
ErrorHandler.successResponse(res, result, result.message, 201);
|
||||||
|
});
|
||||||
|
|
||||||
exports.register = async (req, res) => {
|
/**
|
||||||
const { name, email, password } = req.body;
|
* Benutzeranmeldung
|
||||||
if (!name || !email || !password) {
|
*/
|
||||||
return res.status(400).json({ message: 'Alle Felder sind erforderlich' });
|
static login = ErrorHandler.asyncHandler(async (req, res) => {
|
||||||
}
|
|
||||||
try {
|
|
||||||
const hashedPassword = await bcrypt.hash(password, 10);
|
|
||||||
console.log('Register: creating user', { email });
|
|
||||||
|
|
||||||
const maxAttempts = 3;
|
|
||||||
let attempt = 0;
|
|
||||||
let createdUser = null;
|
|
||||||
let lastError = null;
|
|
||||||
|
|
||||||
while (attempt < maxAttempts && !createdUser) {
|
|
||||||
try {
|
|
||||||
createdUser = await User.create({ name, email, password: hashedPassword, active: false });
|
|
||||||
} catch (err) {
|
|
||||||
lastError = err;
|
|
||||||
// Spezifisch auf Lock-Timeout reagieren und erneut versuchen
|
|
||||||
if ((err.code === 'ER_LOCK_WAIT_TIMEOUT' || err?.parent?.code === 'ER_LOCK_WAIT_TIMEOUT') && attempt < maxAttempts - 1) {
|
|
||||||
const backoffMs = 300 * (attempt + 1);
|
|
||||||
console.warn(`Register: ER_LOCK_WAIT_TIMEOUT, retry in ${backoffMs}ms (attempt ${attempt + 1}/${maxAttempts})`);
|
|
||||||
await delay(backoffMs);
|
|
||||||
attempt++;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
throw err;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!createdUser && lastError) {
|
|
||||||
console.error('Register error (after retries):', lastError);
|
|
||||||
return res.status(503).json({ message: 'Zeitüberschreitung beim Zugriff auf die Datenbank. Bitte erneut versuchen.' });
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log('Register: user created', { id: createdUser.id });
|
|
||||||
|
|
||||||
const safeUser = {
|
|
||||||
id: createdUser.id,
|
|
||||||
name: createdUser.name,
|
|
||||||
email: createdUser.email,
|
|
||||||
active: createdUser.active,
|
|
||||||
created_at: createdUser.created_at
|
|
||||||
};
|
|
||||||
|
|
||||||
return res.status(201).json({ message: 'Benutzer erfolgreich registriert', user: safeUser });
|
|
||||||
} catch (error) {
|
|
||||||
if (error.name === 'SequelizeUniqueConstraintError') {
|
|
||||||
return res.status(400).json({ message: 'Email-Adresse bereits in Verwendung' });
|
|
||||||
}
|
|
||||||
console.error('Register error:', error);
|
|
||||||
return res.status(500).json({ message: 'Ein Fehler ist aufgetreten', error: error.message });
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
exports.login = async (req, res) => {
|
|
||||||
const { email, password } = req.body;
|
const { email, password } = req.body;
|
||||||
if (!email || !password) {
|
const result = await AuthService.login(email, password);
|
||||||
return res.status(400).json({ message: 'Email und Passwort sind erforderlich' });
|
ErrorHandler.successResponse(res, result, result.message);
|
||||||
}
|
|
||||||
try {
|
|
||||||
const user = await User.findOne({ where: { email } });
|
|
||||||
if (!user) {
|
|
||||||
return res.status(401).json({ message: 'Ungültige Anmeldedaten' });
|
|
||||||
}
|
|
||||||
const validPassword = await bcrypt.compare(password, user.password);
|
|
||||||
if (!validPassword) {
|
|
||||||
return res.status(401).json({ message: 'Ungültige Anmeldedaten' });
|
|
||||||
}
|
|
||||||
if (!user.active) {
|
|
||||||
return res.status(403).json({ message: 'Benutzerkonto ist nicht aktiv' });
|
|
||||||
}
|
|
||||||
const token = jwt.sign({ id: user.id, name: user.name, email: user.email }, 'zTxVgptmPl9!_dr%xxx9999(dd)', { expiresIn: '1h' });
|
|
||||||
return res.status(200).json({ message: 'Login erfolgreich', token, 'user': user });
|
|
||||||
} catch (error) {
|
|
||||||
return res.status(500).json({ message: 'Ein Fehler ist aufgetreten' });
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
exports.forgotPassword = async (req, res) => {
|
|
||||||
const { email } = req.body;
|
|
||||||
if (!email) {
|
|
||||||
return res.status(400).json({ message: 'E-Mail-Adresse ist erforderlich' });
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
const user = await User.findOne({ where: { email } });
|
|
||||||
if (!user) {
|
|
||||||
// Aus Sicherheitsgründen immer Erfolg melden, auch wenn E-Mail nicht existiert
|
|
||||||
return res.status(200).json({ message: 'Falls die E-Mail-Adresse in unserem System registriert ist, erhalten Sie einen Link zum Zurücksetzen des Passworts.' });
|
|
||||||
}
|
|
||||||
|
|
||||||
// Alte Reset-Tokens für diesen User löschen
|
|
||||||
await PasswordResetToken.destroy({ where: { userId: user.id } });
|
|
||||||
|
|
||||||
// Neuen Reset-Token generieren
|
|
||||||
const token = crypto.randomBytes(32).toString('hex');
|
|
||||||
const expiresAt = new Date(Date.now() + 60 * 60 * 1000); // 1 Stunde
|
|
||||||
|
|
||||||
await PasswordResetToken.create({
|
|
||||||
userId: user.id,
|
|
||||||
token,
|
|
||||||
expiresAt
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// Reset-URL generieren
|
/**
|
||||||
const resetUrl = `${process.env.FRONTEND_URL || 'http://localhost:8080'}/reset-password?token=${token}`;
|
* Passwort vergessen
|
||||||
|
*/
|
||||||
// E-Mail versenden
|
static forgotPassword = ErrorHandler.asyncHandler(async (req, res) => {
|
||||||
const emailTemplate = getPasswordResetEmailTemplate(resetUrl, user.name);
|
const result = await AuthService.forgotPassword(req.body.email);
|
||||||
|
ErrorHandler.successResponse(res, result, result.message);
|
||||||
const mailOptions = {
|
|
||||||
from: process.env.SMTP_FROM || 'noreply@miriamgemeinde.de',
|
|
||||||
to: email,
|
|
||||||
subject: emailTemplate.subject,
|
|
||||||
html: emailTemplate.html,
|
|
||||||
text: emailTemplate.text
|
|
||||||
};
|
|
||||||
|
|
||||||
console.log('=== EMAIL SENDING DEBUG ===');
|
|
||||||
console.log('From:', mailOptions.from);
|
|
||||||
console.log('To:', mailOptions.to);
|
|
||||||
console.log('Subject:', mailOptions.subject);
|
|
||||||
console.log('Reset URL:', resetUrl);
|
|
||||||
console.log('===========================');
|
|
||||||
|
|
||||||
await transporter.sendMail(mailOptions);
|
|
||||||
|
|
||||||
console.log('Password reset email sent to:', email);
|
|
||||||
return res.status(200).json({ message: 'Falls die E-Mail-Adresse in unserem System registriert ist, erhalten Sie einen Link zum Zurücksetzen des Passworts.' });
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Forgot password error:', error);
|
|
||||||
return res.status(500).json({ message: 'Ein Fehler ist aufgetreten' });
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
exports.resetPassword = async (req, res) => {
|
|
||||||
const { token, password } = req.body;
|
|
||||||
if (!token || !password) {
|
|
||||||
return res.status(400).json({ message: 'Token und neues Passwort sind erforderlich' });
|
|
||||||
}
|
|
||||||
if (password.length < 6) {
|
|
||||||
return res.status(400).json({ message: 'Passwort muss mindestens 6 Zeichen lang sein' });
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
// Token validieren
|
|
||||||
const resetToken = await PasswordResetToken.findOne({
|
|
||||||
where: {
|
|
||||||
token,
|
|
||||||
used: false,
|
|
||||||
expiresAt: {
|
|
||||||
[require('sequelize').Op.gt]: new Date()
|
|
||||||
}
|
|
||||||
},
|
|
||||||
include: [{ model: User, as: 'user' }]
|
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!resetToken) {
|
/**
|
||||||
return res.status(400).json({ message: 'Ungültiger oder abgelaufener Token' });
|
* Passwort zurücksetzen
|
||||||
}
|
*/
|
||||||
|
static resetPassword = ErrorHandler.asyncHandler(async (req, res) => {
|
||||||
|
const result = await AuthService.resetPassword(req.body.token, req.body.password);
|
||||||
|
ErrorHandler.successResponse(res, result, result.message);
|
||||||
|
});
|
||||||
|
|
||||||
// Passwort hashen und aktualisieren
|
/**
|
||||||
const hashedPassword = await bcrypt.hash(password, 10);
|
* Benutzerabmeldung
|
||||||
await User.update(
|
*/
|
||||||
{ password: hashedPassword },
|
static logout = ErrorHandler.asyncHandler(async (req, res) => {
|
||||||
{ where: { id: resetToken.userId } }
|
|
||||||
);
|
|
||||||
|
|
||||||
// Token als verwendet markieren
|
|
||||||
await resetToken.update({ used: true });
|
|
||||||
|
|
||||||
console.log('Password reset successful for user:', resetToken.userId);
|
|
||||||
return res.status(200).json({ message: 'Passwort erfolgreich zurückgesetzt' });
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Reset password error:', error);
|
|
||||||
return res.status(500).json({ message: 'Ein Fehler ist aufgetreten' });
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
exports.logout = async (req, res) => {
|
|
||||||
const authHeader = req.header('Authorization');
|
const authHeader = req.header('Authorization');
|
||||||
if (!authHeader) {
|
const token = authHeader ? authHeader.replace('Bearer ', '') : null;
|
||||||
return res.status(400).json({ message: 'Kein Token bereitgestellt' });
|
const result = await AuthService.logout(token);
|
||||||
}
|
ErrorHandler.successResponse(res, result, result.message);
|
||||||
const token = authHeader.replace('Bearer ', '');
|
});
|
||||||
try {
|
|
||||||
addTokenToBlacklist(token);
|
|
||||||
return res.status(200).json({ message: 'Logout erfolgreich' });
|
|
||||||
} catch (error) {
|
|
||||||
console.log(error);
|
|
||||||
return res.status(500).json({ message: 'Ein Fehler ist beim Logout aufgetreten' });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Export der statischen Methoden für die Routen
|
||||||
|
module.exports = {
|
||||||
|
register: AuthController.register,
|
||||||
|
login: AuthController.login,
|
||||||
|
forgotPassword: AuthController.forgotPassword,
|
||||||
|
resetPassword: AuthController.resetPassword,
|
||||||
|
logout: AuthController.logout
|
||||||
};
|
};
|
||||||
@@ -3,16 +3,7 @@ const { Op } = require('sequelize');
|
|||||||
|
|
||||||
const getAllContactPersons = async (req, res) => {
|
const getAllContactPersons = async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const today = new Date();
|
|
||||||
today.setHours(0, 0, 0, 0);
|
|
||||||
|
|
||||||
const contactPersons = await ContactPerson.findAll({
|
const contactPersons = await ContactPerson.findAll({
|
||||||
where: {
|
|
||||||
[Op.or]: [
|
|
||||||
{ expiryDate: null },
|
|
||||||
{ expiryDate: { [Op.gte]: today } }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
include: [
|
include: [
|
||||||
{
|
{
|
||||||
model: Position,
|
model: Position,
|
||||||
@@ -88,14 +79,6 @@ const filterContactPersons = async (req, res) => {
|
|||||||
const where = {};
|
const where = {};
|
||||||
const having = [];
|
const having = [];
|
||||||
|
|
||||||
// Filter für nicht abgelaufene Kontaktpersonen
|
|
||||||
const today = new Date();
|
|
||||||
today.setHours(0, 0, 0, 0);
|
|
||||||
where[Op.or] = [
|
|
||||||
{ expiryDate: null },
|
|
||||||
{ expiryDate: { [Op.gte]: today } }
|
|
||||||
];
|
|
||||||
|
|
||||||
if (config.selection.id && config.selection.id === 'all') {
|
if (config.selection.id && config.selection.id === 'all') {
|
||||||
// No additional filter needed for "all"
|
// No additional filter needed for "all"
|
||||||
} else if (config.selection.id) {
|
} else if (config.selection.id) {
|
||||||
|
|||||||
@@ -1,188 +1,32 @@
|
|||||||
const { Event, Institution, EventPlace, ContactPerson, EventType } = require('../models');
|
const EventService = require('../services/EventService');
|
||||||
const { Op } = require('sequelize');
|
const ErrorHandler = require('../utils/ErrorHandler');
|
||||||
const moment = require('moment'); // Import von Moment.js
|
|
||||||
|
|
||||||
const getAllEvents = async (req, res) => {
|
exports.getAllEvents = ErrorHandler.asyncHandler(async (req, res) => {
|
||||||
try {
|
const events = await EventService.getAllEvents();
|
||||||
const events = await Event.findAll({
|
ErrorHandler.successResponse(res, events, 'Events erfolgreich abgerufen');
|
||||||
include: [
|
|
||||||
{ model: Institution, as: 'institution' },
|
|
||||||
{ model: EventPlace, as: 'eventPlace' },
|
|
||||||
{ model: EventType, as: 'eventType' },
|
|
||||||
{ model: ContactPerson, as: 'contactPersons', through: { attributes: [] } }
|
|
||||||
],
|
|
||||||
order: ['name', 'date', 'time']
|
|
||||||
});
|
|
||||||
res.json(events);
|
|
||||||
} catch (error) {
|
|
||||||
res.status(500).json({ error: 'Failed to fetch events' });
|
|
||||||
console.error(error);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const filterEvents = async (req, res) => {
|
|
||||||
try {
|
|
||||||
const request = req.body;
|
|
||||||
const where = {
|
|
||||||
[Op.or]: [
|
|
||||||
{
|
|
||||||
date: {
|
|
||||||
[Op.or]: [
|
|
||||||
{ [Op.gte]: moment().startOf('day').toDate() },
|
|
||||||
{ [Op.eq]: null }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{ dayOfWeek: { [Op.gte]: 0 } }
|
|
||||||
]
|
|
||||||
};
|
|
||||||
const order = [
|
|
||||||
['date', 'ASC'],
|
|
||||||
['time', 'ASC']
|
|
||||||
];
|
|
||||||
|
|
||||||
if (request.id === 'all') {
|
|
||||||
const events = await Event.findAll({
|
|
||||||
where,
|
|
||||||
include: [
|
|
||||||
{ model: Institution, as: 'institution' },
|
|
||||||
{ model: EventPlace, as: 'eventPlace' },
|
|
||||||
{ model: EventType, as: 'eventType' },
|
|
||||||
{ model: ContactPerson, as: 'contactPersons', through: { attributes: [] } }
|
|
||||||
],
|
|
||||||
order: order,
|
|
||||||
logging: console.log // Log the generated SQL query
|
|
||||||
});
|
|
||||||
return res.json({ events });
|
|
||||||
}
|
|
||||||
|
|
||||||
if (request.id === 'home') {
|
|
||||||
const events = await Event.findAll({
|
|
||||||
where: {
|
|
||||||
alsoOnHomepage: 1,
|
|
||||||
date: { [Op.gte]: moment().startOf('day').toDate() }
|
|
||||||
},
|
|
||||||
include: [
|
|
||||||
{ model: Institution, as: 'institution' },
|
|
||||||
{ model: EventPlace, as: 'eventPlace' },
|
|
||||||
{ model: EventType, as: 'eventType' },
|
|
||||||
{ model: ContactPerson, as: 'contactPersons', through: { attributes: [] } },
|
|
||||||
],
|
|
||||||
order: order,
|
|
||||||
});
|
|
||||||
return res.json({ events });
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!request.id && !request.places && !request.types) {
|
|
||||||
return res.json({ events: [], places: [], types: [], contactPersons: [] });
|
|
||||||
}
|
|
||||||
|
|
||||||
if (request.id) {
|
|
||||||
where.id = request.id;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (request.places && request.places.length > 0) {
|
|
||||||
where.event_place_id = {
|
|
||||||
[Op.in]: request.places.map(id => parseInt(id))
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
if (request.types && request.types.length > 0) {
|
|
||||||
where.eventTypeId = {
|
|
||||||
[Op.in]: request.types.map(id => parseInt(id))
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
const events = await Event.findAll({
|
|
||||||
where,
|
|
||||||
include: [
|
|
||||||
{ model: Institution, as: 'institution' },
|
|
||||||
{ model: EventPlace, as: 'eventPlace' },
|
|
||||||
{ model: EventType, as: 'eventType' },
|
|
||||||
{ model: ContactPerson, as: 'contactPersons', through: { attributes: [] } }
|
|
||||||
],
|
|
||||||
order: order,
|
|
||||||
});
|
|
||||||
const displayFields = request.display ? request.display : [];
|
|
||||||
|
|
||||||
const filteredEvents = events.map(event => {
|
|
||||||
const filteredEvent = { ...event.toJSON() };
|
|
||||||
|
|
||||||
if (!displayFields.includes('name')) delete filteredEvent.name;
|
|
||||||
if (!displayFields.includes('type')) delete filteredEvent.eventType;
|
|
||||||
if (!displayFields.includes('place')) delete filteredEvent.eventPlace;
|
|
||||||
if (!displayFields.includes('description')) delete filteredEvent.description;
|
|
||||||
if (!displayFields.includes('time')) delete filteredEvent.time;
|
|
||||||
if (!displayFields.includes('time')) delete filteredEvent.endTime;
|
|
||||||
if (!displayFields.includes('contactPerson')) delete filteredEvent.contactPersons;
|
|
||||||
if (!displayFields.includes('day')) delete filteredEvent.dayOfWeek;
|
|
||||||
if (!displayFields.includes('institution')) delete filteredEvent.institution;
|
|
||||||
|
|
||||||
return filteredEvent;
|
|
||||||
});
|
});
|
||||||
|
|
||||||
res.json({ events: filteredEvents });
|
exports.getEventById = ErrorHandler.asyncHandler(async (req, res) => {
|
||||||
} catch (error) {
|
const event = await EventService.getEventById(req.params.id);
|
||||||
res.status(500).json({ error: 'Failed to filter events' });
|
ErrorHandler.successResponse(res, event, 'Event erfolgreich abgerufen');
|
||||||
console.error(error);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const createEvent = async (req, res) => {
|
|
||||||
try {
|
|
||||||
const { contactPersonIds, ...eventData } = req.body;
|
|
||||||
eventData.alsoOnHomepage = eventData.alsoOnHomepage ?? 0;
|
|
||||||
const event = await Event.create(eventData);
|
|
||||||
if (contactPersonIds) {
|
|
||||||
await event.setContactPersons(contactPersonIds);
|
|
||||||
}
|
|
||||||
res.status(201).json(event);
|
|
||||||
} catch (error) {
|
|
||||||
res.status(500).json({ error: 'Failed to create event' });
|
|
||||||
console.error(error);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const updateEvent = async (req, res) => {
|
|
||||||
try {
|
|
||||||
const { id } = req.params;
|
|
||||||
const { contactPersonIds, ...eventData } = req.body;
|
|
||||||
const event = await Event.findByPk(id);
|
|
||||||
if (!event) {
|
|
||||||
return res.status(404).json({ error: 'Event not found' });
|
|
||||||
}
|
|
||||||
await event.update(eventData);
|
|
||||||
if (contactPersonIds) {
|
|
||||||
await event.setContactPersons(contactPersonIds);
|
|
||||||
}
|
|
||||||
res.status(200).json(event);
|
|
||||||
} catch (error) {
|
|
||||||
res.status(500).json({ error: 'Failed to update event' });
|
|
||||||
console.error(error);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const deleteEvent = async (req, res) => {
|
|
||||||
try {
|
|
||||||
const { id } = req.params;
|
|
||||||
const deleted = await Event.destroy({
|
|
||||||
where: { id: id }
|
|
||||||
});
|
});
|
||||||
if (deleted) {
|
|
||||||
res.status(204).json();
|
|
||||||
} else {
|
|
||||||
res.status(404).json({ error: 'Event not found' });
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
res.status(500).json({ error: 'Failed to delete event' });
|
|
||||||
console.error(error);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
module.exports = {
|
exports.filterEvents = ErrorHandler.asyncHandler(async (req, res) => {
|
||||||
getAllEvents,
|
const result = await EventService.filterEvents(req.body);
|
||||||
createEvent,
|
ErrorHandler.successResponse(res, result, 'Events erfolgreich gefiltert');
|
||||||
updateEvent,
|
});
|
||||||
deleteEvent,
|
|
||||||
filterEvents
|
exports.createEvent = ErrorHandler.asyncHandler(async (req, res) => {
|
||||||
};
|
const event = await EventService.createEvent(req.body);
|
||||||
|
ErrorHandler.successResponse(res, event, 'Event erfolgreich erstellt', 201);
|
||||||
|
});
|
||||||
|
|
||||||
|
exports.updateEvent = ErrorHandler.asyncHandler(async (req, res) => {
|
||||||
|
const event = await EventService.updateEvent(req.params.id, req.body);
|
||||||
|
ErrorHandler.successResponse(res, event, 'Event erfolgreich aktualisiert');
|
||||||
|
});
|
||||||
|
|
||||||
|
exports.deleteEvent = ErrorHandler.asyncHandler(async (req, res) => {
|
||||||
|
const result = await EventService.deleteEvent(req.params.id);
|
||||||
|
ErrorHandler.successResponse(res, result, result.message);
|
||||||
|
});
|
||||||
@@ -1,154 +0,0 @@
|
|||||||
const { LiturgicalDay } = require('../models');
|
|
||||||
const { Op } = require('sequelize');
|
|
||||||
const axios = require('axios');
|
|
||||||
|
|
||||||
// Alle liturgischen Tage abrufen
|
|
||||||
const getAllLiturgicalDays = async (req, res) => {
|
|
||||||
try {
|
|
||||||
const days = await LiturgicalDay.findAll({
|
|
||||||
order: [['date', 'ASC']]
|
|
||||||
});
|
|
||||||
res.status(200).json(days);
|
|
||||||
} catch (error) {
|
|
||||||
console.error(error);
|
|
||||||
res.status(500).json({ message: 'Fehler beim Abrufen der liturgischen Tage' });
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Eindeutige Namen für Multiselect abrufen
|
|
||||||
const getLiturgicalDayNames = async (req, res) => {
|
|
||||||
try {
|
|
||||||
const days = await LiturgicalDay.findAll({
|
|
||||||
attributes: ['dayName'],
|
|
||||||
group: ['dayName'],
|
|
||||||
order: [['dayName', 'ASC']]
|
|
||||||
});
|
|
||||||
const names = days.map(day => day.dayName);
|
|
||||||
res.status(200).json(names);
|
|
||||||
} catch (error) {
|
|
||||||
console.error(error);
|
|
||||||
res.status(500).json({ message: 'Fehler beim Abrufen der Tag-Namen' });
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// HTML von liturgischem Kalender parsen und in DB speichern
|
|
||||||
const loadLiturgicalYear = async (req, res) => {
|
|
||||||
const { year } = req.body;
|
|
||||||
|
|
||||||
if (!year) {
|
|
||||||
return res.status(400).json({ message: 'Jahr ist erforderlich' });
|
|
||||||
}
|
|
||||||
|
|
||||||
const currentYear = new Date().getFullYear();
|
|
||||||
if (year < currentYear || year > currentYear + 2) {
|
|
||||||
return res.status(400).json({ message: 'Jahr muss zwischen aktuellem Jahr und 2 Jahren in der Zukunft liegen' });
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
const url = `https://www.eike-fleer.de/liturgischer-kalender/${year}.htm`;
|
|
||||||
const response = await axios.get(url, {
|
|
||||||
headers: {
|
|
||||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
const html = response.data;
|
|
||||||
|
|
||||||
// Parse HTML - suche nach Tabellenzeilen mit Datum und Name
|
|
||||||
// Format: "DD.MM.YYYY DayName"
|
|
||||||
const regex = /(\d{2}\.\d{2}\.\d{4})\s*(?: |\s)+(.+?)(?:<\/|$)/gi;
|
|
||||||
const matches = [...html.matchAll(regex)];
|
|
||||||
|
|
||||||
const liturgicalDays = [];
|
|
||||||
|
|
||||||
for (const match of matches) {
|
|
||||||
const dateStr = match[1]; // DD.MM.YYYY
|
|
||||||
let dayName = match[2];
|
|
||||||
|
|
||||||
// Bereinige den Tag-Namen von HTML-Tags und Entities
|
|
||||||
dayName = dayName
|
|
||||||
.replace(/<[^>]*>/g, '') // Entferne HTML-Tags
|
|
||||||
.replace(/ /g, ' ') // Ersetze
|
|
||||||
.replace(/ä/g, 'ä')
|
|
||||||
.replace(/ö/g, 'ö')
|
|
||||||
.replace(/ü/g, 'ü')
|
|
||||||
.replace(/Ä/g, 'Ä')
|
|
||||||
.replace(/Ö/g, 'Ö')
|
|
||||||
.replace(/Ü/g, 'Ü')
|
|
||||||
.replace(/ß/g, 'ß')
|
|
||||||
.trim();
|
|
||||||
|
|
||||||
// Konvertiere Datum von DD.MM.YYYY zu YYYY-MM-DD
|
|
||||||
const [day, month, yearPart] = dateStr.split('.');
|
|
||||||
const isoDate = `${yearPart}-${month}-${day}`;
|
|
||||||
|
|
||||||
if (dayName && dayName.length > 0) {
|
|
||||||
liturgicalDays.push({
|
|
||||||
date: isoDate,
|
|
||||||
dayName: dayName
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (liturgicalDays.length === 0) {
|
|
||||||
return res.status(500).json({ message: 'Keine liturgischen Tage gefunden. Möglicherweise hat sich das HTML-Format geändert.' });
|
|
||||||
}
|
|
||||||
|
|
||||||
// Speichere oder aktualisiere die Einträge
|
|
||||||
for (const day of liturgicalDays) {
|
|
||||||
await LiturgicalDay.upsert({
|
|
||||||
date: day.date,
|
|
||||||
dayName: day.dayName
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
res.status(200).json({
|
|
||||||
message: `${liturgicalDays.length} liturgische Tage für ${year} erfolgreich geladen`,
|
|
||||||
count: liturgicalDays.length
|
|
||||||
});
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Fehler beim Laden der liturgischen Tage:', error);
|
|
||||||
if (error.response && error.response.status === 404) {
|
|
||||||
return res.status(404).json({ message: `Liturgischer Kalender für ${year} nicht gefunden` });
|
|
||||||
}
|
|
||||||
res.status(500).json({ message: 'Fehler beim Laden der liturgischen Tage', error: error.message });
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Einzelnen Tag erstellen
|
|
||||||
const createLiturgicalDay = async (req, res) => {
|
|
||||||
try {
|
|
||||||
const day = await LiturgicalDay.create(req.body);
|
|
||||||
res.status(201).json(day);
|
|
||||||
} catch (error) {
|
|
||||||
console.error(error);
|
|
||||||
res.status(500).json({ message: 'Fehler beim Erstellen des liturgischen Tags' });
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Tag löschen
|
|
||||||
const deleteLiturgicalDay = async (req, res) => {
|
|
||||||
try {
|
|
||||||
const { id } = req.params;
|
|
||||||
const deleted = await LiturgicalDay.destroy({
|
|
||||||
where: { id }
|
|
||||||
});
|
|
||||||
if (deleted) {
|
|
||||||
res.status(200).json({ message: 'Liturgischer Tag erfolgreich gelöscht' });
|
|
||||||
} else {
|
|
||||||
res.status(404).json({ message: 'Liturgischer Tag nicht gefunden' });
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
console.error(error);
|
|
||||||
res.status(500).json({ message: 'Fehler beim Löschen des liturgischen Tags' });
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
getAllLiturgicalDays,
|
|
||||||
getLiturgicalDayNames,
|
|
||||||
loadLiturgicalYear,
|
|
||||||
createLiturgicalDay,
|
|
||||||
deleteLiturgicalDay
|
|
||||||
};
|
|
||||||
|
|
||||||
@@ -1,30 +1,12 @@
|
|||||||
const { MenuItem } = require('../models');
|
const MenuDataService = require('../services/MenuDataService');
|
||||||
const fetchMenuData = require('../utils/fetchMenuData');
|
const ErrorHandler = require('../utils/ErrorHandler');
|
||||||
|
|
||||||
exports.getMenuData = async (req, res) => {
|
exports.getMenuData = ErrorHandler.asyncHandler(async (req, res) => {
|
||||||
try {
|
const menuData = await MenuDataService.getMenuData();
|
||||||
const menuData = await fetchMenuData();
|
ErrorHandler.successResponse(res, menuData, 'Menü-Daten erfolgreich abgerufen');
|
||||||
res.json(menuData);
|
});
|
||||||
} catch (error) {
|
|
||||||
res.status(500).send('Error fetching menu data');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
exports.saveMenuData = async (req, res) => {
|
exports.saveMenuData = ErrorHandler.asyncHandler(async (req, res) => {
|
||||||
try {
|
const result = await MenuDataService.saveMenuData(req.body);
|
||||||
const menuData = req.body;
|
ErrorHandler.successResponse(res, result, result.message);
|
||||||
const adjustedMenuData = menuData.map(item => {
|
});
|
||||||
item.parent_id = item.parent_id < 0 ? null : item.parent_id;
|
|
||||||
return item;
|
|
||||||
})
|
|
||||||
.sort((a, b) => (a.parent_id === null ? -1 : 1) - (b.parent_id === null ? -1 : 1));
|
|
||||||
await MenuItem.destroy({ where: {} });
|
|
||||||
for (const item of adjustedMenuData) {
|
|
||||||
await MenuItem.create(item);
|
|
||||||
}
|
|
||||||
res.status(200).send('Menü-Daten erfolgreich gespeichert');
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Fehler beim Speichern der Menü-Daten:', error);
|
|
||||||
res.status(500).send('Fehler beim Speichern der Menü-Daten');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
@@ -1,48 +1,27 @@
|
|||||||
// controllers/pageController.js
|
const PageService = require('../services/PageService');
|
||||||
const { Page } = require('../models');
|
const ErrorHandler = require('../utils/ErrorHandler');
|
||||||
|
|
||||||
exports.getMenuData = async (req, res) => {
|
exports.getMenuData = ErrorHandler.asyncHandler(async (req, res) => {
|
||||||
try {
|
const pages = await PageService.getAllPages();
|
||||||
const pages = await Page.findAll({
|
ErrorHandler.successResponse(res, pages, 'Seiten erfolgreich abgerufen');
|
||||||
attributes: ['link', 'name']
|
|
||||||
});
|
});
|
||||||
res.json(pages);
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Fehler beim Abrufen der Seiten:', error);
|
|
||||||
res.status(500).json({ message: 'Fehler beim Abrufen der Seiten' });
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
exports.getPageContent = async (req, res) => {
|
exports.getPageContent = ErrorHandler.asyncHandler(async (req, res) => {
|
||||||
try {
|
const result = await PageService.getPageContent(req.query.link);
|
||||||
const page = await Page.findOne({
|
ErrorHandler.successResponse(res, result, 'Seiteninhalt erfolgreich abgerufen');
|
||||||
where: { link: req.query.link }
|
|
||||||
});
|
});
|
||||||
if (page) {
|
|
||||||
res.json({ content: page.content });
|
|
||||||
} else {
|
|
||||||
res.json({ content: "" });
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Fehler beim Laden des Seiteninhalts:', error);
|
|
||||||
res.status(500).json({ message: 'Fehler beim Laden des Seiteninhalts' });
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
exports.savePageContent = async (req, res) => {
|
exports.savePageContent = ErrorHandler.asyncHandler(async (req, res) => {
|
||||||
try {
|
const result = await PageService.savePageContent(req.body);
|
||||||
const { link, name, content } = req.body;
|
ErrorHandler.successResponse(res, result, result.message);
|
||||||
let page = await Page.findOne({ where: { link } });
|
});
|
||||||
if (page) {
|
|
||||||
page.content = content;
|
exports.getPageById = ErrorHandler.asyncHandler(async (req, res) => {
|
||||||
page.name = name;
|
const page = await PageService.getPageById(req.params.id);
|
||||||
} else {
|
ErrorHandler.successResponse(res, page, 'Seite erfolgreich abgerufen');
|
||||||
page = await Page.create({ link, name, content });
|
});
|
||||||
}
|
|
||||||
await page.save();
|
exports.deletePage = ErrorHandler.asyncHandler(async (req, res) => {
|
||||||
res.json({ message: 'Seiteninhalt gespeichert', page });
|
const result = await PageService.deletePage(req.params.id);
|
||||||
} catch (error) {
|
ErrorHandler.successResponse(res, result, result.message);
|
||||||
console.error('Fehler beim Speichern des Seiteninhalts:', error);
|
});
|
||||||
res.status(500).json({ message: 'Fehler beim Speichern des Seiteninhalts' });
|
|
||||||
}
|
|
||||||
};
|
|
||||||
@@ -1,104 +1,42 @@
|
|||||||
const { User } = require('../models');
|
const UserService = require('../services/UserService');
|
||||||
|
const UserValidator = require('../validators/UserValidator');
|
||||||
|
const ErrorHandler = require('../utils/ErrorHandler');
|
||||||
|
|
||||||
exports.getAllUsers = async (req, res) => {
|
exports.getAllUsers = ErrorHandler.asyncHandler(async (req, res) => {
|
||||||
try {
|
const users = await UserService.getAllUsers();
|
||||||
const users = await User.findAll({
|
ErrorHandler.successResponse(res, users, 'Benutzer erfolgreich abgerufen');
|
||||||
order: [['name', 'ASC']],
|
|
||||||
attributes: ['id', 'name', 'email', 'active', 'created_at'] // Passwort ausschließen
|
|
||||||
});
|
});
|
||||||
res.status(200).json(users);
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Error fetching users:', error);
|
|
||||||
res.status(500).json({ message: 'Error fetching users' });
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
exports.getUserById = async (req, res) => {
|
exports.getUserById = ErrorHandler.asyncHandler(async (req, res) => {
|
||||||
try {
|
UserValidator.validateId(req.params.id);
|
||||||
const user = await User.findByPk(req.params.id, {
|
const user = await UserService.getUserById(req.params.id);
|
||||||
attributes: ['id', 'name', 'email', 'active', 'created_at'] // Passwort ausschließen
|
ErrorHandler.successResponse(res, user, 'Benutzer erfolgreich abgerufen');
|
||||||
});
|
});
|
||||||
if (user) {
|
|
||||||
res.status(200).json(user);
|
|
||||||
} else {
|
|
||||||
res.status(404).json({ message: 'User not found' });
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Error fetching user:', error);
|
|
||||||
res.status(500).json({ message: 'Error fetching user' });
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
exports.createUser = async (req, res) => {
|
exports.createUser = ErrorHandler.asyncHandler(async (req, res) => {
|
||||||
try {
|
UserValidator.validateCreateUser(req.body);
|
||||||
const user = await User.create(req.body);
|
const user = await UserService.createUser(req.body);
|
||||||
|
ErrorHandler.successResponse(res, user, 'Benutzer erfolgreich erstellt', 201);
|
||||||
|
});
|
||||||
|
|
||||||
// Sichere User-Daten zurückgeben (ohne Passwort)
|
exports.updateUser = ErrorHandler.asyncHandler(async (req, res) => {
|
||||||
const safeUser = {
|
UserValidator.validateId(req.params.id);
|
||||||
id: user.id,
|
UserValidator.validateUpdateUser(req.body);
|
||||||
name: user.name,
|
const user = await UserService.updateUser(req.params.id, req.body);
|
||||||
email: user.email,
|
ErrorHandler.successResponse(res, user, 'Benutzer erfolgreich aktualisiert');
|
||||||
active: user.active,
|
});
|
||||||
created_at: user.created_at
|
|
||||||
};
|
|
||||||
|
|
||||||
res.status(201).json(safeUser);
|
exports.deleteUser = ErrorHandler.asyncHandler(async (req, res) => {
|
||||||
} catch (error) {
|
UserValidator.validateId(req.params.id);
|
||||||
console.error('Error creating user:', error);
|
await UserService.deleteUser(req.params.id);
|
||||||
res.status(500).json({ message: 'Error creating user' });
|
ErrorHandler.successResponse(res, null, 'Benutzer erfolgreich gelöscht');
|
||||||
}
|
});
|
||||||
};
|
|
||||||
|
|
||||||
exports.updateUser = async (req, res) => {
|
// Neue Route für Passwort-Änderung
|
||||||
try {
|
exports.changePassword = ErrorHandler.asyncHandler(async (req, res) => {
|
||||||
const user = await User.findByPk(req.params.id);
|
const { currentPassword, newPassword } = req.body;
|
||||||
if (user) {
|
UserValidator.validateId(req.params.id);
|
||||||
// Erstelle eine Kopie der Request-Daten ohne sensible Felder
|
UserValidator.validatePasswordChange(currentPassword, newPassword);
|
||||||
const updateData = { ...req.body };
|
await UserService.changePassword(req.params.id, currentPassword, newPassword);
|
||||||
|
ErrorHandler.successResponse(res, null, 'Passwort erfolgreich geändert');
|
||||||
// Entferne sensible Felder, die niemals über diese Route geändert werden dürfen
|
});
|
||||||
delete updateData.password;
|
|
||||||
delete updateData.id;
|
|
||||||
delete updateData.created_at;
|
|
||||||
|
|
||||||
// Setze updated_at auf aktuelle Zeit
|
|
||||||
updateData.updated_at = new Date();
|
|
||||||
|
|
||||||
// Logging für Debugging
|
|
||||||
console.log('Updating user:', req.params.id, 'with data:', updateData);
|
|
||||||
|
|
||||||
await user.update(updateData);
|
|
||||||
|
|
||||||
// Sichere User-Daten zurückgeben (ohne Passwort)
|
|
||||||
const safeUser = {
|
|
||||||
id: user.id,
|
|
||||||
name: user.name,
|
|
||||||
email: user.email,
|
|
||||||
active: user.active,
|
|
||||||
created_at: user.created_at
|
|
||||||
};
|
|
||||||
|
|
||||||
res.status(200).json(safeUser);
|
|
||||||
} else {
|
|
||||||
res.status(404).json({ message: 'User not found' });
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Error updating user:', error);
|
|
||||||
res.status(500).json({ message: 'Error updating user' });
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
exports.deleteUser = async (req, res) => {
|
|
||||||
try {
|
|
||||||
const user = await User.findByPk(req.params.id);
|
|
||||||
if (user) {
|
|
||||||
await user.destroy();
|
|
||||||
res.status(200).json({ message: 'User deleted successfully' });
|
|
||||||
} else {
|
|
||||||
res.status(404).json({ message: 'User not found' });
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Error deleting user:', error);
|
|
||||||
res.status(500).json({ message: 'Error deleting user' });
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,28 +0,0 @@
|
|||||||
'use strict';
|
|
||||||
|
|
||||||
/** @type {import('sequelize-cli').Migration} */
|
|
||||||
module.exports = {
|
|
||||||
async up (queryInterface, Sequelize) {
|
|
||||||
await queryInterface.createTable('liturgical_days', {
|
|
||||||
id: {
|
|
||||||
type: Sequelize.INTEGER,
|
|
||||||
primaryKey: true,
|
|
||||||
autoIncrement: true,
|
|
||||||
allowNull: false
|
|
||||||
},
|
|
||||||
date: {
|
|
||||||
type: Sequelize.DATEONLY,
|
|
||||||
allowNull: false,
|
|
||||||
unique: true
|
|
||||||
},
|
|
||||||
dayName: {
|
|
||||||
type: Sequelize.STRING,
|
|
||||||
allowNull: false
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
async down (queryInterface, Sequelize) {
|
|
||||||
await queryInterface.dropTable('liturgical_days');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
'use strict';
|
|
||||||
|
|
||||||
/** @type {import('sequelize-cli').Migration} */
|
|
||||||
module.exports = {
|
|
||||||
up: async (queryInterface, Sequelize) => {
|
|
||||||
await queryInterface.addColumn('worships', 'organ_playing', {
|
|
||||||
type: Sequelize.STRING,
|
|
||||||
allowNull: true
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
down: async (queryInterface, Sequelize) => {
|
|
||||||
await queryInterface.removeColumn('worships', 'organ_playing');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
'use strict';
|
|
||||||
|
|
||||||
/** @type {import('sequelize-cli').Migration} */
|
|
||||||
module.exports = {
|
|
||||||
up: async (queryInterface, Sequelize) => {
|
|
||||||
await queryInterface.addColumn('worships', 'approved', {
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
allowNull: false,
|
|
||||||
defaultValue: false
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
down: async (queryInterface, Sequelize) => {
|
|
||||||
await queryInterface.removeColumn('worships', 'approved');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
@@ -25,10 +25,6 @@ module.exports = (sequelize) => {
|
|||||||
email: {
|
email: {
|
||||||
type: DataTypes.STRING,
|
type: DataTypes.STRING,
|
||||||
allowNull: true
|
allowNull: true
|
||||||
},
|
|
||||||
expiryDate: {
|
|
||||||
type: DataTypes.DATEONLY,
|
|
||||||
allowNull: true
|
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
tableName: 'contact_persons',
|
tableName: 'contact_persons',
|
||||||
|
|||||||
@@ -1,24 +0,0 @@
|
|||||||
module.exports = (sequelize, DataTypes) => {
|
|
||||||
const LiturgicalDay = sequelize.define('LiturgicalDay', {
|
|
||||||
id: {
|
|
||||||
type: DataTypes.INTEGER,
|
|
||||||
primaryKey: true,
|
|
||||||
autoIncrement: true
|
|
||||||
},
|
|
||||||
date: {
|
|
||||||
type: DataTypes.DATEONLY,
|
|
||||||
allowNull: false,
|
|
||||||
unique: true
|
|
||||||
},
|
|
||||||
dayName: {
|
|
||||||
type: DataTypes.STRING,
|
|
||||||
allowNull: false
|
|
||||||
}
|
|
||||||
}, {
|
|
||||||
tableName: 'liturgical_days',
|
|
||||||
timestamps: false
|
|
||||||
});
|
|
||||||
|
|
||||||
return LiturgicalDay;
|
|
||||||
};
|
|
||||||
|
|
||||||
@@ -61,17 +61,6 @@ module.exports = (sequelize) => {
|
|||||||
allowNull: true,
|
allowNull: true,
|
||||||
field: 'sacristan_service'
|
field: 'sacristan_service'
|
||||||
},
|
},
|
||||||
organPlaying: {
|
|
||||||
type: DataTypes.STRING,
|
|
||||||
allowNull: true,
|
|
||||||
field: 'organ_playing'
|
|
||||||
},
|
|
||||||
approved: {
|
|
||||||
type: DataTypes.BOOLEAN,
|
|
||||||
defaultValue: false,
|
|
||||||
allowNull: false,
|
|
||||||
field: 'approved'
|
|
||||||
},
|
|
||||||
}, {
|
}, {
|
||||||
tableName: 'worships',
|
tableName: 'worships',
|
||||||
timestamps: true
|
timestamps: true
|
||||||
|
|||||||
26017
package-lock.json
generated
26017
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -5,7 +5,7 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"serve": "vue-cli-service serve",
|
"serve": "vue-cli-service serve",
|
||||||
"build": "vue-cli-service build && npm run copy-dist",
|
"build": "vue-cli-service build && npm run copy-dist",
|
||||||
"copy-dist": "cp -r dist/* public/",
|
"copy-dist": "rm -rf public/* && cp -r dist/* public/",
|
||||||
"lint": "vue-cli-service lint"
|
"lint": "vue-cli-service lint"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -26,7 +26,7 @@
|
|||||||
"@tiptap/extension-underline": "^2.4.0",
|
"@tiptap/extension-underline": "^2.4.0",
|
||||||
"@tiptap/starter-kit": "^2.4.0",
|
"@tiptap/starter-kit": "^2.4.0",
|
||||||
"@tiptap/vue-3": "^2.4.0",
|
"@tiptap/vue-3": "^2.4.0",
|
||||||
"@vue/cli": "^4.2.2",
|
"@vue/cli": "^5.0.8",
|
||||||
"axios": "^1.7.2",
|
"axios": "^1.7.2",
|
||||||
"bcryptjs": "^2.4.3",
|
"bcryptjs": "^2.4.3",
|
||||||
"body-parser": "^1.20.2",
|
"body-parser": "^1.20.2",
|
||||||
@@ -34,12 +34,10 @@
|
|||||||
"cors": "^2.8.5",
|
"cors": "^2.8.5",
|
||||||
"crypto": "^1.0.1",
|
"crypto": "^1.0.1",
|
||||||
"date-fns": "^3.6.0",
|
"date-fns": "^3.6.0",
|
||||||
"docx": "^9.5.1",
|
|
||||||
"dotenv": "^16.4.5",
|
"dotenv": "^16.4.5",
|
||||||
"express": "^4.19.2",
|
"express": "^4.19.2",
|
||||||
"file-saver": "^2.0.5",
|
"file-saver": "^2.0.5",
|
||||||
"jsonwebtoken": "^9.0.2",
|
"jsonwebtoken": "^9.0.2",
|
||||||
"mammoth": "^1.11.0",
|
|
||||||
"moment": "^2.30.1",
|
"moment": "^2.30.1",
|
||||||
"multer": "^1.4.5-lts.1",
|
"multer": "^1.4.5-lts.1",
|
||||||
"mysql2": "^3.10.1",
|
"mysql2": "^3.10.1",
|
||||||
|
|||||||
1
public/css/123.c09125f7.css
Normal file
1
public/css/123.c09125f7.css
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.privacy-policy[data-v-91660a08]{max-width:800px;margin:auto;padding:20px}h1[data-v-91660a08],h2[data-v-91660a08],h3[data-v-91660a08],h4[data-v-91660a08],h5[data-v-91660a08]{margin-top:20px;color:#333}p[data-v-91660a08]{line-height:1.6}ul[data-v-91660a08]{margin:10px 0;padding-left:20px}ul li[data-v-91660a08]{list-style-type:disc}a[data-v-91660a08]{color:#007bff;text-decoration:none}a[data-v-91660a08]:hover{text-decoration:underline}
|
||||||
1
public/css/150.9419ef08.css
Normal file
1
public/css/150.9419ef08.css
Normal file
@@ -0,0 +1 @@
|
|||||||
|
table.worships[data-v-6bd31626]{border-collapse:collapse;width:100%}table.worships td[data-v-6bd31626]{border:1px solid #000;text-align:center}h3[data-v-6bd31626]{margin:0}table.worships td div[data-v-6bd31626]{margin:5px}.highlight-time[data-v-6bd31626]{text-decoration:underline}.neighborhood-invitation[data-v-6bd31626]{font-weight:700;color:#0020e0}a[data-v-6bd31626]{color:#0020e0}.internal-information[data-v-6bd31626]{color:#e45;font-style:italic}.image[data-v-9b711a1e]{max-width:400px;max-height:300px}.event-name[data-v-708e6f45]{font-weight:700}.event-table[data-v-708e6f45]{border-collapse:collapse}.event-table td[data-v-708e6f45]{border:1px solid #000}.homepage[data-v-708e6f45]{border:1px solid #9400ff;padding:.5em;text-align:center}.description[data-v-708e6f45]{padding:.5em 0}.event-image>img[data-v-708e6f45]{max-width:12em;max-height:12em}.contact-box p[data-v-0cc91918]{margin:0}.bottom-margin[data-v-0cc91918]{margin-bottom:1rem}span[data-v-2bbf7aa9]{cursor:pointer;color:blue;text-decoration:underline}.previewinfo[data-v-9a71cbf6]{background-color:#000;color:#d00000;position:absolute;top:93px;left:0;padding:2px 10px;font-weight:700}
|
||||||
1
public/css/183.43cc4f81.css
Normal file
1
public/css/183.43cc4f81.css
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.user-administration[data-v-a495c756]{padding:20px}.user-administration h1[data-v-a495c756],.user-administration h2[data-v-a495c756]{margin-bottom:20px}.user-administration form[data-v-a495c756]{display:flex;flex-direction:column;margin-bottom:20px}.user-administration label[data-v-a495c756]{margin-top:10px}.user-administration input[type=email][data-v-a495c756],.user-administration input[type=password][data-v-a495c756],.user-administration input[type=text][data-v-a495c756]{padding:5px;font-size:16px}.user-administration ul[data-v-a495c756]{list-style-type:none;padding:0}.user-administration li[data-v-a495c756]{padding:10px;border-bottom:1px solid #ddd;cursor:pointer}.user-administration li[data-v-a495c756]:hover{background-color:#f0f0f0}
|
||||||
1
public/css/187.f4e467b4.css
Normal file
1
public/css/187.f4e467b4.css
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.event-places-management[data-v-4e6631f7]{max-width:600px;margin:auto;padding:20px;border:1px solid #ccc;border-radius:5px}form[data-v-4e6631f7]{display:flex;flex-direction:column;margin-bottom:20px}label[data-v-4e6631f7]{margin-top:10px}input[data-v-4e6631f7]{margin-top:5px;margin-bottom:10px;padding:8px}button[data-v-4e6631f7]{margin-top:10px;padding:10px}table[data-v-4e6631f7]{width:100%;border-collapse:collapse;margin-top:20px}td[data-v-4e6631f7],th[data-v-4e6631f7]{border:1px solid #ccc;padding:10px;text-align:left}th[data-v-4e6631f7]{background-color:#f4f4f4}
|
||||||
1
public/css/23.78894bf8.css
Normal file
1
public/css/23.78894bf8.css
Normal file
@@ -0,0 +1 @@
|
|||||||
|
div[data-v-68b32234]{padding:20px}ul[data-v-68b32234]{list-style:none;padding:0;margin:0}li[data-v-68b32234]{padding:0;margin:0}
|
||||||
1
public/css/246.1e896a7d.css
Normal file
1
public/css/246.1e896a7d.css
Normal file
File diff suppressed because one or more lines are too long
1
public/css/260.38c6ce8f.css
Normal file
1
public/css/260.38c6ce8f.css
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.dialog-overlay[data-v-64c2e06a]{top:calc(50% - 25em);left:5%;width:90%;height:50em;background:rgba(0,0,0,.5);display:flex;justify-content:center;align-items:center;overflow:auto}.dialog[data-v-64c2e06a]{background:#fff;padding:20px;border-radius:5px;max-width:400px;width:100%;text-align:center}button[data-v-64c2e06a]{margin-top:20px}
|
||||||
1
public/css/281.2d192723.css
Normal file
1
public/css/281.2d192723.css
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.forgot-password[data-v-c694cf4e]{max-width:400px;margin:auto}form[data-v-c694cf4e]{display:flex;flex-direction:column}label[data-v-c694cf4e]{margin-top:10px}button[data-v-c694cf4e]{margin-top:20px}.dialog[data-v-c694cf4e]{position:fixed;top:0;left:0;right:0;bottom:0;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.4)}.dialog-content[data-v-c694cf4e]{background:#fff;padding:16px;border-radius:4px;max-width:420px;width:90%}
|
||||||
1
public/css/289.56e284e6.css
Normal file
1
public/css/289.56e284e6.css
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.right-column h2[data-v-d1b58e08]{text-align:center;color:#000}.right-column img[data-v-d1b58e08]{display:block;margin:0 auto;max-width:100%;height:auto}
|
||||||
1
public/css/299.5760daa0.css
Normal file
1
public/css/299.5760daa0.css
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.menu-management[data-v-0e6a0522]{width:100%;margin:auto}.button-container[data-v-0e6a0522]{display:inline-flex;gap:10px;margin-bottom:20px}.tree-view[data-v-0e6a0522]{margin-top:20px}.tree-view ul[data-v-0e6a0522]{list-style-type:none;padding:0}.tree-view li[data-v-0e6a0522]{margin-bottom:5px;padding-left:20px}.tree-view .menu-item[data-v-0e6a0522]{display:inline-flex;width:100%;justify-content:space-between;align-items:center}.tree-view span[data-v-0e6a0522]{cursor:pointer;color:#000}.tree-view button[data-v-0e6a0522]{border:none;height:1.6em;padding:0 .5em;margin:1px;border-radius:5px}.tree-view span[data-v-0e6a0522]:hover{text-decoration:underline}.edit-form[data-v-0e6a0522]{margin-top:20px}.edit-form label[data-v-0e6a0522]{display:block;margin-bottom:5px;font-weight:700}.edit-form input[data-v-0e6a0522]:not([type=checkbox]){display:block;margin-bottom:10px}.edit-form .checkbox-container[data-v-0e6a0522]{display:flex;flex-direction:column;margin-right:10px}.edit-form .order-id[data-v-0e6a0522]{width:50px}.edit-form button[data-v-0e6a0522]{margin-top:5px}
|
||||||
1
public/css/324.2d192723.css
Normal file
1
public/css/324.2d192723.css
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.forgot-password[data-v-c694cf4e]{max-width:400px;margin:auto}form[data-v-c694cf4e]{display:flex;flex-direction:column}label[data-v-c694cf4e]{margin-top:10px}button[data-v-c694cf4e]{margin-top:20px}.dialog[data-v-c694cf4e]{position:fixed;top:0;left:0;right:0;bottom:0;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.4)}.dialog-content[data-v-c694cf4e]{background:#fff;padding:16px;border-radius:4px;max-width:420px;width:90%}
|
||||||
1
public/css/331.65e45809.css
Normal file
1
public/css/331.65e45809.css
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.register[data-v-63b3c0a3]{max-width:400px;margin:auto}form[data-v-63b3c0a3]{display:flex;flex-direction:column}label[data-v-63b3c0a3]{margin-top:10px}button[data-v-63b3c0a3]{margin-top:20px}.dialog[data-v-63b3c0a3]{position:fixed;top:0;left:0;right:0;bottom:0;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.4)}.dialog-content[data-v-63b3c0a3]{background:#fff;padding:16px;border-radius:4px;max-width:420px;width:90%}
|
||||||
1
public/css/353.9504c97b.css
Normal file
1
public/css/353.9504c97b.css
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.upload-files[data-v-f2694614]{width:100%;margin:auto}.upload-files div[data-v-f2694614]{margin-bottom:10px}.file-list[data-v-f2694614]{list-style-type:none;padding:0;margin-top:20px}.file-list li[data-v-f2694614]{border-bottom:1px solid #ddd;padding:10px 0}.file-info[data-v-f2694614]{display:flex;justify-content:space-between;cursor:pointer}.file-title[data-v-f2694614]{font-weight:700}.file-name[data-v-f2694614]{color:#555}.file-date[data-v-f2694614]{color:#888}
|
||||||
1
public/css/355.c09125f7.css
Normal file
1
public/css/355.c09125f7.css
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.privacy-policy[data-v-91660a08]{max-width:800px;margin:auto;padding:20px}h1[data-v-91660a08],h2[data-v-91660a08],h3[data-v-91660a08],h4[data-v-91660a08],h5[data-v-91660a08]{margin-top:20px;color:#333}p[data-v-91660a08]{line-height:1.6}ul[data-v-91660a08]{margin:10px 0;padding-left:20px}ul li[data-v-91660a08]{list-style-type:disc}a[data-v-91660a08]{color:#007bff;text-decoration:none}a[data-v-91660a08]:hover{text-decoration:underline}
|
||||||
1
public/css/362.f4e467b4.css
Normal file
1
public/css/362.f4e467b4.css
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.event-places-management[data-v-4e6631f7]{max-width:600px;margin:auto;padding:20px;border:1px solid #ccc;border-radius:5px}form[data-v-4e6631f7]{display:flex;flex-direction:column;margin-bottom:20px}label[data-v-4e6631f7]{margin-top:10px}input[data-v-4e6631f7]{margin-top:5px;margin-bottom:10px;padding:8px}button[data-v-4e6631f7]{margin-top:10px;padding:10px}table[data-v-4e6631f7]{width:100%;border-collapse:collapse;margin-top:20px}td[data-v-4e6631f7],th[data-v-4e6631f7]{border:1px solid #ccc;padding:10px;text-align:left}th[data-v-4e6631f7]{background-color:#f4f4f4}
|
||||||
1
public/css/39.be11324e.css
Normal file
1
public/css/39.be11324e.css
Normal file
@@ -0,0 +1 @@
|
|||||||
|
div[data-v-334e7b82]{padding:20px}
|
||||||
1
public/css/398.63d77ea0.css
Normal file
1
public/css/398.63d77ea0.css
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.reset-password[data-v-e49a033c]{max-width:400px;margin:auto}form[data-v-e49a033c]{display:flex;flex-direction:column}label[data-v-e49a033c]{margin-top:10px}input[data-v-e49a033c]{margin-top:5px;padding:8px;border:1px solid #ddd;border-radius:4px}button[data-v-e49a033c]{margin-top:20px;padding:10px;background-color:#007bff;color:#fff;border:none;border-radius:4px;cursor:pointer}button[data-v-e49a033c]:disabled{background-color:#ccc;cursor:not-allowed}.dialog[data-v-e49a033c]{position:fixed;top:0;left:0;right:0;bottom:0;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.4)}.dialog-content[data-v-e49a033c]{background:#fff;padding:16px;border-radius:4px;max-width:420px;width:90%}
|
||||||
1
public/css/404.4bd58cd7.css
Normal file
1
public/css/404.4bd58cd7.css
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.institution-management[data-v-ff992c44]{max-width:600px;margin:auto;padding:20px;border:1px solid #ccc;border-radius:5px}form[data-v-ff992c44]{display:flex;flex-direction:column;margin-bottom:20px}label[data-v-ff992c44]{margin-top:10px}input[data-v-ff992c44]{margin-top:5px;margin-bottom:10px;padding:8px}button[data-v-ff992c44]{margin-top:10px;padding:10px}table[data-v-ff992c44]{width:100%;border-collapse:collapse;margin-top:20px}td[data-v-ff992c44],th[data-v-ff992c44]{border:1px solid #ccc;padding:10px;text-align:left}th[data-v-ff992c44]{background-color:#f4f4f4}
|
||||||
1
public/css/408.38c6ce8f.css
Normal file
1
public/css/408.38c6ce8f.css
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.dialog-overlay[data-v-64c2e06a]{top:calc(50% - 25em);left:5%;width:90%;height:50em;background:rgba(0,0,0,.5);display:flex;justify-content:center;align-items:center;overflow:auto}.dialog[data-v-64c2e06a]{background:#fff;padding:20px;border-radius:5px;max-width:400px;width:100%;text-align:center}button[data-v-64c2e06a]{margin-top:20px}
|
||||||
1
public/css/423.63d77ea0.css
Normal file
1
public/css/423.63d77ea0.css
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.reset-password[data-v-e49a033c]{max-width:400px;margin:auto}form[data-v-e49a033c]{display:flex;flex-direction:column}label[data-v-e49a033c]{margin-top:10px}input[data-v-e49a033c]{margin-top:5px;padding:8px;border:1px solid #ddd;border-radius:4px}button[data-v-e49a033c]{margin-top:20px;padding:10px;background-color:#007bff;color:#fff;border:none;border-radius:4px;cursor:pointer}button[data-v-e49a033c]:disabled{background-color:#ccc;cursor:not-allowed}.dialog[data-v-e49a033c]{position:fixed;top:0;left:0;right:0;bottom:0;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.4)}.dialog-content[data-v-e49a033c]{background:#fff;padding:16px;border-radius:4px;max-width:420px;width:90%}
|
||||||
1
public/css/441.bdb3d500.css
Normal file
1
public/css/441.bdb3d500.css
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.position-management[data-v-1684a375]{max-width:600px;margin:auto;padding:20px;border:1px solid #ccc;border-radius:5px}form[data-v-1684a375]{display:flex;flex-direction:column;margin-bottom:20px}label[data-v-1684a375]{margin-top:10px}input[data-v-1684a375]{margin-top:5px;margin-bottom:10px;padding:8px}button[data-v-1684a375]{margin-top:10px;padding:10px}table[data-v-1684a375]{width:100%;border-collapse:collapse;margin-top:20px}td[data-v-1684a375],th[data-v-1684a375]{border:1px solid #ccc;padding:10px;text-align:left}th[data-v-1684a375]{background-color:#f4f4f4}
|
||||||
1
public/css/446.9504c97b.css
Normal file
1
public/css/446.9504c97b.css
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.upload-files[data-v-f2694614]{width:100%;margin:auto}.upload-files div[data-v-f2694614]{margin-bottom:10px}.file-list[data-v-f2694614]{list-style-type:none;padding:0;margin-top:20px}.file-list li[data-v-f2694614]{border-bottom:1px solid #ddd;padding:10px 0}.file-info[data-v-f2694614]{display:flex;justify-content:space-between;cursor:pointer}.file-title[data-v-f2694614]{font-weight:700}.file-name[data-v-f2694614]{color:#555}.file-date[data-v-f2694614]{color:#888}
|
||||||
1
public/css/468.43cc4f81.css
Normal file
1
public/css/468.43cc4f81.css
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.user-administration[data-v-a495c756]{padding:20px}.user-administration h1[data-v-a495c756],.user-administration h2[data-v-a495c756]{margin-bottom:20px}.user-administration form[data-v-a495c756]{display:flex;flex-direction:column;margin-bottom:20px}.user-administration label[data-v-a495c756]{margin-top:10px}.user-administration input[type=email][data-v-a495c756],.user-administration input[type=password][data-v-a495c756],.user-administration input[type=text][data-v-a495c756]{padding:5px;font-size:16px}.user-administration ul[data-v-a495c756]{list-style-type:none;padding:0}.user-administration li[data-v-a495c756]{padding:10px;border-bottom:1px solid #ddd;cursor:pointer}.user-administration li[data-v-a495c756]:hover{background-color:#f0f0f0}
|
||||||
1
public/css/484.f2269286.css
Normal file
1
public/css/484.f2269286.css
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.dialog-overlay[data-v-64c2e06a]{top:calc(50% - 25em);left:5%;width:90%;height:50em;background:rgba(0,0,0,.5);display:flex;justify-content:center;align-items:center;overflow:auto}.dialog[data-v-64c2e06a]{background:#fff;padding:20px;border-radius:5px;max-width:400px;width:100%;text-align:center}button[data-v-64c2e06a]{margin-top:20px}.login[data-v-40a158c0]{max-width:400px;margin:auto}form[data-v-40a158c0]{display:flex;flex-direction:column}label[data-v-40a158c0]{margin-top:10px}button[data-v-40a158c0]{margin-top:20px}
|
||||||
1
public/css/493.65e45809.css
Normal file
1
public/css/493.65e45809.css
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.register[data-v-63b3c0a3]{max-width:400px;margin:auto}form[data-v-63b3c0a3]{display:flex;flex-direction:column}label[data-v-63b3c0a3]{margin-top:10px}button[data-v-63b3c0a3]{margin-top:20px}.dialog[data-v-63b3c0a3]{position:fixed;top:0;left:0;right:0;bottom:0;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.4)}.dialog-content[data-v-63b3c0a3]{background:#fff;padding:16px;border-radius:4px;max-width:420px;width:90%}
|
||||||
1
public/css/527.596e7cea.css
Normal file
1
public/css/527.596e7cea.css
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.impressum[data-v-612786fa]{max-width:800px;margin:auto;padding:20px}h1[data-v-612786fa],h2[data-v-612786fa],h3[data-v-612786fa],h4[data-v-612786fa]{margin-top:20px;color:#333}p[data-v-612786fa]{line-height:1.6}a[data-v-612786fa]{color:#007bff;text-decoration:none}a[data-v-612786fa]:hover{text-decoration:underline}
|
||||||
1
public/css/535.9e55a8df.css
Normal file
1
public/css/535.9e55a8df.css
Normal file
File diff suppressed because one or more lines are too long
1
public/css/636.7f8b0e61.css
Normal file
1
public/css/636.7f8b0e61.css
Normal file
@@ -0,0 +1 @@
|
|||||||
|
form div[data-v-403a0e0b]{margin-bottom:10px}.uploaded-image[data-v-403a0e0b]{display:inline-block;margin:0 0 .5em .5em;border:1px solid #e0e0e0;padding:10px}.uploaded-image input[data-v-403a0e0b],.uploaded-image textarea[data-v-403a0e0b]{width:100%;margin:5px 0}
|
||||||
1
public/css/662.ee8ad276.css
Normal file
1
public/css/662.ee8ad276.css
Normal file
File diff suppressed because one or more lines are too long
1
public/css/7.9e55a8df.css
Normal file
1
public/css/7.9e55a8df.css
Normal file
File diff suppressed because one or more lines are too long
1
public/css/702.f2269286.css
Normal file
1
public/css/702.f2269286.css
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.dialog-overlay[data-v-64c2e06a]{top:calc(50% - 25em);left:5%;width:90%;height:50em;background:rgba(0,0,0,.5);display:flex;justify-content:center;align-items:center;overflow:auto}.dialog[data-v-64c2e06a]{background:#fff;padding:20px;border-radius:5px;max-width:400px;width:100%;text-align:center}button[data-v-64c2e06a]{margin-top:20px}.login[data-v-40a158c0]{max-width:400px;margin:auto}form[data-v-40a158c0]{display:flex;flex-direction:column}label[data-v-40a158c0]{margin-top:10px}button[data-v-40a158c0]{margin-top:20px}
|
||||||
1
public/css/703.5760daa0.css
Normal file
1
public/css/703.5760daa0.css
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.menu-management[data-v-0e6a0522]{width:100%;margin:auto}.button-container[data-v-0e6a0522]{display:inline-flex;gap:10px;margin-bottom:20px}.tree-view[data-v-0e6a0522]{margin-top:20px}.tree-view ul[data-v-0e6a0522]{list-style-type:none;padding:0}.tree-view li[data-v-0e6a0522]{margin-bottom:5px;padding-left:20px}.tree-view .menu-item[data-v-0e6a0522]{display:inline-flex;width:100%;justify-content:space-between;align-items:center}.tree-view span[data-v-0e6a0522]{cursor:pointer;color:#000}.tree-view button[data-v-0e6a0522]{border:none;height:1.6em;padding:0 .5em;margin:1px;border-radius:5px}.tree-view span[data-v-0e6a0522]:hover{text-decoration:underline}.edit-form[data-v-0e6a0522]{margin-top:20px}.edit-form label[data-v-0e6a0522]{display:block;margin-bottom:5px;font-weight:700}.edit-form input[data-v-0e6a0522]:not([type=checkbox]){display:block;margin-bottom:10px}.edit-form .checkbox-container[data-v-0e6a0522]{display:flex;flex-direction:column;margin-right:10px}.edit-form .order-id[data-v-0e6a0522]{width:50px}.edit-form button[data-v-0e6a0522]{margin-top:5px}
|
||||||
1
public/css/734.bdb3d500.css
Normal file
1
public/css/734.bdb3d500.css
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.position-management[data-v-1684a375]{max-width:600px;margin:auto;padding:20px;border:1px solid #ccc;border-radius:5px}form[data-v-1684a375]{display:flex;flex-direction:column;margin-bottom:20px}label[data-v-1684a375]{margin-top:10px}input[data-v-1684a375]{margin-top:5px;margin-bottom:10px;padding:8px}button[data-v-1684a375]{margin-top:10px;padding:10px}table[data-v-1684a375]{width:100%;border-collapse:collapse;margin-top:20px}td[data-v-1684a375],th[data-v-1684a375]{border:1px solid #ccc;padding:10px;text-align:left}th[data-v-1684a375]{background-color:#f4f4f4}
|
||||||
1
public/css/763.4687d764.css
Normal file
1
public/css/763.4687d764.css
Normal file
File diff suppressed because one or more lines are too long
1
public/css/765.4bd58cd7.css
Normal file
1
public/css/765.4bd58cd7.css
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.institution-management[data-v-ff992c44]{max-width:600px;margin:auto;padding:20px;border:1px solid #ccc;border-radius:5px}form[data-v-ff992c44]{display:flex;flex-direction:column;margin-bottom:20px}label[data-v-ff992c44]{margin-top:10px}input[data-v-ff992c44]{margin-top:5px;margin-bottom:10px;padding:8px}button[data-v-ff992c44]{margin-top:10px;padding:10px}table[data-v-ff992c44]{width:100%;border-collapse:collapse;margin-top:20px}td[data-v-ff992c44],th[data-v-ff992c44]{border:1px solid #ccc;padding:10px;text-align:left}th[data-v-ff992c44]{background-color:#f4f4f4}
|
||||||
1
public/css/781.9419ef08.css
Normal file
1
public/css/781.9419ef08.css
Normal file
@@ -0,0 +1 @@
|
|||||||
|
table.worships[data-v-6bd31626]{border-collapse:collapse;width:100%}table.worships td[data-v-6bd31626]{border:1px solid #000;text-align:center}h3[data-v-6bd31626]{margin:0}table.worships td div[data-v-6bd31626]{margin:5px}.highlight-time[data-v-6bd31626]{text-decoration:underline}.neighborhood-invitation[data-v-6bd31626]{font-weight:700;color:#0020e0}a[data-v-6bd31626]{color:#0020e0}.internal-information[data-v-6bd31626]{color:#e45;font-style:italic}.image[data-v-9b711a1e]{max-width:400px;max-height:300px}.event-name[data-v-708e6f45]{font-weight:700}.event-table[data-v-708e6f45]{border-collapse:collapse}.event-table td[data-v-708e6f45]{border:1px solid #000}.homepage[data-v-708e6f45]{border:1px solid #9400ff;padding:.5em;text-align:center}.description[data-v-708e6f45]{padding:.5em 0}.event-image>img[data-v-708e6f45]{max-width:12em;max-height:12em}.contact-box p[data-v-0cc91918]{margin:0}.bottom-margin[data-v-0cc91918]{margin-bottom:1rem}span[data-v-2bbf7aa9]{cursor:pointer;color:blue;text-decoration:underline}.previewinfo[data-v-9a71cbf6]{background-color:#000;color:#d00000;position:absolute;top:93px;left:0;padding:2px 10px;font-weight:700}
|
||||||
1
public/css/782.8fe0947f.css
Normal file
1
public/css/782.8fe0947f.css
Normal file
@@ -0,0 +1 @@
|
|||||||
|
table.worships[data-v-6bd31626]{border-collapse:collapse;width:100%}table.worships td[data-v-6bd31626]{border:1px solid #000;text-align:center}h3[data-v-6bd31626]{margin:0}table.worships td div[data-v-6bd31626]{margin:5px}.highlight-time[data-v-6bd31626]{text-decoration:underline}.neighborhood-invitation[data-v-6bd31626]{font-weight:700;color:#0020e0}a[data-v-6bd31626]{color:#0020e0}.internal-information[data-v-6bd31626]{color:#e45;font-style:italic}.image[data-v-9b711a1e]{max-width:400px;max-height:300px}.event-name[data-v-708e6f45]{font-weight:700}.event-table[data-v-708e6f45]{border-collapse:collapse}.event-table td[data-v-708e6f45]{border:1px solid #000}.homepage[data-v-708e6f45]{border:1px solid #9400ff;padding:.5em;text-align:center}.description[data-v-708e6f45]{padding:.5em 0}.event-image>img[data-v-708e6f45]{max-width:12em;max-height:12em}.contact-box p[data-v-0cc91918]{margin:0}.bottom-margin[data-v-0cc91918]{margin-bottom:1rem}span[data-v-2bbf7aa9]{cursor:pointer;color:blue;text-decoration:underline}
|
||||||
1
public/css/79.eca6f984.css
Normal file
1
public/css/79.eca6f984.css
Normal file
File diff suppressed because one or more lines are too long
1
public/css/857.4687d764.css
Normal file
1
public/css/857.4687d764.css
Normal file
File diff suppressed because one or more lines are too long
1
public/css/875.7f8b0e61.css
Normal file
1
public/css/875.7f8b0e61.css
Normal file
@@ -0,0 +1 @@
|
|||||||
|
form div[data-v-403a0e0b]{margin-bottom:10px}.uploaded-image[data-v-403a0e0b]{display:inline-block;margin:0 0 .5em .5em;border:1px solid #e0e0e0;padding:10px}.uploaded-image input[data-v-403a0e0b],.uploaded-image textarea[data-v-403a0e0b]{width:100%;margin:5px 0}
|
||||||
1
public/css/894.be11324e.css
Normal file
1
public/css/894.be11324e.css
Normal file
@@ -0,0 +1 @@
|
|||||||
|
div[data-v-334e7b82]{padding:20px}
|
||||||
1
public/css/907.8fe0947f.css
Normal file
1
public/css/907.8fe0947f.css
Normal file
@@ -0,0 +1 @@
|
|||||||
|
table.worships[data-v-6bd31626]{border-collapse:collapse;width:100%}table.worships td[data-v-6bd31626]{border:1px solid #000;text-align:center}h3[data-v-6bd31626]{margin:0}table.worships td div[data-v-6bd31626]{margin:5px}.highlight-time[data-v-6bd31626]{text-decoration:underline}.neighborhood-invitation[data-v-6bd31626]{font-weight:700;color:#0020e0}a[data-v-6bd31626]{color:#0020e0}.internal-information[data-v-6bd31626]{color:#e45;font-style:italic}.image[data-v-9b711a1e]{max-width:400px;max-height:300px}.event-name[data-v-708e6f45]{font-weight:700}.event-table[data-v-708e6f45]{border-collapse:collapse}.event-table td[data-v-708e6f45]{border:1px solid #000}.homepage[data-v-708e6f45]{border:1px solid #9400ff;padding:.5em;text-align:center}.description[data-v-708e6f45]{padding:.5em 0}.event-image>img[data-v-708e6f45]{max-width:12em;max-height:12em}.contact-box p[data-v-0cc91918]{margin:0}.bottom-margin[data-v-0cc91918]{margin-bottom:1rem}span[data-v-2bbf7aa9]{cursor:pointer;color:blue;text-decoration:underline}
|
||||||
1
public/css/908.1e896a7d.css
Normal file
1
public/css/908.1e896a7d.css
Normal file
File diff suppressed because one or more lines are too long
1
public/css/957.56e284e6.css
Normal file
1
public/css/957.56e284e6.css
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.right-column h2[data-v-d1b58e08]{text-align:center;color:#000}.right-column img[data-v-d1b58e08]{display:block;margin:0 auto;max-width:100%;height:auto}
|
||||||
1
public/css/964.eca6f984.css
Normal file
1
public/css/964.eca6f984.css
Normal file
File diff suppressed because one or more lines are too long
1
public/css/999.ee8ad276.css
Normal file
1
public/css/999.ee8ad276.css
Normal file
File diff suppressed because one or more lines are too long
1
public/css/app.d740bb01.css
Normal file
1
public/css/app.d740bb01.css
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.navbar[data-v-3c558f6e]{background-color:#9400ff;overflow:visible;min-height:31px;display:inline-flex;flex-direction:column;width:auto;margin:.1em .75em 9px .75em;box-shadow:0 0 2px 5px #9400ff}.menu-toggle[data-v-3c558f6e]{background-color:#9400ff;color:#fff;border:none;padding:14px 20px;text-align:center;text-decoration:none;display:none;font-weight:700}.navbar ul[data-v-3c558f6e]{list-style-type:none;margin:0;padding:0;display:flex}.navbar li[data-v-3c558f6e]{position:relative}.navbar a[data-v-3c558f6e],.navbar li>span[data-v-3c558f6e]{display:block;color:#fff;text-align:center;padding:6px 20px;text-decoration:none;font-weight:700}.navbar a[data-v-3c558f6e]:hover{background-color:#7a00d1}.menu-icon[data-v-3c558f6e]{width:20px;height:20px;margin-right:5px}.dropdown-content[data-v-3c558f6e]{position:absolute;background-color:#9400ff;min-width:200px;z-index:1;top:100%;left:0;opacity:0;visibility:hidden;transition:opacity .2s ease-in-out,visibility .2s ease-in-out;box-shadow:2px 2px 4px #666}.dropdown-content a[data-v-3c558f6e]{color:#fff;padding:12px 16px;text-decoration:none;display:block;text-align:left}.dropdown-content a[data-v-3c558f6e]:hover{background-color:#7a00d1}.navbar li:hover .dropdown-content[data-v-3c558f6e]{opacity:1;visibility:visible}.fade-enter-active[data-v-3c558f6e],.fade-leave-active[data-v-3c558f6e]{transition:opacity .2s ease-in-out,visibility .2s ease-in-out}.fade-enter[data-v-3c558f6e],.fade-leave-to[data-v-3c558f6e]{opacity:0;visibility:hidden}@media (max-width:768px){.navbar ul[data-v-3c558f6e],.navbar[data-v-3c558f6e]{flex-direction:column}.navbar li[data-v-3c558f6e]{width:100%}.navbar a[data-v-3c558f6e],.navbar li>span[data-v-3c558f6e]{text-align:left;padding:14px 20px}.menu-toggle[data-v-3c558f6e]{display:block}.dropdown-content[data-v-3c558f6e]{position:static;box-shadow:none;opacity:1;visibility:visible;display:none;padding-left:1em}.navbar li:hover .dropdown-content[data-v-3c558f6e]{display:block}}.pointer[data-v-3c558f6e]{cursor:pointer}.facettenkreuz[data-v-3c558f6e]{max-width:30px;max-height:30px;position:fixed}.ekhnlogo[data-v-3c558f6e]{width:32px}header[data-v-4e068f05]{display:flex;flex-direction:column;width:100%;background-color:#fff}.header-title[data-v-4e068f05]{display:flex;align-items:center;justify-content:space-between;width:100%;padding:.3em .5em}header h1[data-v-4e068f05]{margin:0;flex:1;text-align:center;text-shadow:2px 2px 1px #e0bfff;padding-bottom:4px}.reload-icon[data-v-4e068f05]{font-size:16px;cursor:pointer;margin-left:10px;background-color:#e0bfff;color:#fff;padding:5px;border-radius:50%}.reload-icon[data-v-4e068f05]:hover{color:#7a00d1}.footer[data-v-65c666da]{background-color:#0b1735;bottom:0;left:0;width:100%;padding:7px;justify-content:space-between}.footer[data-v-65c666da],.left-links[data-v-65c666da],.right-links[data-v-65c666da]{display:flex;align-items:center}.footer a[data-v-65c666da]{color:#fff;padding-right:20px;text-decoration:none}.footer a.login-link[data-v-65c666da]{color:#444}.footer a.logout-link[data-v-65c666da]{cursor:pointer}body,html{height:100%;margin:0;padding:0;background-color:#fff;font-family:Arial,sans-serif;width:100%;overflow-x:hidden}#app{display:flex;flex-direction:column;height:100%}.content-section{flex:1;display:flex;color:#000;overflow-y:hidden}.left-column{flex:1;min-width:1000px;margin:.5em 0 .5em .5em;padding-right:.5em;background-color:#fff;overflow-y:auto}.right-column{flex:1;background-color:#d9e2f3;overflow-y:auto;margin:0 7px 7px 0}.right-column h2{text-align:center;color:#000}.right-column img{display:block;margin:0 auto;max-width:100%;height:auto}.right-column-overlay{max-height:150px;overflow-y:hidden;margin-top:10px;background-color:#d9e2f3;display:flex;justify-content:center;align-items:center}.right-column-overlay img{max-height:100%;max-width:100%;-o-object-fit:contain;object-fit:contain}@media (max-width:1200px){.content-section{flex-direction:column}.left-column{padding:10px}.right-column{display:none}.right-column-overlay{display:flex;max-height:150px;background-color:#fff}.right-column-overlay img{max-height:150px;max-width:100%;-o-object-fit:contain;object-fit:contain}}@media (max-width:767px){.content-section{flex-direction:column}.left-column,.right-column{padding:10px}.right-column{display:none}.right-column-overlay{display:flex}}.htmleditor{background-color:#fff;width:calc(100% - 26px);height:31em;border:1px solid #000;margin:7px;padding:5px;overflow:auto}.htmleditor table{border:1px solid #e0e0e0;border-collapse:collapse}.htmleditor td,.htmleditor th{border:1px solid #e0e0e0}
|
||||||
@@ -1 +1,19 @@
|
|||||||
<!doctype html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="/favicon.ico"><title>miriamgemeinde</title><script defer="defer" src="/js/chunk-vendors.a58901d9.js"></script><script defer="defer" src="/js/app.2b3ac443.js"></script><link href="/css/app.c2c4030a.css" rel="stylesheet"><script defer="defer" src="/js/chunk-vendors.a58901d9.js"></script><script defer="defer" src="/js/app.62331f73.js"></script><link href="/css/app.c2c4030a.css" rel="stylesheet"><script defer="defer" src="/js/chunk-vendors.a58901d9.js"></script><script defer="defer" src="/js/app.f7f58406.js"></script><link href="/css/app.c2c4030a.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but miriamgemeinde doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html>
|
<!doctype html>
|
||||||
|
<html lang="">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||||
|
<link rel="icon" href="/favicon.ico">
|
||||||
|
<title>miriamgemeinde</title>
|
||||||
|
<script defer="defer" src="/js/chunk-vendors.4be41350.js"></script>
|
||||||
|
<script defer="defer" src="/js/app.09342435.js"></script>
|
||||||
|
<link href="/css/app.d740bb01.css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<noscript>
|
||||||
|
<strong>We're sorry but miriamgemeinde doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
|
||||||
|
</noscript>
|
||||||
|
<div id="app"></div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
2
public/js/123.09f623d9.js
Normal file
2
public/js/123.09f623d9.js
Normal file
File diff suppressed because one or more lines are too long
1
public/js/123.09f623d9.js.map
Normal file
1
public/js/123.09f623d9.js.map
Normal file
File diff suppressed because one or more lines are too long
2
public/js/123.5d235cce.js
Normal file
2
public/js/123.5d235cce.js
Normal file
File diff suppressed because one or more lines are too long
1
public/js/123.5d235cce.js.map
Normal file
1
public/js/123.5d235cce.js.map
Normal file
File diff suppressed because one or more lines are too long
2
public/js/150.927ca906.js
Normal file
2
public/js/150.927ca906.js
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
"use strict";(self["webpackChunkmiriamgemeinde"]=self["webpackChunkmiriamgemeinde"]||[]).push([[150],{3909:function(e,t,n){n.r(t),n.d(t,{default:function(){return f}});var a=n(641),s=n(33);const i=e=>((0,a.Qi)("data-v-9a71cbf6"),e=e(),(0,a.jt)(),e),u=i((()=>(0,a.Lk)("div",{class:"previewinfo"},"Dies ist eine Vorschau.",-1)));function o(e,t,n,i,o,r){const c=(0,a.g2)("RenderContentComponent");return(0,a.uX)(),(0,a.CE)("div",null,[u,(0,a.Lk)("h1",null,(0,s.v_)(i.title),1),(0,a.bF)(c,{content:i.content},null,8,["content"])])}var r=n(6278),c=n(1708),l={name:"PagePreview",components:{RenderContentComponent:c.A},setup(){const e=(0,r.Pj)(),t=(0,a.EW)((()=>e.state.pageContent)),n=(0,a.EW)((()=>e.state.selectedPage)),s=(0,a.EW)((()=>e.state.menuData)),i=(0,a.EW)((()=>e.state.pageTitle)),u=t=>{const n=(e,t)=>{for(const a of e){if(a.link===t)return a.pageTitle||a.name;if(a.submenu&&a.submenu.length>0){const e=n(a.submenu,t);if(e)return e}}return""};e.dispatch("setPageTitle",n(s.value,t))};return(0,a.nT)((()=>{u(n.value)})),{content:t,title:i}}},m=n(6262);const d=(0,m.A)(l,[["render",o],["__scopeId","data-v-9a71cbf6"]]);var f=d}}]);
|
||||||
|
//# sourceMappingURL=150.927ca906.js.map
|
||||||
1
public/js/150.927ca906.js.map
Normal file
1
public/js/150.927ca906.js.map
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"js/150.927ca906.js","mappings":"mQAEIA,EAAAA,EAAAA,IAAsD,OAAjDC,MAAM,eAAc,2BAAuB,K,qFADlDC,EAAAA,EAAAA,IAIM,YAHJC,GACAH,EAAAA,EAAAA,IAAoB,WAAAI,EAAAA,EAAAA,IAAbC,EAAAC,OAAK,IACZC,EAAAA,EAAAA,IAA6CC,EAAA,CAApBC,QAASJ,EAAAI,SAAO,qB,yBAS7C,GACEC,KAAM,cACNC,WAAY,CACVC,uBAAsBA,EAAAA,GAExBC,KAAAA,GACE,MAAMC,GAAQC,EAAAA,EAAAA,MACRN,GAAUO,EAAAA,EAAAA,KAAS,IAAMF,EAAMG,MAAMC,cACrCC,GAAeH,EAAAA,EAAAA,KAAS,IAAMF,EAAMG,MAAME,eAC1CC,GAAWJ,EAAAA,EAAAA,KAAS,IAAMF,EAAMG,MAAMG,WACtCd,GAAQU,EAAAA,EAAAA,KAAS,IAAMF,EAAMG,MAAMI,YAEnCC,EAAYC,IAChB,MAAMC,EAAYA,CAACC,EAAWF,KAC5B,IAAK,MAAMG,KAAQD,EAAW,CAC5B,GAAIC,EAAKH,OAASA,EAChB,OAAOG,EAAKL,WAAaK,EAAKhB,KAEhC,GAAIgB,EAAKC,SAAWD,EAAKC,QAAQC,OAAS,EAAG,CAC3C,MAAMC,EAAQL,EAAUE,EAAKC,QAASJ,GACtC,GAAIM,EACF,OAAOA,CAEX,CACF,CACA,MAAO,EAAE,EAEXf,EAAMgB,SAAS,eAAgBN,EAAUJ,EAASW,MAAOR,GAAM,EAOjE,OAJAS,EAAAA,EAAAA,KAAY,KACVV,EAASH,EAAaY,MAAM,IAGvB,CACLtB,UACAH,QAEJ,G,UC5CF,MAAM2B,GAA2B,OAAgB,EAAQ,CAAC,CAAC,SAASC,GAAQ,CAAC,YAAY,qBAEzF,O","sources":["webpack://miriamgemeinde/./src/content/admin/PagePreviewComponent.vue","webpack://miriamgemeinde/./src/content/admin/PagePreviewComponent.vue?4023"],"sourcesContent":["<template>\n <div>\n <div class=\"previewinfo\">Dies ist eine Vorschau.</div>\n <h1>{{ title }}</h1>\n <RenderContentComponent :content=\"content\" />\n </div>\n</template>\n\n<script>\nimport { computed, watchEffect } from 'vue';\nimport { useStore } from 'vuex';\nimport RenderContentComponent from '@/components/RenderContentComponent.vue';\n\nexport default {\n name: 'PagePreview',\n components: {\n RenderContentComponent\n },\n setup() {\n const store = useStore();\n const content = computed(() => store.state.pageContent);\n const selectedPage = computed(() => store.state.selectedPage);\n const menuData = computed(() => store.state.menuData);\n const title = computed(() => store.state.pageTitle);\n\n const setTitle = (link) => {\n const findTitle = (menuItems, link) => {\n for (const item of menuItems) {\n if (item.link === link) {\n return item.pageTitle || item.name;\n }\n if (item.submenu && item.submenu.length > 0) {\n const found = findTitle(item.submenu, link);\n if (found) {\n return found;\n }\n }\n }\n return '';\n };\n store.dispatch('setPageTitle', findTitle(menuData.value, link));\n };\n\n watchEffect(() => {\n setTitle(selectedPage.value);\n });\n\n return {\n content,\n title\n };\n }\n};\n</script>\n\n<style scoped>\n.previewinfo {\n background-color: black;\n color: #d00000;\n position: absolute;\n top: 93px;\n left: 0;\n padding: 2px 10px;\n font-weight: bold;\n}\n</style>\n","import { render } from \"./PagePreviewComponent.vue?vue&type=template&id=9a71cbf6&scoped=true\"\nimport script from \"./PagePreviewComponent.vue?vue&type=script&lang=js\"\nexport * from \"./PagePreviewComponent.vue?vue&type=script&lang=js\"\n\nimport \"./PagePreviewComponent.vue?vue&type=style&index=0&id=9a71cbf6&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-9a71cbf6\"]])\n\nexport default __exports__"],"names":["_createElementVNode","class","_createElementBlock","_hoisted_1","_toDisplayString","$setup","title","_createVNode","_component_RenderContentComponent","content","name","components","RenderContentComponent","setup","store","useStore","computed","state","pageContent","selectedPage","menuData","pageTitle","setTitle","link","findTitle","menuItems","item","submenu","length","found","dispatch","value","watchEffect","__exports__","render"],"sourceRoot":""}
|
||||||
2
public/js/183.0b8efb45.js
Normal file
2
public/js/183.0b8efb45.js
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
"use strict";(self["webpackChunkmiriamgemeinde"]=self["webpackChunkmiriamgemeinde"]||[]).push([[183],{8183:function(e,r,t){t.r(r),t.d(r,{default:function(){return y}});var s=t(641),n=t(33),a=t(3751);const i=e=>((0,s.Qi)("data-v-a495c756"),e=e(),(0,s.jt)(),e),u={class:"user-administration"},l=i((()=>(0,s.Lk)("h1",null,"Benutzerverwaltung",-1))),o=i((()=>(0,s.Lk)("label",{for:"name"},"Name:",-1))),c=i((()=>(0,s.Lk)("label",{for:"email"},"Email:",-1))),d=i((()=>(0,s.Lk)("label",{for:"password"},"Passwort:",-1))),m=["required"],h=i((()=>(0,s.Lk)("label",{for:"active"},"Aktiv:",-1))),p={type:"submit"},U={key:1},k=i((()=>(0,s.Lk)("h2",null,"Vorhandene Benutzer",-1))),v=["onClick"];function b(e,r,t,i,b,C){return(0,s.uX)(),(0,s.CE)("div",u,[l,(0,s.Lk)("h2",null,(0,n.v_)(C.formTitle),1),(0,s.Lk)("form",{onSubmit:r[4]||(r[4]=(0,a.D$)(((...e)=>C.saveUser&&C.saveUser(...e)),["prevent"]))},[o,(0,s.bo)((0,s.Lk)("input",{id:"name","onUpdate:modelValue":r[0]||(r[0]=e=>b.currentUser.name=e),required:""},null,512),[[a.Jo,b.currentUser.name]]),c,(0,s.bo)((0,s.Lk)("input",{id:"email","onUpdate:modelValue":r[1]||(r[1]=e=>b.currentUser.email=e),type:"email",required:""},null,512),[[a.Jo,b.currentUser.email]]),d,(0,s.bo)((0,s.Lk)("input",{id:"password","onUpdate:modelValue":r[2]||(r[2]=e=>b.currentUser.password=e),type:"password",required:b.isCreating},null,8,m),[[a.Jo,b.currentUser.password]]),(0,s.Lk)("div",null,[h,(0,s.bo)((0,s.Lk)("input",{id:"active","onUpdate:modelValue":r[3]||(r[3]=e=>b.currentUser.active=e),type:"checkbox"},null,512),[[a.lH,b.currentUser.active]])]),(0,s.Lk)("button",p,(0,n.v_)(b.isCreating?"Erstellen":"Aktualisieren"),1)],32),b.isCreating?(0,s.Q3)("",!0):((0,s.uX)(),(0,s.CE)("button",{key:0,onClick:r[5]||(r[5]=(...e)=>C.resetForm&&C.resetForm(...e))},"Zurück zu Benutzer erstellen")),b.users.length?((0,s.uX)(),(0,s.CE)("div",U,[k,(0,s.Lk)("ul",null,[((0,s.uX)(!0),(0,s.CE)(s.FK,null,(0,s.pI)(b.users,(e=>((0,s.uX)(),(0,s.CE)("li",{key:e.id,onClick:r=>C.editUser(e)},(0,n.v_)(e.name)+" ("+(0,n.v_)(e.email)+") ",9,v)))),128))])])):(0,s.Q3)("",!0)])}var C=t(3173),f={name:"UserAdministration",data(){return{users:[],currentUser:{name:"",email:"",password:"",active:!1},isCreating:!0}},computed:{formTitle(){return this.isCreating?"Benutzer erstellen":"Benutzer bearbeiten"}},methods:{async fetchUsers(){try{const e=await C.A.get("/users");this.users=e.data}catch(e){console.error("Fehler beim Abrufen der Benutzer:",e)}},async saveUser(){this.isCreating?await this.createUser():await this.updateUser(),this.resetForm(),this.fetchUsers()},async createUser(){try{await C.A.post("/users",this.currentUser)}catch(e){console.error("Fehler beim Erstellen des Benutzers:",e)}},async updateUser(){try{await C.A.put(`/users/${this.currentUser.id}`,this.currentUser)}catch(e){console.error("Fehler beim Aktualisieren des Benutzers:",e)}},editUser(e){this.currentUser={...e,password:""},this.isCreating=!1},resetForm(){this.currentUser={name:"",email:"",password:"",active:!1},this.isCreating=!0}},mounted(){this.fetchUsers()}},w=t(6262);const L=(0,w.A)(f,[["render",b],["__scopeId","data-v-a495c756"]]);var y=L}}]);
|
||||||
|
//# sourceMappingURL=183.0b8efb45.js.map
|
||||||
1
public/js/183.0b8efb45.js.map
Normal file
1
public/js/183.0b8efb45.js.map
Normal file
File diff suppressed because one or more lines are too long
2
public/js/187.7a1ca760.js
Normal file
2
public/js/187.7a1ca760.js
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
"use strict";(self["webpackChunkmiriamgemeinde"]=self["webpackChunkmiriamgemeinde"]||[]).push([[187],{8187:function(e,t,n){n.r(t),n.d(t,{default:function(){return C}});var l=n(641),a=n(3751),i=n(33);const d=e=>((0,l.Qi)("data-v-4e6631f7"),e=e(),(0,l.jt)(),e),c={class:"event-places-management"},o=d((()=>(0,l.Lk)("h2",null,"Veranstaltungsorte verwalten",-1))),r=d((()=>(0,l.Lk)("label",{for:"name"},"Name:",-1))),s=d((()=>(0,l.Lk)("label",{for:"street"},"Straße:",-1))),u=d((()=>(0,l.Lk)("label",{for:"zipcode"},"PLZ:",-1))),p=d((()=>(0,l.Lk)("label",{for:"city"},"Stadt:",-1))),v=d((()=>(0,l.Lk)("label",{for:"city"},"Webseite:",-1))),k=d((()=>(0,l.Lk)("label",{for:"backgroundColor"},"Hintergrundfarbe:",-1))),h=d((()=>(0,l.Lk)("button",{type:"submit"},"Speichern",-1))),b=d((()=>(0,l.Lk)("thead",null,[(0,l.Lk)("tr",null,[(0,l.Lk)("th",null,"Name"),(0,l.Lk)("th",null,"Bearbeiten"),(0,l.Lk)("th",null,"Löschen")])],-1))),P=["onClick"],f=["onClick"];function E(e,t,n,d,E,m){return(0,l.uX)(),(0,l.CE)("div",c,[o,(0,l.Lk)("form",{onSubmit:t[7]||(t[7]=(0,a.D$)(((...e)=>m.addEventPlace&&m.addEventPlace(...e)),["prevent"]))},[r,(0,l.bo)((0,l.Lk)("input",{type:"text",id:"name","onUpdate:modelValue":t[0]||(t[0]=e=>E.newEventPlace.name=e),placeholder:"Name",required:""},null,512),[[a.Jo,E.newEventPlace.name]]),s,(0,l.bo)((0,l.Lk)("input",{type:"text",id:"street","onUpdate:modelValue":t[1]||(t[1]=e=>E.newEventPlace.street=e),placeholder:"Straße",required:""},null,512),[[a.Jo,E.newEventPlace.street]]),u,(0,l.bo)((0,l.Lk)("input",{type:"text",id:"zipcode","onUpdate:modelValue":t[2]||(t[2]=e=>E.newEventPlace.zipcode=e),placeholder:"PLZ",required:""},null,512),[[a.Jo,E.newEventPlace.zipcode]]),p,(0,l.bo)((0,l.Lk)("input",{type:"text",id:"city","onUpdate:modelValue":t[3]||(t[3]=e=>E.newEventPlace.city=e),placeholder:"Stadt",required:""},null,512),[[a.Jo,E.newEventPlace.city]]),v,(0,l.bo)((0,l.Lk)("input",{type:"text",id:"website","onUpdate:modelValue":t[4]||(t[4]=e=>E.newEventPlace.website=e),placeholder:"Webseite",required:""},null,512),[[a.Jo,E.newEventPlace.website]]),k,(0,l.bo)((0,l.Lk)("input",{type:"color",id:"backgroundColor","onUpdate:modelValue":t[5]||(t[5]=e=>E.newEventPlace.backgroundColor=e)},null,512),[[a.Jo,E.newEventPlace.backgroundColor]]),h,E.editMode?((0,l.uX)(),(0,l.CE)("button",{key:0,type:"button",onClick:t[6]||(t[6]=(...e)=>m.resetForm&&m.resetForm(...e))},"Neuen Veranstaltungsort erstellen")):(0,l.Q3)("",!0)],32),(0,l.Lk)("table",null,[b,(0,l.Lk)("tbody",null,[((0,l.uX)(!0),(0,l.CE)(l.FK,null,(0,l.pI)(E.eventPlaces,(e=>((0,l.uX)(),(0,l.CE)("tr",{key:e.id},[(0,l.Lk)("td",null,(0,i.v_)(e.name),1),(0,l.Lk)("td",null,[(0,l.Lk)("button",{onClick:t=>m.editEventPlace(e)},"Bearbeiten",8,P)]),(0,l.Lk)("td",null,[(0,l.Lk)("button",{onClick:t=>m.deleteEventPlace(e.id)},"Löschen",8,f)])])))),128))])])])}n(4114);var m=n(4335),w={data(){return{eventPlaces:[],newEventPlace:{name:"",street:"",zipcode:"",city:"",backgroundColor:"#ffffff",website:""},editMode:!1,editId:null}},methods:{async fetchEventPlaces(){const e=await m.A.get("/event-places");this.eventPlaces=e.data},async addEventPlace(){if(this.editMode)await m.A.put(`/event-places/${this.editId}`,this.newEventPlace);else{const e=await m.A.post("/event-places",this.newEventPlace);this.eventPlaces.push(e.data)}this.resetForm(),await this.fetchEventPlaces()},async updateEventPlace(e){await m.A.put(`/event-places/${e.id}`,e),this.fetchEventPlaces()},async deleteEventPlace(e){await m.A.delete(`/event-places/${e}`),this.fetchEventPlaces()},editEventPlace(e){this.newEventPlace={...e},this.editMode=!0,this.editId=e.id},resetForm(){this.newEventPlace={name:"",street:"",zipcode:"",city:"",backgroundColor:"#ffffff",website:""},this.editMode=!1,this.editId=null}},created(){this.fetchEventPlaces()}},L=n(6262);const y=(0,L.A)(w,[["render",E],["__scopeId","data-v-4e6631f7"]]);var C=y}}]);
|
||||||
|
//# sourceMappingURL=187.7a1ca760.js.map
|
||||||
1
public/js/187.7a1ca760.js.map
Normal file
1
public/js/187.7a1ca760.js.map
Normal file
File diff suppressed because one or more lines are too long
2
public/js/187.83b148e8.js
Normal file
2
public/js/187.83b148e8.js
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
"use strict";(self["webpackChunkmiriamgemeinde"]=self["webpackChunkmiriamgemeinde"]||[]).push([[187],{8187:function(e,t,n){n.r(t),n.d(t,{default:function(){return C}});var l=n(641),a=n(3751),i=n(33);const d=e=>((0,l.Qi)("data-v-4e6631f7"),e=e(),(0,l.jt)(),e),c={class:"event-places-management"},o=d((()=>(0,l.Lk)("h2",null,"Veranstaltungsorte verwalten",-1))),r=d((()=>(0,l.Lk)("label",{for:"name"},"Name:",-1))),s=d((()=>(0,l.Lk)("label",{for:"street"},"Straße:",-1))),u=d((()=>(0,l.Lk)("label",{for:"zipcode"},"PLZ:",-1))),p=d((()=>(0,l.Lk)("label",{for:"city"},"Stadt:",-1))),v=d((()=>(0,l.Lk)("label",{for:"city"},"Webseite:",-1))),k=d((()=>(0,l.Lk)("label",{for:"backgroundColor"},"Hintergrundfarbe:",-1))),h=d((()=>(0,l.Lk)("button",{type:"submit"},"Speichern",-1))),b=d((()=>(0,l.Lk)("thead",null,[(0,l.Lk)("tr",null,[(0,l.Lk)("th",null,"Name"),(0,l.Lk)("th",null,"Bearbeiten"),(0,l.Lk)("th",null,"Löschen")])],-1))),P=["onClick"],f=["onClick"];function E(e,t,n,d,E,m){return(0,l.uX)(),(0,l.CE)("div",c,[o,(0,l.Lk)("form",{onSubmit:t[7]||(t[7]=(0,a.D$)(((...e)=>m.addEventPlace&&m.addEventPlace(...e)),["prevent"]))},[r,(0,l.bo)((0,l.Lk)("input",{type:"text",id:"name","onUpdate:modelValue":t[0]||(t[0]=e=>E.newEventPlace.name=e),placeholder:"Name",required:""},null,512),[[a.Jo,E.newEventPlace.name]]),s,(0,l.bo)((0,l.Lk)("input",{type:"text",id:"street","onUpdate:modelValue":t[1]||(t[1]=e=>E.newEventPlace.street=e),placeholder:"Straße",required:""},null,512),[[a.Jo,E.newEventPlace.street]]),u,(0,l.bo)((0,l.Lk)("input",{type:"text",id:"zipcode","onUpdate:modelValue":t[2]||(t[2]=e=>E.newEventPlace.zipcode=e),placeholder:"PLZ",required:""},null,512),[[a.Jo,E.newEventPlace.zipcode]]),p,(0,l.bo)((0,l.Lk)("input",{type:"text",id:"city","onUpdate:modelValue":t[3]||(t[3]=e=>E.newEventPlace.city=e),placeholder:"Stadt",required:""},null,512),[[a.Jo,E.newEventPlace.city]]),v,(0,l.bo)((0,l.Lk)("input",{type:"text",id:"website","onUpdate:modelValue":t[4]||(t[4]=e=>E.newEventPlace.website=e),placeholder:"Webseite",required:""},null,512),[[a.Jo,E.newEventPlace.website]]),k,(0,l.bo)((0,l.Lk)("input",{type:"color",id:"backgroundColor","onUpdate:modelValue":t[5]||(t[5]=e=>E.newEventPlace.backgroundColor=e)},null,512),[[a.Jo,E.newEventPlace.backgroundColor]]),h,E.editMode?((0,l.uX)(),(0,l.CE)("button",{key:0,type:"button",onClick:t[6]||(t[6]=(...e)=>m.resetForm&&m.resetForm(...e))},"Neuen Veranstaltungsort erstellen")):(0,l.Q3)("",!0)],32),(0,l.Lk)("table",null,[b,(0,l.Lk)("tbody",null,[((0,l.uX)(!0),(0,l.CE)(l.FK,null,(0,l.pI)(E.eventPlaces,(e=>((0,l.uX)(),(0,l.CE)("tr",{key:e.id},[(0,l.Lk)("td",null,(0,i.v_)(e.name),1),(0,l.Lk)("td",null,[(0,l.Lk)("button",{onClick:t=>m.editEventPlace(e)},"Bearbeiten",8,P)]),(0,l.Lk)("td",null,[(0,l.Lk)("button",{onClick:t=>m.deleteEventPlace(e.id)},"Löschen",8,f)])])))),128))])])])}n(4114);var m=n(4335),w={data(){return{eventPlaces:[],newEventPlace:{name:"",street:"",zipcode:"",city:"",backgroundColor:"#ffffff",website:""},editMode:!1,editId:null}},methods:{async fetchEventPlaces(){const e=await m.A.get("/event-places");this.eventPlaces=e.data},async addEventPlace(){if(this.editMode)await m.A.put(`/event-places/${this.editId}`,this.newEventPlace);else{const e=await m.A.post("/event-places",this.newEventPlace);this.eventPlaces.push(e.data)}this.resetForm(),await this.fetchEventPlaces()},async updateEventPlace(e){await m.A.put(`/event-places/${e.id}`,e),this.fetchEventPlaces()},async deleteEventPlace(e){await m.A.delete(`/event-places/${e}`),this.fetchEventPlaces()},editEventPlace(e){this.newEventPlace={...e},this.editMode=!0,this.editId=e.id},resetForm(){this.newEventPlace={name:"",street:"",zipcode:"",city:"",backgroundColor:"#ffffff",website:""},this.editMode=!1,this.editId=null}},created(){this.fetchEventPlaces()}},L=n(6262);const y=(0,L.A)(w,[["render",E],["__scopeId","data-v-4e6631f7"]]);var C=y}}]);
|
||||||
|
//# sourceMappingURL=187.83b148e8.js.map
|
||||||
1
public/js/187.83b148e8.js.map
Normal file
1
public/js/187.83b148e8.js.map
Normal file
File diff suppressed because one or more lines are too long
2
public/js/23.179aa174.js
Normal file
2
public/js/23.179aa174.js
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
"use strict";(self["webpackChunkmiriamgemeinde"]=self["webpackChunkmiriamgemeinde"]||[]).push([[23],{2023:function(e,n,t){t.r(n),t.d(n,{default:function(){return k}});var u=t(641),r=t(33);const i=e=>((0,u.Qi)("data-v-68b32234"),e=e(),(0,u.jt)(),e),a=i((()=>(0,u.Lk)("h1",null,"Seitenpflege",-1))),l=i((()=>(0,u.Lk)("p",null,"Herzlich Willkommen. Auf diesen Seiten können Sie die Inhalte der Webseiten pflegen.",-1)));function o(e,n,t,i,o,d){const s=(0,u.g2)("router-link");return(0,u.uX)(),(0,u.CE)("div",null,[a,l,(0,u.Lk)("ul",null,[((0,u.uX)(!0),(0,u.CE)(u.FK,null,(0,u.pI)(i.adminSubmenu,(e=>((0,u.uX)(),(0,u.CE)("li",{key:e.id},[(0,u.bF)(s,{to:e.link},{default:(0,u.k6)((()=>[(0,u.eW)((0,r.v_)(e.name),1)])),_:2},1032,["to"])])))),128))])])}t(8992),t(2577);var d=t(6296),s=t(953),c={name:"DefaultComponent",setup(){const e=(0,s.KR)([]),n=async()=>{try{const n=await d.A.get("/menu-data"),t=n.data,u=t.find((e=>"Admin"===e.name));u&&(e.value=u.submenu)}catch(n){console.error("Fehler beim Abrufen der Menü-Daten:",n)}};return(0,u.sV)((()=>{n()})),{adminSubmenu:e}}},m=t(6262);const f=(0,m.A)(c,[["render",o],["__scopeId","data-v-68b32234"]]);var k=f},2577:function(e,n,t){var u=t(6518),r=t(2652),i=t(9306),a=t(8551),l=t(1767);u({target:"Iterator",proto:!0,real:!0},{find:function(e){a(this),i(e);var n=l(this),t=0;return r(n,(function(n,u){if(e(n,t++))return u(n)}),{IS_RECORD:!0,INTERRUPTED:!0}).result}})}}]);
|
||||||
|
//# sourceMappingURL=23.179aa174.js.map
|
||||||
1
public/js/23.179aa174.js.map
Normal file
1
public/js/23.179aa174.js.map
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"js/23.179aa174.js","mappings":"kQAEIA,EAAAA,EAAAA,IAAqB,UAAjB,gBAAY,K,UAChBA,EAAAA,EAAAA,IAA2F,SAAxF,wFAAoF,K,0EAFzFC,EAAAA,EAAAA,IAQM,YAPJC,EACAC,GACAH,EAAAA,EAAAA,IAIK,a,aAHHC,EAAAA,EAAAA,IAEKG,EAAAA,GAAA,MAPXC,EAAAA,EAAAA,IAKyBC,EAAAC,cAARC,K,WAAXP,EAAAA,EAAAA,IAEK,MAF6BQ,IAAKD,EAAKE,I,EAC1CC,EAAAA,EAAAA,IAA0DC,EAAA,CAA5CC,GAAIL,EAAKM,M,CAN/BC,SAAAC,EAAAA,EAAAA,KAMqC,IAAe,EANpDC,EAAAA,EAAAA,KAAAC,EAAAA,EAAAA,IAMwCV,EAAKW,MAAI,MANjDC,EAAA,G,mEAgBA,GACED,KAAM,mBACNE,KAAAA,GACE,MAAMd,GAAee,EAAAA,EAAAA,IAAI,IAEnBC,EAAgBC,UACpB,IACE,MAAMC,QAAiBC,EAAAA,EAAMC,IAAI,cAC3BC,EAAWH,EAASI,KAGpBC,EAAYF,EAASG,MAAKvB,GAAsB,UAAdA,EAAKW,OACzCW,IACFvB,EAAayB,MAAQF,EAAUG,QAEnC,CAAE,MAAOC,GACPC,QAAQD,MAAM,sCAAuCA,EACvD,GAOF,OAJAE,EAAAA,EAAAA,KAAU,KACRb,GAAe,IAGV,CACLhB,eAEJ,G,UCpCF,MAAM8B,GAA2B,OAAgB,EAAQ,CAAC,CAAC,SAASC,GAAQ,CAAC,YAAY,qBAEzF,O,uBCRA,IAAIC,EAAI,EAAQ,MACZC,EAAU,EAAQ,MAClBC,EAAY,EAAQ,MACpBC,EAAW,EAAQ,MACnBC,EAAoB,EAAQ,MAIhCJ,EAAE,CAAEK,OAAQ,WAAYC,OAAO,EAAMC,MAAM,GAAQ,CACjDf,KAAM,SAAcgB,GAClBL,EAASM,MACTP,EAAUM,GACV,IAAIE,EAASN,EAAkBK,MAC3BE,EAAU,EACd,OAAOV,EAAQS,GAAQ,SAAUjB,EAAOmB,GACtC,GAAIJ,EAAUf,EAAOkB,KAAY,OAAOC,EAAKnB,EAC/C,GAAG,CAAEoB,WAAW,EAAMC,aAAa,IAAQC,MAC7C,G","sources":["webpack://miriamgemeinde/./src/content/admin/IndexContent.vue","webpack://miriamgemeinde/./src/content/admin/IndexContent.vue?5c80","webpack://miriamgemeinde/./node_modules/core-js/modules/esnext.iterator.find.js"],"sourcesContent":["<template>\n <div>\n <h1>Seitenpflege</h1>\n <p>Herzlich Willkommen. Auf diesen Seiten können Sie die Inhalte der Webseiten pflegen.</p>\n <ul>\n <li v-for=\"item in adminSubmenu\" :key=\"item.id\">\n <router-link :to=\"item.link\">{{ item.name }}</router-link>\n </li>\n </ul>\n </div>\n</template>\n\n<script>\nimport axios from \"../../axios\";\nimport { ref, onMounted } from 'vue';\n\nexport default {\n name: 'DefaultComponent',\n setup() {\n const adminSubmenu = ref([]);\n\n const fetchMenuData = async () => {\n try {\n const response = await axios.get('/menu-data');\n const menuData = response.data;\n\n // Suche nach dem Admin-Submenü\n const adminMenu = menuData.find(item => item.name === 'Admin');\n if (adminMenu) {\n adminSubmenu.value = adminMenu.submenu;\n }\n } catch (error) {\n console.error('Fehler beim Abrufen der Menü-Daten:', error);\n }\n };\n\n onMounted(() => {\n fetchMenuData();\n });\n\n return {\n adminSubmenu\n };\n }\n};\n</script>\n\n<style scoped>\ndiv {\n padding: 20px;\n}\n\nul {\n list-style: none;\n padding: 0;\n margin: 0;\n}\n\nli {\n padding: 0;\n margin: 0;\n}\n</style>\n","import { render } from \"./IndexContent.vue?vue&type=template&id=68b32234&scoped=true\"\nimport script from \"./IndexContent.vue?vue&type=script&lang=js\"\nexport * from \"./IndexContent.vue?vue&type=script&lang=js\"\n\nimport \"./IndexContent.vue?vue&type=style&index=0&id=68b32234&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-68b32234\"]])\n\nexport default __exports__","'use strict';\nvar $ = require('../internals/export');\nvar iterate = require('../internals/iterate');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar getIteratorDirect = require('../internals/get-iterator-direct');\n\n// `Iterator.prototype.find` method\n// https://github.com/tc39/proposal-iterator-helpers\n$({ target: 'Iterator', proto: true, real: true }, {\n find: function find(predicate) {\n anObject(this);\n aCallable(predicate);\n var record = getIteratorDirect(this);\n var counter = 0;\n return iterate(record, function (value, stop) {\n if (predicate(value, counter++)) return stop(value);\n }, { IS_RECORD: true, INTERRUPTED: true }).result;\n }\n});\n"],"names":["_createElementVNode","_createElementBlock","_hoisted_1","_hoisted_2","_Fragment","_renderList","$setup","adminSubmenu","item","key","id","_createVNode","_component_router_link","to","link","default","_withCtx","_createTextVNode","_toDisplayString","name","_","setup","ref","fetchMenuData","async","response","axios","get","menuData","data","adminMenu","find","value","submenu","error","console","onMounted","__exports__","render","$","iterate","aCallable","anObject","getIteratorDirect","target","proto","real","predicate","this","record","counter","stop","IS_RECORD","INTERRUPTED","result"],"sourceRoot":""}
|
||||||
2
public/js/23.86dde413.js
Normal file
2
public/js/23.86dde413.js
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
"use strict";(self["webpackChunkmiriamgemeinde"]=self["webpackChunkmiriamgemeinde"]||[]).push([[23],{2023:function(e,n,t){t.r(n),t.d(n,{default:function(){return k}});var u=t(641),r=t(33);const i=e=>((0,u.Qi)("data-v-68b32234"),e=e(),(0,u.jt)(),e),a=i((()=>(0,u.Lk)("h1",null,"Seitenpflege",-1))),l=i((()=>(0,u.Lk)("p",null,"Herzlich Willkommen. Auf diesen Seiten können Sie die Inhalte der Webseiten pflegen.",-1)));function o(e,n,t,i,o,d){const s=(0,u.g2)("router-link");return(0,u.uX)(),(0,u.CE)("div",null,[a,l,(0,u.Lk)("ul",null,[((0,u.uX)(!0),(0,u.CE)(u.FK,null,(0,u.pI)(i.adminSubmenu,(e=>((0,u.uX)(),(0,u.CE)("li",{key:e.id},[(0,u.bF)(s,{to:e.link},{default:(0,u.k6)((()=>[(0,u.eW)((0,r.v_)(e.name),1)])),_:2},1032,["to"])])))),128))])])}t(8992),t(2577);var d=t(6296),s=t(953),c={name:"DefaultComponent",setup(){const e=(0,s.KR)([]),n=async()=>{try{const n=await d.A.get("/menu-data"),t=n.data,u=t.find((e=>"Admin"===e.name));u&&(e.value=u.submenu)}catch(n){console.error("Fehler beim Abrufen der Menü-Daten:",n)}};return(0,u.sV)((()=>{n()})),{adminSubmenu:e}}},m=t(6262);const f=(0,m.A)(c,[["render",o],["__scopeId","data-v-68b32234"]]);var k=f},2577:function(e,n,t){var u=t(6518),r=t(2652),i=t(9306),a=t(8551),l=t(1767);u({target:"Iterator",proto:!0,real:!0},{find:function(e){a(this),i(e);var n=l(this),t=0;return r(n,(function(n,u){if(e(n,t++))return u(n)}),{IS_RECORD:!0,INTERRUPTED:!0}).result}})}}]);
|
||||||
|
//# sourceMappingURL=23.86dde413.js.map
|
||||||
1
public/js/23.86dde413.js.map
Normal file
1
public/js/23.86dde413.js.map
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"js/23.86dde413.js","mappings":"kQAEIA,EAAAA,EAAAA,IAAqB,UAAjB,gBAAY,K,UAChBA,EAAAA,EAAAA,IAA2F,SAAxF,wFAAoF,K,0EAFzFC,EAAAA,EAAAA,IAQM,YAPJC,EACAC,GACAH,EAAAA,EAAAA,IAIK,a,aAHHC,EAAAA,EAAAA,IAEKG,EAAAA,GAAA,MAPXC,EAAAA,EAAAA,IAKyBC,EAAAC,cAARC,K,WAAXP,EAAAA,EAAAA,IAEK,MAF6BQ,IAAKD,EAAKE,I,EAC1CC,EAAAA,EAAAA,IAA0DC,EAAA,CAA5CC,GAAIL,EAAKM,M,CAN/BC,SAAAC,EAAAA,EAAAA,KAMqC,IAAe,EANpDC,EAAAA,EAAAA,KAAAC,EAAAA,EAAAA,IAMwCV,EAAKW,MAAI,MANjDC,EAAA,G,mEAgBA,GACED,KAAM,mBACNE,KAAAA,GACE,MAAMd,GAAee,EAAAA,EAAAA,IAAI,IAEnBC,EAAgBC,UACpB,IACE,MAAMC,QAAiBC,EAAAA,EAAMC,IAAI,cAC3BC,EAAWH,EAASI,KAGpBC,EAAYF,EAASG,MAAKvB,GAAsB,UAAdA,EAAKW,OACzCW,IACFvB,EAAayB,MAAQF,EAAUG,QAEnC,CAAE,MAAOC,GACPC,QAAQD,MAAM,sCAAuCA,EACvD,GAOF,OAJAE,EAAAA,EAAAA,KAAU,KACRb,GAAe,IAGV,CACLhB,eAEJ,G,UCpCF,MAAM8B,GAA2B,OAAgB,EAAQ,CAAC,CAAC,SAASC,GAAQ,CAAC,YAAY,qBAEzF,O,uBCRA,IAAIC,EAAI,EAAQ,MACZC,EAAU,EAAQ,MAClBC,EAAY,EAAQ,MACpBC,EAAW,EAAQ,MACnBC,EAAoB,EAAQ,MAIhCJ,EAAE,CAAEK,OAAQ,WAAYC,OAAO,EAAMC,MAAM,GAAQ,CACjDf,KAAM,SAAcgB,GAClBL,EAASM,MACTP,EAAUM,GACV,IAAIE,EAASN,EAAkBK,MAC3BE,EAAU,EACd,OAAOV,EAAQS,GAAQ,SAAUjB,EAAOmB,GACtC,GAAIJ,EAAUf,EAAOkB,KAAY,OAAOC,EAAKnB,EAC/C,GAAG,CAAEoB,WAAW,EAAMC,aAAa,IAAQC,MAC7C,G","sources":["webpack://miriamgemeinde/./src/content/admin/IndexContent.vue","webpack://miriamgemeinde/./src/content/admin/IndexContent.vue?5c80","webpack://miriamgemeinde/./node_modules/core-js/modules/esnext.iterator.find.js"],"sourcesContent":["<template>\n <div>\n <h1>Seitenpflege</h1>\n <p>Herzlich Willkommen. Auf diesen Seiten können Sie die Inhalte der Webseiten pflegen.</p>\n <ul>\n <li v-for=\"item in adminSubmenu\" :key=\"item.id\">\n <router-link :to=\"item.link\">{{ item.name }}</router-link>\n </li>\n </ul>\n </div>\n</template>\n\n<script>\nimport axios from \"../../axios\";\nimport { ref, onMounted } from 'vue';\n\nexport default {\n name: 'DefaultComponent',\n setup() {\n const adminSubmenu = ref([]);\n\n const fetchMenuData = async () => {\n try {\n const response = await axios.get('/menu-data');\n const menuData = response.data;\n\n // Suche nach dem Admin-Submenü\n const adminMenu = menuData.find(item => item.name === 'Admin');\n if (adminMenu) {\n adminSubmenu.value = adminMenu.submenu;\n }\n } catch (error) {\n console.error('Fehler beim Abrufen der Menü-Daten:', error);\n }\n };\n\n onMounted(() => {\n fetchMenuData();\n });\n\n return {\n adminSubmenu\n };\n }\n};\n</script>\n\n<style scoped>\ndiv {\n padding: 20px;\n}\n\nul {\n list-style: none;\n padding: 0;\n margin: 0;\n}\n\nli {\n padding: 0;\n margin: 0;\n}\n</style>\n","import { render } from \"./IndexContent.vue?vue&type=template&id=68b32234&scoped=true\"\nimport script from \"./IndexContent.vue?vue&type=script&lang=js\"\nexport * from \"./IndexContent.vue?vue&type=script&lang=js\"\n\nimport \"./IndexContent.vue?vue&type=style&index=0&id=68b32234&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-68b32234\"]])\n\nexport default __exports__","'use strict';\nvar $ = require('../internals/export');\nvar iterate = require('../internals/iterate');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar getIteratorDirect = require('../internals/get-iterator-direct');\n\n// `Iterator.prototype.find` method\n// https://github.com/tc39/proposal-iterator-helpers\n$({ target: 'Iterator', proto: true, real: true }, {\n find: function find(predicate) {\n anObject(this);\n aCallable(predicate);\n var record = getIteratorDirect(this);\n var counter = 0;\n return iterate(record, function (value, stop) {\n if (predicate(value, counter++)) return stop(value);\n }, { IS_RECORD: true, INTERRUPTED: true }).result;\n }\n});\n"],"names":["_createElementVNode","_createElementBlock","_hoisted_1","_hoisted_2","_Fragment","_renderList","$setup","adminSubmenu","item","key","id","_createVNode","_component_router_link","to","link","default","_withCtx","_createTextVNode","_toDisplayString","name","_","setup","ref","fetchMenuData","async","response","axios","get","menuData","data","adminMenu","find","value","submenu","error","console","onMounted","__exports__","render","$","iterate","aCallable","anObject","getIteratorDirect","target","proto","real","predicate","this","record","counter","stop","IS_RECORD","INTERRUPTED","result"],"sourceRoot":""}
|
||||||
2
public/js/246.760602fa.js
Normal file
2
public/js/246.760602fa.js
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
"use strict";(self["webpackChunkmiriamgemeinde"]=self["webpackChunkmiriamgemeinde"]||[]).push([[246],{6246:function(e,t,n){n.r(t),n.d(t,{default:function(){return E}});var a=n(641),i=n(3751),s=n(33);const p=e=>((0,a.Qi)("data-v-60fe58a4"),e=e(),(0,a.jt)(),e),d={class:"event-types-management"},r=p((()=>(0,a.Lk)("h2",null,"Event-Typen Verwaltung",-1))),o=p((()=>(0,a.Lk)("label",{for:"newEventType"},"Event-Typ:",-1))),v={type:"submit"},y=["onClick"],l=["onClick"];function c(e,t,n,p,c,u){return(0,a.uX)(),(0,a.CE)("div",d,[r,(0,a.Lk)("form",{onSubmit:t[2]||(t[2]=(0,i.D$)(((...e)=>u.saveEventType&&u.saveEventType(...e)),["prevent"]))},[o,(0,a.bo)((0,a.Lk)("input",{type:"text",id:"newEventType","onUpdate:modelValue":t[0]||(t[0]=e=>c.eventTypeData.caption=e),placeholder:"Event-Typ",required:""},null,512),[[i.Jo,c.eventTypeData.caption]]),(0,a.Lk)("button",v,(0,s.v_)(c.editMode?"Aktualisieren":"Hinzufügen"),1),c.editMode?((0,a.uX)(),(0,a.CE)("button",{key:0,type:"button",onClick:t[1]||(t[1]=(...e)=>u.resetForm&&u.resetForm(...e))},"Abbrechen")):(0,a.Q3)("",!0)],32),(0,a.Lk)("table",null,[((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(c.eventTypes,(e=>((0,a.uX)(),(0,a.CE)("tr",{key:e.id},[(0,a.Lk)("td",null,(0,s.v_)(e.caption),1),(0,a.Lk)("td",null,[(0,a.Lk)("button",{onClick:t=>u.editEventType(e)},"Bearbeiten",8,y)]),(0,a.Lk)("td",null,[(0,a.Lk)("button",{onClick:t=>u.deleteEventType(e.id)},"Löschen",8,l)])])))),128))])])}n(4114);var u=n(4335),h={data(){return{eventTypes:[],eventTypeData:{caption:""},editMode:!1,editId:null}},methods:{async fetchEventTypes(){try{const e=await u.A.get("/event-types");this.eventTypes=e.data}catch(e){console.error("Fehler beim Abrufen der Event-Typen:",e)}},async saveEventType(){try{if(this.editMode)await u.A.put(`/event-types/${this.editId}`,this.eventTypeData);else{const e=await u.A.post("/event-types",this.eventTypeData);this.eventTypes.push(e.data)}this.resetForm(),await this.fetchEventTypes()}catch(e){console.error("Fehler beim Speichern des Event-Typs:",e)}},editEventType(e){this.eventTypeData={...e},this.editMode=!0,this.editId=e.id},async deleteEventType(e){try{await u.A.delete(`/event-types/${e}`),await this.fetchEventTypes()}catch(t){console.error("Fehler beim Löschen des Event-Typs:",t)}},resetForm(){this.eventTypeData={caption:""},this.editMode=!1,this.editId=null}},async created(){await this.fetchEventTypes()}},T=n(6262);const k=(0,T.A)(h,[["render",c],["__scopeId","data-v-60fe58a4"]]);var E=k}}]);
|
||||||
|
//# sourceMappingURL=246.760602fa.js.map
|
||||||
1
public/js/246.760602fa.js.map
Normal file
1
public/js/246.760602fa.js.map
Normal file
File diff suppressed because one or more lines are too long
2
public/js/246.bc7aeb2e.js
Normal file
2
public/js/246.bc7aeb2e.js
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
"use strict";(self["webpackChunkmiriamgemeinde"]=self["webpackChunkmiriamgemeinde"]||[]).push([[246],{6246:function(e,t,n){n.r(t),n.d(t,{default:function(){return E}});var a=n(641),i=n(3751),s=n(33);const p=e=>((0,a.Qi)("data-v-60fe58a4"),e=e(),(0,a.jt)(),e),d={class:"event-types-management"},r=p((()=>(0,a.Lk)("h2",null,"Event-Typen Verwaltung",-1))),o=p((()=>(0,a.Lk)("label",{for:"newEventType"},"Event-Typ:",-1))),v={type:"submit"},y=["onClick"],l=["onClick"];function c(e,t,n,p,c,u){return(0,a.uX)(),(0,a.CE)("div",d,[r,(0,a.Lk)("form",{onSubmit:t[2]||(t[2]=(0,i.D$)(((...e)=>u.saveEventType&&u.saveEventType(...e)),["prevent"]))},[o,(0,a.bo)((0,a.Lk)("input",{type:"text",id:"newEventType","onUpdate:modelValue":t[0]||(t[0]=e=>c.eventTypeData.caption=e),placeholder:"Event-Typ",required:""},null,512),[[i.Jo,c.eventTypeData.caption]]),(0,a.Lk)("button",v,(0,s.v_)(c.editMode?"Aktualisieren":"Hinzufügen"),1),c.editMode?((0,a.uX)(),(0,a.CE)("button",{key:0,type:"button",onClick:t[1]||(t[1]=(...e)=>u.resetForm&&u.resetForm(...e))},"Abbrechen")):(0,a.Q3)("",!0)],32),(0,a.Lk)("table",null,[((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(c.eventTypes,(e=>((0,a.uX)(),(0,a.CE)("tr",{key:e.id},[(0,a.Lk)("td",null,(0,s.v_)(e.caption),1),(0,a.Lk)("td",null,[(0,a.Lk)("button",{onClick:t=>u.editEventType(e)},"Bearbeiten",8,y)]),(0,a.Lk)("td",null,[(0,a.Lk)("button",{onClick:t=>u.deleteEventType(e.id)},"Löschen",8,l)])])))),128))])])}n(4114);var u=n(4335),h={data(){return{eventTypes:[],eventTypeData:{caption:""},editMode:!1,editId:null}},methods:{async fetchEventTypes(){try{const e=await u.A.get("/event-types");this.eventTypes=e.data}catch(e){console.error("Fehler beim Abrufen der Event-Typen:",e)}},async saveEventType(){try{if(this.editMode)await u.A.put(`/event-types/${this.editId}`,this.eventTypeData);else{const e=await u.A.post("/event-types",this.eventTypeData);this.eventTypes.push(e.data)}this.resetForm(),await this.fetchEventTypes()}catch(e){console.error("Fehler beim Speichern des Event-Typs:",e)}},editEventType(e){this.eventTypeData={...e},this.editMode=!0,this.editId=e.id},async deleteEventType(e){try{await u.A.delete(`/event-types/${e}`),await this.fetchEventTypes()}catch(t){console.error("Fehler beim Löschen des Event-Typs:",t)}},resetForm(){this.eventTypeData={caption:""},this.editMode=!1,this.editId=null}},async created(){await this.fetchEventTypes()}},T=n(6262);const k=(0,T.A)(h,[["render",c],["__scopeId","data-v-60fe58a4"]]);var E=k}}]);
|
||||||
|
//# sourceMappingURL=246.bc7aeb2e.js.map
|
||||||
1
public/js/246.bc7aeb2e.js.map
Normal file
1
public/js/246.bc7aeb2e.js.map
Normal file
File diff suppressed because one or more lines are too long
2
public/js/260.a0d49da0.js
Normal file
2
public/js/260.a0d49da0.js
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
"use strict";(self["webpackChunkmiriamgemeinde"]=self["webpackChunkmiriamgemeinde"]||[]).push([[260],{4260:function(e,l,t){t.r(l),t.d(l,{default:function(){return c}});var a=t(641),i=t(33);const o={key:0,class:"dialog-overlay"},n={class:"dialog"};function s(e,l,t,s,r,u){return t.modelValue?((0,a.uX)(),(0,a.CE)("div",o,[(0,a.Lk)("div",n,[(0,a.Lk)("h2",null,(0,i.v_)(t.title),1),(0,a.Lk)("p",null,(0,i.v_)(t.message),1),(0,a.Lk)("button",{onClick:l[0]||(l[0]=(...e)=>u.closeDialog&&u.closeDialog(...e))},"OK")])])):(0,a.Q3)("",!0)}var r={name:"DialogComponent",props:{title:{type:String,required:!0},message:{type:String,required:!0},modelValue:{type:Boolean,default:!1}},methods:{closeDialog(){this.$emit("update:modelValue",!1),this.$emit("close")}}},u=t(6262);const d=(0,u.A)(r,[["render",s],["__scopeId","data-v-64c2e06a"]]);var c=d}}]);
|
||||||
|
//# sourceMappingURL=260.a0d49da0.js.map
|
||||||
1
public/js/260.a0d49da0.js.map
Normal file
1
public/js/260.a0d49da0.js.map
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"js/260.a0d49da0.js","mappings":"sMAAAA,IAAA,EACyBC,MAAM,kB,GACtBA,MAAM,U,+BADFC,EAAAC,a,WAAXC,EAAAA,EAAAA,IAMM,MANNC,EAMM,EALJC,EAAAA,EAAAA,IAIM,MAJNC,EAIM,EAHJD,EAAAA,EAAAA,IAAoB,WAAAE,EAAAA,EAAAA,IAAbN,EAAAO,OAAK,IACZH,EAAAA,EAAAA,IAAoB,UAAAE,EAAAA,EAAAA,IAAdN,EAAAQ,SAAO,IACbJ,EAAAA,EAAAA,IAAwC,UAA/BK,QAAKC,EAAA,KAAAA,EAAA,OAAAC,IAAEC,EAAAC,aAAAD,EAAAC,eAAAF,KAAa,YALnCG,EAAAA,EAAAA,IAAA,M,CAWA,OACEC,KAAM,kBACNC,MAAO,CACLT,MAAO,CACLU,KAAMC,OACNC,UAAU,GAEZX,QAAS,CACPS,KAAMC,OACNC,UAAU,GAEZlB,WAAY,CACVgB,KAAMG,QACNC,SAAS,IAGbC,QAAS,CACPT,WAAAA,GACEU,KAAKC,MAAM,qBAAqB,GAChCD,KAAKC,MAAM,QACb,I,UCxBJ,MAAMC,GAA2B,OAAgB,EAAQ,CAAC,CAAC,SAASC,GAAQ,CAAC,YAAY,qBAEzF,O","sources":["webpack://miriamgemeinde/./src/common/components/DialogComponent.vue","webpack://miriamgemeinde/./src/common/components/DialogComponent.vue?92fc"],"sourcesContent":["<template>\n <div v-if=\"modelValue\" class=\"dialog-overlay\">\n <div class=\"dialog\">\n <h2>{{ title }}</h2>\n <p>{{ message }}</p>\n <button @click=\"closeDialog\">OK</button>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'DialogComponent',\n props: {\n title: {\n type: String,\n required: true\n },\n message: {\n type: String,\n required: true\n },\n modelValue: {\n type: Boolean,\n default: false\n }\n },\n methods: {\n closeDialog() {\n this.$emit('update:modelValue', false);\n this.$emit('close');\n }\n }\n};\n</script>\n\n<style scoped>\n.dialog-overlay {\n top: calc(50% - 25em);\n left: 5%;\n width: 90%;\n height: 50em;\n background: rgba(0, 0, 0, .5);\n display: flex;\n justify-content: center;\n align-items: center;\n overflow: auto;\n}\n\n.dialog {\n background: white;\n padding: 20px;\n border-radius: 5px;\n max-width: 400px;\n width: 100%;\n text-align: center;\n}\n\nbutton {\n margin-top: 20px;\n}\n</style>","import { render } from \"./DialogComponent.vue?vue&type=template&id=64c2e06a&scoped=true\"\nimport script from \"./DialogComponent.vue?vue&type=script&lang=js\"\nexport * from \"./DialogComponent.vue?vue&type=script&lang=js\"\n\nimport \"./DialogComponent.vue?vue&type=style&index=0&id=64c2e06a&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-64c2e06a\"]])\n\nexport default __exports__"],"names":["key","class","$props","modelValue","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_toDisplayString","title","message","onClick","_cache","args","$options","closeDialog","_createCommentVNode","name","props","type","String","required","Boolean","default","methods","this","$emit","__exports__","render"],"sourceRoot":""}
|
||||||
2
public/js/281.46d980f9.js
Normal file
2
public/js/281.46d980f9.js
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
"use strict";(self["webpackChunkmiriamgemeinde"]=self["webpackChunkmiriamgemeinde"]||[]).push([[281],{7281:function(e,i,s){s.r(i),s.d(i,{default:function(){return f}});var a=s(641),t=s(3751),o=s(33);const l=e=>((0,a.Qi)("data-v-c694cf4e"),e=e(),(0,a.jt)(),e),n={class:"forgot-password"},r=l((()=>(0,a.Lk)("h2",null,"Passwort vergessen",-1))),d=l((()=>(0,a.Lk)("label",{for:"email"},"Email-Adresse:",-1))),g=l((()=>(0,a.Lk)("button",{type:"submit"},"Link zum Zurücksetzen senden",-1))),u={key:0,class:"dialog"},c={class:"dialog-content"};function m(e,i,s,l,m,k){const h=(0,a.g2)("router-link");return(0,a.uX)(),(0,a.CE)("div",n,[r,(0,a.Lk)("form",{onSubmit:i[1]||(i[1]=(0,t.D$)(((...e)=>k.submitForgotPassword&&k.submitForgotPassword(...e)),["prevent"]))},[d,(0,a.bo)((0,a.Lk)("input",{type:"email",id:"email","onUpdate:modelValue":i[0]||(i[0]=e=>m.email=e),required:""},null,512),[[t.Jo,m.email]]),g],32),(0,a.Lk)("p",null,[(0,a.bF)(h,{to:"/login"},{default:(0,a.k6)((()=>[(0,a.eW)("Login")])),_:1})]),(0,a.Lk)("p",null,[(0,a.bF)(h,{to:"/register"},{default:(0,a.k6)((()=>[(0,a.eW)("Registrieren")])),_:1})]),m.dialogVisible?((0,a.uX)(),(0,a.CE)("div",u,[(0,a.Lk)("div",c,[(0,a.Lk)("h3",null,(0,o.v_)(m.dialogTitle),1),(0,a.Lk)("p",null,(0,o.v_)(m.dialogMessage),1),(0,a.Lk)("button",{type:"button",onClick:i[2]||(i[2]=(...e)=>k.closeDialog&&k.closeDialog(...e))},"Schließen")])])):(0,a.Q3)("",!0)])}var k=s(3173),h={name:"ForgotPassword",data(){return{email:"",dialogTitle:"",dialogMessage:"",dialogVisible:!1}},methods:{async submitForgotPassword(){try{const e=await k.A.post("/auth/forgot-password",{email:this.email});this.showDialog("E-Mail gesendet",e.data?.message||"Ein Link zum Zurücksetzen wurde an Ihre E-Mail-Adresse gesendet."),this.email=""}catch(e){const i=e?.response?.data?.message||e?.message||"Ein unbekannter Fehler ist aufgetreten";this.showDialog("Fehler",i)}},showDialog(e,i){this.dialogTitle=e,this.dialogMessage=i,this.dialogVisible=!0},closeDialog(){this.dialogVisible=!1}}},b=s(6262);const p=(0,b.A)(h,[["render",m],["__scopeId","data-v-c694cf4e"]]);var f=p}}]);
|
||||||
|
//# sourceMappingURL=281.46d980f9.js.map
|
||||||
1
public/js/281.46d980f9.js.map
Normal file
1
public/js/281.46d980f9.js.map
Normal file
File diff suppressed because one or more lines are too long
2
public/js/289.442f0887.js
Normal file
2
public/js/289.442f0887.js
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
"use strict";(self["webpackChunkmiriamgemeinde"]=self["webpackChunkmiriamgemeinde"]||[]).push([[289],{4289:function(e,t,a){a.r(t),a.d(t,{default:function(){return d}});var n=a(641);const u=["src"];function m(e,t,a,m,r,i){return(0,n.uX)(),(0,n.CE)("img",{src:r.currentImage},null,8,u)}var r=a(6278),i={name:"ImageContent",data(){return{defaultImage:"/images/homepage1.png",currentImage:"/images/homepage1.png"}},computed:{...(0,r.aH)(["menuData"])},watch:{$route:{immediate:!0,handler(){this.updateImage()}}},methods:{updateImage(){const e=this.$route.path,t=this.menuData,a=this.findMenuItemByPath(t,e);a&&a.image?this.currentImage=`/images/${a.image}`:this.currentImage=this.defaultImage},findMenuItemByPath(e,t){for(let a of e){if(a.link===t)return a;if(a.submenu){const e=this.findMenuItemByPath(a.submenu,t);if(e)return e}}return null}}},s=a(6262);const g=(0,s.A)(i,[["render",m],["__scopeId","data-v-d1b58e08"]]);var d=g}}]);
|
||||||
|
//# sourceMappingURL=289.442f0887.js.map
|
||||||
1
public/js/289.442f0887.js.map
Normal file
1
public/js/289.442f0887.js.map
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"js/289.442f0887.js","mappings":"6LAAA,Q,0CACIA,EAAAA,EAAAA,IAA2B,OAArBC,IAAKC,EAAAC,cAAY,OAD3BC,E,eAOA,GACEC,KAAM,eACNC,IAAAA,GACE,MAAO,CACLC,aAAc,wBACdJ,aAAc,wBAElB,EACAK,SAAU,KACLC,EAAAA,EAAAA,IAAS,CAAC,cAEfC,MAAO,CACLC,OAAQ,CACNC,WAAW,EACXC,OAAAA,GACEC,KAAKC,aACP,IAGJC,QAAS,CACPD,WAAAA,GACE,MAAME,EAAYH,KAAKH,OAAOO,KACxBC,EAAWL,KAAKK,SAChBC,EAAWN,KAAKO,mBAAmBF,EAAUF,GAC/CG,GAAYA,EAASE,MACvBR,KAAKX,aAAe,WAAWiB,EAASE,QAExCR,KAAKX,aAAeW,KAAKP,YAE7B,EACAc,kBAAAA,CAAmBE,EAAML,GACvB,IAAK,IAAIM,KAAQD,EAAM,CACrB,GAAIC,EAAKC,OAASP,EAChB,OAAOM,EAET,GAAIA,EAAKE,QAAS,CAChB,MAAMC,EAAUb,KAAKO,mBAAmBG,EAAKE,QAASR,GACtD,GAAIS,EACF,OAAOA,CAEX,CACF,CACA,OAAO,IACT,I,UC3CJ,MAAMC,GAA2B,OAAgB,EAAQ,CAAC,CAAC,SAASC,GAAQ,CAAC,YAAY,qBAEzF,O","sources":["webpack://miriamgemeinde/./src/content/ImageContent.vue","webpack://miriamgemeinde/./src/content/ImageContent.vue?ee30"],"sourcesContent":["<template>\n <img :src=\"currentImage\" />\n</template>\n\n<script>\nimport { mapState } from 'vuex';\n\nexport default {\n name: 'ImageContent',\n data() {\n return {\n defaultImage: '/images/homepage1.png',\n currentImage: '/images/homepage1.png'\n };\n },\n computed: {\n ...mapState(['menuData']),\n },\n watch: {\n $route: {\n immediate: true,\n handler() {\n this.updateImage();\n }\n }\n },\n methods: {\n updateImage() {\n const routePath = this.$route.path;\n const menuData = this.menuData;\n const menuItem = this.findMenuItemByPath(menuData, routePath);\n if (menuItem && menuItem.image) {\n this.currentImage = `/images/${menuItem.image}`;\n } else {\n this.currentImage = this.defaultImage;\n }\n },\n findMenuItemByPath(menu, path) {\n for (let item of menu) {\n if (item.link === path) {\n return item;\n }\n if (item.submenu) {\n const subItem = this.findMenuItemByPath(item.submenu, path);\n if (subItem) {\n return subItem;\n }\n }\n }\n return null;\n }\n }\n};\n</script>\n\n<style scoped>\n.right-column h2 {\n text-align: center;\n color: #000;\n}\n\n.right-column img {\n display: block;\n margin: 0 auto;\n max-width: 100%;\n height: auto;\n}\n</style>\n","import { render } from \"./ImageContent.vue?vue&type=template&id=d1b58e08&scoped=true\"\nimport script from \"./ImageContent.vue?vue&type=script&lang=js\"\nexport * from \"./ImageContent.vue?vue&type=script&lang=js\"\n\nimport \"./ImageContent.vue?vue&type=style&index=0&id=d1b58e08&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-d1b58e08\"]])\n\nexport default __exports__"],"names":["_createElementBlock","src","$data","currentImage","_hoisted_1","name","data","defaultImage","computed","mapState","watch","$route","immediate","handler","this","updateImage","methods","routePath","path","menuData","menuItem","findMenuItemByPath","image","menu","item","link","submenu","subItem","__exports__","render"],"sourceRoot":""}
|
||||||
2
public/js/299.b37519d7.js
Normal file
2
public/js/299.b37519d7.js
Normal file
File diff suppressed because one or more lines are too long
1
public/js/299.b37519d7.js.map
Normal file
1
public/js/299.b37519d7.js.map
Normal file
File diff suppressed because one or more lines are too long
2
public/js/324.45a1757a.js
Normal file
2
public/js/324.45a1757a.js
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
"use strict";(self["webpackChunkmiriamgemeinde"]=self["webpackChunkmiriamgemeinde"]||[]).push([[324],{1324:function(e,i,s){s.r(i),s.d(i,{default:function(){return f}});var a=s(641),t=s(3751),o=s(33);const l=e=>((0,a.Qi)("data-v-c694cf4e"),e=e(),(0,a.jt)(),e),n={class:"forgot-password"},r=l((()=>(0,a.Lk)("h2",null,"Passwort vergessen",-1))),d=l((()=>(0,a.Lk)("label",{for:"email"},"Email-Adresse:",-1))),g=l((()=>(0,a.Lk)("button",{type:"submit"},"Link zum Zurücksetzen senden",-1))),u={key:0,class:"dialog"},c={class:"dialog-content"};function m(e,i,s,l,m,k){const h=(0,a.g2)("router-link");return(0,a.uX)(),(0,a.CE)("div",n,[r,(0,a.Lk)("form",{onSubmit:i[1]||(i[1]=(0,t.D$)(((...e)=>k.submitForgotPassword&&k.submitForgotPassword(...e)),["prevent"]))},[d,(0,a.bo)((0,a.Lk)("input",{type:"email",id:"email","onUpdate:modelValue":i[0]||(i[0]=e=>m.email=e),required:""},null,512),[[t.Jo,m.email]]),g],32),(0,a.Lk)("p",null,[(0,a.bF)(h,{to:"/login"},{default:(0,a.k6)((()=>[(0,a.eW)("Login")])),_:1})]),(0,a.Lk)("p",null,[(0,a.bF)(h,{to:"/register"},{default:(0,a.k6)((()=>[(0,a.eW)("Registrieren")])),_:1})]),m.dialogVisible?((0,a.uX)(),(0,a.CE)("div",u,[(0,a.Lk)("div",c,[(0,a.Lk)("h3",null,(0,o.v_)(m.dialogTitle),1),(0,a.Lk)("p",null,(0,o.v_)(m.dialogMessage),1),(0,a.Lk)("button",{type:"button",onClick:i[2]||(i[2]=(...e)=>k.closeDialog&&k.closeDialog(...e))},"Schließen")])])):(0,a.Q3)("",!0)])}var k=s(6296),h={name:"ForgotPassword",data(){return{email:"",dialogTitle:"",dialogMessage:"",dialogVisible:!1}},methods:{async submitForgotPassword(){try{const e=await k.A.post("/auth/forgot-password",{email:this.email});this.showDialog("E-Mail gesendet",e.data?.message||"Ein Link zum Zurücksetzen wurde an Ihre E-Mail-Adresse gesendet."),this.email=""}catch(e){const i=e?.response?.data?.message||e?.message||"Ein unbekannter Fehler ist aufgetreten";this.showDialog("Fehler",i)}},showDialog(e,i){this.dialogTitle=e,this.dialogMessage=i,this.dialogVisible=!0},closeDialog(){this.dialogVisible=!1}}},b=s(6262);const p=(0,b.A)(h,[["render",m],["__scopeId","data-v-c694cf4e"]]);var f=p}}]);
|
||||||
|
//# sourceMappingURL=324.45a1757a.js.map
|
||||||
1
public/js/324.45a1757a.js.map
Normal file
1
public/js/324.45a1757a.js.map
Normal file
File diff suppressed because one or more lines are too long
2
public/js/324.d5182513.js
Normal file
2
public/js/324.d5182513.js
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
"use strict";(self["webpackChunkmiriamgemeinde"]=self["webpackChunkmiriamgemeinde"]||[]).push([[324],{1324:function(e,i,s){s.r(i),s.d(i,{default:function(){return f}});var a=s(641),t=s(3751),o=s(33);const l=e=>((0,a.Qi)("data-v-c694cf4e"),e=e(),(0,a.jt)(),e),n={class:"forgot-password"},r=l((()=>(0,a.Lk)("h2",null,"Passwort vergessen",-1))),d=l((()=>(0,a.Lk)("label",{for:"email"},"Email-Adresse:",-1))),g=l((()=>(0,a.Lk)("button",{type:"submit"},"Link zum Zurücksetzen senden",-1))),u={key:0,class:"dialog"},c={class:"dialog-content"};function m(e,i,s,l,m,k){const h=(0,a.g2)("router-link");return(0,a.uX)(),(0,a.CE)("div",n,[r,(0,a.Lk)("form",{onSubmit:i[1]||(i[1]=(0,t.D$)(((...e)=>k.submitForgotPassword&&k.submitForgotPassword(...e)),["prevent"]))},[d,(0,a.bo)((0,a.Lk)("input",{type:"email",id:"email","onUpdate:modelValue":i[0]||(i[0]=e=>m.email=e),required:""},null,512),[[t.Jo,m.email]]),g],32),(0,a.Lk)("p",null,[(0,a.bF)(h,{to:"/login"},{default:(0,a.k6)((()=>[(0,a.eW)("Login")])),_:1})]),(0,a.Lk)("p",null,[(0,a.bF)(h,{to:"/register"},{default:(0,a.k6)((()=>[(0,a.eW)("Registrieren")])),_:1})]),m.dialogVisible?((0,a.uX)(),(0,a.CE)("div",u,[(0,a.Lk)("div",c,[(0,a.Lk)("h3",null,(0,o.v_)(m.dialogTitle),1),(0,a.Lk)("p",null,(0,o.v_)(m.dialogMessage),1),(0,a.Lk)("button",{type:"button",onClick:i[2]||(i[2]=(...e)=>k.closeDialog&&k.closeDialog(...e))},"Schließen")])])):(0,a.Q3)("",!0)])}var k=s(6296),h={name:"ForgotPassword",data(){return{email:"",dialogTitle:"",dialogMessage:"",dialogVisible:!1}},methods:{async submitForgotPassword(){try{const e=await k.A.post("/auth/forgot-password",{email:this.email});this.showDialog("E-Mail gesendet",e.data?.message||"Ein Link zum Zurücksetzen wurde an Ihre E-Mail-Adresse gesendet."),this.email=""}catch(e){const i=e?.response?.data?.message||e?.message||"Ein unbekannter Fehler ist aufgetreten";this.showDialog("Fehler",i)}},showDialog(e,i){this.dialogTitle=e,this.dialogMessage=i,this.dialogVisible=!0},closeDialog(){this.dialogVisible=!1}}},b=s(6262);const p=(0,b.A)(h,[["render",m],["__scopeId","data-v-c694cf4e"]]);var f=p}}]);
|
||||||
|
//# sourceMappingURL=324.d5182513.js.map
|
||||||
1
public/js/324.d5182513.js.map
Normal file
1
public/js/324.d5182513.js.map
Normal file
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user