UI-Verbesserungen: Rechnungsmenü entfernt, TS zu Trockenstellerprobe, Auffällig statt ⚠, Erregerkacheln bereinigt, Layout-Abstände optimiert

This commit is contained in:
2026-03-16 12:38:08 +01:00
parent e01afb9a10
commit c41cdad90d
9 changed files with 2281 additions and 2669 deletions

View File

@@ -13,7 +13,6 @@ import SearchPage from "./pages/SearchPage";
import SearchFarmerPage from "./pages/SearchFarmerPage"; import SearchFarmerPage from "./pages/SearchFarmerPage";
import SearchCalendarPage from "./pages/SearchCalendarPage"; import SearchCalendarPage from "./pages/SearchCalendarPage";
import UserManagementPage from "./pages/UserManagementPage"; import UserManagementPage from "./pages/UserManagementPage";
import InvoiceTemplatePage from "./pages/InvoiceTemplatePage";
import ReportTemplatePage from "./pages/ReportTemplatePage"; import ReportTemplatePage from "./pages/ReportTemplatePage";
function ProtectedRoutes() { function ProtectedRoutes() {
@@ -37,7 +36,6 @@ function ProtectedRoutes() {
<Route path="/samples/:sampleId/anamnesis" element={<AnamnesisPage />} /> <Route path="/samples/:sampleId/anamnesis" element={<AnamnesisPage />} />
<Route path="/samples/:sampleId/antibiogram" element={<AntibiogramPage />} /> <Route path="/samples/:sampleId/antibiogram" element={<AntibiogramPage />} />
<Route path="/samples/:sampleId/therapy" element={<TherapyPage />} /> <Route path="/samples/:sampleId/therapy" element={<TherapyPage />} />
<Route path="/invoice-template" element={<InvoiceTemplatePage />} />
<Route path="/report-template" element={<ReportTemplatePage />} /> <Route path="/report-template" element={<ReportTemplatePage />} />
<Route path="/admin" element={<Navigate to={isAdmin ? "/admin/landwirte" : "/admin/benutzer"} replace />} /> <Route path="/admin" element={<Navigate to={isAdmin ? "/admin/landwirte" : "/admin/benutzer"} replace />} />
<Route path="/admin/benutzer" element={<UserManagementPage />} /> <Route path="/admin/benutzer" element={<UserManagementPage />} />

View File

@@ -5,7 +5,6 @@ const PAGE_TITLES: Record<string, string> = {
"/home": "Startseite", "/home": "Startseite",
"/samples/new": "Neuanlage einer Probe", "/samples/new": "Neuanlage einer Probe",
"/portal": "MUH-Portal", "/portal": "MUH-Portal",
"/invoice-template": "Rechnung",
"/report-template": "Bericht", "/report-template": "Bericht",
}; };
@@ -84,9 +83,6 @@ export default function AppShell() {
<div className="nav-subgroup"> <div className="nav-subgroup">
<div className="nav-subgroup__label">Vorlagen</div> <div className="nav-subgroup__label">Vorlagen</div>
<div className="nav-subnav nav-subnav--nested"> <div className="nav-subnav nav-subnav--nested">
<NavLink to="/invoice-template" className={({ isActive }) => `nav-sublink ${isActive ? "is-active" : ""}`}>
Rechnung
</NavLink>
<NavLink to="/report-template" className={({ isActive }) => `nav-sublink ${isActive ? "is-active" : ""}`}> <NavLink to="/report-template" className={({ isActive }) => `nav-sublink ${isActive ? "is-active" : ""}`}>
Bericht Bericht
</NavLink> </NavLink>

View File

@@ -287,7 +287,7 @@ export default function AdministrationPage() {
<option value="SYSTEMIC_ANTIBIOTIC">systemisch Antibiotika</option> <option value="SYSTEMIC_ANTIBIOTIC">systemisch Antibiotika</option>
<option value="SYSTEMIC_PAIN">systemisch Schmerzmittel</option> <option value="SYSTEMIC_PAIN">systemisch Schmerzmittel</option>
<option value="DRY_SEALER">Versiegler</option> <option value="DRY_SEALER">Versiegler</option>
<option value="DRY_ANTIBIOTIC">TS Antibiotika</option> <option value="DRY_ANTIBIOTIC">Trockenstellerprobe Antibiotika</option>
</select> </select>
</td> </td>
) : null} ) : null}

View File

