diff --git a/public/admin.html b/public/admin.html index 9ae7ad1..5cf8cd0 100644 --- a/public/admin.html +++ b/public/admin.html @@ -21,6 +21,11 @@ .admin-search { width: 100%; max-width: 380px; padding: 9px 14px; border-radius: 10px; border: 1px solid rgba(255,255,255,0.18); background: rgba(255,255,255,0.06); color: inherit; margin-bottom: 12px; } .admin-table-wrap { overflow-x: auto; border-radius: 12px; border: 1px solid rgba(255,255,255,0.1); } + /* Kundentabelle: volle Breite, kein Links-/Rechts-Scroll */ + .admin-table-wrap.no-scroll { overflow-x: visible; } + .admin-table-wrap.no-scroll table.admin-table { table-layout: fixed; } + .admin-table-wrap.no-scroll .admin-table td { word-break: break-word; overflow-wrap: anywhere; } + .cust-actions { display: flex; flex-wrap: wrap; gap: 6px; } table.admin-table { width: 100%; border-collapse: collapse; font-size: 14px; } .admin-table th, .admin-table td { text-align: left; padding: 9px 12px; border-bottom: 1px solid rgba(255,255,255,0.08); vertical-align: middle; } .admin-table th { font-size: 12px; text-transform: uppercase; letter-spacing: 0.04em; opacity: 0.65; } @@ -34,7 +39,7 @@ padding: 5px 11px; border-radius: 8px; cursor: pointer; font-size: 13px; white-space: nowrap; } .mini-btn:hover { background: rgba(255,255,255,0.14); } .mini-btn.primary { background: rgba(94,234,212,0.16); border-color: rgba(94,234,212,0.5); } - .code-input { width: 90px; padding: 4px 8px; border-radius: 7px; border: 1px solid rgba(255,255,255,0.2); + .code-input { width: 100%; min-width: 60px; max-width: 90px; padding: 4px 8px; border-radius: 7px; border: 1px solid rgba(255,255,255,0.2); background: rgba(255,255,255,0.06); color: inherit; font: inherit; font-size: 13px; } .detail-row td { background: rgba(255,255,255,0.03); } .detail-box { padding: 6px 4px; } @@ -137,8 +142,12 @@
-
+
+ + + + diff --git a/public/admin.js b/public/admin.js index d49501e..c702c4e 100644 --- a/public/admin.js +++ b/public/admin.js @@ -217,9 +217,11 @@ async function loadCustomers(search = '') { } tbody.innerHTML = customers.map((c) => ` - - `).join('') diff --git a/server/routes/portalAdmin.js b/server/routes/portalAdmin.js index 6328d0b..0fcc2c3 100644 --- a/server/routes/portalAdmin.js +++ b/server/routes/portalAdmin.js @@ -105,7 +105,9 @@ router.get('/projects', async (req, res) => { ]) const nameById = customerNameMap(customers) - let items = projects.map((p) => ({ + let items = projects + .filter((p) => !p.archived) + .map((p) => ({ id: p.$id, projectName: p.projectName || '', subdomain: p.subdomain || '', @@ -155,7 +157,9 @@ router.get('/customers', async (req, res) => { if (p.customerId) projectCount[p.customerId] = (projectCount[p.customerId] || 0) + 1 } - let items = customers.map((c) => ({ + let items = customers + .filter((c) => !c.archived) + .map((c) => ({ id: c.$id, code: c.code || '', name: c.name || '',
Kundennr.KundeStatusPortalLetzter LoginProjekteAktionen
- - + +
+ + +
${escapeHtml(c.name)}
@@ -229,10 +231,12 @@ async function loadCustomers(search = '') {
${c.portalAccessEnabled ? 'aktiv' : 'kein Zugang'} ${fmtDateTime(c.lastLoginAt)} ${c.projectCount} - - - + +
+ + + +