diff --git a/web/src/pages/Charges.jsx b/web/src/pages/Charges.jsx
index ddcf528..b184aa4 100644
--- a/web/src/pages/Charges.jsx
+++ b/web/src/pages/Charges.jsx
@@ -139,12 +139,12 @@ export default function Charges() {
{ key: "created", header: "Eingelagert", width: 130,
sortValue: (l) => new Date(l.created_at).getTime(),
render: (l) => {new Date(l.created_at).toLocaleDateString("de-DE")} },
- { key: "split", header: "", label: "Aufteilen", fixed: true, width: 118, align: "num",
+ { key: "split", header: "Aufteilen", label: "Aufteilen", width: 118, align: "num",
render: (l) => (isAdmin ? (
) : null) },
- { key: "details", header: "", label: "Artikel", fixed: true, width: 84, align: "num",
+ { key: "details", header: "Artikel", label: "Artikel", width: 90, align: "num",
render: (l) => Artikel },
];
diff --git a/web/src/pages/ItemList.jsx b/web/src/pages/ItemList.jsx
index 797caa2..d35f8cd 100644
--- a/web/src/pages/ItemList.jsx
+++ b/web/src/pages/ItemList.jsx
@@ -88,7 +88,7 @@ export default function ItemList() {
render: (it) => preis(it) || "–" },
{ key: "note", header: "Notiz", width: 160, filterText: (it) => it.note || "",
render: (it) => {it.note || "–"} },
- { key: "open", header: "", label: "Produkt öffnen", fixed: true, width: 84, align: "num",
+ { key: "open", header: "Artikel", label: "Produkt öffnen", width: 90, align: "num",
render: (it) => Produkt },
];
diff --git a/web/src/pages/MinStock.jsx b/web/src/pages/MinStock.jsx
index 3e090bc..6b58d8d 100644
--- a/web/src/pages/MinStock.jsx
+++ b/web/src/pages/MinStock.jsx
@@ -259,8 +259,8 @@ export default function MinStock() {
function zeile(r) {
const g = r.kind === "group" ? r.entity : null;
return (
-
-
+
+
{r.name}
{g && Gruppe}
{g?.child_ids?.length > 0 && (
@@ -272,21 +272,21 @@ export default function MinStock() {
{isAdmin ? (
- saveSoll(r, e.target.value)} />
- ) : {fmt(r.soll)}}
+ ) : {fmt(r.soll)}}
{/* Einheit: bei Packungsartikeln und Gruppen mit Einheit umschaltbar. */}
{isAdmin && r.kind === "product" && hasPkg(r.entity) ? (
-
) : isAdmin && g && g.min_stock_unit_id ? (
-
) : (
- {r.unit || "–"}
+ {r.unit || "–"}
)}
-
+
{r.bestand != null ? `Bestand ${fmt(r.bestand)} ${r.bestandUnit || ""}` : ""}
{isAdmin && (
<>
-
);
}
diff --git a/web/src/pages/Products.jsx b/web/src/pages/Products.jsx
index b99758a..a004675 100644
--- a/web/src/pages/Products.jsx
+++ b/web/src/pages/Products.jsx
@@ -141,7 +141,9 @@ export default function Products({ fixedType = null }) {
sortValue: (p) => (p.updated_at ? new Date(p.updated_at).getTime() : 0),
filterText: (p) => fmtDateTime(p.updated_at),
render: (p) => {fmtDateTime(p.updated_at)} },
- { key: "details", header: "", label: "Details", fixed: true, width: 84, align: "num",
+ // Kein fixed: die Spalte soll sich verschieben lassen. Dafuer braucht sie
+ // einen sichtbaren Titel – an einem leeren Kopf gibt es nichts zu greifen.
+ { key: "details", header: "Details", label: "Details", width: 90, align: "num",
render: (p) => Details },
].filter(Boolean);
diff --git a/web/src/styles.css b/web/src/styles.css
index 3361295..acfaaa4 100644
--- a/web/src/styles.css
+++ b/web/src/styles.css
@@ -328,6 +328,26 @@ td .field-inline { margin-bottom: 0; flex-wrap: wrap; }
132px machte schmale Spalten (z.B. "Einheit") unnoetig breit. */
td select { width: auto; min-width: 0; max-width: 100%; }
/* Button-Paare (z.B. Speichern/Abbrechen) gleich breit halten. */
+/* Mindestbestände: eine Zeile je Eintrag in FESTEN Spalten.
+ Vorher lag hier ein .field-inline – dort wachsen Name und Eingabefeld beide
+ (.field-inline > input { flex: 1 1 auto }) und teilen sich den Restplatz.
+ Die Felder standen dadurch je nach Namenslänge woanders. */
+.min-zeile {
+ display: grid;
+ grid-template-columns: minmax(0, 1fr) 110px 150px 150px 160px 36px;
+ gap: var(--sp-2);
+ align-items: center;
+}
+.min-zeile > * { min-width: 0; }
+.min-zeile input, .min-zeile select { margin-top: 0; width: 100%; min-width: 0; }
+.min-zeile .bestand { text-align: right; }
+/* Schmal: Name über die volle Breite, darunter die Felder nebeneinander. */
+@media (max-width: 900px) {
+ .min-zeile { grid-template-columns: 1fr 1fr 1fr 36px; }
+ .min-zeile > .name { grid-column: 1 / -1; }
+ .min-zeile .bestand { text-align: left; }
+}
+
.btn-pair { display: flex; gap: var(--sp-2); flex-wrap: wrap; justify-content: flex-end; }
.btn-pair .btn { flex: 1 1 auto; min-width: 104px; justify-content: center; }