fix: stack preparation overview fields on small screens
This commit is contained in:
@@ -1257,3 +1257,9 @@ Taslak türü seçicisine erişilebilir ad eklendi. Üretim derlemesi geçti. Ö
|
||||
|
||||
- Üretim bileşenleri ve geçici kullanıcı deposuyla altı kontrol geçti: sunucu kayıt onayı; üç metnin birlikte tek Kayseri sonucunu vermesi; kayıtlı filtrenin sayfa yenilemesinde korunması; yeniden uygulamada üç alanın ve aynı sonucun dönmesi; Giresun kurum adı + Kayseri İKN çelişkisinin sıfır sonuç vermesi; boş metinli başka filtrenin önceki üç metni temizleyip beş sonucu geri getirmesi.
|
||||
- Kanıt: rapor/qa-saved-filter-text.json. Tarayıcı günlüğünde error kaydı yok. Bu kabul beş sentetik ihale kullanır; resmi kaynak kalitesini veya gerçek başvuru uygunluğunu doğrulamaz. Test sekmesi ve bu tur açılan QA sunucusu kapatıldı. Ürün kodu değişmedi; önceki 277 test/build sonucu geçerli. Genel plan açık.
|
||||
|
||||
### 2026-09-06 — Hazırlık özetinin küçük ekran düzeni
|
||||
|
||||
- D07 incelemesinde hazırlık özetindeki 700 piksel asgari tablo genişliği kaldırıldı. 768 piksel altındaki görünümde ihale, sorumlu, belge eksikleri ve sıradaki kontrol aynı kartta alt alta gösteriliyor; geniş ekranda karşılaştırmalı tablo devam ediyor.
|
||||
- Eksiklere geçiş düğmeleri aynı veri ve olay işleyicilerini kullanıyor. Tablo/satır/hücre rolleri ve sütun başlıkları korunuyor; mobil görsel alan etiketleri ekran okuyucu için tekrar edilmiyor. Uzun kesintisiz metinler satıra bölünebiliyor.
|
||||
- Build ve diff kontrolü başarılı. 390/768/1440 piksel tarayıcı görsel kabulü, klavye ve gerçek ekran okuyucu doğrulaması henüz yapılmadı. Bu düzenleme tüm mobil kabulün geçtiği anlamına gelmez. Genel plan açık.
|
||||
|
||||
@@ -26,17 +26,17 @@ function Overview({tenders,now}) {
|
||||
{vault.loading&&<p role="status" className="text-xs">Belge durumu kontrol ediliyor…</p>}
|
||||
{vault.error&&<p role="alert" className="text-xs text-red-700">Belge durumu doğrulanamadı: {vault.error}</p>}
|
||||
{!tenders.length ? <p className="text-sm">İhaleyi takibe alın veya hazırlık görevi açın; dosyası burada görünsün.</p> :
|
||||
<div className="overflow-x-auto"><table className="w-full text-sm min-w-[700px]">
|
||||
<thead><tr className="text-left border-b"><th className="p-2">İhale</th><th className="p-2">Sorumlu</th><th className="p-2">Belge eksikleri</th><th className="p-2">Sıradaki kontrol</th></tr></thead>
|
||||
<tbody>{tenders.map(tender=>{
|
||||
<div><table role="table" className="block md:table w-full text-sm table-fixed">
|
||||
<thead role="rowgroup" className="sr-only md:not-sr-only md:table-header-group"><tr role="row" className="text-left border-b"><th role="columnheader" scope="col" className="p-2">İhale</th><th role="columnheader" scope="col" className="p-2">Sorumlu</th><th role="columnheader" scope="col" className="p-2">Belge eksikleri</th><th role="columnheader" scope="col" className="p-2">Sıradaki kontrol</th></tr></thead>
|
||||
<tbody role="rowgroup" className="block md:table-row-group">{tenders.map(tender=>{
|
||||
const summary=preparationSummary(tender,{...vault,healthPortfolio:userProfile.scrapedCapabilities?.healthPortfolio || []},now);
|
||||
return <tr key={tender.id} className="border-b align-top">
|
||||
<td className="p-2"><button onClick={()=>open(tender,'source')} className="text-blue-800 underline text-left">{tender.ikn} · {tender.baslik}</button><p className="text-xs mt-1">{summary.issues.length ? `${summary.issues.length} kontrol eksik` : 'Kayıtlı kontroller tamam; son kontrol gerekli'}</p></td>
|
||||
<td className="p-2">{summary.owner}</td>
|
||||
<td className="p-2"><details><summary className="cursor-pointer">{summary.documentIssues.length ? `${summary.documentIssues.length} belge kontrolü` : 'Kayıtlı belgelerde eksik bulunmadı'}</summary>
|
||||
return <tr role="row" key={tender.id} className="block md:table-row border rounded-lg mb-3 md:mb-0 md:rounded-none md:border-0 md:border-b align-top [overflow-wrap:anywhere]">
|
||||
<td role="cell" className="block md:table-cell p-2"><span aria-hidden="true" className="block md:hidden text-xs font-bold mb-1">İhale</span><button onClick={()=>open(tender,'source')} className="text-blue-800 underline text-left">{tender.ikn} · {tender.baslik}</button><p className="text-xs mt-1">{summary.issues.length ? `${summary.issues.length} kontrol eksik` : 'Kayıtlı kontroller tamam; son kontrol gerekli'}</p></td>
|
||||
<td role="cell" className="block md:table-cell p-2"><span aria-hidden="true" className="block md:hidden text-xs font-bold mb-1">Sorumlu</span>{summary.owner}</td>
|
||||
<td role="cell" className="block md:table-cell p-2"><span aria-hidden="true" className="block md:hidden text-xs font-bold mb-1">Belge eksikleri</span><details><summary className="cursor-pointer">{summary.documentIssues.length ? `${summary.documentIssues.length} belge kontrolü` : 'Kayıtlı belgelerde eksik bulunmadı'}</summary>
|
||||
<ul className="space-y-2 mt-2">{summary.documentIssues.map((text,i)=><li key={i}><button onClick={()=>open(tender,'checks')} className="text-blue-800 underline text-left">{text}</button></li>)}</ul>
|
||||
</details></td>
|
||||
<td className="p-2"><button onClick={()=>open(tender,summary.next.target)} className="text-blue-800 underline text-left">{summary.next.text}</button>
|
||||
<td role="cell" className="block md:table-cell p-2"><span aria-hidden="true" className="block md:hidden text-xs font-bold mb-1">Sıradaki kontrol</span><button onClick={()=>open(tender,summary.next.target)} className="text-blue-800 underline text-left">{summary.next.text}</button>
|
||||
<details className="mt-2"><summary className="cursor-pointer text-xs">Tüm eksikleri göster</summary><ul className="space-y-2 mt-2">{summary.issues.map((item,i)=><li key={i}><button onClick={()=>open(tender,item.target)} className="text-blue-800 underline text-left">{item.text}</button></li>)}</ul></details>
|
||||
</td>
|
||||
</tr>;
|
||||
|
||||
Reference in New Issue
Block a user