From 2323f1d360c797d8dfc2e8f285d1f8e1d926a01e Mon Sep 17 00:00:00 2001 From: Pepe Ziberi Date: Thu, 23 Jul 2026 22:04:08 +0200 Subject: [PATCH] fix(cockpit): Modul-Spalten sauber ausgerichtet + Zahl-Spalten im Rapport (v1.8.8) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - table-module: Spaltenbreiten respektieren Breiten-Hinweise (w-16…w-32); Eingabezeile im selben Raster wie Kopf/Daten (keine abgeschnittenen Platzhalter, saubere Ausrichtung) - Rapport (/rapport/[token]): Zahl-Spalten rechtsbündig/monospace - Hinweis: Modul→Rapport war bereits vollständig integriert; leere Module werden im Rapport ausgelassen (erst mit Zeilen sichtbar) Co-Authored-By: Claude Opus 4.8 (1M context) --- package.json | 2 +- src/app/rapport/[token]/page.tsx | 4 +- .../journal/modules/table-module.tsx | 47 ++++++++++++------- 3 files changed, 33 insertions(+), 20 deletions(-) diff --git a/package.json b/package.json index e59ffc2..6bf0779 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "lageplan", - "version": "1.8.7", + "version": "1.8.8", "description": "Feuerwehr Lageplan - Krokier-App für Einsatzdokumentation", "private": true, "scripts": { diff --git a/src/app/rapport/[token]/page.tsx b/src/app/rapport/[token]/page.tsx index 993f4ff..8492b1e 100644 --- a/src/app/rapport/[token]/page.tsx +++ b/src/app/rapport/[token]/page.tsx @@ -268,7 +268,7 @@ export default function RapportViewerPage({ params }: { params: Promise<{ token: {(mt.columns || []).map((c: any) => ( - {c.label} + {c.label} ))} @@ -276,7 +276,7 @@ export default function RapportViewerPage({ params }: { params: Promise<{ token: {mt.rows.map((row: any, ri: number) => ( {(mt.columns || []).map((c: any) => ( - + {c.type === 'check' ? (row[c.key] ? '✓' : '—') : c.type === 'time' diff --git a/src/components/journal/modules/table-module.tsx b/src/components/journal/modules/table-module.tsx index 4e053f4..90164b4 100644 --- a/src/components/journal/modules/table-module.tsx +++ b/src/components/journal/modules/table-module.tsx @@ -115,10 +115,17 @@ export function TableModule({ projectId, module, canEdit, notifyChanged }: Table } }, [projectId, module.id, notifyChanged]) + // Spaltenbreite ableiten — respektiert optionale Breiten-Hinweise (w-16 … w-32) + const WIDTH_MAP: Record = { 'w-10': '40px', 'w-16': '68px', 'w-20': '92px', 'w-24': '108px', 'w-28': '124px', 'w-32': '140px' } + const colSize = (c: ModuleColumn): string => { + if (c.type === 'check') return '36px' + if (c.type === 'time') return '58px' + if (c.width && WIDTH_MAP[c.width]) return WIDTH_MAP[c.width] + if (c.type === 'number') return '96px' + return 'minmax(90px,1fr)' + } // Grid-Template aus Spalten ableiten (+ Lösch-Spalte) - const gridCols = columns.map(c => - c.type === 'check' ? '32px' : c.type === 'time' ? '52px' : c.type === 'number' ? 'minmax(0,0.6fr)' : 'minmax(0,1fr)' - ).join(' ') + (canEdit ? ' 24px' : '') + const gridCols = columns.map(colSize).join(' ') + (canEdit ? ' 28px' : '') return (
@@ -194,21 +201,27 @@ export function TableModule({ projectId, module, canEdit, notifyChanged }: Table
)} - {/* Neue Zeile */} + {/* Neue Zeile — im selben Raster wie die Spalten, damit Eingaben unter den Titeln stehen */} {canEdit && ( -
- {textColumns.map((c, i) => ( - setDraft(prev => ({ ...prev, [c.key]: e.target.value }))} - onKeyDown={(e) => e.key === 'Enter' && addRow()} - className={`h-6 text-[11px] ${i === 0 && c.type !== 'number' ? 'flex-1 min-w-0' : 'w-20 shrink-0'}`} - /> - ))} -