Update dependencies and refactor routing: Upgrade Tiptap extensions to version 3.22.2 in package.json and package-lock.json. Enhance router configuration by introducing route names for better maintainability and adding new core routes for home, terms, and privacy policy. Adjust HTML asset references for improved loading efficiency.
This commit is contained in:
161
src/router.js
161
src/router.js
@@ -1,12 +1,35 @@
|
||||
import { createRouter, createWebHistory } from 'vue-router';
|
||||
import store from './store';
|
||||
|
||||
const ROUTE_NAMES = {
|
||||
ADMIN_EDIT_PAGES: 'admin-edit-pages',
|
||||
REGISTER: 'register',
|
||||
FORGOT_PASSWORD: 'forgot-password',
|
||||
RESET_PASSWORD: 'reset-password',
|
||||
AUTH_LOGIN: 'auth-login',
|
||||
HOME: 'home',
|
||||
TERMS: 'terms',
|
||||
PRIVACY_POLICY: 'privacy-policy',
|
||||
NOT_FOUND: 'not-found',
|
||||
};
|
||||
|
||||
// Vite kann `import(\`./content/${name}.vue\`)` nicht zuverlässig auflösen.
|
||||
// Daher bauen wir eine statische Import-Matrix über import.meta.glob.
|
||||
const contentModules = import.meta.glob('./content/**/*.vue');
|
||||
|
||||
function loadComponent(componentName) {
|
||||
return () => {
|
||||
if (!componentName) {
|
||||
return import('./content/DefaultComponent.vue');
|
||||
return async () => {
|
||||
const normalized = componentName || 'DefaultComponent';
|
||||
const key = `./content/${normalized}.vue`;
|
||||
const loader = contentModules[key];
|
||||
|
||||
if (!loader) {
|
||||
// Fallback, falls DB/Backend einen unbekannten Komponenten-Namen liefert.
|
||||
const fallback = contentModules['./content/DefaultComponent.vue'];
|
||||
return fallback ? fallback() : import('./content/DefaultComponent.vue');
|
||||
}
|
||||
return import(`./content/${componentName}.vue`);
|
||||
|
||||
return loader();
|
||||
};
|
||||
}
|
||||
|
||||
@@ -60,23 +83,23 @@ router.beforeEach(async (to, from, next) => {
|
||||
addForgotPasswordRoute();
|
||||
addResetPasswordRoute();
|
||||
addAuthLoginRoute();
|
||||
const fallbackMain = store.state.menuLoadError
|
||||
? 'ServiceUnavailableComponent'
|
||||
: 'DefaultComponent';
|
||||
router.addRoute({
|
||||
path: '/:pathMatch(.*)*',
|
||||
components: {
|
||||
default: loadComponent(fallbackMain),
|
||||
rightColumn: loadComponent('ImageContent')
|
||||
}
|
||||
});
|
||||
// NotFound-Route existiert bereits als Core-Route; bei DB-Ausfall aktualisieren wir sie.
|
||||
if (store.state.menuLoadError && router.hasRoute(ROUTE_NAMES.NOT_FOUND)) {
|
||||
router.removeRoute(ROUTE_NAMES.NOT_FOUND);
|
||||
router.addRoute({
|
||||
path: '/:pathMatch(.*)*',
|
||||
components: {
|
||||
default: loadComponent('ServiceUnavailableComponent'),
|
||||
rightColumn: loadComponent('ImageContent')
|
||||
},
|
||||
name: ROUTE_NAMES.NOT_FOUND
|
||||
});
|
||||
}
|
||||
|
||||
next({ ...to, replace: true });
|
||||
} else {
|
||||
// Sicherstellen, dass die Login-Route immer verfügbar ist
|
||||
if (!router.hasRoute('auth-login')) {
|
||||
addAuthLoginRoute();
|
||||
}
|
||||
// Sicherstellen, dass Kernrouten immer verfügbar sind
|
||||
ensureCoreRoutes();
|
||||
if (to.matched.some(record => record.meta.requiresAuth) && !store.getters.isLoggedIn) {
|
||||
next('/auth/login');
|
||||
} else {
|
||||
@@ -86,8 +109,8 @@ router.beforeEach(async (to, from, next) => {
|
||||
});
|
||||
|
||||
function addEditPagesRoute() {
|
||||
if (router.hasRoute('/admin/edit-pages')) {
|
||||
router.removeRoute('/admin/edit-pages');
|
||||
if (router.hasRoute(ROUTE_NAMES.ADMIN_EDIT_PAGES)) {
|
||||
router.removeRoute(ROUTE_NAMES.ADMIN_EDIT_PAGES);
|
||||
}
|
||||
router.addRoute({
|
||||
path: '/admin/edit-pages',
|
||||
@@ -95,13 +118,13 @@ function addEditPagesRoute() {
|
||||
default: loadComponent('admin/PagePreviewComponent'),
|
||||
rightColumn: loadComponent('admin/EditPagesComponent')
|
||||
},
|
||||
name: 'admin-edit-pages'
|
||||
name: ROUTE_NAMES.ADMIN_EDIT_PAGES
|
||||
});
|
||||
}
|
||||
|
||||
function addRegisterRoute() {
|
||||
if (router.hasRoute('/register')) {
|
||||
router.removeRoute('/register');
|
||||
if (router.hasRoute(ROUTE_NAMES.REGISTER)) {
|
||||
router.removeRoute(ROUTE_NAMES.REGISTER);
|
||||
}
|
||||
router.addRoute({
|
||||
path: '/register',
|
||||
@@ -109,13 +132,13 @@ function addRegisterRoute() {
|
||||
default: () => import('./content/authentication/RegisterContent.vue'),
|
||||
rightColumn: loadComponent('ImageContent')
|
||||
},
|
||||
name: 'register'
|
||||
name: ROUTE_NAMES.REGISTER
|
||||
});
|
||||
}
|
||||
|
||||
function addForgotPasswordRoute() {
|
||||
if (router.hasRoute('/forgot-password')) {
|
||||
router.removeRoute('/forgot-password');
|
||||
if (router.hasRoute(ROUTE_NAMES.FORGOT_PASSWORD)) {
|
||||
router.removeRoute(ROUTE_NAMES.FORGOT_PASSWORD);
|
||||
}
|
||||
router.addRoute({
|
||||
path: '/forgot-password',
|
||||
@@ -123,13 +146,13 @@ function addForgotPasswordRoute() {
|
||||
default: () => import('./content/authentication/ForgotPasswordContent.vue'),
|
||||
rightColumn: loadComponent('ImageContent')
|
||||
},
|
||||
name: 'forgot-password'
|
||||
name: ROUTE_NAMES.FORGOT_PASSWORD
|
||||
});
|
||||
}
|
||||
|
||||
function addResetPasswordRoute() {
|
||||
if (router.hasRoute('/reset-password')) {
|
||||
router.removeRoute('/reset-password');
|
||||
if (router.hasRoute(ROUTE_NAMES.RESET_PASSWORD)) {
|
||||
router.removeRoute(ROUTE_NAMES.RESET_PASSWORD);
|
||||
}
|
||||
router.addRoute({
|
||||
path: '/reset-password',
|
||||
@@ -137,13 +160,13 @@ function addResetPasswordRoute() {
|
||||
default: () => import('./content/authentication/ResetPasswordContent.vue'),
|
||||
rightColumn: loadComponent('ImageContent')
|
||||
},
|
||||
name: 'reset-password'
|
||||
name: ROUTE_NAMES.RESET_PASSWORD
|
||||
});
|
||||
}
|
||||
|
||||
function addAuthLoginRoute() {
|
||||
if (router.hasRoute('/auth/login')) {
|
||||
router.removeRoute('/auth/login');
|
||||
if (router.hasRoute(ROUTE_NAMES.AUTH_LOGIN)) {
|
||||
router.removeRoute(ROUTE_NAMES.AUTH_LOGIN);
|
||||
}
|
||||
router.addRoute({
|
||||
path: '/auth/login',
|
||||
@@ -151,14 +174,86 @@ function addAuthLoginRoute() {
|
||||
default: () => import('./content/authentication/LoginContent.vue'),
|
||||
rightColumn: loadComponent('ImageContent')
|
||||
},
|
||||
name: 'auth-login'
|
||||
name: ROUTE_NAMES.AUTH_LOGIN
|
||||
});
|
||||
}
|
||||
|
||||
function addHomeRoute() {
|
||||
if (router.hasRoute(ROUTE_NAMES.HOME)) {
|
||||
router.removeRoute(ROUTE_NAMES.HOME);
|
||||
}
|
||||
router.addRoute({
|
||||
path: '/',
|
||||
components: {
|
||||
default: loadComponent('DefaultContent'),
|
||||
rightColumn: loadComponent('ImageContent')
|
||||
},
|
||||
name: ROUTE_NAMES.HOME
|
||||
});
|
||||
}
|
||||
|
||||
function addTermsRoute() {
|
||||
if (router.hasRoute(ROUTE_NAMES.TERMS)) {
|
||||
router.removeRoute(ROUTE_NAMES.TERMS);
|
||||
}
|
||||
router.addRoute({
|
||||
path: '/terms',
|
||||
components: {
|
||||
default: () => import('./content/disclaimers/TermsComponent.vue'),
|
||||
rightColumn: loadComponent('ImageContent')
|
||||
},
|
||||
name: ROUTE_NAMES.TERMS
|
||||
});
|
||||
}
|
||||
|
||||
function addPrivacyPolicyRoute() {
|
||||
if (router.hasRoute(ROUTE_NAMES.PRIVACY_POLICY)) {
|
||||
router.removeRoute(ROUTE_NAMES.PRIVACY_POLICY);
|
||||
}
|
||||
router.addRoute({
|
||||
path: '/privacy-policy',
|
||||
components: {
|
||||
default: () => import('./content/disclaimers/PrivacyPolicyComponent.vue'),
|
||||
rightColumn: loadComponent('ImageContent')
|
||||
},
|
||||
name: ROUTE_NAMES.PRIVACY_POLICY
|
||||
});
|
||||
}
|
||||
|
||||
function ensureNotFoundRoute() {
|
||||
// Catch-All nur einmal registrieren (sonst Doppelrouten/unklares Matching)
|
||||
if (router.hasRoute(ROUTE_NAMES.NOT_FOUND)) return;
|
||||
|
||||
router.addRoute({
|
||||
path: '/:pathMatch(.*)*',
|
||||
components: {
|
||||
default: loadComponent('DefaultComponent'),
|
||||
rightColumn: loadComponent('ImageContent')
|
||||
},
|
||||
name: ROUTE_NAMES.NOT_FOUND
|
||||
});
|
||||
}
|
||||
|
||||
function ensureCoreRoutes() {
|
||||
if (!router.hasRoute(ROUTE_NAMES.ADMIN_EDIT_PAGES)) addEditPagesRoute();
|
||||
if (!router.hasRoute(ROUTE_NAMES.REGISTER)) addRegisterRoute();
|
||||
if (!router.hasRoute(ROUTE_NAMES.FORGOT_PASSWORD)) addForgotPasswordRoute();
|
||||
if (!router.hasRoute(ROUTE_NAMES.RESET_PASSWORD)) addResetPasswordRoute();
|
||||
if (!router.hasRoute(ROUTE_NAMES.AUTH_LOGIN)) addAuthLoginRoute();
|
||||
if (!router.hasRoute(ROUTE_NAMES.HOME)) addHomeRoute();
|
||||
if (!router.hasRoute(ROUTE_NAMES.TERMS)) addTermsRoute();
|
||||
if (!router.hasRoute(ROUTE_NAMES.PRIVACY_POLICY)) addPrivacyPolicyRoute();
|
||||
ensureNotFoundRoute();
|
||||
}
|
||||
|
||||
addEditPagesRoute();
|
||||
addRegisterRoute();
|
||||
addForgotPasswordRoute();
|
||||
addResetPasswordRoute();
|
||||
addAuthLoginRoute();
|
||||
addHomeRoute();
|
||||
addTermsRoute();
|
||||
addPrivacyPolicyRoute();
|
||||
ensureNotFoundRoute();
|
||||
|
||||
export default router;
|
||||
|
||||
Reference in New Issue
Block a user