Compare commits

..

16 Commits

Author SHA1 Message Date
5f5fb83e9a Merge pull request 'Update dependency jsonwebtoken to v9.0.3' (#3) from renovate/jsonwebtoken-9.x-lockfile into main
Reviewed-on: #3
2025-12-19 16:14:10 +01:00
f15598b2c1 Merge pull request 'Update dependency body-parser to v1.20.4' (#2) from renovate/body-parser-1.x-lockfile into main
Reviewed-on: #2
2025-12-19 16:14:02 +01:00
979732d545 Update dependency jsonwebtoken to v9.0.3 2025-12-19 16:12:32 +01:00
d9e0b07f0c Update dependency body-parser to v1.20.4 2025-12-19 16:12:24 +01:00
b5ac5df38d Merge pull request 'Configure Renovate' (#1) from renovate/configure into main
Reviewed-on: #1
2025-12-19 16:09:02 +01:00
c982f34823 Add renovate.json 2025-12-19 15:58:37 +01:00
Torsten Schulz (local)
c390228ed9 Update database configuration and improve WorshipRender component: Change database connection details to use 'miriamgemeinde' and 'localhost', and enhance conditional rendering in WorshipRender.vue for better handling of event place information. 2025-11-23 00:32:23 +01:00
Torsten Schulz (local)
9c924071f4 Update package-lock.json and configuration files: Upgrade lockfile version to 3, update @vue/cli-plugin-babel and @vue/cli-plugin-eslint to version 5.0.0, and change database connection details to use 'miriam_user' and host 'tsschulz.de' with the new password. 2025-11-23 00:24:05 +01:00
Torsten Schulz (local)
2d1ed43312 Refactor babel.config.js: Simplify Babel preset configuration by using the package name instead of a direct path for improved readability and maintainability. 2025-11-22 23:37:34 +01:00
Torsten Schulz (local)
11cf961ed8 Update package.json: Upgrade @vue/cli-plugin-babel and @vue/cli-plugin-eslint to version 5.0.0, removing the previous version 3.12.1 for better compatibility. 2025-11-22 23:33:04 +01:00
Torsten Schulz (local)
cd9e645941 Update babel.config.js: Use direct path for Babel preset to ensure reliable resolution across different Node/npm versions. 2025-11-22 23:29:40 +01:00
Torsten Schulz (local)
7bd236aa82 Update package.json: Re-add @vue/cli-plugin-babel dependency to version 3.12.1 in devDependencies. 2025-11-22 23:24:53 +01:00
Torsten Schulz (local)
f96e0a1f22 Update package dependencies: Downgrade @vue/cli and its plugins to version 4.2.2 and 3.12.1 respectively, and update various Babel packages to version 7.28.5. Remove unused Apollo packages and add new dependencies for vue-jscodeshift-adapter and vue-sfc-descriptor-to-string. 2025-11-22 23:17:23 +01:00
Torsten Schulz (local)
45190ed7a5 Füge eine Überprüfung hinzu, um endlose Wiederholungen beim Laden von Menü-Daten zu verhindern: Implementiere eine Flagge, die sicherstellt, dass die Menü-Daten nur einmal geladen werden, bevor die Routen generiert werden. 2025-11-22 22:47:51 +01:00
Torsten Schulz (local)
79f2ca8382 Füge eine Überprüfung hinzu, um endlose Wiederholungen beim Laden von Menü-Daten zu verhindern: Implementiere eine Flagge, die sicherstellt, dass die Menü-Daten nur einmal geladen werden, bevor die Routen generiert werden. 2025-11-22 22:31:28 +01:00
Torsten Schulz (local)
550ed97a11 Aktualisiere die Axios-Konfiguration: Setze die Basis-URL standardmäßig auf '/api' und ermögliche die Verwendung einer Umgebungsvariablen in Entwicklungsumgebungen. Verhindere Mixed-Content-Probleme durch Umstellung auf HTTPS. Ändere den Import von Axios im Store, um die neue Konfiguration zu nutzen. 2025-11-22 22:23:08 +01:00
9 changed files with 7520 additions and 18609 deletions

View File

@@ -2,4 +2,4 @@ module.exports = {
presets: [ presets: [
'@vue/cli-plugin-babel/preset' '@vue/cli-plugin-babel/preset'
] ]
} };

View File

@@ -1,21 +1,21 @@
{ {
"development": { "development": {
"username": "miriam_user", "username": "miriamgemeinde",
"password": "qTCTTWwpEwy3vPDU", "password": "hitomisan",
"database": "miriamgemeinde", "database": "miriamgemeinde",
"host": "tsschulz.de", "host": "localhost",
"dialect": "mysql" "dialect": "mysql"
}, },
"test": { "test": {
"username": "miriam_user", "username": "miriam_user",
"password": "qTCTTWwpEwy3vPDU", "password": "hitomisan",
"database": "miriamgemeinde", "database": "miriamgemeinde",
"host": "tsschulz.de", "host": "tsschulz.de",
"dialect": "mysql" "dialect": "mysql"
}, },
"production": { "production": {
"username": "miriam_user", "username": "miriam_user",
"password": "qTCTTWwpEwy3vPDU", "password": "hitomisan",
"database": "miriamgemeinde", "database": "miriamgemeinde",
"host": "tsschulz.de", "host": "tsschulz.de",
"dialect": "mysql" "dialect": "mysql"

26050
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -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": "^5.0.8", "@vue/cli": "^4.2.2",
"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",

6
renovate.json Normal file
View File

@@ -0,0 +1,6 @@
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
"config:recommended"
]
}

View File

@@ -2,20 +2,11 @@ import axios from 'axios';
import store from './store'; import store from './store';
import router from './router'; import router from './router';
// Basis-URL für das Backend ermitteln // Einheitliche Basis-URL:
let baseURL = process.env.VUE_APP_BACKEND_URL || '/api'; // - immer relativ zur aktuellen Origin
// - kein absoluter http/https-Host → verhindert Mixed-Content-Probleme
// Mixed-Content vermeiden: wenn die Seite über HTTPS läuft, axios.defaults.baseURL = '/api';
// aber die Konfiguration "http://" verwendet, auf "https://" umschalten. console.log('Axios baseURL:', axios.defaults.baseURL);
if (typeof window !== 'undefined') {
const isHttps = window.location.protocol === 'https:';
if (isHttps && baseURL.startsWith('http://')) {
baseURL = baseURL.replace(/^http:/, 'https:');
}
}
axios.defaults.baseURL = baseURL;
console.log('Axios baseURL:', baseURL);
axios.interceptors.request.use( axios.interceptors.request.use(
config => { config => {

View File

@@ -11,22 +11,35 @@
<div v-if="worship.neighborInvitation" class="neighborhood-invitation">Einladung zum Gottesdienst im <div v-if="worship.neighborInvitation" class="neighborhood-invitation">Einladung zum Gottesdienst im
Nachbarschaftsraum:</div> Nachbarschaftsraum:</div>
<h3> <h3>
<span :class="worship.highlightTime ? 'highlight-time' : ''">{{ formatTime(worship.time) <span
}}</span>&nbsp;-&nbsp; :class="worship.highlightTime ? 'highlight-time' : ''"
{{ worship.title ? worship.title : `Gottesdienst in ${worship.eventPlace.name}` }} >{{ formatTime(worship.time) }}</span>&nbsp;-&nbsp;
{{
worship.title
? worship.title
: (worship.eventPlace && worship.eventPlace.name
? `Gottesdienst in ${worship.eventPlace.name}`
: 'Gottesdienst')
}}
</h3> </h3>
<div v-if="worship.organizer">Gestaltung: {{ worship.organizer }}</div> <div v-if="worship.organizer">Gestaltung: {{ worship.organizer }}</div>
<div v-if="worship.sacristanService" class="internal-information">Küsterdienst: {{ worship.sacristanService }}</div> <div v-if="worship.sacristanService" class="internal-information">Küsterdienst: {{ worship.sacristanService }}</div>
<div v-if="worship.collection">Kollekte: {{ worship.collection }}</div> <div v-if="worship.collection">Kollekte: {{ worship.collection }}</div>
<div v-if="worship.organPlaying" class="internal-information">Orgelspiel: {{ worship.organPlaying }}</div> <div v-if="worship.organPlaying" class="internal-information">Orgelspiel: {{ worship.organPlaying }}</div>
<div v-if="worship.address">{{ worship.address }}</div> <div v-if="worship.address">{{ worship.address }}</div>
<div v-if="!worship.address && worship.eventPlace.id && worship.eventPlace.id"> <div
Adresse: {{ worship.eventPlace.name }}, {{ worship.eventPlace.street }}, {{ v-if="!worship.address && worship.eventPlace && worship.eventPlace.id"
worship.eventPlace.city }} >
Adresse: {{ worship.eventPlace.name }}, {{ worship.eventPlace.street }}, {{ worship.eventPlace.city }}
</div> </div>
<div v-if="worship.selfInformation" class="selfinformation">Bitte informieren Sie sich auch auf den <div v-if="worship.selfInformation" class="selfinformation">
<a v-if="worship.eventPlace.website" :href="worship.eventPlace.website" target="_blank">Internetseiten dieser Gemeinde!</a><span Bitte informieren Sie sich auch auf den
v-else>Internetseiten dieser Gemeinde!</span> <a
v-if="worship.eventPlace && worship.eventPlace.website"
:href="worship.eventPlace.website"
target="_blank"
>Internetseiten dieser Gemeinde!</a>
<span v-else>Internetseiten dieser Gemeinde!</span>
</div> </div>
</td> </td>
</tr> </tr>

View File

@@ -45,8 +45,13 @@ const router = createRouter({
routes: [] routes: []
}); });
// Verhindert endlose Wiederholungen von fehlgeschlagenen Menü-Ladeversuchen
let menuDataInitialized = false;
router.beforeEach(async (to, from, next) => { router.beforeEach(async (to, from, next) => {
if (!store.state.menuData.length) { if (!menuDataInitialized) {
menuDataInitialized = true;
await store.dispatch('loadMenuData'); await store.dispatch('loadMenuData');
const routes = generateRoutesFromMenu(store.state.menuData); const routes = generateRoutesFromMenu(store.state.menuData);
routes.forEach(route => router.addRoute(route)); routes.forEach(route => router.addRoute(route));

View File

@@ -1,5 +1,5 @@
import { createStore } from 'vuex'; import { createStore } from 'vuex';
import axios from 'axios'; import axios from '../axios';
import router from '../router'; import router from '../router';
let user = []; let user = [];