Web: Chargenliste (mit Sammel-Lagerort) + Ladezustand auf allen Tabellen

Neue Seite "Chargen": alle Chargen ueber alle Artikel (Artikel, Menge, MHD,
Lagerort, eingelagert). Lagerort je Zeile direkt aenderbar; alle Chargen ohne
Ort per Klick zuweisbar (bulk-location) - gut, wenn der Lagerort erst spaeter
angelegt wurde.

DataTable bekommt einen loading-Prop: waehrend des Ladens steht "Wird geladen..."
statt der Leer-Meldung. Auf ALLEN Tabellen angewendet (Produkte, Mindestbestaende,
Kategorien, Gruppen, Einheiten, Gebinde, Einzelstuecke, Chargen).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-07-29 13:58:07 +02:00
parent 1c88206838
commit 826f4df4bd
11 changed files with 190 additions and 12 deletions

View File

@@ -35,17 +35,19 @@ export default function MinStock() {
const [locations, setLocations] = useState([]);
const [categories, setCategories] = useState([]);
const [error, setError] = useState(null);
const [loading, setLoading] = useState(true);
// „+ hinzufügen"-Dialog: Ziel (Produkt/Gruppe) → Geltung (Gesamt/Lagerort) → Menge.
const [showAdd, setShowAdd] = useState(false);
const [draft, setDraft] = useState(EMPTY_DRAFT);
async function load() {
setLoading(true);
try {
const [ps, gs, ls, cs] = await Promise.all([
api.listProducts("", ""), api.listGroups(), api.listLocations(), api.listCategories(),
]);
setProducts(ps); setGroups(gs); setLocations(ls); setCategories(cs);
} catch (err) { setError(err.message); }
} catch (err) { setError(err.message); } finally { setLoading(false); }
}
useEffect(() => { load(); }, []);
@@ -285,7 +287,7 @@ export default function MinStock() {
)}
<div className="card">
<DataTable id="min-stock" columns={columns} rows={rows}
<DataTable id="min-stock" columns={columns} rows={rows} loading={loading}
getRowKey={(r) => r.key} empty="Noch keine Mindestbestände." />
</div>
</div>