diff --git a/backend/main.py b/backend/main.py index d145e80..3ce196a 100644 --- a/backend/main.py +++ b/backend/main.py @@ -406,7 +406,7 @@ async def serve_media(path: str, request: _Request): raise _HE(404, "Nicht gefunden.") return _media_response(filepath) -APP_VER = "942" # muss mit APP_VER in app.js übereinstimmen +APP_VER = "941" # muss mit APP_VER in app.js übereinstimmen @app.get("/.well-known/assetlinks.json") async def assetlinks(): diff --git a/backend/static/js/app.js b/backend/static/js/app.js index b2802bd..d585465 100644 --- a/backend/static/js/app.js +++ b/backend/static/js/app.js @@ -3,7 +3,7 @@ Router, State-Management, Navigation, Initialisierung. ============================================================ */ -const APP_VER = '942'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen +const APP_VER = '941'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen const APP_VERSION = '1.5.1'; // ← semantische Version, wird bei make release gesetzt const IS_STAGING = location.hostname === 'staging.banyaro.app'; // Cache-Bust-Parameter nach Update-Reload sofort entfernen diff --git a/backend/static/js/pages/admin.js b/backend/static/js/pages/admin.js index 34b7ccd..00a19e8 100644 --- a/backend/static/js/pages/admin.js +++ b/backend/static/js/pages/admin.js @@ -3519,65 +3519,55 @@ window.Page_admin = (() => { const pending = rows.filter(r => !r.fulfilled_at); const done = rows.filter(r => r.fulfilled_at); - // Offene Anfragen als Cards (mobile-freundlich, Button immer sichtbar) - const _pendingCard = r => ` -
-
-
-
${_esc(r.name)}
-
${_esc(r.email)}
-
- ${tierBadge(r.tier)} - ${r.created_at?.slice(0,10) || ''} -
- ${r.message ? `
- ${_esc(r.message)} -
` : ''} -
-
- -
`; - - // Erledigte als kompakte Tabellenzeilen - const _doneRow = r => ` + const _row = (r, showBtn) => ` - ${_esc(r.name)}
+ ${_esc(r.name)}
${_esc(r.email)} ${tierBadge(r.tier)} - - ✓ ${r.fulfilled_at?.slice(0,10) || ''} + + ${r.message ? _esc(r.message) : '—'} + + ${r.created_at?.slice(0,10) || ''} + + ${showBtn + ? `` + : `✓ ${r.fulfilled_at?.slice(0,10)}`} + `; + const thead = ` + ${['Nutzer','Tarif','Nachricht','Datum','Aktion'].map(h => + `${h}` + ).join('')}`; + el.innerHTML = ` -
-
- Offene Anfragen (${pending.length}) +
+
Offene Anfragen (${pending.length})
+
+ + ${thead} + + ${pending.length + ? pending.map(r => _row(r, true)).join('') + : ``} + +
+ Keine offenen Anfragen +
- ${pending.length - ? pending.map(_pendingCard).join('') - : `
- Keine offenen Anfragen -
`}
${done.length ? `
Erledigt (${done.length})
- - ${['Nutzer','Tarif','Freigegeben'].map(h => - `` - ).join('')} - - ${done.map(_doneRow).join('')} + ${thead} + ${done.map(r => _row(r, false)).join('')}
${h}
` : ''}`; diff --git a/backend/static/sw.js b/backend/static/sw.js index 3404b58..6803ce0 100644 --- a/backend/static/sw.js +++ b/backend/static/sw.js @@ -3,7 +3,7 @@ Offline-Cache + Push Notifications + Tile-Cache ============================================================ */ -const CACHE_VERSION = 'by-v942'; +const CACHE_VERSION = 'by-v941'; const CACHE_STATIC = `${CACHE_VERSION}-static`; const CACHE_TILES = 'ban-yaro-tiles-v1'; // bleibt über SW-Updates erhalten const CACHE_API = 'ban-yaro-api-v1'; // API-Response-Cache