@@ -153,7 +153,7 @@ export default function AnamnesisPage() {
onClick={() => setActiveQuarter(quarter.quarterKey)} onClick={() => setActiveQuarter(quarter.quarterKey)}
> >
{quarter.label} {quarter.label}
{quarter.flagged ? " " : ""} {quarter.flagged ? " Auffällig" : ""}
</button> </button>
))} ))}
</div> </div>
@@ -186,12 +186,11 @@ export default function AnamnesisPage() {
disabled={!sample.anamnesisEditable} disabled={!sample.anamnesisEditable}
> >
<strong>{pathogen.name}</strong> <strong>{pathogen.name}</strong>
<small>{pathogen.code ?? pathogen.kind}</small>
</button> </button>
))} ))}
</div> </div>
<label className="field field--required"> <label className="field field--required field--spaced">
<span>Erreger manuell eingeben</span> <span>Erreger manuell eingeben</span>
<input <input
className={showValidation && !quarterHasPathogen(visibleQuarter.quarterKey) ? "is-invalid" : ""} className={showValidation && !quarterHasPathogen(visibleQuarter.quarterKey) ? "is-invalid" : ""}
@@ -219,10 +218,10 @@ export default function AnamnesisPage() {
/> />
</label> </label>
<div className="info-panel"> <div className="info-panel info-panel--spaced">
<strong>Hinweis</strong> <strong>Hinweis</strong>
<p> <p>
Kein Wachstum oder verunreinigte Proben werden spaeter automatisch vom Kein Wachstum oder verunreinigte Proben werden später automatisch vom
Antibiogramm ausgeschlossen. Antibiogramm ausgeschlossen.
</p> </p>
</div> </div>

File diff suppressed because it is too large Load Diff

View File

@@ -100,7 +100,7 @@ export default function LoginPage() {
<p className="eyebrow">MUH-App</p> <p className="eyebrow">MUH-App</p>
<h1>Moderne Steuerung fuer Milchproben und Therapien.</h1> <h1>Moderne Steuerung fuer Milchproben und Therapien.</h1>
<p className="hero-text"> <p className="hero-text">
Fokus auf klare Arbeitsablaeufe, schnelle Probenbearbeitung und ein Portal Fokus auf klare Arbeitsabläufe, schnelle Probenbearbeitung und ein Portal
fuer Verwaltung, Berichtsdruck und Versandstatus. fuer Verwaltung, Berichtsdruck und Versandstatus.
</p> </p>
</div> </div>

File diff suppressed because it is too large Load Diff

View File

@@ -127,7 +127,7 @@ export default function SampleRegistrationPage() {
<h3>Probe {sampleNumber ?? "..."}</h3> <h3>Probe {sampleNumber ?? "..."}</h3>
<p className="muted-text"> <p className="muted-text">
Die Probenummer wird fortlaufend vergeben. Trockensteller lassen sich ueber den Die Probenummer wird fortlaufend vergeben. Trockensteller lassen sich ueber den
Schalter TS markieren. Schalter Trockenstellerprobe markieren.
</p> </p>
</div> </div>
@@ -198,7 +198,7 @@ export default function SampleRegistrationPage() {
onClick={() => setSampleKind("DRY_OFF")} onClick={() => setSampleKind("DRY_OFF")}
disabled={!editable} disabled={!editable}
> >
TS Trockenstellerprobe
</button> </button>
</div> </div>
@@ -251,7 +251,7 @@ export default function SampleRegistrationPage() {
disabled={!editable} disabled={!editable}
> >
<span>{quarter.label}</span> <span>{quarter.label}</span>
<strong>{flaggedQuarters.includes(quarter.key) ? "" : "OK"}</strong> <strong>{flaggedQuarters.includes(quarter.key) ? "Auffällig" : "OK"}</strong>
</button> </button>
))} ))}
</div> </div>

View File

@@ -312,6 +312,7 @@ a {
.portal-grid { .portal-grid {
display: grid; display: grid;
gap: 20px; gap: 20px;
align-items: stretch;
} }
.metrics-grid { .metrics-grid {
@@ -383,6 +384,10 @@ a {
grid-column: 1 / -1; grid-column: 1 / -1;
} }
.field--spaced {
margin-top: 28px;
}
.field span { .field span {
font-size: 0.9rem; font-size: 0.9rem;
color: var(--muted); color: var(--muted);
@@ -664,6 +669,10 @@ a {
color: var(--muted); color: var(--muted);
} }
.info-panel--spaced {
margin-top: 28px;
}
.alert { .alert {
border: 1px solid transparent; border: 1px solid transparent;
} }