Compare commits
10 Commits
718bcabea3
...
c390228ed9
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c390228ed9 | ||
|
|
9c924071f4 | ||
|
|
2d1ed43312 | ||
|
|
11cf961ed8 | ||
|
|
cd9e645941 | ||
|
|
7bd236aa82 | ||
|
|
f96e0a1f22 | ||
|
|
45190ed7a5 | ||
|
|
79f2ca8382 | ||
|
|
550ed97a11 |
@@ -2,4 +2,4 @@ module.exports = {
|
||||
presets: [
|
||||
'@vue/cli-plugin-babel/preset'
|
||||
]
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1,21 +1,21 @@
|
||||
{
|
||||
"development": {
|
||||
"username": "miriam_user",
|
||||
"password": "qTCTTWwpEwy3vPDU",
|
||||
"username": "miriamgemeinde",
|
||||
"password": "hitomisan",
|
||||
"database": "miriamgemeinde",
|
||||
"host": "tsschulz.de",
|
||||
"host": "localhost",
|
||||
"dialect": "mysql"
|
||||
},
|
||||
"test": {
|
||||
"username": "miriam_user",
|
||||
"password": "qTCTTWwpEwy3vPDU",
|
||||
"password": "hitomisan",
|
||||
"database": "miriamgemeinde",
|
||||
"host": "tsschulz.de",
|
||||
"dialect": "mysql"
|
||||
},
|
||||
"production": {
|
||||
"username": "miriam_user",
|
||||
"password": "qTCTTWwpEwy3vPDU",
|
||||
"password": "hitomisan",
|
||||
"database": "miriamgemeinde",
|
||||
"host": "tsschulz.de",
|
||||
"dialect": "mysql"
|
||||
|
||||
25924
package-lock.json
generated
25924
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -26,7 +26,7 @@
|
||||
"@tiptap/extension-underline": "^2.4.0",
|
||||
"@tiptap/starter-kit": "^2.4.0",
|
||||
"@tiptap/vue-3": "^2.4.0",
|
||||
"@vue/cli": "^5.0.8",
|
||||
"@vue/cli": "^4.2.2",
|
||||
"axios": "^1.7.2",
|
||||
"bcryptjs": "^2.4.3",
|
||||
"body-parser": "^1.20.2",
|
||||
|
||||
19
src/axios.js
19
src/axios.js
@@ -2,20 +2,11 @@ import axios from 'axios';
|
||||
import store from './store';
|
||||
import router from './router';
|
||||
|
||||
// Basis-URL für das Backend ermitteln
|
||||
let baseURL = process.env.VUE_APP_BACKEND_URL || '/api';
|
||||
|
||||
// Mixed-Content vermeiden: wenn die Seite über HTTPS läuft,
|
||||
// aber die Konfiguration "http://" verwendet, auf "https://" umschalten.
|
||||
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);
|
||||
// Einheitliche Basis-URL:
|
||||
// - immer relativ zur aktuellen Origin
|
||||
// - kein absoluter http/https-Host → verhindert Mixed-Content-Probleme
|
||||
axios.defaults.baseURL = '/api';
|
||||
console.log('Axios baseURL:', axios.defaults.baseURL);
|
||||
|
||||
axios.interceptors.request.use(
|
||||
config => {
|
||||
|
||||
@@ -11,22 +11,35 @@
|
||||
<div v-if="worship.neighborInvitation" class="neighborhood-invitation">Einladung zum Gottesdienst im
|
||||
Nachbarschaftsraum:</div>
|
||||
<h3>
|
||||
<span :class="worship.highlightTime ? 'highlight-time' : ''">{{ formatTime(worship.time)
|
||||
}}</span> -
|
||||
{{ worship.title ? worship.title : `Gottesdienst in ${worship.eventPlace.name}` }}
|
||||
<span
|
||||
:class="worship.highlightTime ? 'highlight-time' : ''"
|
||||
>{{ formatTime(worship.time) }}</span> -
|
||||
{{
|
||||
worship.title
|
||||
? worship.title
|
||||
: (worship.eventPlace && worship.eventPlace.name
|
||||
? `Gottesdienst in ${worship.eventPlace.name}`
|
||||
: 'Gottesdienst')
|
||||
}}
|
||||
</h3>
|
||||
<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.collection">Kollekte: {{ worship.collection }}</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.eventPlace.id && worship.eventPlace.id">
|
||||
Adresse: {{ worship.eventPlace.name }}, {{ worship.eventPlace.street }}, {{
|
||||
worship.eventPlace.city }}
|
||||
<div
|
||||
v-if="!worship.address && worship.eventPlace && worship.eventPlace.id"
|
||||
>
|
||||
Adresse: {{ worship.eventPlace.name }}, {{ worship.eventPlace.street }}, {{ worship.eventPlace.city }}
|
||||
</div>
|
||||
<div v-if="worship.selfInformation" class="selfinformation">Bitte informieren Sie sich auch auf den
|
||||
<a v-if="worship.eventPlace.website" :href="worship.eventPlace.website" target="_blank">Internetseiten dieser Gemeinde!</a><span
|
||||
v-else>Internetseiten dieser Gemeinde!</span>
|
||||
<div v-if="worship.selfInformation" class="selfinformation">
|
||||
Bitte informieren Sie sich auch auf den
|
||||
<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>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -45,8 +45,13 @@ const router = createRouter({
|
||||
routes: []
|
||||
});
|
||||
|
||||
// Verhindert endlose Wiederholungen von fehlgeschlagenen Menü-Ladeversuchen
|
||||
let menuDataInitialized = false;
|
||||
|
||||
router.beforeEach(async (to, from, next) => {
|
||||
if (!store.state.menuData.length) {
|
||||
if (!menuDataInitialized) {
|
||||
menuDataInitialized = true;
|
||||
|
||||
await store.dispatch('loadMenuData');
|
||||
const routes = generateRoutesFromMenu(store.state.menuData);
|
||||
routes.forEach(route => router.addRoute(route));
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { createStore } from 'vuex';
|
||||
import axios from 'axios';
|
||||
import axios from '../axios';
|
||||
import router from '../router';
|
||||
|
||||
let user = [];
|
||||
|
||||
Reference in New Issue
Block a user