feat: initial commit
This commit is contained in:
120
src/components/DefektForm.jsx
Normal file
120
src/components/DefektForm.jsx
Normal file
@@ -0,0 +1,120 @@
|
||||
import { useState, useEffect } from 'react';
|
||||
import { useAuth } from '../context/AuthContext';
|
||||
|
||||
const EMPTY_FORM = {
|
||||
erlNummer: '',
|
||||
seriennummer: '',
|
||||
artikelNr: '',
|
||||
bezeichnung: '',
|
||||
defekt: '',
|
||||
lagerstandortId: '',
|
||||
zustaendig: '',
|
||||
prio: 'mittel',
|
||||
kommentar: '',
|
||||
};
|
||||
|
||||
export default function DefektForm({ onAdd, showToast, lagerstandorte, colleagues }) {
|
||||
const { user } = useAuth();
|
||||
const ownName = user?.name || user?.email || '';
|
||||
const [form, setForm] = useState({ ...EMPTY_FORM, zustaendig: ownName });
|
||||
|
||||
useEffect(() => {
|
||||
if (ownName && !form.zustaendig) {
|
||||
setForm((f) => ({ ...f, zustaendig: ownName }));
|
||||
}
|
||||
}, [ownName]);
|
||||
|
||||
function handleChange(e) {
|
||||
const { name, value } = e.target;
|
||||
setForm((prev) => ({ ...prev, [name]: value }));
|
||||
}
|
||||
|
||||
async function handleSubmit(e) {
|
||||
e.preventDefault();
|
||||
|
||||
if (!form.erlNummer.trim() || !form.seriennummer.trim() || !form.zustaendig.trim()) {
|
||||
showToast('Bitte ERL, Seriennummer und Zuständig ausfüllen!', '#C62828');
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
await onAdd({
|
||||
erlNummer: form.erlNummer.trim(),
|
||||
seriennummer: form.seriennummer.trim(),
|
||||
artikelNr: form.artikelNr.trim(),
|
||||
bezeichnung: form.bezeichnung.trim(),
|
||||
defekt: form.defekt.trim(),
|
||||
lagerstandortId: form.lagerstandortId,
|
||||
zustaendig: form.zustaendig.trim(),
|
||||
prio: form.prio,
|
||||
kommentar: form.kommentar.trim(),
|
||||
});
|
||||
showToast('Asset erfasst: ' + form.erlNummer.trim());
|
||||
setForm({ ...EMPTY_FORM, zustaendig: ownName });
|
||||
} catch {
|
||||
showToast('Fehler beim Speichern!', '#C62828');
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="form-card">
|
||||
<div className="form-header">Defekte Ware erfassen</div>
|
||||
<form className="form-body" onSubmit={handleSubmit}>
|
||||
<div className="form-group">
|
||||
<label>ERL-Nummer (Logistik) *</label>
|
||||
<input name="erlNummer" value={form.erlNummer} onChange={handleChange} placeholder="z.B. ERL-00001" />
|
||||
</div>
|
||||
<div className="form-group">
|
||||
<label>Seriennummer *</label>
|
||||
<input name="seriennummer" value={form.seriennummer} onChange={handleChange} placeholder="z.B. SN-ABC123456" />
|
||||
</div>
|
||||
<div className="form-group">
|
||||
<label>Artikelnummer</label>
|
||||
<input name="artikelNr" value={form.artikelNr} onChange={handleChange} placeholder="z.B. ART-20341" />
|
||||
</div>
|
||||
<div className="form-group">
|
||||
<label>Bezeichnung</label>
|
||||
<input name="bezeichnung" value={form.bezeichnung} onChange={handleChange} placeholder="z.B. Hydraulikpumpe XL" />
|
||||
</div>
|
||||
<div className="form-group">
|
||||
<label>Defektbeschreibung</label>
|
||||
<textarea name="defekt" value={form.defekt} onChange={handleChange} placeholder="Was genau ist defekt? Wie sieht der Schaden aus?" />
|
||||
</div>
|
||||
<div className="form-group">
|
||||
<label>Lagerstandort</label>
|
||||
<select name="lagerstandortId" value={form.lagerstandortId} onChange={handleChange}>
|
||||
<option value="">-- Standort wählen --</option>
|
||||
{(lagerstandorte || []).map((ls) => (
|
||||
<option key={ls.$id} value={ls.$id}>{ls.name}</option>
|
||||
))}
|
||||
</select>
|
||||
</div>
|
||||
<div className="form-group">
|
||||
<label>Zuständig *</label>
|
||||
<select name="zustaendig" value={form.zustaendig} onChange={handleChange}>
|
||||
<option value="">-- Mitarbeiter wählen --</option>
|
||||
{(colleagues || []).map((c) => (
|
||||
<option key={c.userId} value={c.userName}>
|
||||
{c.userName}{c.userName === ownName ? ' (Ich)' : ''}
|
||||
</option>
|
||||
))}
|
||||
</select>
|
||||
</div>
|
||||
<div className="form-group">
|
||||
<label>Priorität *</label>
|
||||
<select name="prio" value={form.prio} onChange={handleChange}>
|
||||
<option value="niedrig">Niedrig</option>
|
||||
<option value="mittel">Mittel</option>
|
||||
<option value="hoch">Hoch</option>
|
||||
<option value="kritisch">Kritisch</option>
|
||||
</select>
|
||||
</div>
|
||||
<div className="form-group">
|
||||
<label>Kommentar</label>
|
||||
<textarea name="kommentar" value={form.kommentar} onChange={handleChange} placeholder="*E-Mail Betreff* Notizen... (Betreff mit * markieren)" />
|
||||
</div>
|
||||
<button type="submit" className="btn-submit">Ware erfassen</button>
|
||||
</form>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user