146 lines
9.2 KiB
JavaScript
146 lines
9.2 KiB
JavaScript
import { _ as __nuxt_component_0$1 } from './server.mjs';
|
|
import { ref, computed, mergeProps, withCtx, createTextVNode, unref, useSSRContext } from 'vue';
|
|
import { ssrRenderAttrs, ssrRenderComponent, ssrInterpolate, ssrRenderList, ssrIncludeBooleanAttr, ssrLooseContain, ssrLooseEqual, ssrRenderClass } from 'vue/server-renderer';
|
|
import { AlertCircle, Check, X } from 'lucide-vue-next';
|
|
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: "benutzer",
|
|
__ssrInlineRender: true,
|
|
setup(__props) {
|
|
const allUsers = ref([]);
|
|
const currentUserId = ref(null);
|
|
const successMessage = ref("");
|
|
const errorMessage = ref("");
|
|
const pendingUsers = computed(() => {
|
|
return allUsers.value.filter((u) => u.active === false).map((u) => ({ ...u, selectedRole: u.role || "mitglied" }));
|
|
});
|
|
const activeUsers = computed(() => {
|
|
return allUsers.value.filter((u) => u.active === true);
|
|
});
|
|
const formatDate = (dateString) => {
|
|
return new Date(dateString).toLocaleString("de-DE", {
|
|
year: "numeric",
|
|
month: "2-digit",
|
|
day: "2-digit",
|
|
hour: "2-digit",
|
|
minute: "2-digit"
|
|
});
|
|
};
|
|
useHead({
|
|
title: "Benutzerverwaltung - CMS - Harheimer TC"
|
|
});
|
|
return (_ctx, _push, _parent, _attrs) => {
|
|
const _component_NuxtLink = __nuxt_component_0$1;
|
|
_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 items-center justify-between mb-6"><div><h1 class="text-4xl font-display font-bold text-gray-900"> Benutzerverwaltung </h1><div class="w-24 h-1 bg-primary-600 mt-4"></div></div>`);
|
|
_push(ssrRenderComponent(_component_NuxtLink, {
|
|
to: "/cms",
|
|
class: "px-4 py-2 bg-gray-200 hover:bg-gray-300 text-gray-800 rounded-lg transition-colors"
|
|
}, {
|
|
default: withCtx((_, _push2, _parent2, _scopeId) => {
|
|
if (_push2) {
|
|
_push2(` ← Zurück zum CMS `);
|
|
} else {
|
|
return [
|
|
createTextVNode(" ← Zurück zum CMS ")
|
|
];
|
|
}
|
|
}),
|
|
_: 1
|
|
}, _parent));
|
|
_push(`</div>`);
|
|
if (pendingUsers.value.length > 0) {
|
|
_push(`<div class="mb-8"><h2 class="text-2xl font-display font-bold text-gray-900 mb-4">`);
|
|
_push(ssrRenderComponent(unref(AlertCircle), {
|
|
size: 24,
|
|
class: "inline text-yellow-600 mr-2"
|
|
}, null, _parent));
|
|
_push(` Wartende Registrierungen (${ssrInterpolate(pendingUsers.value.length)}) </h2><div class="space-y-4"><!--[-->`);
|
|
ssrRenderList(pendingUsers.value, (user) => {
|
|
_push(`<div class="bg-yellow-50 border-l-4 border-yellow-400 rounded-lg p-6 shadow"><div class="flex items-start justify-between"><div class="flex-1"><h3 class="text-lg font-semibold text-gray-900">${ssrInterpolate(user.name)}</h3><p class="text-sm text-gray-600 mt-1">${ssrInterpolate(user.email)}</p>`);
|
|
if (user.phone) {
|
|
_push(`<p class="text-sm text-gray-600">${ssrInterpolate(user.phone)}</p>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
_push(`<p class="text-xs text-gray-500 mt-2"> Registriert am: ${ssrInterpolate(formatDate(user.created))}</p></div><div class="flex flex-col space-y-2 ml-4"><select class="px-3 py-2 border border-gray-300 rounded-lg text-sm focus:ring-2 focus:ring-primary-600"><option value="mitglied"${ssrIncludeBooleanAttr(Array.isArray(user.selectedRole) ? ssrLooseContain(user.selectedRole, "mitglied") : ssrLooseEqual(user.selectedRole, "mitglied")) ? " selected" : ""}>Mitglied</option><option value="vorstand"${ssrIncludeBooleanAttr(Array.isArray(user.selectedRole) ? ssrLooseContain(user.selectedRole, "vorstand") : ssrLooseEqual(user.selectedRole, "vorstand")) ? " selected" : ""}>Vorstand</option><option value="admin"${ssrIncludeBooleanAttr(Array.isArray(user.selectedRole) ? ssrLooseContain(user.selectedRole, "admin") : ssrLooseEqual(user.selectedRole, "admin")) ? " selected" : ""}>Administrator</option></select><button class="px-4 py-2 bg-green-600 hover:bg-green-700 text-white text-sm font-semibold rounded-lg transition-colors flex items-center justify-center">`);
|
|
_push(ssrRenderComponent(unref(Check), {
|
|
size: 16,
|
|
class: "mr-1"
|
|
}, null, _parent));
|
|
_push(` Freischalten </button><button class="px-4 py-2 bg-red-600 hover:bg-red-700 text-white text-sm font-semibold rounded-lg transition-colors flex items-center justify-center">`);
|
|
_push(ssrRenderComponent(unref(X), {
|
|
size: 16,
|
|
class: "mr-1"
|
|
}, null, _parent));
|
|
_push(` Ablehnen </button></div></div></div>`);
|
|
});
|
|
_push(`<!--]--></div></div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
_push(`<div><h2 class="text-2xl font-display font-bold text-gray-900 mb-4"> Aktive Benutzer (${ssrInterpolate(activeUsers.value.length)}) </h2><div class="bg-white rounded-xl shadow-lg overflow-hidden"><table class="min-w-full divide-y divide-gray-200"><thead class="bg-gray-50"><tr><th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider"> Name </th><th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider"> E-Mail </th><th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider"> Telefon </th><th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider"> Rolle </th><th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider"> Letzter Login </th><th class="px-6 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"><!--[-->`);
|
|
ssrRenderList(activeUsers.value, (user) => {
|
|
_push(`<tr class="hover:bg-gray-50"><td class="px-6 py-4 whitespace-nowrap"><div class="text-sm font-medium text-gray-900">${ssrInterpolate(user.name)}</div></td><td class="px-6 py-4 whitespace-nowrap"><div class="text-sm text-gray-600">${ssrInterpolate(user.email)}</div></td><td class="px-6 py-4 whitespace-nowrap"><div class="text-sm text-gray-600">${ssrInterpolate(user.phone || "-")}</div></td><td class="px-6 py-4 whitespace-nowrap"><select class="${ssrRenderClass([{
|
|
"bg-red-50 border-red-300": user.role === "admin",
|
|
"bg-blue-50 border-blue-300": user.role === "vorstand",
|
|
"bg-gray-50 border-gray-300": user.role === "mitglied"
|
|
}, "px-3 py-1 border border-gray-300 rounded text-sm"])}"><option value="mitglied"${ssrIncludeBooleanAttr(Array.isArray(user.role) ? ssrLooseContain(user.role, "mitglied") : ssrLooseEqual(user.role, "mitglied")) ? " selected" : ""}>Mitglied</option><option value="vorstand"${ssrIncludeBooleanAttr(Array.isArray(user.role) ? ssrLooseContain(user.role, "vorstand") : ssrLooseEqual(user.role, "vorstand")) ? " selected" : ""}>Vorstand</option><option value="admin"${ssrIncludeBooleanAttr(Array.isArray(user.role) ? ssrLooseContain(user.role, "admin") : ssrLooseEqual(user.role, "admin")) ? " selected" : ""}>Administrator</option></select></td><td class="px-6 py-4 whitespace-nowrap"><div class="text-sm text-gray-600">${ssrInterpolate(user.lastLogin ? formatDate(user.lastLogin) : "Nie")}</div></td><td class="px-6 py-4 whitespace-nowrap text-right text-sm">`);
|
|
if (user.id !== currentUserId.value) {
|
|
_push(`<button class="text-red-600 hover:text-red-800 font-medium"> Deaktivieren </button>`);
|
|
} else {
|
|
_push(`<span class="text-gray-400">Eigenes Konto</span>`);
|
|
}
|
|
_push(`</td></tr>`);
|
|
});
|
|
_push(`<!--]--></tbody></table></div></div>`);
|
|
if (successMessage.value) {
|
|
_push(`<div class="fixed bottom-20 right-4 bg-green-50 border border-green-200 rounded-lg p-4 shadow-lg"><p class="text-sm text-green-800 flex items-center">`);
|
|
_push(ssrRenderComponent(unref(Check), {
|
|
size: 18,
|
|
class: "mr-2"
|
|
}, null, _parent));
|
|
_push(` ${ssrInterpolate(successMessage.value)}</p></div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
if (errorMessage.value) {
|
|
_push(`<div class="fixed bottom-20 right-4 bg-red-50 border border-red-200 rounded-lg p-4 shadow-lg"><p class="text-sm text-red-800 flex items-center">`);
|
|
_push(ssrRenderComponent(unref(AlertCircle), {
|
|
size: 18,
|
|
class: "mr-2"
|
|
}, null, _parent));
|
|
_push(` ${ssrInterpolate(errorMessage.value)}</p></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/cms/benutzer.vue");
|
|
return _sfc_setup ? _sfc_setup(props, ctx) : void 0;
|
|
};
|
|
|
|
export { _sfc_main as default };
|
|
//# sourceMappingURL=benutzer-CEqkQsLi.mjs.map
|