Add table view and split name into firstName/lastName fields

This commit is contained in:
Torsten Schulz (local)
2025-10-21 14:38:41 +02:00
parent b024bfe884
commit bd677c26ae
29 changed files with 865 additions and 168 deletions

View File

@@ -1,5 +1,5 @@
{ {
"date": "2025-10-21T12:32:03.239Z", "date": "2025-10-21T12:35:57.372Z",
"preset": "node-server", "preset": "node-server",
"framework": { "framework": {
"name": "nuxt", "name": "nuxt",

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,11 @@
import{e as a}from"#entry";/**
* @license lucide-vue-next v0.344.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/const o=a("MailIcon",[["rect",{width:"20",height:"16",x:"2",y:"4",rx:"2",key:"18n3k1"}],["path",{d:"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7",key:"1ocrg3"}]]);/**
* @license lucide-vue-next v0.344.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/const t=a("PhoneIcon",[["path",{d:"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z",key:"foiqr5"}]]);export{o as M,t as P};

View File

@@ -1 +1 @@
{"id":"f1db3745-a031-477c-933f-6868f5829384","timestamp":1761049916604} {"id":"fce91ff8-40a0-4fdf-a058-a6b83ddf7c57","timestamp":1761050150660}

View File

@@ -1 +0,0 @@
{"id":"f1db3745-a031-477c-933f-6868f5829384","timestamp":1761049916604,"matcher":{"static":{},"wildcard":{},"dynamic":{}},"prerendered":[]}

View File

@@ -0,0 +1 @@
{"id":"fce91ff8-40a0-4fdf-a058-a6b83ddf7c57","timestamp":1761050150660,"matcher":{"static":{},"wildcard":{},"dynamic":{}},"prerendered":[]}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,73 @@
import { promises } from 'fs';
import path from 'path';
const getDataPath = (filename) => {
const cwd = process.cwd();
if (cwd.endsWith(".output")) {
return path.join(cwd, "../server/data", filename);
}
return path.join(cwd, "server/data", filename);
};
const MEMBERS_FILE = getDataPath("members.json");
const USERS_FILE = getDataPath("users.json");
async function readMembers() {
try {
const data = await promises.readFile(MEMBERS_FILE, "utf-8");
return JSON.parse(data);
} catch (error) {
if (error.code === "ENOENT") {
return [];
}
console.error("Fehler beim Lesen der Mitgliederdaten:", error);
return [];
}
}
async function writeMembers(members) {
try {
await promises.writeFile(MEMBERS_FILE, JSON.stringify(members, null, 2), "utf-8");
return true;
} catch (error) {
console.error("Fehler beim Schreiben der Mitgliederdaten:", error);
return false;
}
}
async function readUsers() {
try {
const data = await promises.readFile(USERS_FILE, "utf-8");
return JSON.parse(data);
} catch (error) {
if (error.code === "ENOENT") {
return [];
}
console.error("Fehler beim Lesen der Benutzerdaten:", error);
return [];
}
}
async function saveMember(memberData) {
const members = await readMembers();
if (memberData.id) {
const index = members.findIndex((m) => m.id === memberData.id);
if (index !== -1) {
members[index] = { ...members[index], ...memberData };
} else {
throw new Error("Mitglied nicht gefunden");
}
} else {
const newMember = {
id: `m${Date.now()}`,
...memberData
};
members.push(newMember);
}
await writeMembers(members);
return true;
}
async function deleteMember(id) {
const members = await readMembers();
const filtered = members.filter((m) => m.id !== id);
await writeMembers(filtered);
return true;
}
export { readUsers as a, deleteMember as d, readMembers as r, saveMember as s };
//# sourceMappingURL=members.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"members.mjs","sources":["../../../../server/utils/members.js"],"sourcesContent":null,"names":["fs"],"mappings":"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"}

View File

@@ -161,6 +161,17 @@ const client_manifest = {
"node_modules/nuxt/dist/app/entry.js" "node_modules/nuxt/dist/app/entry.js"
] ]
}, },
"_SRZHqrjk.js": {
"resourceType": "script",
"module": true,
"prefetch": true,
"preload": true,
"file": "SRZHqrjk.js",
"name": "phone",
"imports": [
"node_modules/nuxt/dist/app/entry.js"
]
},
"_XZ6RV9KH.js": { "_XZ6RV9KH.js": {
"resourceType": "script", "resourceType": "script",
"module": true, "module": true,
@@ -263,7 +274,7 @@ const client_manifest = {
"module": true, "module": true,
"prefetch": true, "prefetch": true,
"preload": true, "preload": true,
"file": "DI2PgNgB.js", "file": "DbEmVw1_.js",
"name": "entry", "name": "entry",
"src": "node_modules/nuxt/dist/app/entry.js", "src": "node_modules/nuxt/dist/app/entry.js",
"isEntry": true, "isEntry": true,
@@ -273,14 +284,14 @@ const client_manifest = {
"node_modules/nuxt/dist/app/components/error-500.vue" "node_modules/nuxt/dist/app/components/error-500.vue"
], ],
"css": [ "css": [
"entry.ldOScqNk.css" "entry.DO240tkB.css"
], ],
"assets": [ "assets": [
"Harheimer TC.CKfYAfp1.svg" "Harheimer TC.CKfYAfp1.svg"
] ]
}, },
"entry.ldOScqNk.css": { "entry.DO240tkB.css": {
"file": "entry.ldOScqNk.css", "file": "entry.DO240tkB.css",
"resourceType": "style", "resourceType": "style",
"prefetch": true, "prefetch": true,
"preload": true "preload": true
@@ -412,13 +423,14 @@ const client_manifest = {
"module": true, "module": true,
"prefetch": true, "prefetch": true,
"preload": true, "preload": true,
"file": "CFErkncy.js", "file": "CN7ivzv2.js",
"name": "kontakt", "name": "kontakt",
"src": "pages/kontakt.vue", "src": "pages/kontakt.vue",
"isDynamicEntry": true, "isDynamicEntry": true,
"imports": [ "imports": [
"node_modules/nuxt/dist/app/entry.js", "node_modules/nuxt/dist/app/entry.js",
"_C5SyyWEb.js", "_C5SyyWEb.js",
"_SRZHqrjk.js",
"_C8kQt0fa.js", "_C8kQt0fa.js",
"_Qy3ajxTk.js" "_Qy3ajxTk.js"
] ]
@@ -546,6 +558,25 @@ const client_manifest = {
"_DaSgy0Cl.js" "_DaSgy0Cl.js"
] ]
}, },
"pages/mitgliederbereich/mitglieder.vue": {
"resourceType": "script",
"module": true,
"prefetch": true,
"preload": true,
"file": "DLp4u09V.js",
"name": "mitglieder",
"src": "pages/mitgliederbereich/mitglieder.vue",
"isDynamicEntry": true,
"imports": [
"node_modules/nuxt/dist/app/entry.js",
"_Qy3ajxTk.js",
"_CUq_0rkE.js",
"_SRZHqrjk.js",
"_C5SyyWEb.js",
"_BteKZQ9T.js",
"_C8kQt0fa.js"
]
},
"pages/mitgliederbereich/profil.vue": { "pages/mitgliederbereich/profil.vue": {
"resourceType": "script", "resourceType": "script",
"module": true, "module": true,

View File

@@ -0,0 +1,200 @@
import { ref, computed, mergeProps, unref, useSSRContext } from 'vue';
import { ssrRenderAttrs, ssrRenderComponent, ssrRenderList, ssrInterpolate, ssrRenderAttr, ssrIncludeBooleanAttr } from 'vue/server-renderer';
import { UserPlus, Loader2, Mail, Phone, MapPin, FileText, Clock, Edit, Trash2, AlertCircle } from 'lucide-vue-next';
import { u as useAuthStore } from './server.mjs';
import { u as useHead } from './composables-CK-Mp9jS.mjs';
import '../nitro/nitro.mjs';
import 'node:http';
import 'node:https';
import 'node:events';
import 'node:buffer';
import 'node:fs';
import 'node:path';
import 'node:crypto';
import 'node:url';
import '../routes/renderer.mjs';
import 'vue-bundle-renderer/runtime';
import 'unhead/server';
import 'devalue';
import 'unhead/utils';
import 'pinia';
import 'vue-router';
const _sfc_main = {
__name: "mitglieder",
__ssrInlineRender: true,
setup(__props) {
const authStore = useAuthStore();
const isLoading = ref(true);
const isSaving = ref(false);
const members = ref([]);
const showModal = ref(false);
const editingMember = ref(null);
const errorMessage = ref("");
const formData = ref({
name: "",
email: "",
phone: "",
address: "",
notes: ""
});
const canEdit = computed(() => {
return authStore.role === "admin" || authStore.role === "vorstand";
});
const formatDate = (dateString) => {
if (!dateString) return "";
const date = new Date(dateString);
return date.toLocaleDateString("de-DE", {
year: "numeric",
month: "2-digit",
day: "2-digit",
hour: "2-digit",
minute: "2-digit"
});
};
useHead({
title: "Mitgliederliste - Harheimer TC"
});
return (_ctx, _push, _parent, _attrs) => {
_push(`<div${ssrRenderAttrs(mergeProps({ class: "min-h-full py-16 bg-gray-50" }, _attrs))}><div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"><div class="flex justify-between items-center mb-6"><div><h1 class="text-4xl sm:text-5xl font-display font-bold text-gray-900 mb-2"> Mitgliederliste </h1><div class="w-24 h-1 bg-primary-600 mb-4"></div></div>`);
if (canEdit.value) {
_push(`<button class="flex items-center px-4 py-2 bg-primary-600 hover:bg-primary-700 text-white font-semibold rounded-lg transition-colors">`);
_push(ssrRenderComponent(unref(UserPlus), {
size: 20,
class: "mr-2"
}, null, _parent));
_push(` Mitglied hinzufügen </button>`);
} else {
_push(`<!---->`);
}
_push(`</div>`);
if (isLoading.value) {
_push(`<div class="flex items-center justify-center py-12">`);
_push(ssrRenderComponent(unref(Loader2), {
size: 40,
class: "animate-spin text-primary-600"
}, null, _parent));
_push(`</div>`);
} else {
_push(`<div class="space-y-4"><!--[-->`);
ssrRenderList(members.value, (member) => {
_push(`<div class="bg-white p-6 rounded-xl shadow-lg border border-gray-100"><div class="flex justify-between items-start"><div class="flex-1"><div class="flex items-center mb-2"><h3 class="text-xl font-semibold text-gray-900">${ssrInterpolate(member.name)}</h3>`);
if (member.hasLogin) {
_push(`<span class="ml-3 px-2 py-1 bg-green-100 text-green-800 text-xs font-medium rounded-full"> Hat Login </span>`);
} else {
_push(`<!---->`);
}
if (member.source === "manual") {
_push(`<span class="ml-2 px-2 py-1 bg-blue-100 text-blue-800 text-xs font-medium rounded-full"> Manuell </span>`);
} else {
_push(`<span class="ml-2 px-2 py-1 bg-purple-100 text-purple-800 text-xs font-medium rounded-full"> Aus Login-System </span>`);
}
_push(`</div><div class="grid sm:grid-cols-2 gap-3 text-gray-600">`);
if (member.email) {
_push(`<div class="flex items-center">`);
_push(ssrRenderComponent(unref(Mail), {
size: 16,
class: "mr-2 text-primary-600"
}, null, _parent));
_push(`<a${ssrRenderAttr("href", `mailto:${member.email}`)} class="hover:text-primary-600">${ssrInterpolate(member.email)}</a></div>`);
} else {
_push(`<!---->`);
}
if (member.phone) {
_push(`<div class="flex items-center">`);
_push(ssrRenderComponent(unref(Phone), {
size: 16,
class: "mr-2 text-primary-600"
}, null, _parent));
_push(`<a${ssrRenderAttr("href", `tel:${member.phone}`)} class="hover:text-primary-600">${ssrInterpolate(member.phone)}</a></div>`);
} else {
_push(`<!---->`);
}
if (member.address) {
_push(`<div class="flex items-start col-span-2">`);
_push(ssrRenderComponent(unref(MapPin), {
size: 16,
class: "mr-2 text-primary-600 mt-0.5"
}, null, _parent));
_push(`<span>${ssrInterpolate(member.address)}</span></div>`);
} else {
_push(`<!---->`);
}
if (member.notes) {
_push(`<div class="flex items-start col-span-2">`);
_push(ssrRenderComponent(unref(FileText), {
size: 16,
class: "mr-2 text-primary-600 mt-0.5"
}, null, _parent));
_push(`<span>${ssrInterpolate(member.notes)}</span></div>`);
} else {
_push(`<!---->`);
}
if (member.lastLogin) {
_push(`<div class="flex items-center col-span-2 text-sm text-gray-500">`);
_push(ssrRenderComponent(unref(Clock), {
size: 16,
class: "mr-2"
}, null, _parent));
_push(` Letzter Login: ${ssrInterpolate(formatDate(member.lastLogin))}</div>`);
} else {
_push(`<!---->`);
}
_push(`</div></div>`);
if (canEdit.value && member.editable) {
_push(`<div class="flex space-x-2 ml-4"><button class="p-2 text-blue-600 hover:bg-blue-50 rounded-lg transition-colors" title="Bearbeiten">`);
_push(ssrRenderComponent(unref(Edit), { size: 20 }, null, _parent));
_push(`</button><button class="p-2 text-red-600 hover:bg-red-50 rounded-lg transition-colors" title="Löschen">`);
_push(ssrRenderComponent(unref(Trash2), { size: 20 }, null, _parent));
_push(`</button></div>`);
} else {
_push(`<!---->`);
}
_push(`</div></div>`);
});
_push(`<!--]-->`);
if (members.value.length === 0) {
_push(`<div class="text-center py-12 text-gray-500"> Keine Mitglieder gefunden. </div>`);
} else {
_push(`<!---->`);
}
_push(`</div>`);
}
if (showModal.value) {
_push(`<div class="fixed inset-0 z-50 bg-black/50 flex items-center justify-center p-4"><div class="bg-white rounded-xl shadow-2xl max-w-2xl w-full p-8"><h2 class="text-2xl font-display font-bold text-gray-900 mb-6">${ssrInterpolate(editingMember.value ? "Mitglied bearbeiten" : "Mitglied hinzufügen")}</h2><form class="space-y-4"><div><label class="block text-sm font-medium text-gray-700 mb-2">Name *</label><input${ssrRenderAttr("value", formData.value.name)} type="text" required class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500"${ssrIncludeBooleanAttr(isSaving.value) ? " disabled" : ""}></div><div><label class="block text-sm font-medium text-gray-700 mb-2">E-Mail</label><input${ssrRenderAttr("value", formData.value.email)} type="email" class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500"${ssrIncludeBooleanAttr(isSaving.value) ? " disabled" : ""}></div><div><label class="block text-sm font-medium text-gray-700 mb-2">Telefon</label><input${ssrRenderAttr("value", formData.value.phone)} type="tel" class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500"${ssrIncludeBooleanAttr(isSaving.value) ? " disabled" : ""}></div><div><label class="block text-sm font-medium text-gray-700 mb-2">Adresse</label><input${ssrRenderAttr("value", formData.value.address)} type="text" class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500"${ssrIncludeBooleanAttr(isSaving.value) ? " disabled" : ""}></div><div><label class="block text-sm font-medium text-gray-700 mb-2">Notizen</label><textarea rows="3" class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500"${ssrIncludeBooleanAttr(isSaving.value) ? " disabled" : ""}>${ssrInterpolate(formData.value.notes)}</textarea></div>`);
if (errorMessage.value) {
_push(`<div class="flex items-center p-3 rounded-md bg-red-50 text-red-700 text-sm">`);
_push(ssrRenderComponent(unref(AlertCircle), {
size: 20,
class: "mr-2"
}, null, _parent));
_push(` ${ssrInterpolate(errorMessage.value)}</div>`);
} else {
_push(`<!---->`);
}
_push(`<div class="flex justify-end space-x-4 pt-4"><button type="button" class="px-6 py-2 border border-gray-300 text-gray-700 rounded-lg hover:bg-gray-50 transition-colors"${ssrIncludeBooleanAttr(isSaving.value) ? " disabled" : ""}> Abbrechen </button><button type="submit" class="px-6 py-2 bg-primary-600 hover:bg-primary-700 text-white font-semibold rounded-lg transition-colors flex items-center"${ssrIncludeBooleanAttr(isSaving.value) ? " disabled" : ""}>`);
if (isSaving.value) {
_push(ssrRenderComponent(unref(Loader2), {
size: 20,
class: "animate-spin mr-2"
}, null, _parent));
} else {
_push(`<!---->`);
}
_push(`<span>${ssrInterpolate(isSaving.value ? "Speichert..." : "Speichern")}</span></button></div></form></div></div>`);
} else {
_push(`<!---->`);
}
_push(`</div></div>`);
};
}
};
const _sfc_setup = _sfc_main.setup;
_sfc_main.setup = (props, ctx) => {
const ssrContext = useSSRContext();
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("pages/mitgliederbereich/mitglieder.vue");
return _sfc_setup ? _sfc_setup(props, ctx) : void 0;
};
export { _sfc_main as default };
//# sourceMappingURL=mitglieder-Dh7s1xvF.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"mitglieder-Dh7s1xvF.mjs","sources":["../../../../pages/mitgliederbereich/mitglieder.vue"],"sourcesContent":null,"names":["_ssrRenderAttrs","_mergeProps","_ssrRenderList","_ssrInterpolate","_ssrRenderComponent","_unref","_ssrRenderAttr"],"mappings":"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"}

View File

@@ -397,6 +397,9 @@ const unhead_k2P3m_ZDyjlr2mMYnoDPwavjsDN8hBlk9cFai0bbopU = /* @__PURE__ */ defin
function toArray(value) { function toArray(value) {
return Array.isArray(value) ? value : [value]; return Array.isArray(value) ? value : [value];
} }
const __nuxt_page_meta$3 = {
layout: "default"
};
const __nuxt_page_meta$2 = { const __nuxt_page_meta$2 = {
layout: "default" layout: "default"
}; };
@@ -415,7 +418,7 @@ const _routes = [
{ {
name: "login", name: "login",
path: "/login", path: "/login",
meta: __nuxt_page_meta$2 || {}, meta: __nuxt_page_meta$3 || {},
component: () => import('./login-BdWGyHdA.mjs') component: () => import('./login-BdWGyHdA.mjs')
}, },
{ {
@@ -548,7 +551,7 @@ const _routes = [
{ {
name: "mitgliederbereich", name: "mitgliederbereich",
path: "/mitgliederbereich", path: "/mitgliederbereich",
meta: { ...__nuxt_page_meta$1 || {}, ...{ "middleware": "auth" } }, meta: { ...__nuxt_page_meta$2 || {}, ...{ "middleware": "auth" } },
component: () => import('./index-D7JtbHaf.mjs') component: () => import('./index-D7JtbHaf.mjs')
}, },
{ {
@@ -559,8 +562,14 @@ const _routes = [
{ {
name: "mitgliederbereich-profil", name: "mitgliederbereich-profil",
path: "/mitgliederbereich/profil", path: "/mitgliederbereich/profil",
meta: { ...__nuxt_page_meta || {}, ...{ "middleware": "auth" } }, meta: { ...__nuxt_page_meta$1 || {}, ...{ "middleware": "auth" } },
component: () => import('./profil-UUfhNGZ3.mjs') component: () => import('./profil-UUfhNGZ3.mjs')
},
{
name: "mitgliederbereich-mitglieder",
path: "/mitgliederbereich/mitglieder",
meta: { ...__nuxt_page_meta || {}, ...{ "middleware": "auth" } },
component: () => import('./mitglieder-Dh7s1xvF.mjs')
} }
]; ];
const ROUTE_KEY_PARENTHESES_RE = /(:\w+)\([^)]+\)/g; const ROUTE_KEY_PARENTHESES_RE = /(:\w+)\([^)]+\)/g;

View File

@@ -1 +1 @@
{"version":3,"file":"server.mjs","sources":["../../../../virtual:nuxt:%2Fmnt%2Fshare%2Ftorsten%2FPrograms%2Fharheimertc%2Fnode_modules%2F.cache%2Fnuxt%2F.nuxt%2Ffetch.mjs","../../../../virtual:nuxt:%2Fmnt%2Fshare%2Ftorsten%2FPrograms%2Fharheimertc%2Fnode_modules%2F.cache%2Fnuxt%2F.nuxt%2Fglobal-polyfills.mjs","../../../../virtual:nuxt:%2Fmnt%2Fshare%2Ftorsten%2FPrograms%2Fharheimertc%2Fnode_modules%2F.cache%2Fnuxt%2F.nuxt%2Fnuxt.config.mjs","../../../../node_modules/nuxt/dist/app/nuxt.js","../../../../node_modules/nuxt/dist/app/components/injections.js","../../../../node_modules/nuxt/dist/app/utils.js","../../../../node_modules/nuxt/dist/app/composables/router.js","../../../../node_modules/nuxt/dist/app/composables/error.js","../../../../node_modules/nuxt/dist/app/composables/manifest.js","../../../../node_modules/nuxt/dist/app/composables/payload.js","../../../../node_modules/@pinia/nuxt/dist/runtime/payload-plugin.js","../../../../node_modules/nuxt/dist/head/runtime/plugins/unhead.js","../../../../node_modules/nuxt/dist/pages/runtime/utils.js","../../../../virtual:nuxt:%2Fmnt%2Fshare%2Ftorsten%2FPrograms%2Fharheimertc%2Fnode_modules%2F.cache%2Fnuxt%2F.nuxt%2Froutes.mjs","../../../../node_modules/nuxt/dist/app/components/utils.js","../../../../node_modules/nuxt/dist/pages/runtime/router.options.js","../../../../virtual:nuxt:%2Fmnt%2Fshare%2Ftorsten%2FPrograms%2Fharheimertc%2Fnode_modules%2F.cache%2Fnuxt%2F.nuxt%2Frouter.options.mjs","../../../../node_modules/nuxt/dist/pages/runtime/validate.js","../../../../stores/auth.js","../../../../middleware/auth.global.js","../../../../node_modules/nuxt/dist/app/middleware/manifest-route-rule.js","../../../../virtual:nuxt:%2Fmnt%2Fshare%2Ftorsten%2FPrograms%2Fharheimertc%2Fnode_modules%2F.cache%2Fnuxt%2F.nuxt%2Fmiddleware.mjs","../../../../node_modules/nuxt/dist/pages/runtime/plugins/router.js","../../../../node_modules/nuxt/dist/app/plugins/revive-payload.server.js","../../../../node_modules/nuxt/dist/app/components/server-placeholder.js","../../../../node_modules/nuxt/dist/app/components/client-only.js","../../../../node_modules/nuxt/dist/app/components/nuxt-link.js","../../../../node_modules/@pinia/nuxt/dist/runtime/plugin.vue3.js","../../../../virtual:nuxt:%2Fmnt%2Fshare%2Ftorsten%2FPrograms%2Fharheimertc%2Fnode_modules%2F.cache%2Fnuxt%2F.nuxt%2Fcomponents.plugin.mjs","../../../../virtual:nuxt:%2Fmnt%2Fshare%2Ftorsten%2FPrograms%2Fharheimertc%2Fnode_modules%2F.cache%2Fnuxt%2F.nuxt%2Fplugins.server.mjs","../../../../node_modules/nuxt/dist/app/components/route-provider.js","../../../../node_modules/nuxt/dist/pages/runtime/page.js","../../../../assets/images/logos/Harheimer TC.svg","../../../../components/Navigation.vue","../../../../components/Footer.vue","../../../../app.vue","../../../../node_modules/nuxt/dist/app/components/nuxt-error-page.vue","../../../../node_modules/nuxt/dist/app/components/nuxt-root.vue","../../../../node_modules/nuxt/dist/app/entry.js"],"sourcesContent":null,"names":["$fetch","plugin","provide","plugins","createH3Error","createRadixRouter","login1RYyYL8mxx17qR_nmdKvywxx7lKOLXMFu8pTLfvTLYwMeta","indexqVbusfljIJ04j42RIA_KP4bSP7XytQIXdqcVfR3kPUAMeta","profilyVBy_UvZ8KvchY44_0SJbB0NHOad6MC_S9C8wfDdUWEMeta","__executeAsync","createRouter","entry","payload_plugin_1_bEQpMjikuQhbV8UJ0PxUqmSvPdmV1jDa5DURnKW4M","router_GNCWhvtYfLTYRZZ135CdFAEjxdMexN0ixiUYCAN_tpw","plugin_vue3_CQ_pO3THrTGIeYc0dvC91V75hY8qpo9B_8yZzOW5SFs","useRoute","_ssrRenderAttrs","_mergeProps","_push","_parent","_ssrRenderAttr","_imports_0","_createVNode","_ssrRenderClass","_unref","_ssrRenderList","_ssrInterpolate","_createTextVNode","_toDisplayString","useRouter","_ssrRenderComponent","ErrorComponent","RootComponent"],"mappings":"","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,29,30,31,36,37,38]} {"version":3,"file":"server.mjs","sources":["../../../../virtual:nuxt:%2Fmnt%2Fshare%2Ftorsten%2FPrograms%2Fharheimertc%2Fnode_modules%2F.cache%2Fnuxt%2F.nuxt%2Ffetch.mjs","../../../../virtual:nuxt:%2Fmnt%2Fshare%2Ftorsten%2FPrograms%2Fharheimertc%2Fnode_modules%2F.cache%2Fnuxt%2F.nuxt%2Fglobal-polyfills.mjs","../../../../virtual:nuxt:%2Fmnt%2Fshare%2Ftorsten%2FPrograms%2Fharheimertc%2Fnode_modules%2F.cache%2Fnuxt%2F.nuxt%2Fnuxt.config.mjs","../../../../node_modules/nuxt/dist/app/nuxt.js","../../../../node_modules/nuxt/dist/app/components/injections.js","../../../../node_modules/nuxt/dist/app/utils.js","../../../../node_modules/nuxt/dist/app/composables/router.js","../../../../node_modules/nuxt/dist/app/composables/error.js","../../../../node_modules/nuxt/dist/app/composables/manifest.js","../../../../node_modules/nuxt/dist/app/composables/payload.js","../../../../node_modules/@pinia/nuxt/dist/runtime/payload-plugin.js","../../../../node_modules/nuxt/dist/head/runtime/plugins/unhead.js","../../../../node_modules/nuxt/dist/pages/runtime/utils.js","../../../../virtual:nuxt:%2Fmnt%2Fshare%2Ftorsten%2FPrograms%2Fharheimertc%2Fnode_modules%2F.cache%2Fnuxt%2F.nuxt%2Froutes.mjs","../../../../node_modules/nuxt/dist/app/components/utils.js","../../../../node_modules/nuxt/dist/pages/runtime/router.options.js","../../../../virtual:nuxt:%2Fmnt%2Fshare%2Ftorsten%2FPrograms%2Fharheimertc%2Fnode_modules%2F.cache%2Fnuxt%2F.nuxt%2Frouter.options.mjs","../../../../node_modules/nuxt/dist/pages/runtime/validate.js","../../../../stores/auth.js","../../../../middleware/auth.global.js","../../../../node_modules/nuxt/dist/app/middleware/manifest-route-rule.js","../../../../virtual:nuxt:%2Fmnt%2Fshare%2Ftorsten%2FPrograms%2Fharheimertc%2Fnode_modules%2F.cache%2Fnuxt%2F.nuxt%2Fmiddleware.mjs","../../../../node_modules/nuxt/dist/pages/runtime/plugins/router.js","../../../../node_modules/nuxt/dist/app/plugins/revive-payload.server.js","../../../../node_modules/nuxt/dist/app/components/server-placeholder.js","../../../../node_modules/nuxt/dist/app/components/client-only.js","../../../../node_modules/nuxt/dist/app/components/nuxt-link.js","../../../../node_modules/@pinia/nuxt/dist/runtime/plugin.vue3.js","../../../../virtual:nuxt:%2Fmnt%2Fshare%2Ftorsten%2FPrograms%2Fharheimertc%2Fnode_modules%2F.cache%2Fnuxt%2F.nuxt%2Fcomponents.plugin.mjs","../../../../virtual:nuxt:%2Fmnt%2Fshare%2Ftorsten%2FPrograms%2Fharheimertc%2Fnode_modules%2F.cache%2Fnuxt%2F.nuxt%2Fplugins.server.mjs","../../../../node_modules/nuxt/dist/app/components/route-provider.js","../../../../node_modules/nuxt/dist/pages/runtime/page.js","../../../../assets/images/logos/Harheimer TC.svg","../../../../components/Navigation.vue","../../../../components/Footer.vue","../../../../app.vue","../../../../node_modules/nuxt/dist/app/components/nuxt-error-page.vue","../../../../node_modules/nuxt/dist/app/components/nuxt-root.vue","../../../../node_modules/nuxt/dist/app/entry.js"],"sourcesContent":null,"names":["$fetch","plugin","provide","plugins","createH3Error","createRadixRouter","login1RYyYL8mxx17qR_nmdKvywxx7lKOLXMFu8pTLfvTLYwMeta","indexqVbusfljIJ04j42RIA_KP4bSP7XytQIXdqcVfR3kPUAMeta","profilyVBy_UvZ8KvchY44_0SJbB0NHOad6MC_S9C8wfDdUWEMeta","mitglieder9TWncRC_sSS_zPWzxBDlRiNjjFojXSJny_uernMe_tAMeta","__executeAsync","createRouter","entry","payload_plugin_1_bEQpMjikuQhbV8UJ0PxUqmSvPdmV1jDa5DURnKW4M","router_GNCWhvtYfLTYRZZ135CdFAEjxdMexN0ixiUYCAN_tpw","plugin_vue3_CQ_pO3THrTGIeYc0dvC91V75hY8qpo9B_8yZzOW5SFs","useRoute","_ssrRenderAttrs","_mergeProps","_push","_parent","_ssrRenderAttr","_imports_0","_createVNode","_ssrRenderClass","_unref","_ssrRenderList","_ssrInterpolate","_createTextVNode","_toDisplayString","useRouter","_ssrRenderComponent","ErrorComponent","RootComponent"],"mappings":"","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,29,30,31,36,37,38]}

View File

@@ -4293,7 +4293,7 @@ function _expandFromEnv(value) {
const _inlineRuntimeConfig = { const _inlineRuntimeConfig = {
"app": { "app": {
"baseURL": "/", "baseURL": "/",
"buildId": "f1db3745-a031-477c-933f-6868f5829384", "buildId": "fce91ff8-40a0-4fdf-a058-a6b83ddf7c57",
"buildAssetsDir": "/_nuxt/", "buildAssetsDir": "/_nuxt/",
"cdnURL": "" "cdnURL": ""
}, },
@@ -4738,509 +4738,523 @@ const plugins = [
]; ];
const assets = { const assets = {
"/images/club_about_us.png": {
"type": "image/png",
"etag": "\"202e56-s4fLsHEgoAgKJeBRuI1qxPmqHV0\"",
"mtime": "2025-10-21T12:32:00.851Z",
"size": 2109014,
"path": "../public/images/club_about_us.png"
},
"/data/mannschaften.csv": { "/data/mannschaften.csv": {
"type": "text/csv; charset=utf-8", "type": "text/csv; charset=utf-8",
"etag": "\"858-l94GKn8Q0I5RQnhrM0ZPJsYUmcw\"", "etag": "\"858-l94GKn8Q0I5RQnhrM0ZPJsYUmcw\"",
"mtime": "2025-10-21T12:32:00.851Z", "mtime": "2025-10-21T12:35:54.924Z",
"size": 2136, "size": 2136,
"path": "../public/data/mannschaften.csv" "path": "../public/data/mannschaften.csv"
}, },
"/data/spielsysteme.csv": { "/data/spielsysteme.csv": {
"type": "text/csv; charset=utf-8", "type": "text/csv; charset=utf-8",
"etag": "\"9bc-4npLrNHYClsD0TKV5vSifxitfV0\"", "etag": "\"9bc-4npLrNHYClsD0TKV5vSifxitfV0\"",
"mtime": "2025-10-21T12:32:00.851Z", "mtime": "2025-10-21T12:35:54.924Z",
"size": 2492, "size": 2492,
"path": "../public/data/spielsysteme.csv" "path": "../public/data/spielsysteme.csv"
}, },
"/data/termine.csv": { "/data/termine.csv": {
"type": "text/csv; charset=utf-8", "type": "text/csv; charset=utf-8",
"etag": "\"2e8-sZtaHF6QRmOQHinTWOLAYRgo6xk\"", "etag": "\"2e8-sZtaHF6QRmOQHinTWOLAYRgo6xk\"",
"mtime": "2025-10-21T12:32:00.851Z", "mtime": "2025-10-21T12:35:54.924Z",
"size": 744, "size": 744,
"path": "../public/data/termine.csv" "path": "../public/data/termine.csv"
}, },
"/data/vereinsmeisterschaften.csv": { "/data/vereinsmeisterschaften.csv": {
"type": "text/csv; charset=utf-8", "type": "text/csv; charset=utf-8",
"etag": "\"989-X8AB+Zegy2xUbjDtbQcXhuuyBDQ\"", "etag": "\"989-X8AB+Zegy2xUbjDtbQcXhuuyBDQ\"",
"mtime": "2025-10-21T12:32:00.851Z", "mtime": "2025-10-21T12:35:54.924Z",
"size": 2441, "size": 2441,
"path": "../public/data/vereinsmeisterschaften.csv" "path": "../public/data/vereinsmeisterschaften.csv"
}, },
"/documents/Tischtennisregeln light.pdf": { "/documents/Tischtennisregeln light.pdf": {
"type": "application/pdf", "type": "application/pdf",
"etag": "\"5177b-y/88q2+Y3RRechJMqWhse21KRdQ\"", "etag": "\"5177b-y/88q2+Y3RRechJMqWhse21KRdQ\"",
"mtime": "2025-10-21T12:32:00.851Z", "mtime": "2025-10-21T12:35:54.924Z",
"size": 333691, "size": 333691,
"path": "../public/documents/Tischtennisregeln light.pdf" "path": "../public/documents/Tischtennisregeln light.pdf"
}, },
"/documents/satzung.pdf": { "/documents/satzung.pdf": {
"type": "application/pdf", "type": "application/pdf",
"etag": "\"5c7cf-L0A3nT8D24T9sD57FFbij3QRpzw\"", "etag": "\"5c7cf-L0A3nT8D24T9sD57FFbij3QRpzw\"",
"mtime": "2025-10-21T12:32:00.851Z", "mtime": "2025-10-21T12:35:54.924Z",
"size": 378831, "size": 378831,
"path": "../public/documents/satzung.pdf" "path": "../public/documents/satzung.pdf"
}, },
"/images/club_about_us.png": {
"type": "image/png",
"etag": "\"202e56-s4fLsHEgoAgKJeBRuI1qxPmqHV0\"",
"mtime": "2025-10-21T12:35:54.924Z",
"size": 2109014,
"path": "../public/images/club_about_us.png"
},
"/_nuxt/0xufrPn-.js": { "/_nuxt/0xufrPn-.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"b10-/isfm3dyRIVsEjgvcmL/XPZzoKo\"", "etag": "\"b10-/isfm3dyRIVsEjgvcmL/XPZzoKo\"",
"mtime": "2025-10-21T12:32:00.847Z", "mtime": "2025-10-21T12:35:54.920Z",
"size": 2832, "size": 2832,
"path": "../public/_nuxt/0xufrPn-.js" "path": "../public/_nuxt/0xufrPn-.js"
}, },
"/_nuxt/48ve60fm.js": { "/_nuxt/48ve60fm.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"557-e04q6bcr4Wja5BTiX/uCY9jcaOk\"", "etag": "\"557-e04q6bcr4Wja5BTiX/uCY9jcaOk\"",
"mtime": "2025-10-21T12:32:00.847Z", "mtime": "2025-10-21T12:35:54.920Z",
"size": 1367, "size": 1367,
"path": "../public/_nuxt/48ve60fm.js" "path": "../public/_nuxt/48ve60fm.js"
}, },
"/_nuxt/B-ZRDHEi.js": { "/_nuxt/B-ZRDHEi.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"1744-1NcVDhC8iP9qzUGuLES4GLUFuNU\"", "etag": "\"1744-1NcVDhC8iP9qzUGuLES4GLUFuNU\"",
"mtime": "2025-10-21T12:32:00.847Z", "mtime": "2025-10-21T12:35:54.920Z",
"size": 5956, "size": 5956,
"path": "../public/_nuxt/B-ZRDHEi.js" "path": "../public/_nuxt/B-ZRDHEi.js"
}, },
"/_nuxt/B4mSF5Ac.js": { "/_nuxt/B4mSF5Ac.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"185-hHs3mU4qOcQAkGQaPrUYGaG0yao\"", "etag": "\"185-hHs3mU4qOcQAkGQaPrUYGaG0yao\"",
"mtime": "2025-10-21T12:32:00.847Z", "mtime": "2025-10-21T12:35:54.920Z",
"size": 389, "size": 389,
"path": "../public/_nuxt/B4mSF5Ac.js" "path": "../public/_nuxt/B4mSF5Ac.js"
}, },
"/_nuxt/B8JkES4d.js": { "/_nuxt/B8JkES4d.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"1860-WvKC8RdCe6cXCpB1GzY85pS096Q\"", "etag": "\"1860-WvKC8RdCe6cXCpB1GzY85pS096Q\"",
"mtime": "2025-10-21T12:32:00.847Z", "mtime": "2025-10-21T12:35:54.920Z",
"size": 6240, "size": 6240,
"path": "../public/_nuxt/B8JkES4d.js" "path": "../public/_nuxt/B8JkES4d.js"
}, },
"/_nuxt/BJFIhPLo.js": { "/_nuxt/BJFIhPLo.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"16e9-yq0/LFZyeArARUVXQVCw9WWyEhs\"", "etag": "\"16e9-yq0/LFZyeArARUVXQVCw9WWyEhs\"",
"mtime": "2025-10-21T12:32:00.847Z", "mtime": "2025-10-21T12:35:54.920Z",
"size": 5865, "size": 5865,
"path": "../public/_nuxt/BJFIhPLo.js" "path": "../public/_nuxt/BJFIhPLo.js"
}, },
"/_nuxt/BLJfiAQ_.js": { "/_nuxt/BLJfiAQ_.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"1827-YlPmbtoIQqGYplyNk7VayRftNJ4\"", "etag": "\"1827-YlPmbtoIQqGYplyNk7VayRftNJ4\"",
"mtime": "2025-10-21T12:32:00.847Z", "mtime": "2025-10-21T12:35:54.920Z",
"size": 6183, "size": 6183,
"path": "../public/_nuxt/BLJfiAQ_.js" "path": "../public/_nuxt/BLJfiAQ_.js"
}, },
"/_nuxt/BQ1JAN-t.js": { "/_nuxt/BQ1JAN-t.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"4d4-D2c9LzMtu3t/oTdiDqO210OhOq0\"", "etag": "\"4d4-D2c9LzMtu3t/oTdiDqO210OhOq0\"",
"mtime": "2025-10-21T12:32:00.847Z", "mtime": "2025-10-21T12:35:54.920Z",
"size": 1236, "size": 1236,
"path": "../public/_nuxt/BQ1JAN-t.js" "path": "../public/_nuxt/BQ1JAN-t.js"
}, },
"/_nuxt/BTRcaDI_.js": { "/_nuxt/BTRcaDI_.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"e71-89mfqDG6lXCsNo8iythpikNOsNM\"", "etag": "\"e71-89mfqDG6lXCsNo8iythpikNOsNM\"",
"mtime": "2025-10-21T12:32:00.847Z", "mtime": "2025-10-21T12:35:54.920Z",
"size": 3697, "size": 3697,
"path": "../public/_nuxt/BTRcaDI_.js" "path": "../public/_nuxt/BTRcaDI_.js"
}, },
"/_nuxt/BVRiFo7f.js": { "/_nuxt/BVRiFo7f.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"dbf-bs5Lp4co8JtdiCR4NBZg2xEEpZE\"", "etag": "\"dbf-bs5Lp4co8JtdiCR4NBZg2xEEpZE\"",
"mtime": "2025-10-21T12:32:00.847Z", "mtime": "2025-10-21T12:35:54.920Z",
"size": 3519, "size": 3519,
"path": "../public/_nuxt/BVRiFo7f.js" "path": "../public/_nuxt/BVRiFo7f.js"
}, },
"/_nuxt/BWWcyQAZ.js": { "/_nuxt/BWWcyQAZ.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"685-pCeqOgBg8QXGBjOkvDQ5Miivcwk\"", "etag": "\"685-pCeqOgBg8QXGBjOkvDQ5Miivcwk\"",
"mtime": "2025-10-21T12:32:00.847Z", "mtime": "2025-10-21T12:35:54.920Z",
"size": 1669, "size": 1669,
"path": "../public/_nuxt/BWWcyQAZ.js" "path": "../public/_nuxt/BWWcyQAZ.js"
}, },
"/_nuxt/Be7mAYpw.js": { "/_nuxt/Be7mAYpw.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"13f6-nhcH7PpHXr9KCHrhZOBaqzyCANs\"", "etag": "\"13f6-nhcH7PpHXr9KCHrhZOBaqzyCANs\"",
"mtime": "2025-10-21T12:32:00.847Z", "mtime": "2025-10-21T12:35:54.920Z",
"size": 5110, "size": 5110,
"path": "../public/_nuxt/Be7mAYpw.js" "path": "../public/_nuxt/Be7mAYpw.js"
}, },
"/_nuxt/BkTrhdjg.js": { "/_nuxt/BkTrhdjg.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"81f-bXeZaccLlH7cSuSEhEG6Pk4vEzY\"", "etag": "\"81f-bXeZaccLlH7cSuSEhEG6Pk4vEzY\"",
"mtime": "2025-10-21T12:32:00.848Z", "mtime": "2025-10-21T12:35:54.920Z",
"size": 2079, "size": 2079,
"path": "../public/_nuxt/BkTrhdjg.js" "path": "../public/_nuxt/BkTrhdjg.js"
}, },
"/_nuxt/BneZCqgq.js": { "/_nuxt/BneZCqgq.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"1a9f-Hr2fThSa8cJCoHMhFwvPAqgbLZg\"", "etag": "\"1a9f-Hr2fThSa8cJCoHMhFwvPAqgbLZg\"",
"mtime": "2025-10-21T12:32:00.848Z", "mtime": "2025-10-21T12:35:54.920Z",
"size": 6815, "size": 6815,
"path": "../public/_nuxt/BneZCqgq.js" "path": "../public/_nuxt/BneZCqgq.js"
}, },
"/_nuxt/BpG5pLwY.js": { "/_nuxt/BpG5pLwY.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"16e6-iqlwalhSHX6bpWAAiam6nLgiuVE\"", "etag": "\"16e6-iqlwalhSHX6bpWAAiam6nLgiuVE\"",
"mtime": "2025-10-21T12:32:00.848Z", "mtime": "2025-10-21T12:35:54.920Z",
"size": 5862, "size": 5862,
"path": "../public/_nuxt/BpG5pLwY.js" "path": "../public/_nuxt/BpG5pLwY.js"
}, },
"/_nuxt/BteKZQ9T.js": { "/_nuxt/BteKZQ9T.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"1ea-kmrGdt5SPmt15EiBI7kR9gXMQM0\"", "etag": "\"1ea-kmrGdt5SPmt15EiBI7kR9gXMQM0\"",
"mtime": "2025-10-21T12:32:00.848Z", "mtime": "2025-10-21T12:35:54.920Z",
"size": 490, "size": 490,
"path": "../public/_nuxt/BteKZQ9T.js" "path": "../public/_nuxt/BteKZQ9T.js"
}, },
"/_nuxt/C0jrEzGC.js": { "/_nuxt/C0jrEzGC.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"5f0-uJRUZKhjlZl/nyiPAoO6Z/4LAHg\"", "etag": "\"5f0-uJRUZKhjlZl/nyiPAoO6Z/4LAHg\"",
"mtime": "2025-10-21T12:32:00.848Z", "mtime": "2025-10-21T12:35:54.920Z",
"size": 1520, "size": 1520,
"path": "../public/_nuxt/C0jrEzGC.js" "path": "../public/_nuxt/C0jrEzGC.js"
}, },
"/_nuxt/C5SyyWEb.js": { "/_nuxt/C5SyyWEb.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"2a5-06iX+CL3i0ysaqW9nu7Eg2YzDhQ\"", "etag": "\"2a5-06iX+CL3i0ysaqW9nu7Eg2YzDhQ\"",
"mtime": "2025-10-21T12:32:00.848Z", "mtime": "2025-10-21T12:35:54.920Z",
"size": 677, "size": 677,
"path": "../public/_nuxt/C5SyyWEb.js" "path": "../public/_nuxt/C5SyyWEb.js"
}, },
"/_nuxt/C8kQt0fa.js": { "/_nuxt/C8kQt0fa.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"197-7X99z1xphxry8OnMwU7Ofs/uE0Q\"", "etag": "\"197-7X99z1xphxry8OnMwU7Ofs/uE0Q\"",
"mtime": "2025-10-21T12:32:00.848Z", "mtime": "2025-10-21T12:35:54.920Z",
"size": 407, "size": 407,
"path": "../public/_nuxt/C8kQt0fa.js" "path": "../public/_nuxt/C8kQt0fa.js"
}, },
"/_nuxt/CFErkncy.js": {
"type": "text/javascript; charset=utf-8",
"etag": "\"20d5-n8y27a5DG3vq+zV80w2HAXHUyAw\"",
"mtime": "2025-10-21T12:32:00.848Z",
"size": 8405,
"path": "../public/_nuxt/CFErkncy.js"
},
"/_nuxt/CHQH_CwJ.js": { "/_nuxt/CHQH_CwJ.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"1168-mBOIwVjM5LsxIx13Cs7oT3+LJ+k\"", "etag": "\"1168-mBOIwVjM5LsxIx13Cs7oT3+LJ+k\"",
"mtime": "2025-10-21T12:32:00.848Z", "mtime": "2025-10-21T12:35:54.920Z",
"size": 4456, "size": 4456,
"path": "../public/_nuxt/CHQH_CwJ.js" "path": "../public/_nuxt/CHQH_CwJ.js"
}, },
"/_nuxt/CKjxMu8n.js": { "/_nuxt/CKjxMu8n.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"faa-TEO7v2i4TXlLpDUt7LGSNlcm+Ew\"", "etag": "\"faa-TEO7v2i4TXlLpDUt7LGSNlcm+Ew\"",
"mtime": "2025-10-21T12:32:00.848Z", "mtime": "2025-10-21T12:35:54.920Z",
"size": 4010, "size": 4010,
"path": "../public/_nuxt/CKjxMu8n.js" "path": "../public/_nuxt/CKjxMu8n.js"
}, },
"/_nuxt/CN7ivzv2.js": {
"type": "text/javascript; charset=utf-8",
"etag": "\"1daf-KIlbDOIuT3G/zezUF5LO1f52Vtc\"",
"mtime": "2025-10-21T12:35:54.920Z",
"size": 7599,
"path": "../public/_nuxt/CN7ivzv2.js"
},
"/_nuxt/CNvcEwxd.js": { "/_nuxt/CNvcEwxd.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"11e7-FT5oxPyA+c2iUA/l/5Ieuxws3Pc\"", "etag": "\"11e7-FT5oxPyA+c2iUA/l/5Ieuxws3Pc\"",
"mtime": "2025-10-21T12:32:00.848Z", "mtime": "2025-10-21T12:35:54.921Z",
"size": 4583, "size": 4583,
"path": "../public/_nuxt/CNvcEwxd.js" "path": "../public/_nuxt/CNvcEwxd.js"
}, },
"/_nuxt/CUVZhO0q.js": { "/_nuxt/CUVZhO0q.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"dfc-1G2To51pfChtkPrr4l+DG3FkOHk\"", "etag": "\"dfc-1G2To51pfChtkPrr4l+DG3FkOHk\"",
"mtime": "2025-10-21T12:32:00.848Z", "mtime": "2025-10-21T12:35:54.921Z",
"size": 3580, "size": 3580,
"path": "../public/_nuxt/CUVZhO0q.js" "path": "../public/_nuxt/CUVZhO0q.js"
}, },
"/_nuxt/CUq_0rkE.js": { "/_nuxt/CUq_0rkE.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"12d-JV4KW1fgT85/V3Ap13X4q2h9U3g\"", "etag": "\"12d-JV4KW1fgT85/V3Ap13X4q2h9U3g\"",
"mtime": "2025-10-21T12:32:00.848Z", "mtime": "2025-10-21T12:35:54.921Z",
"size": 301, "size": 301,
"path": "../public/_nuxt/CUq_0rkE.js" "path": "../public/_nuxt/CUq_0rkE.js"
}, },
"/_nuxt/CWEkTB1z.js": { "/_nuxt/CWEkTB1z.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"198-ej4DRqc3/5nSwWU3c6wbOD3Ib9w\"", "etag": "\"198-ej4DRqc3/5nSwWU3c6wbOD3Ib9w\"",
"mtime": "2025-10-21T12:32:00.848Z", "mtime": "2025-10-21T12:35:54.921Z",
"size": 408, "size": 408,
"path": "../public/_nuxt/CWEkTB1z.js" "path": "../public/_nuxt/CWEkTB1z.js"
}, },
"/_nuxt/Cb5SbJ0y.js": { "/_nuxt/Cb5SbJ0y.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"1d90-K3fsAPMrslrofiGV21WL0Fu94+E\"", "etag": "\"1d90-K3fsAPMrslrofiGV21WL0Fu94+E\"",
"mtime": "2025-10-21T12:32:00.848Z", "mtime": "2025-10-21T12:35:54.921Z",
"size": 7568, "size": 7568,
"path": "../public/_nuxt/Cb5SbJ0y.js" "path": "../public/_nuxt/Cb5SbJ0y.js"
}, },
"/_nuxt/CkzaQq3X.js": { "/_nuxt/CkzaQq3X.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"17d-+xKrHjeww4bpFFkkjUNLD/ebn5A\"", "etag": "\"17d-+xKrHjeww4bpFFkkjUNLD/ebn5A\"",
"mtime": "2025-10-21T12:32:00.848Z", "mtime": "2025-10-21T12:35:54.921Z",
"size": 381, "size": 381,
"path": "../public/_nuxt/CkzaQq3X.js" "path": "../public/_nuxt/CkzaQq3X.js"
}, },
"/_nuxt/CrCcIvVp.js": { "/_nuxt/CrCcIvVp.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"274-9U7hEMtgHqdnQopnKeJsBKqKyKw\"", "etag": "\"274-9U7hEMtgHqdnQopnKeJsBKqKyKw\"",
"mtime": "2025-10-21T12:32:00.848Z", "mtime": "2025-10-21T12:35:54.921Z",
"size": 628, "size": 628,
"path": "../public/_nuxt/CrCcIvVp.js" "path": "../public/_nuxt/CrCcIvVp.js"
}, },
"/_nuxt/Cx4UcKGu.js": { "/_nuxt/Cx4UcKGu.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"19d-5AMD0EnFEjOkM3qKDpC/NZZzwDI\"", "etag": "\"19d-5AMD0EnFEjOkM3qKDpC/NZZzwDI\"",
"mtime": "2025-10-21T12:32:00.848Z", "mtime": "2025-10-21T12:35:54.921Z",
"size": 413, "size": 413,
"path": "../public/_nuxt/Cx4UcKGu.js" "path": "../public/_nuxt/Cx4UcKGu.js"
}, },
"/_nuxt/Czdc6-TI.js": { "/_nuxt/Czdc6-TI.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"165-EMJ/yP2qajGIw0CL3y+L/hvMM/8\"", "etag": "\"165-EMJ/yP2qajGIw0CL3y+L/hvMM/8\"",
"mtime": "2025-10-21T12:32:00.848Z", "mtime": "2025-10-21T12:35:54.921Z",
"size": 357, "size": 357,
"path": "../public/_nuxt/Czdc6-TI.js" "path": "../public/_nuxt/Czdc6-TI.js"
}, },
"/_nuxt/D54FZQPM.js": { "/_nuxt/D54FZQPM.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"1556-GtYLKNALVpyOhSr1LrAIs5gIV7I\"", "etag": "\"1556-GtYLKNALVpyOhSr1LrAIs5gIV7I\"",
"mtime": "2025-10-21T12:32:00.848Z", "mtime": "2025-10-21T12:35:54.921Z",
"size": 5462, "size": 5462,
"path": "../public/_nuxt/D54FZQPM.js" "path": "../public/_nuxt/D54FZQPM.js"
}, },
"/_nuxt/DAACT36i.js": { "/_nuxt/DAACT36i.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"1f9-dVOk5jAwb0VlMLJevIcT+s2NTgM\"", "etag": "\"1f9-dVOk5jAwb0VlMLJevIcT+s2NTgM\"",
"mtime": "2025-10-21T12:32:00.848Z", "mtime": "2025-10-21T12:35:54.921Z",
"size": 505, "size": 505,
"path": "../public/_nuxt/DAACT36i.js" "path": "../public/_nuxt/DAACT36i.js"
}, },
"/_nuxt/DI2PgNgB.js": {
"type": "text/javascript; charset=utf-8",
"etag": "\"329ab-EjWl46ZcILHAjC+dZQ1H/9g0rQA\"",
"mtime": "2025-10-21T12:32:00.848Z",
"size": 207275,
"path": "../public/_nuxt/DI2PgNgB.js"
},
"/_nuxt/DIYnFFZd.js": { "/_nuxt/DIYnFFZd.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"3518-Z2dO9ejuo/PHmRggMKxl1caQ7yo\"", "etag": "\"3518-Z2dO9ejuo/PHmRggMKxl1caQ7yo\"",
"mtime": "2025-10-21T12:32:00.848Z", "mtime": "2025-10-21T12:35:54.921Z",
"size": 13592, "size": 13592,
"path": "../public/_nuxt/DIYnFFZd.js" "path": "../public/_nuxt/DIYnFFZd.js"
}, },
"/_nuxt/DK8ar2Vw.js": { "/_nuxt/DK8ar2Vw.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"bf0-gt2eLpxqF9V/T1JrusLBdWlTOB4\"", "etag": "\"bf0-gt2eLpxqF9V/T1JrusLBdWlTOB4\"",
"mtime": "2025-10-21T12:32:00.848Z", "mtime": "2025-10-21T12:35:54.921Z",
"size": 3056, "size": 3056,
"path": "../public/_nuxt/DK8ar2Vw.js" "path": "../public/_nuxt/DK8ar2Vw.js"
}, },
"/_nuxt/DLp4u09V.js": {
"type": "text/javascript; charset=utf-8",
"etag": "\"2373-a6SinD9M0hf9fJlneHMFeVHePYU\"",
"mtime": "2025-10-21T12:35:54.921Z",
"size": 9075,
"path": "../public/_nuxt/DLp4u09V.js"
},
"/_nuxt/DQ89_Lrx.js": { "/_nuxt/DQ89_Lrx.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"1bdb-FX6FWYmVTmAWWkO9E2O91ImJoTI\"", "etag": "\"1bdb-FX6FWYmVTmAWWkO9E2O91ImJoTI\"",
"mtime": "2025-10-21T12:32:00.848Z", "mtime": "2025-10-21T12:35:54.921Z",
"size": 7131, "size": 7131,
"path": "../public/_nuxt/DQ89_Lrx.js" "path": "../public/_nuxt/DQ89_Lrx.js"
}, },
"/_nuxt/DaSgy0Cl.js": { "/_nuxt/DaSgy0Cl.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"11f-soKnh1qfNJj5nvt+IcgQXYvg/z4\"", "etag": "\"11f-soKnh1qfNJj5nvt+IcgQXYvg/z4\"",
"mtime": "2025-10-21T12:32:00.848Z", "mtime": "2025-10-21T12:35:54.921Z",
"size": 287, "size": 287,
"path": "../public/_nuxt/DaSgy0Cl.js" "path": "../public/_nuxt/DaSgy0Cl.js"
}, },
"/_nuxt/DaUHoOti.js": { "/_nuxt/DaUHoOti.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"177f-xSuV2n3wrsWDBysy5o9XsakrXDw\"", "etag": "\"177f-xSuV2n3wrsWDBysy5o9XsakrXDw\"",
"mtime": "2025-10-21T12:32:00.848Z", "mtime": "2025-10-21T12:35:54.921Z",
"size": 6015, "size": 6015,
"path": "../public/_nuxt/DaUHoOti.js" "path": "../public/_nuxt/DaUHoOti.js"
}, },
"/_nuxt/DbEmVw1_.js": {
"type": "text/javascript; charset=utf-8",
"etag": "\"32ab5-GBJvJfvbN3wGTaRplCzBmuFRQyk\"",
"mtime": "2025-10-21T12:35:54.921Z",
"size": 207541,
"path": "../public/_nuxt/DbEmVw1_.js"
},
"/_nuxt/DkeYb0_S.js": { "/_nuxt/DkeYb0_S.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"1ce-xiaAbRvqQ+zffTXF3Gc7rq14R0U\"", "etag": "\"1ce-xiaAbRvqQ+zffTXF3Gc7rq14R0U\"",
"mtime": "2025-10-21T12:32:00.848Z", "mtime": "2025-10-21T12:35:54.921Z",
"size": 462, "size": 462,
"path": "../public/_nuxt/DkeYb0_S.js" "path": "../public/_nuxt/DkeYb0_S.js"
}, },
"/_nuxt/DlAUqK2U.js": { "/_nuxt/DlAUqK2U.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"5b-eFCz/UrraTh721pgAl0VxBNR1es\"", "etag": "\"5b-eFCz/UrraTh721pgAl0VxBNR1es\"",
"mtime": "2025-10-21T12:32:00.848Z", "mtime": "2025-10-21T12:35:54.921Z",
"size": 91, "size": 91,
"path": "../public/_nuxt/DlAUqK2U.js" "path": "../public/_nuxt/DlAUqK2U.js"
}, },
"/_nuxt/DuCL6zMI.js": { "/_nuxt/DuCL6zMI.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"16a2-gJGadr4jKYMWO0Im01z6CSn+n1E\"", "etag": "\"16a2-gJGadr4jKYMWO0Im01z6CSn+n1E\"",
"mtime": "2025-10-21T12:32:00.848Z", "mtime": "2025-10-21T12:35:54.921Z",
"size": 5794, "size": 5794,
"path": "../public/_nuxt/DuCL6zMI.js" "path": "../public/_nuxt/DuCL6zMI.js"
}, },
"/_nuxt/H0vOWBHN.js": { "/_nuxt/H0vOWBHN.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"2029-KNpFGDGtz8iRFY43F+s7ByzEpkM\"", "etag": "\"2029-KNpFGDGtz8iRFY43F+s7ByzEpkM\"",
"mtime": "2025-10-21T12:32:00.848Z", "mtime": "2025-10-21T12:35:54.921Z",
"size": 8233, "size": 8233,
"path": "../public/_nuxt/H0vOWBHN.js" "path": "../public/_nuxt/H0vOWBHN.js"
}, },
"/_nuxt/Harheimer TC.CKfYAfp1.svg": { "/_nuxt/Harheimer TC.CKfYAfp1.svg": {
"type": "image/svg+xml", "type": "image/svg+xml",
"etag": "\"1d2535-Tx2lTuuFn2hBqGZOnDan3/OdRU0\"", "etag": "\"1d2535-Tx2lTuuFn2hBqGZOnDan3/OdRU0\"",
"mtime": "2025-10-21T12:32:00.848Z", "mtime": "2025-10-21T12:35:54.921Z",
"size": 1910069, "size": 1910069,
"path": "../public/_nuxt/Harheimer TC.CKfYAfp1.svg" "path": "../public/_nuxt/Harheimer TC.CKfYAfp1.svg"
}, },
"/_nuxt/Qy3ajxTk.js": { "/_nuxt/Qy3ajxTk.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"13f-LgrH17St2xFg+RPGvT3uJRaRfFw\"", "etag": "\"13f-LgrH17St2xFg+RPGvT3uJRaRfFw\"",
"mtime": "2025-10-21T12:32:00.848Z", "mtime": "2025-10-21T12:35:54.921Z",
"size": 319, "size": 319,
"path": "../public/_nuxt/Qy3ajxTk.js" "path": "../public/_nuxt/Qy3ajxTk.js"
}, },
"/_nuxt/RGsuuLA3.js": { "/_nuxt/RGsuuLA3.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"10bb-640PtonCPMgqRn3wO6U3UtHYmDM\"", "etag": "\"10bb-640PtonCPMgqRn3wO6U3UtHYmDM\"",
"mtime": "2025-10-21T12:32:00.848Z", "mtime": "2025-10-21T12:35:54.921Z",
"size": 4283, "size": 4283,
"path": "../public/_nuxt/RGsuuLA3.js" "path": "../public/_nuxt/RGsuuLA3.js"
}, },
"/_nuxt/SRZHqrjk.js": {
"type": "text/javascript; charset=utf-8",
"etag": "\"383-+7H4gpbdqNaMFlhjcQOVxgmex04\"",
"mtime": "2025-10-21T12:35:54.921Z",
"size": 899,
"path": "../public/_nuxt/SRZHqrjk.js"
},
"/_nuxt/XZ6RV9KH.js": { "/_nuxt/XZ6RV9KH.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"175-xr1poEaGS4yjOp907AsRAr6XHLI\"", "etag": "\"175-xr1poEaGS4yjOp907AsRAr6XHLI\"",
"mtime": "2025-10-21T12:32:00.848Z", "mtime": "2025-10-21T12:35:54.922Z",
"size": 373, "size": 373,
"path": "../public/_nuxt/XZ6RV9KH.js" "path": "../public/_nuxt/XZ6RV9KH.js"
}, },
"/_nuxt/YJHbYJtA.js": { "/_nuxt/YJHbYJtA.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"19f-nQw578pUen9o8yYaMA8Bwag6xho\"", "etag": "\"19f-nQw578pUen9o8yYaMA8Bwag6xho\"",
"mtime": "2025-10-21T12:32:00.849Z", "mtime": "2025-10-21T12:35:54.922Z",
"size": 415, "size": 415,
"path": "../public/_nuxt/YJHbYJtA.js" "path": "../public/_nuxt/YJHbYJtA.js"
}, },
"/_nuxt/ZrOCUSmD.js": { "/_nuxt/ZrOCUSmD.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"ee2-knvq//8tl4tcmRjFy6nWAy0dRBk\"", "etag": "\"ee2-knvq//8tl4tcmRjFy6nWAy0dRBk\"",
"mtime": "2025-10-21T12:32:00.849Z", "mtime": "2025-10-21T12:35:54.922Z",
"size": 3810, "size": 3810,
"path": "../public/_nuxt/ZrOCUSmD.js" "path": "../public/_nuxt/ZrOCUSmD.js"
}, },
"/_nuxt/entry.ldOScqNk.css": { "/_nuxt/entry.DO240tkB.css": {
"type": "text/css; charset=utf-8", "type": "text/css; charset=utf-8",
"etag": "\"b1a7-jTLcC6A4rNtCcMPUi8YvMGaTmxU\"", "etag": "\"b35f-gCEaBCdtBrnK3yH5288e0HxU0e8\"",
"mtime": "2025-10-21T12:32:00.849Z", "mtime": "2025-10-21T12:35:54.922Z",
"size": 45479, "size": 45919,
"path": "../public/_nuxt/entry.ldOScqNk.css" "path": "../public/_nuxt/entry.DO240tkB.css"
}, },
"/_nuxt/error-404.CbXQcqJW.css": { "/_nuxt/error-404.CbXQcqJW.css": {
"type": "text/css; charset=utf-8", "type": "text/css; charset=utf-8",
"etag": "\"97e-Ty5bTTSEudJkO/DsGUoIf37xYxc\"", "etag": "\"97e-Ty5bTTSEudJkO/DsGUoIf37xYxc\"",
"mtime": "2025-10-21T12:32:00.849Z", "mtime": "2025-10-21T12:35:54.922Z",
"size": 2430, "size": 2430,
"path": "../public/_nuxt/error-404.CbXQcqJW.css" "path": "../public/_nuxt/error-404.CbXQcqJW.css"
}, },
"/_nuxt/error-500.L485xXhD.css": { "/_nuxt/error-500.L485xXhD.css": {
"type": "text/css; charset=utf-8", "type": "text/css; charset=utf-8",
"etag": "\"773-jNt1QdCa+iqaSZb1mv/IQWC5p6w\"", "etag": "\"773-jNt1QdCa+iqaSZb1mv/IQWC5p6w\"",
"mtime": "2025-10-21T12:32:00.849Z", "mtime": "2025-10-21T12:35:54.922Z",
"size": 1907, "size": 1907,
"path": "../public/_nuxt/error-500.L485xXhD.css" "path": "../public/_nuxt/error-500.L485xXhD.css"
}, },
"/_nuxt/index.BYYJS8tV.css": { "/_nuxt/index.BYYJS8tV.css": {
"type": "text/css; charset=utf-8", "type": "text/css; charset=utf-8",
"etag": "\"167-3j4dZVXlcTPVZDB5pP2uXGX7/QQ\"", "etag": "\"167-3j4dZVXlcTPVZDB5pP2uXGX7/QQ\"",
"mtime": "2025-10-21T12:32:00.849Z", "mtime": "2025-10-21T12:35:54.922Z",
"size": 359, "size": 359,
"path": "../public/_nuxt/index.BYYJS8tV.css" "path": "../public/_nuxt/index.BYYJS8tV.css"
}, },
"/_nuxt/jVj3QaoK.js": { "/_nuxt/jVj3QaoK.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"196-xWXv220Sy3kJeouwzrQ/gnXllWQ\"", "etag": "\"196-xWXv220Sy3kJeouwzrQ/gnXllWQ\"",
"mtime": "2025-10-21T12:32:00.849Z", "mtime": "2025-10-21T12:35:54.922Z",
"size": 406, "size": 406,
"path": "../public/_nuxt/jVj3QaoK.js" "path": "../public/_nuxt/jVj3QaoK.js"
}, },
"/_nuxt/rZgF5GAr.js": { "/_nuxt/rZgF5GAr.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"2163-F4ycM3bgzLo6kVIU09LeGUWE8SI\"", "etag": "\"2163-F4ycM3bgzLo6kVIU09LeGUWE8SI\"",
"mtime": "2025-10-21T12:32:00.849Z", "mtime": "2025-10-21T12:35:54.922Z",
"size": 8547, "size": 8547,
"path": "../public/_nuxt/rZgF5GAr.js" "path": "../public/_nuxt/rZgF5GAr.js"
}, },
"/_nuxt/tnJjxGC6.js": { "/_nuxt/tnJjxGC6.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"abb-4G3/6bCNUQzUVLLE5tcXv6Rh+gc\"", "etag": "\"abb-4G3/6bCNUQzUVLLE5tcXv6Rh+gc\"",
"mtime": "2025-10-21T12:32:00.849Z", "mtime": "2025-10-21T12:35:54.922Z",
"size": 2747, "size": 2747,
"path": "../public/_nuxt/tnJjxGC6.js" "path": "../public/_nuxt/tnJjxGC6.js"
}, },
"/_nuxt/y9BE7jdd.js": { "/_nuxt/y9BE7jdd.js": {
"type": "text/javascript; charset=utf-8", "type": "text/javascript; charset=utf-8",
"etag": "\"d8b-/UzKIx4Kl1VnbQibGZzrIbVIyG4\"", "etag": "\"d8b-/UzKIx4Kl1VnbQibGZzrIbVIyG4\"",
"mtime": "2025-10-21T12:32:00.849Z", "mtime": "2025-10-21T12:35:54.922Z",
"size": 3467, "size": 3467,
"path": "../public/_nuxt/y9BE7jdd.js" "path": "../public/_nuxt/y9BE7jdd.js"
}, },
"/spielplaene/1. Mannschaft 20252026.pdf": { "/spielplaene/1. Mannschaft 20252026.pdf": {
"type": "application/pdf", "type": "application/pdf",
"etag": "\"64c6-+477M+gD/spwpWR9NO/tMJ/inCc\"", "etag": "\"64c6-+477M+gD/spwpWR9NO/tMJ/inCc\"",
"mtime": "2025-10-21T12:32:00.851Z", "mtime": "2025-10-21T12:35:54.924Z",
"size": 25798, "size": 25798,
"path": "../public/spielplaene/1. Mannschaft 20252026.pdf" "path": "../public/spielplaene/1. Mannschaft 20252026.pdf"
}, },
"/spielplaene/2. Mannschaft 20252026.pdf": { "/spielplaene/2. Mannschaft 20252026.pdf": {
"type": "application/pdf", "type": "application/pdf",
"etag": "\"5bfa-DRJMHLV15iss67lEISoGqSYmZjE\"", "etag": "\"5bfa-DRJMHLV15iss67lEISoGqSYmZjE\"",
"mtime": "2025-10-21T12:32:00.851Z", "mtime": "2025-10-21T12:35:54.924Z",
"size": 23546, "size": 23546,
"path": "../public/spielplaene/2. Mannschaft 20252026.pdf" "path": "../public/spielplaene/2. Mannschaft 20252026.pdf"
}, },
"/spielplaene/3. Mannschaft 20252026.pdf": { "/spielplaene/3. Mannschaft 20252026.pdf": {
"type": "application/pdf", "type": "application/pdf",
"etag": "\"7447-w933CPQdXhkWJ2AZOVdY0UgJnPo\"", "etag": "\"7447-w933CPQdXhkWJ2AZOVdY0UgJnPo\"",
"mtime": "2025-10-21T12:32:00.851Z", "mtime": "2025-10-21T12:35:54.924Z",
"size": 29767, "size": 29767,
"path": "../public/spielplaene/3. Mannschaft 20252026.pdf" "path": "../public/spielplaene/3. Mannschaft 20252026.pdf"
}, },
"/spielplaene/4. Mannschaft 20252026.pdf": { "/spielplaene/4. Mannschaft 20252026.pdf": {
"type": "application/pdf", "type": "application/pdf",
"etag": "\"6a9b-4TPGn1yQlFUMRj7oB43SN//Np9o\"", "etag": "\"6a9b-4TPGn1yQlFUMRj7oB43SN//Np9o\"",
"mtime": "2025-10-21T12:32:00.851Z", "mtime": "2025-10-21T12:35:54.924Z",
"size": 27291, "size": 27291,
"path": "../public/spielplaene/4. Mannschaft 20252026.pdf" "path": "../public/spielplaene/4. Mannschaft 20252026.pdf"
}, },
"/spielplaene/5. Mannschaft 20252026.pdf": { "/spielplaene/5. Mannschaft 20252026.pdf": {
"type": "application/pdf", "type": "application/pdf",
"etag": "\"6523-5VUfCMaoiNhcwHhptHHTVJ3lSwQ\"", "etag": "\"6523-5VUfCMaoiNhcwHhptHHTVJ3lSwQ\"",
"mtime": "2025-10-21T12:32:00.851Z", "mtime": "2025-10-21T12:35:54.924Z",
"size": 25891, "size": 25891,
"path": "../public/spielplaene/5. Mannschaft 20252026.pdf" "path": "../public/spielplaene/5. Mannschaft 20252026.pdf"
}, },
"/spielplaene/Jugend 11 20252026.pdf": { "/spielplaene/Jugend 11 20252026.pdf": {
"type": "application/pdf", "type": "application/pdf",
"etag": "\"52e9-3Rrk9UKUxPh80pBJ0w9oLVbe5dA\"", "etag": "\"52e9-3Rrk9UKUxPh80pBJ0w9oLVbe5dA\"",
"mtime": "2025-10-21T12:32:00.851Z", "mtime": "2025-10-21T12:35:54.924Z",
"size": 21225, "size": 21225,
"path": "../public/spielplaene/Jugend 11 20252026.pdf" "path": "../public/spielplaene/Jugend 11 20252026.pdf"
}, },
"/_nuxt/builds/latest.json": { "/_nuxt/builds/latest.json": {
"type": "application/json", "type": "application/json",
"etag": "\"47-snXZQE0Fy3MUjZbnKAJCA6GyUDA\"", "etag": "\"47-aVOE6xW+/CP0oWaTEr2HYwBdke4\"",
"mtime": "2025-10-21T12:32:00.839Z", "mtime": "2025-10-21T12:35:54.912Z",
"size": 71, "size": 71,
"path": "../public/_nuxt/builds/latest.json" "path": "../public/_nuxt/builds/latest.json"
}, },
"/_nuxt/builds/meta/f1db3745-a031-477c-933f-6868f5829384.json": { "/_nuxt/builds/meta/fce91ff8-40a0-4fdf-a058-a6b83ddf7c57.json": {
"type": "application/json", "type": "application/json",
"etag": "\"8b-q+3bmAVJHURMkPuvxOuUzhycQ4Q\"", "etag": "\"8b-b1XoCxbXohOLCWsLiZpM6sONkT0\"",
"mtime": "2025-10-21T12:32:00.836Z", "mtime": "2025-10-21T12:35:54.909Z",
"size": 139, "size": 139,
"path": "../public/_nuxt/builds/meta/f1db3745-a031-477c-933f-6868f5829384.json" "path": "../public/_nuxt/builds/meta/fce91ff8-40a0-4fdf-a058-a6b83ddf7c57.json"
} }
}; };
@@ -5465,6 +5479,9 @@ const _lazy_zyEkIc = () => import('../routes/api/cms/users/reject.post.mjs');
const _lazy_hmwxQi = () => import('../routes/api/cms/users/update-role.post.mjs'); const _lazy_hmwxQi = () => import('../routes/api/cms/users/update-role.post.mjs');
const _lazy_Ho2nl4 = () => import('../routes/api/contact.post.mjs'); const _lazy_Ho2nl4 = () => import('../routes/api/contact.post.mjs');
const _lazy_EK_x5_ = () => import('../routes/api/galerie.get.mjs'); const _lazy_EK_x5_ = () => import('../routes/api/galerie.get.mjs');
const _lazy_jYLuY1 = () => import('../routes/api/members.delete.mjs');
const _lazy_HGAbG3 = () => import('../routes/api/members.get.mjs');
const _lazy_XNetVh = () => import('../routes/api/members.post.mjs');
const _lazy_FqQY6L = () => import('../routes/api/profile.get.mjs'); const _lazy_FqQY6L = () => import('../routes/api/profile.get.mjs');
const _lazy_m5wCSG = () => import('../routes/api/profile.put.mjs'); const _lazy_m5wCSG = () => import('../routes/api/profile.put.mjs');
const _lazy_JX4TVI = () => import('../routes/api/spielplaene.get.mjs'); const _lazy_JX4TVI = () => import('../routes/api/spielplaene.get.mjs');
@@ -5484,6 +5501,9 @@ const handlers = [
{ route: '/api/cms/users/update-role', handler: _lazy_hmwxQi, lazy: true, middleware: false, method: "post" }, { route: '/api/cms/users/update-role', handler: _lazy_hmwxQi, lazy: true, middleware: false, method: "post" },
{ route: '/api/contact', handler: _lazy_Ho2nl4, lazy: true, middleware: false, method: "post" }, { route: '/api/contact', handler: _lazy_Ho2nl4, lazy: true, middleware: false, method: "post" },
{ route: '/api/galerie', handler: _lazy_EK_x5_, lazy: true, middleware: false, method: "get" }, { route: '/api/galerie', handler: _lazy_EK_x5_, lazy: true, middleware: false, method: "get" },
{ route: '/api/members', handler: _lazy_jYLuY1, lazy: true, middleware: false, method: "delete" },
{ route: '/api/members', handler: _lazy_HGAbG3, lazy: true, middleware: false, method: "get" },
{ route: '/api/members', handler: _lazy_XNetVh, lazy: true, middleware: false, method: "post" },
{ route: '/api/profile', handler: _lazy_FqQY6L, lazy: true, middleware: false, method: "get" }, { route: '/api/profile', handler: _lazy_FqQY6L, lazy: true, middleware: false, method: "get" },
{ route: '/api/profile', handler: _lazy_m5wCSG, lazy: true, middleware: false, method: "put" }, { route: '/api/profile', handler: _lazy_m5wCSG, lazy: true, middleware: false, method: "put" },
{ route: '/api/spielplaene', handler: _lazy_JX4TVI, lazy: true, middleware: false, method: "get" }, { route: '/api/spielplaene', handler: _lazy_JX4TVI, lazy: true, middleware: false, method: "get" },

View File

@@ -0,0 +1,60 @@
import { d as defineEventHandler, g as getCookie, c as createError, r as readBody } from '../../nitro/nitro.mjs';
import { b as verifyToken, e as getUserById } from '../../_/auth.mjs';
import { d as deleteMember } from '../../_/members.mjs';
import 'node:http';
import 'node:https';
import 'node:events';
import 'node:buffer';
import 'node:fs';
import 'node:path';
import 'node:crypto';
import 'node:url';
import 'bcryptjs';
import 'jsonwebtoken';
import 'fs';
import 'path';
const members_delete = defineEventHandler(async (event) => {
try {
const token = getCookie(event, "auth_token");
if (!token) {
throw createError({
statusCode: 401,
message: "Nicht authentifiziert."
});
}
const decoded = verifyToken(token);
if (!decoded) {
throw createError({
statusCode: 401,
message: "Ung\xFCltiges Token."
});
}
const user = await getUserById(decoded.id);
if (!user || user.role !== "admin" && user.role !== "vorstand") {
throw createError({
statusCode: 403,
message: "Keine Berechtigung zum L\xF6schen von Mitgliedern."
});
}
const body = await readBody(event);
const { id } = body;
if (!id) {
throw createError({
statusCode: 400,
message: "Mitglieds-ID ist erforderlich."
});
}
await deleteMember(id);
return {
success: true,
message: "Mitglied erfolgreich gel\xF6scht."
};
} catch (error) {
console.error("Fehler beim L\xF6schen des Mitglieds:", error);
throw error;
}
});
export { members_delete as default };
//# sourceMappingURL=members.delete.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"members.delete.mjs","sources":["../../../../../server/api/members.delete.js"],"sourcesContent":null,"names":[],"mappings":";;;;;;;;;;;;;;;;AAGA,uBAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AACA,EAAA,IAAA;AACA,IAAA,MAAA,KAAA,GAAA,SAAA,CAAA,KAAA,EAAA,YAAA,CAAA;AAEA,IAAA,IAAA,CAAA,KAAA,EAAA;AACA,MAAA,MAAA,WAAA,CAAA;AAAA,QACA,UAAA,EAAA,GAAA;AAAA,QACA,OAAA,EAAA;AAAA,OACA,CAAA;AAAA,IACA;AAEA,IAAA,MAAA,OAAA,GAAA,YAAA,KAAA,CAAA;AAEA,IAAA,IAAA,CAAA,OAAA,EAAA;AACA,MAAA,MAAA,WAAA,CAAA;AAAA,QACA,UAAA,EAAA,GAAA;AAAA,QACA,OAAA,EAAA;AAAA,OACA,CAAA;AAAA,IACA;AAEA,IAAA,MAAA,IAAA,GAAA,MAAA,WAAA,CAAA,OAAA,CAAA,EAAA,CAAA;AAGA,IAAA,IAAA,CAAA,IAAA,IAAA,IAAA,CAAA,SAAA,OAAA,IAAA,IAAA,CAAA,SAAA,UAAA,EAAA;AACA,MAAA,MAAA,WAAA,CAAA;AAAA,QACA,UAAA,EAAA,GAAA;AAAA,QACA,OAAA,EAAA;AAAA,OACA,CAAA;AAAA,IACA;AAEA,IAAA,MAAA,IAAA,GAAA,MAAA,QAAA,CAAA,KAAA,CAAA;AACA,IAAA,MAAA,EAAA,IAAA,GAAA,IAAA;AAEA,IAAA,IAAA,CAAA,EAAA,EAAA;AACA,MAAA,MAAA,WAAA,CAAA;AAAA,QACA,UAAA,EAAA,GAAA;AAAA,QACA,OAAA,EAAA;AAAA,OACA,CAAA;AAAA,IACA;AAEA,IAAA,MAAA,aAAA,EAAA,CAAA;AAEA,IAAA,OAAA;AAAA,MACA,OAAA,EAAA,IAAA;AAAA,MACA,OAAA,EAAA;AAAA,KACA;AAAA,EACA,SAAA,KAAA,EAAA;AACA,IAAA,OAAA,CAAA,KAAA,CAAA,yCAAA,KAAA,CAAA;AACA,IAAA,MAAA,KAAA;AAAA,EACA;AACA,CAAA,CAAA;;;;"}

View File

@@ -0,0 +1,109 @@
import { d as defineEventHandler, g as getCookie, c as createError } from '../../nitro/nitro.mjs';
import { b as verifyToken } from '../../_/auth.mjs';
import { r as readMembers, a as readUsers } from '../../_/members.mjs';
import 'node:http';
import 'node:https';
import 'node:events';
import 'node:buffer';
import 'node:fs';
import 'node:path';
import 'node:crypto';
import 'node:url';
import 'bcryptjs';
import 'jsonwebtoken';
import 'fs';
import 'path';
const members_get = defineEventHandler(async (event) => {
var _a, _b, _c, _d;
try {
const token = getCookie(event, "auth_token");
if (!token) {
throw createError({
statusCode: 401,
message: "Nicht authentifiziert."
});
}
const decoded = verifyToken(token);
if (!decoded) {
throw createError({
statusCode: 401,
message: "Ung\xFCltiges Token."
});
}
const manualMembers = await readMembers();
const registeredUsers = await readUsers();
const mergedMembers = [];
const processedEmails = /* @__PURE__ */ new Set();
const processedNames = /* @__PURE__ */ new Set();
for (const member of manualMembers) {
const normalizedEmail = ((_a = member.email) == null ? void 0 : _a.toLowerCase().trim()) || "";
const normalizedName = ((_b = member.name) == null ? void 0 : _b.toLowerCase().trim()) || "";
mergedMembers.push({
...member,
source: "manual",
editable: true,
hasLogin: false
});
if (normalizedEmail) processedEmails.add(normalizedEmail);
if (normalizedName) processedNames.add(normalizedName);
}
for (const user of registeredUsers) {
if (!user.active) continue;
const normalizedEmail = ((_c = user.email) == null ? void 0 : _c.toLowerCase().trim()) || "";
const normalizedName = ((_d = user.name) == null ? void 0 : _d.toLowerCase().trim()) || "";
let matchedManualIndex = -1;
if (normalizedEmail) {
matchedManualIndex = mergedMembers.findIndex(
(m) => {
var _a2;
return m.source === "manual" && ((_a2 = m.email) == null ? void 0 : _a2.toLowerCase().trim()) === normalizedEmail;
}
);
}
if (matchedManualIndex === -1 && normalizedName) {
matchedManualIndex = mergedMembers.findIndex(
(m) => {
var _a2;
return m.source === "manual" && ((_a2 = m.name) == null ? void 0 : _a2.toLowerCase().trim()) === normalizedName;
}
);
}
if (matchedManualIndex !== -1) {
mergedMembers[matchedManualIndex] = {
...mergedMembers[matchedManualIndex],
hasLogin: true,
loginEmail: user.email,
loginRole: user.role,
lastLogin: user.lastLogin
};
} else {
mergedMembers.push({
id: user.id,
name: user.name,
email: user.email,
phone: user.phone || "",
address: "",
notes: `Rolle: ${user.role}`,
source: "login",
editable: false,
hasLogin: true,
loginEmail: user.email,
loginRole: user.role,
lastLogin: user.lastLogin
});
}
}
mergedMembers.sort((a, b) => a.name.localeCompare(b.name));
return {
success: true,
members: mergedMembers
};
} catch (error) {
console.error("Fehler beim Abrufen der Mitgliederliste:", error);
throw error;
}
});
export { members_get as default };
//# sourceMappingURL=members.get.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"members.get.mjs","sources":["../../../../../server/api/members.get.js"],"sourcesContent":null,"names":["_a"],"mappings":"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"}

View File

@@ -0,0 +1,67 @@
import { d as defineEventHandler, g as getCookie, c as createError, r as readBody } from '../../nitro/nitro.mjs';
import { b as verifyToken, e as getUserById } from '../../_/auth.mjs';
import { s as saveMember } from '../../_/members.mjs';
import 'node:http';
import 'node:https';
import 'node:events';
import 'node:buffer';
import 'node:fs';
import 'node:path';
import 'node:crypto';
import 'node:url';
import 'bcryptjs';
import 'jsonwebtoken';
import 'fs';
import 'path';
const members_post = defineEventHandler(async (event) => {
try {
const token = getCookie(event, "auth_token");
if (!token) {
throw createError({
statusCode: 401,
message: "Nicht authentifiziert."
});
}
const decoded = verifyToken(token);
if (!decoded) {
throw createError({
statusCode: 401,
message: "Ung\xFCltiges Token."
});
}
const user = await getUserById(decoded.id);
if (!user || user.role !== "admin" && user.role !== "vorstand") {
throw createError({
statusCode: 403,
message: "Keine Berechtigung zum Bearbeiten von Mitgliedern."
});
}
const body = await readBody(event);
const { id, name, email, phone, address, notes } = body;
if (!name) {
throw createError({
statusCode: 400,
message: "Name ist erforderlich."
});
}
await saveMember({
id: id || void 0,
name,
email: email || "",
phone: phone || "",
address: address || "",
notes: notes || ""
});
return {
success: true,
message: "Mitglied erfolgreich gespeichert."
};
} catch (error) {
console.error("Fehler beim Speichern des Mitglieds:", error);
throw error;
}
});
export { members_post as default };
//# sourceMappingURL=members.post.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"members.post.mjs","sources":["../../../../../server/api/members.post.js"],"sourcesContent":null,"names":[],"mappings":";;;;;;;;;;;;;;;;AAGA,qBAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AACA,EAAA,IAAA;AACA,IAAA,MAAA,KAAA,GAAA,SAAA,CAAA,KAAA,EAAA,YAAA,CAAA;AAEA,IAAA,IAAA,CAAA,KAAA,EAAA;AACA,MAAA,MAAA,WAAA,CAAA;AAAA,QACA,UAAA,EAAA,GAAA;AAAA,QACA,OAAA,EAAA;AAAA,OACA,CAAA;AAAA,IACA;AAEA,IAAA,MAAA,OAAA,GAAA,YAAA,KAAA,CAAA;AAEA,IAAA,IAAA,CAAA,OAAA,EAAA;AACA,MAAA,MAAA,WAAA,CAAA;AAAA,QACA,UAAA,EAAA,GAAA;AAAA,QACA,OAAA,EAAA;AAAA,OACA,CAAA;AAAA,IACA;AAEA,IAAA,MAAA,IAAA,GAAA,MAAA,WAAA,CAAA,OAAA,CAAA,EAAA,CAAA;AAGA,IAAA,IAAA,CAAA,IAAA,IAAA,IAAA,CAAA,SAAA,OAAA,IAAA,IAAA,CAAA,SAAA,UAAA,EAAA;AACA,MAAA,MAAA,WAAA,CAAA;AAAA,QACA,UAAA,EAAA,GAAA;AAAA,QACA,OAAA,EAAA;AAAA,OACA,CAAA;AAAA,IACA;AAEA,IAAA,MAAA,IAAA,GAAA,MAAA,QAAA,CAAA,KAAA,CAAA;AACA,IAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,OAAA,KAAA,EAAA,OAAA,EAAA,OAAA,GAAA,IAAA;AAEA,IAAA,IAAA,CAAA,IAAA,EAAA;AACA,MAAA,MAAA,WAAA,CAAA;AAAA,QACA,UAAA,EAAA,GAAA;AAAA,QACA,OAAA,EAAA;AAAA,OACA,CAAA;AAAA,IACA;AAEA,IAAA,MAAA,UAAA,CAAA;AAAA,MACA,IAAA,EAAA,IAAA,KAAA,CAAA;AAAA,MACA,IAAA;AAAA,MACA,OAAA,KAAA,IAAA,EAAA;AAAA,MACA,OAAA,KAAA,IAAA,EAAA;AAAA,MACA,SAAA,OAAA,IAAA,EAAA;AAAA,MACA,OAAA,KAAA,IAAA;AAAA,KACA,CAAA;AAEA,IAAA,OAAA;AAAA,MACA,OAAA,EAAA,IAAA;AAAA,MACA,OAAA,EAAA;AAAA,KACA;AAAA,EACA,SAAA,KAAA,EAAA;AACA,IAAA,OAAA,CAAA,KAAA,CAAA,wCAAA,KAAA,CAAA;AACA,IAAA,MAAA,KAAA;AAAA,EACA;AACA,CAAA,CAAA;;;;"}

View File

@@ -272,7 +272,7 @@ async function renderInlineStyles(usedModules) {
const renderSSRHeadOptions = {"omitLineBreaks":true}; const renderSSRHeadOptions = {"omitLineBreaks":true};
const entryFileName = "DI2PgNgB.js"; const entryFileName = "DbEmVw1_.js";
globalThis.__buildAssetsURL = buildAssetsURL; globalThis.__buildAssetsURL = buildAssetsURL;
globalThis.__publicAssetsURL = publicAssetsURL; globalThis.__publicAssetsURL = publicAssetsURL;

View File

@@ -8,6 +8,14 @@
</h1> </h1>
<div class="w-24 h-1 bg-primary-600 mb-4" /> <div class="w-24 h-1 bg-primary-600 mb-4" />
</div> </div>
<div class="flex items-center space-x-3">
<button
@click="viewMode = viewMode === 'cards' ? 'table' : 'cards'"
class="flex items-center px-4 py-2 bg-gray-100 hover:bg-gray-200 text-gray-700 font-semibold rounded-lg transition-colors"
>
<component :is="viewMode === 'cards' ? Table2 : Grid3x3" :size="20" class="mr-2" />
{{ viewMode === 'cards' ? 'Tabelle' : 'Karten' }}
</button>
<button <button
v-if="canEdit" v-if="canEdit"
@click="openAddModal" @click="openAddModal"
@@ -17,13 +25,90 @@
Mitglied hinzufügen Mitglied hinzufügen
</button> </button>
</div> </div>
</div>
<!-- Loading State --> <!-- Loading State -->
<div v-if="isLoading" class="flex items-center justify-center py-12"> <div v-if="isLoading" class="flex items-center justify-center py-12">
<Loader2 :size="40" class="animate-spin text-primary-600" /> <Loader2 :size="40" class="animate-spin text-primary-600" />
</div> </div>
<!-- Members List --> <!-- Table View -->
<div v-else-if="viewMode === 'table'" class="bg-white rounded-xl shadow-lg overflow-hidden">
<div class="overflow-x-auto">
<table class="min-w-full divide-y divide-gray-200">
<thead class="bg-gray-50">
<tr>
<th class="px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Name</th>
<th class="px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">E-Mail</th>
<th class="px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Telefon</th>
<th class="px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Status</th>
<th v-if="canEdit" class="px-4 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">Aktionen</th>
</tr>
</thead>
<tbody class="bg-white divide-y divide-gray-200">
<tr v-for="member in members" :key="member.id" class="hover:bg-gray-50">
<td class="px-4 py-3 whitespace-nowrap">
<div class="text-sm font-medium text-gray-900">{{ member.name }}</div>
<div v-if="member.notes" class="text-xs text-gray-500">{{ member.notes }}</div>
</td>
<td class="px-4 py-3 whitespace-nowrap">
<a v-if="member.email" :href="`mailto:${member.email}`" class="text-sm text-primary-600 hover:text-primary-800">
{{ member.email }}
</a>
<span v-else class="text-sm text-gray-400">-</span>
</td>
<td class="px-4 py-3 whitespace-nowrap">
<a v-if="member.phone" :href="`tel:${member.phone}`" class="text-sm text-primary-600 hover:text-primary-800">
{{ member.phone }}
</a>
<span v-else class="text-sm text-gray-400">-</span>
</td>
<td class="px-4 py-3 whitespace-nowrap">
<div class="flex items-center space-x-2">
<span
v-if="member.hasLogin"
class="px-2 py-1 bg-green-100 text-green-800 text-xs font-medium rounded-full"
>
Login
</span>
<span
:class="member.source === 'manual' ? 'bg-blue-100 text-blue-800' : 'bg-purple-100 text-purple-800'"
class="px-2 py-1 text-xs font-medium rounded-full"
>
{{ member.source === 'manual' ? 'Manuell' : 'System' }}
</span>
</div>
</td>
<td v-if="canEdit" class="px-4 py-3 whitespace-nowrap text-right text-sm font-medium">
<div v-if="member.editable" class="flex justify-end space-x-2">
<button
@click="openEditModal(member)"
class="text-blue-600 hover:text-blue-900"
title="Bearbeiten"
>
<Edit :size="18" />
</button>
<button
@click="confirmDelete(member)"
class="text-red-600 hover:text-red-900"
title="Löschen"
>
<Trash2 :size="18" />
</button>
</div>
<span v-else class="text-gray-400 text-xs">Nicht editierbar</span>
</td>
</tr>
</tbody>
</table>
</div>
<div v-if="members.length === 0" class="text-center py-12 text-gray-500">
Keine Mitglieder gefunden.
</div>
</div>
<!-- Cards View -->
<div v-else class="space-y-4"> <div v-else class="space-y-4">
<div <div
v-for="member in members" v-for="member in members"
@@ -114,16 +199,28 @@
</h2> </h2>
<form @submit.prevent="saveMember" class="space-y-4"> <form @submit.prevent="saveMember" class="space-y-4">
<div class="grid grid-cols-2 gap-4">
<div> <div>
<label class="block text-sm font-medium text-gray-700 mb-2">Name *</label> <label class="block text-sm font-medium text-gray-700 mb-2">Vorname *</label>
<input <input
v-model="formData.name" v-model="formData.firstName"
type="text" type="text"
required required
class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500" class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500"
:disabled="isSaving" :disabled="isSaving"
/> />
</div> </div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Nachname *</label>
<input
v-model="formData.lastName"
type="text"
required
class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500"
:disabled="isSaving"
/>
</div>
</div>
<div> <div>
<label class="block text-sm font-medium text-gray-700 mb-2">E-Mail</label> <label class="block text-sm font-medium text-gray-700 mb-2">E-Mail</label>
@@ -197,7 +294,7 @@
<script setup> <script setup>
import { ref, computed, onMounted } from 'vue' import { ref, computed, onMounted } from 'vue'
import { Users, UserPlus, Mail, Phone, MapPin, FileText, Clock, Edit, Trash2, Loader2, AlertCircle } from 'lucide-vue-next' import { Users, UserPlus, Mail, Phone, MapPin, FileText, Clock, Edit, Trash2, Loader2, AlertCircle, Table2, Grid3x3 } from 'lucide-vue-next'
const authStore = useAuthStore() const authStore = useAuthStore()
@@ -207,9 +304,11 @@ const members = ref([])
const showModal = ref(false) const showModal = ref(false)
const editingMember = ref(null) const editingMember = ref(null)
const errorMessage = ref('') const errorMessage = ref('')
const viewMode = ref('table') // 'table' or 'cards'
const formData = ref({ const formData = ref({
name: '', firstName: '',
lastName: '',
email: '', email: '',
phone: '', phone: '',
address: '', address: '',
@@ -235,7 +334,8 @@ const loadMembers = async () => {
const openAddModal = () => { const openAddModal = () => {
editingMember.value = null editingMember.value = null
formData.value = { formData.value = {
name: '', firstName: '',
lastName: '',
email: '', email: '',
phone: '', phone: '',
address: '', address: '',
@@ -248,7 +348,8 @@ const openAddModal = () => {
const openEditModal = (member) => { const openEditModal = (member) => {
editingMember.value = member editingMember.value = member
formData.value = { formData.value = {
name: member.name, firstName: member.firstName || '',
lastName: member.lastName || '',
email: member.email || '', email: member.email || '',
phone: member.phone || '', phone: member.phone || '',
address: member.address || '', address: member.address || '',

View File

@@ -33,10 +33,12 @@ export default defineEventHandler(async (event) => {
// First, add all manual members // First, add all manual members
for (const member of manualMembers) { for (const member of manualMembers) {
const normalizedEmail = member.email?.toLowerCase().trim() || '' const normalizedEmail = member.email?.toLowerCase().trim() || ''
const normalizedName = member.name?.toLowerCase().trim() || '' const fullName = `${member.firstName || ''} ${member.lastName || ''}`.trim()
const normalizedName = fullName.toLowerCase()
mergedMembers.push({ mergedMembers.push({
...member, ...member,
name: fullName, // Computed for display
source: 'manual', source: 'manual',
editable: true, editable: true,
hasLogin: false hasLogin: false

View File

@@ -32,18 +32,19 @@ export default defineEventHandler(async (event) => {
} }
const body = await readBody(event) const body = await readBody(event)
const { id, name, email, phone, address, notes } = body const { id, firstName, lastName, email, phone, address, notes } = body
if (!name) { if (!firstName || !lastName) {
throw createError({ throw createError({
statusCode: 400, statusCode: 400,
message: 'Name ist erforderlich.' message: 'Vorname und Nachname sind erforderlich.'
}) })
} }
await saveMember({ await saveMember({
id: id || undefined, id: id || undefined,
name, firstName,
lastName,
email: email || '', email: email || '',
phone: phone || '', phone: phone || '',
address: address || '', address: address || '',

View File

@@ -1,7 +1,8 @@
[ [
{ {
"id": "m1", "id": "m1",
"name": "Max Mustermann", "firstName": "Max",
"lastName": "Mustermann",
"email": "max@example.com", "email": "max@example.com",
"phone": "069 123456", "phone": "069 123456",
"address": "Musterstraße 1, 60437 Frankfurt", "address": "Musterstraße 1, 60437 Frankfurt",
@@ -9,7 +10,8 @@
}, },
{ {
"id": "m2", "id": "m2",
"name": "Anna Schmidt", "firstName": "Anna",
"lastName": "Schmidt",
"email": "", "email": "",
"phone": "069 234567", "phone": "069 234567",
"address": "Hauptstraße 5, 60437 Frankfurt", "address": "Hauptstraße 5, 60437 Frankfurt",