diff --git a/docs/quality/uygulama-durumu.md b/docs/quality/uygulama-durumu.md index fb593d3..81dd990 100644 --- a/docs/quality/uygulama-durumu.md +++ b/docs/quality/uygulama-durumu.md @@ -1988,3 +1988,9 @@ Doğrulama: 287 test geçti, üretim derlemesi başarılı. İhale dokümanı paneli artık PDF metin ayrıştırıcısını yalnızca kullanıcı PDF okuma/kalem çıkarma istediğinde yüklüyor; ilk uygulama açılışındaki JavaScript yükü azaltıldı. Üretim derlemesindeki büyük üçüncü taraf chunk uyarıları (PDF/ExcelJS) devam ediyor ve sonraki performans çalışmasının girdisi olarak kaydedildi. Doğrulama: 287 test geçti, üretim derlemesi başarılı. + +### 2026-09-06 · Kur hesaplayıcı giriş sınırı + +Kur farkı hesaplayıcısı artık negatif, sonsuz veya güvenli sınır dışı teklif tutarlarını kabul etmiyor; hatalı girişte açık uyarı gösterip USD/EUR dönüşüm sonucunu üretmiyor. + +Doğrulama: 287 test geçti, üretim derlemesi başarılı. diff --git a/src/components/TenderDetailModal.jsx b/src/components/TenderDetailModal.jsx index 6cc456f..55c1725 100644 --- a/src/components/TenderDetailModal.jsx +++ b/src/components/TenderDetailModal.jsx @@ -33,6 +33,7 @@ export const TenderDetailModal = () => { // Kur Farkı Calculator State const [bidAmount, setBidAmount] = useState(15000); + const [bidAmountError, setBidAmountError] = useState(null); const [fx, setFx] = useState(null); const [fxError, setFxError] = useState(null); useEffect(() => { @@ -48,6 +49,7 @@ export const TenderDetailModal = () => { const usdRate = fx?.rates?.USD; const eurRate = fx?.rates?.EUR; const fxIsStale = Boolean(fx?.refreshError); + const bidAmountValid = Number.isFinite(bidAmount) && bidAmount >= 0 && bidAmount <= 1e12; if (!activeTenderDetail) return null; // Havuzdaki güncel kayıt: takip/görev değişince düğme etiketleri de değişsin. @@ -374,19 +376,27 @@ export const TenderDetailModal = () => { setBidAmount(Number(e.target.value))} + min="0" + max="1000000000000" + step="0.01" + onChange={(e) => { + const value = Number(e.target.value); + setBidAmount(value); + setBidAmountError(Number.isFinite(value) && value >= 0 && value <= 1e12 ? null : 'Tutar 0 ile 1.000.000.000.000 TL arasında olmalıdır.'); + }} className="w-full bg-white/10 border border-white/20 rounded-lg px-3 py-1.5 text-xs text-white" /> + {bidAmountError &&
{bidAmountError}
}