Files
rar-autopass/app/web/templates/_coada.html
Claude Agent 8f39dfbc1e feat(5.16): aliniere lista/preview la mockup + fix lock seed la boot
Implementeaza planul aprobat din docs/raport-comparatie-mockup-5.16.md (T-1..T-9):

- T-1/T-8: rand lista 4->2 linii (placuta primar + cod RAR · operatie · data + pill),
  fallback placuta, eticheta-problema 10px->--fs-xs (_submissions.html, base.html)
- T-2: pill slim restilat fill-tint + dot 7px + text colorat per stare (base.html)
- T-3: bug 4a coliziune pill/vehicul in preview — col-stare 104->140px (base.html)
- T-4: preview 8->5 coloane (scos #, KM, Note; motivul -> title pe pill)
- T-5: titlu sectiune "Trimiterile tale" -> sr-only (a11y) + badge/export discret
- T-6: linia plan N/60 in corp doar pe avertizare; consum normal in badge+burger
- T-7: guard chenar gol chips extra (_chips_prestatii.html)
- T-9: "Anuleaza"->"Renunta"; nume operatie emfatic bold

Fix boot: init_db reincarca seedul de ~17k operatii (5.18) pe FIECARE pornire, pe
API + worker concurent -> "database is locked" la al doilea proces. Guard "_if_empty"
pe mapping_suggestions (ca seed_nomenclator_if_empty) -> boot rapid, fara cursa.

Teste actualizate (slim 2-linii, fallback placuta, plan in burger). TODOS.md:
defer trackuit (eroare HTMX lista, retokenizare px, diacritice).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 14:44:10 +00:00

99 lines
5.8 KiB
HTML

{#
_coada.html — sectiunea "Trimiterile tale" inclusa pe Acasa, sub zona de upload.
Filtre + tabel (_submissions.html); detaliul se deschide in modalul global (#modal-detaliu).
#}
<section id="trimiteri-section" aria-labelledby="trimiteri-heading"
style="margin-top:22px; padding-top:18px; border-top:2px solid var(--line);"
{% if oob %}hx-swap-oob="outerHTML"{% endif %}>
<div class="card">
{# US-002 (5.16): titlul de sectiune vizibil ("Trimiterile tale") a fost eliminat —
lista incepe direct sub filtre. Heading pastrat sr-only pentru a11y (section
aria-labelledby). Badge-ul de atentie + export CSV stau intr-un rand discret. #}
<h2 id="trimiteri-heading" class="sr-only">Trimiterile tale</h2>
{% if blocate_total %}
<div style="display:flex; align-items:center; gap:6px; flex-wrap:wrap; margin:0 0 10px;">
<span class="tab-badge" title="{{ blocate_total }} necesita atentie"
style="display:inline-flex; align-items:center; justify-content:center; min-width:18px; height:18px; padding:0 5px; border-radius:99px; background:var(--err); color:#fff; font-size:11px; font-weight:700;">{{ blocate_total }}</span>
<span class="muted" style="font-size:var(--fs-sm);">de rezolvat</span>
<span style="margin-left:auto; display:flex; gap:8px; flex-wrap:wrap;">
<a class="cardlink" href="/v1/audit/export?status=sent" download>export CSV: trimise</a>
<a class="cardlink" href="/v1/audit/export?status=all" download>toate</a>
</span>
</div>
{% else %}
<div style="display:flex; justify-content:flex-end; gap:8px; flex-wrap:wrap; margin:0 0 10px;">
<a class="cardlink" href="/v1/audit/export?status=sent" download>export CSV: trimise</a>
<a class="cardlink" href="/v1/audit/export?status=all" download>toate</a>
</div>
{% endif %}
<!-- Bara de filtre: [quick-pills data STANGA] [cautare vehicul MIJLOC] [pills stare DREAPTA].
Pill-urile de stare scriu campul hidden status si re-trimit form-ul (filtreazaStare).
Quick-pills de data apeleaza setDataRange -> seteaza data_de/data_pana + re-submit. -->
<form id="filtre-trimiteri"
hx-get="/_fragments/submissions"
hx-target="#submissions-wrap"
hx-swap="innerHTML"
hx-trigger="submit, change, keyup delay:400ms from:input[name='vehicul']"
style="display:flex; gap:8px 12px; flex-wrap:wrap; align-items:center; margin-bottom:12px;">
<input type="hidden" id="f-status" name="status" value="{{ status_filtru | default('', true) }}">
{# Pagina curenta — actualizata prin OOB swap din _submissions.html; inclusa la reincarcari. #}
<input type="hidden" id="f-page" name="page" value="1">
{# === STANGA: Quick-pills de data (preset interval) + buton Custom ===
Azi / 7 zile / 30 zile → seteaza interval preset si submitr automat.
Custom → dezvaluie #custom-date-fields pentru introducere manuala (fara submit automat). #}
<div style="flex:0 0 auto; display:flex; gap:8px; align-items:center; flex-wrap:wrap;">
<div class="pills-categorii" id="quick-date-pills">
<button type="button" class="pill-cat pill-data" data-range="azi"
aria-pressed="false"
onclick="setDataRange(this,'azi')">Azi</button>
<button type="button" class="pill-cat pill-data" data-range="7zile"
aria-pressed="false"
onclick="setDataRange(this,'7zile')">7 zile</button>
<button type="button" class="pill-cat pill-data" data-range="30zile"
aria-pressed="false"
onclick="setDataRange(this,'30zile')">30 zile</button>
<button type="button" class="pill-cat pill-data" data-range="custom"
aria-pressed="false"
onclick="setDataRange(this,'custom')">Custom</button>
</div>
{# Campuri de data pentru modul Custom: ascunse pana la click pe „Custom".
type="date" (nu hidden) permite interactiunea utilizatorului.
Campul change pe form re-incarca automat lista via hx-trigger="change". #}
<div id="custom-date-fields"
style="display:none; gap:4px; align-items:center; flex-wrap:wrap; font-size:13px;">
<label for="f-data-de" class="muted" style="font-size:12px; white-space:nowrap;">De:</label>
<input type="date" id="f-data-de" name="data_de" value=""
style="font-size:13px; max-width:140px;">
<label for="f-data-pana" class="muted" style="font-size:12px; white-space:nowrap;">Pana:</label>
<input type="date" id="f-data-pana" name="data_pana" value=""
style="font-size:13px; max-width:140px;">
</div>
</div>
{# === MIJLOC: cautare vehicul (nr/VIN) + buton Filtreaza === #}
<div style="display:flex; align-items:center; gap:8px; flex:1 1 auto; min-width:160px; flex-wrap:wrap;">
<input id="f-vehicul" type="text" name="vehicul" placeholder="Vehicul (nr/VIN)"
style="flex:1 1 auto; min-width:120px;">
<button type="submit" style="flex:0 0 auto;">Filtreaza</button>
</div>
{# === DREAPTA: pill-uri de stare cu contoare; re-randate via OOB la reincarcarea tabelului === #}
<span id="pills-categorii" class="pills-categorii" style="margin-left:auto; flex:0 0 auto;">
{% include '_pills.html' %}
</span>
</form>
<!-- Tabelul se reincarca la: incarcarea paginii, actiunile tale (trimiteriChanged)
si auto-refresh periodic din poller (date noi externe). -->
<div id="submissions-wrap"
hx-get="/_fragments/submissions"
hx-trigger="load, trimiteriChanged from:body, reincarcaTrimiteri"
hx-include="#filtre-trimiteri" hx-swap="innerHTML">
<div class="empty">se incarca…</div>
</div>
</div>
</section>