fix: Umlaute, Foto-404, Account-Menu responsive

Bugs:
- nginx: /uploads/ wurde von der .jpg/.png-Regex-Location geschluckt
  -> ^~ Prefix gibt /uploads/ und /api/ Vorrang vor Regex
  -> Fotos werden jetzt korrekt vom Backend ausgeliefert
- TopNav menu-item Klasse war via <style>@apply definiert -
  Tailwind verarbeitet @apply nur in .css-Dateien, nicht in JSX-style-Tags
  -> alle Klassen direkt am Element + neuer responsive Aufbau
- TopNav mobile-friendlier: Brand-Truncate, Demo-Badge erst ab sm,
  Dropdown max-w fuer Viewport, Touch-Outside-Close, groessere Touch-Targets

Umlaute:
- Alle ASCII-Substitutionen (fuer, ueber, aendern, loeschen, Stueck, Geraete,
  Ruecknahme, Hintertuer, Schluessel, Kuehlschrank, Pruefe, gueltig, etc.)
  konsequent auf Unicode (für, über, ä, ö, ü, ß) umgestellt.
- 26 Dateien betroffen, SQL-Identifier + Import-Pfade + API-Routen ASCII gelassen.
- seed.js: Baeckerei -> Baeckerei.. ah Baeckerei -> Bäckerei
This commit is contained in:
christian
2026-05-26 14:01:30 +00:00
parent 9726d70c41
commit 0535fbe72a
55 changed files with 178 additions and 141 deletions

View File

@@ -19,7 +19,7 @@ export default function SuperAdmin({ user, onLogout }) {
load();
};
const setStatus = async (id, status) => { await api.updateTenant(id, { status }); load(); };
const del = async (id) => { if (!confirm('Tenant inkl. aller Daten loeschen?')) return; await api.deleteTenant(id); load(); };
const del = async (id) => { if (!confirm('Tenant inkl. aller Daten löschen?')) return; await api.deleteTenant(id); load(); };
return (
<div className="min-h-screen bg-slate-50">
@@ -154,7 +154,7 @@ function NewTenantModal({ onClose, onCreated }) {
<label className="flex items-center gap-2 text-sm text-slate-700">
<input type="checkbox" checked={form.seed}
onChange={e => setForm(f => ({ ...f, seed: e.target.checked }))} />
Mit Beispieldaten befuellen (5 Kunden, 3 Artikel, 2 Geraete)
Mit Beispieldaten befüllen (5 Kunden, 3 Artikel, 2 Geräte)
</label>
<div className="flex gap-2 pt-2">
@@ -176,7 +176,7 @@ function CreatedInfoModal({ info, onClose }) {
<div><dt className="inline text-slate-500">Slug: </dt><dd className="inline font-mono">{info.slug}</dd></div>
<div><dt className="inline text-slate-500">E-Mail: </dt><dd className="inline">{info.admin_email}</dd></div>
<div><dt className="inline text-slate-500">Passwort: </dt><dd className="inline font-mono">{info.admin_password_oneshot}</dd></div>
<div><dt className="inline text-slate-500">Gueltig: </dt><dd className="inline">{info.demo_expires_in_days} Tage</dd></div>
<div><dt className="inline text-slate-500">Gültig: </dt><dd className="inline">{info.demo_expires_in_days} Tage</dd></div>
</dl>
<p className="text-xs text-slate-400">Das Passwort wird nur einmal angezeigt.</p>
<button onClick={onClose} className="btn-primary w-full">OK</button>