feat(admin): merge company site_info stammdaten into general admin dashboard

This commit is contained in:
Daniel S
2026-08-09 22:39:42 +02:00
parent 11f8e33818
commit df6bb52ab0

View File

@@ -36,7 +36,7 @@ const presets = Object.values(THEME_PRESETS);
</div> </div>
<!-- Quick Admin Nav Cards / Links --> <!-- Quick Admin Nav Cards / Links -->
<nav aria-label="Admin Navigation" class="grid grid-cols-1 sm:grid-cols-2 gap-4 pt-2"> <nav aria-label="Admin Navigation" class="pt-2">
<a href="/admin/pages" class="p-4 bg-slate-900/80 border border-white/10 hover:border-sky-400/50 rounded-xl flex items-center justify-between text-xs transition-all group"> <a href="/admin/pages" class="p-4 bg-slate-900/80 border border-white/10 hover:border-sky-400/50 rounded-xl flex items-center justify-between text-xs transition-all group">
<div> <div>
<span class="font-bold text-white block group-hover:text-sky-400 text-sm">📄 Seiten-Verwaltung & Visueller Editor</span> <span class="font-bold text-white block group-hover:text-sky-400 text-sm">📄 Seiten-Verwaltung & Visueller Editor</span>
@@ -44,16 +44,9 @@ const presets = Object.values(THEME_PRESETS);
</div> </div>
<span class="text-sky-400 text-base font-bold">→</span> <span class="text-sky-400 text-base font-bold">→</span>
</a> </a>
<a href="/admin/settings" class="p-4 bg-slate-900/80 border border-white/10 hover:border-sky-400/50 rounded-xl flex items-center justify-between text-xs transition-all group">
<div>
<span class="font-bold text-white block group-hover:text-sky-400 text-sm">⚙️ Stammdaten & SEO</span>
<span class="text-[11px] text-slate-400">Firmen-Daten & Dynamic Data Binding</span>
</div>
<span class="text-sky-400 text-base font-bold">→</span>
</a>
</nav> </nav>
</div> </div>
@@ -64,19 +57,39 @@ const presets = Object.values(THEME_PRESETS);
<!-- Main Form Column --> <!-- Main Form Column -->
<div class="lg:col-span-2 space-y-8"> <div class="lg:col-span-2 space-y-8">
<!-- Site Info --> <!-- Site Info & Stammdaten -->
<div class="glass-panel rounded-2xl p-6 space-y-4"> <div class="glass-panel rounded-2xl p-6 space-y-6">
<h2 class="text-lg font-bold text-sky-400 uppercase tracking-wider flex items-center gap-2"> <h2 class="text-lg font-bold text-sky-400 uppercase tracking-wider flex items-center gap-2">
Allgemeine Informationen Allgemeine Informationen & SEO
</h2> </h2>
<div class="space-y-4"> <div class="space-y-4">
<div> <div>
<label class="block text-xs font-bold text-slate-400 mb-1">Webseiten-Name</label> <label class="block text-xs font-bold text-slate-400 mb-1">Webseiten-Name (Titel)</label>
<input type="text" id="siteName" value={siteConfig.siteName} class="w-full glass-panel bg-slate-950/60 rounded-xl p-3 text-xs text-white focus:outline-none focus:border-sky-400" /> <input type="text" id="siteName" value={siteConfig.siteName} class="w-full glass-panel bg-slate-950/60 rounded-xl p-3 text-xs text-white focus:outline-none focus:border-sky-400" />
</div> </div>
<div> <div>
<label class="block text-xs font-bold text-slate-400 mb-1">Meta Beschreibung</label> <label class="block text-xs font-bold text-slate-400 mb-1">Meta Beschreibung (SEO)</label>
<textarea id="metaDescription" rows="3" class="w-full glass-panel bg-slate-950/60 rounded-xl p-3 text-xs text-white focus:outline-none focus:border-sky-400 resize-none">{siteConfig.metaDescription}</textarea> <textarea id="metaDescription" rows="2" class="w-full glass-panel bg-slate-950/60 rounded-xl p-3 text-xs text-white focus:outline-none focus:border-sky-400 resize-none">{siteConfig.metaDescription}</textarea>
</div>
</div>
<h3 class="text-xs font-bold text-slate-400 uppercase tracking-wider pt-2 border-t border-white/10">Unternehmens-Stammdaten (Dynamic Data Binding)</h3>
<div class="grid grid-cols-1 sm:grid-cols-2 gap-4">
<div>
<label class="block text-xs font-semibold text-slate-400 mb-1">Firmenname / Brand</label>
<input type="text" id="infoTitle" value={(siteConfig as any).site_info?.title || siteConfig.siteName} class="w-full glass-panel bg-slate-950/60 rounded-xl p-3 text-xs text-white focus:outline-none focus:border-sky-400" />
</div>
<div>
<label class="block text-xs font-semibold text-slate-400 mb-1">E-Mail Adresse</label>
<input type="email" id="infoEmail" value={(siteConfig as any).site_info?.email || ''} class="w-full glass-panel bg-slate-950/60 rounded-xl p-3 text-xs text-white focus:outline-none focus:border-sky-400" />
</div>
<div>
<label class="block text-xs font-semibold text-slate-400 mb-1">Telefonnummer</label>
<input type="text" id="infoPhone" value={(siteConfig as any).site_info?.phone || ''} class="w-full glass-panel bg-slate-950/60 rounded-xl p-3 text-xs text-white focus:outline-none focus:border-sky-400" />
</div>
<div>
<label class="block text-xs font-semibold text-slate-400 mb-1">Adresse / Standort</label>
<input type="text" id="infoAddress" value={(siteConfig as any).site_info?.address || ''} class="w-full glass-panel bg-slate-950/60 rounded-xl p-3 text-xs text-white focus:outline-none focus:border-sky-400" />
</div> </div>
</div> </div>
</div> </div>
@@ -165,7 +178,13 @@ const presets = Object.values(THEME_PRESETS);
const payload = { const payload = {
siteConfig: { siteConfig: {
siteName: getVal('siteName'), siteName: getVal('siteName'),
metaDescription: getVal('metaDescription') metaDescription: getVal('metaDescription'),
site_info: {
title: getVal('infoTitle'),
email: getVal('infoEmail'),
phone: getVal('infoPhone'),
address: getVal('infoAddress')
}
}, },
themeConfig: { themeConfig: {
activePreset: selectedPreset activePreset: selectedPreset
@@ -181,6 +200,7 @@ const presets = Object.values(THEME_PRESETS);
try { try {
const res = await fetch('/api/config', { const res = await fetch('/api/config', {
method: 'POST', method: 'POST',
headers: { 'Content-Type': 'application/json' }, headers: { 'Content-Type': 'application/json' },