From 9da8665acad2ac1242ebc3149feb369bacd8a9d3 Mon Sep 17 00:00:00 2001 From: rene Date: Thu, 14 May 2026 13:20:11 +0200 Subject: [PATCH] =?UTF-8?q?UX:=20Upgrade-Tab=20=E2=80=94=20Cards=20statt?= =?UTF-8?q?=20Tabelle,=20Freischalten-Button=20immer=20sichtbar=20(SW=20by?= =?UTF-8?q?-v942)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/main.py | 2 +- backend/static/js/app.js | 2 +- backend/static/js/pages/admin.js | 82 ++++++++++++++++++-------------- backend/static/sw.js | 2 +- 4 files changed, 49 insertions(+), 39 deletions(-) diff --git a/backend/main.py b/backend/main.py index 3ce196a..d145e80 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 = "941" # muss mit APP_VER in app.js übereinstimmen +APP_VER = "942" # 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 d585465..b2802bd 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 = '941'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen +const APP_VER = '942'; // ← 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 00a19e8..34b7ccd 100644 --- a/backend/static/js/pages/admin.js +++ b/backend/static/js/pages/admin.js @@ -3519,55 +3519,65 @@ window.Page_admin = (() => { const pending = rows.filter(r => !r.fulfilled_at); const done = rows.filter(r => r.fulfilled_at); - const _row = (r, showBtn) => ` + // 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 => ` - ${_esc(r.name)}
+ ${_esc(r.name)}
${_esc(r.email)} ${tierBadge(r.tier)} - - ${r.message ? _esc(r.message) : '—'} - - ${r.created_at?.slice(0,10) || ''} - - ${showBtn - ? `` - : `✓ ${r.fulfilled_at?.slice(0,10)}`} - + + ✓ ${r.fulfilled_at?.slice(0,10) || ''} `; - const thead = ` - ${['Nutzer','Tarif','Nachricht','Datum','Aktion'].map(h => - `${h}` - ).join('')}`; - el.innerHTML = ` -
-
Offene Anfragen (${pending.length})
-
- - ${thead} - - ${pending.length - ? pending.map(r => _row(r, true)).join('') - : ``} - -
- Keine offenen Anfragen -
+
+
+ Offene Anfragen (${pending.length})
+ ${pending.length + ? pending.map(_pendingCard).join('') + : `
+ Keine offenen Anfragen +
`}
${done.length ? `
Erledigt (${done.length})
- ${thead} - ${done.map(r => _row(r, false)).join('')} + + ${['Nutzer','Tarif','Freigegeben'].map(h => + `` + ).join('')} + + ${done.map(_doneRow).join('')}
${h}
` : ''}`; diff --git a/backend/static/sw.js b/backend/static/sw.js index 6803ce0..3404b58 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-v941'; +const CACHE_VERSION = 'by-v942'; 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