Reorganizeaza interfata web pe trei principii, fara a atinge backend-ul de trimitere (worker, mapping, idempotency, masina de stari neatinse): - US-001 app/web/labels.py: modul pur stari tehnice -> text uman + clasa CSS - US-002 bara status /_fragments/status: microcopy uman, defalcare blocate, scoped cont - US-003 shell 6 tab-uri (Acasa/Import/Coada/Mapari/Cont/Nomenclator): deep-link ?tab=, panou activ randat server-side, fragmente inactive lazy, ARIA real - US-004 stepper import 4 pasi (pur vizual; hx-target + csrf pastrate) - US-005 Acasa onboarding checklist auto-bifat + colaps + empty states prietenoase Reparat in cursul VERIFY/CLOSE: izolare teste (reset ratelimit._hits in fixturi), regresie avertisment "cont in asteptare de activare" (re-introdus in bara status), culori hardcodate -> variabile paleta. 434 teste pass. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
81 lines
2.9 KiB
HTML
81 lines
2.9 KiB
HTML
<div id="status-bar" class="status-bar card"
|
|
hx-get="/_fragments/status"
|
|
hx-trigger="every 15s"
|
|
hx-swap="outerHTML">
|
|
|
|
<!-- Cont in asteptare de activare (regasit din vechiul _banner; mereu vizibil) -->
|
|
{% if not account_active %}
|
|
<div style="margin-bottom:12px; padding:8px 10px; border-left:3px solid var(--warn);
|
|
background:#201c0f; border-radius:6px; font-size:13px;">
|
|
<strong>Cont in asteptare de activare.</strong>
|
|
Configureaza credentialele RAR si pregateste importul acum; trimiterea catre RAR
|
|
porneste automat dupa activare de catre administrator.
|
|
</div>
|
|
{% endif %}
|
|
|
|
<div style="display:flex; gap:24px; flex-wrap:wrap; align-items:flex-start;">
|
|
|
|
<!-- Starea worker (Trimitere automata) -->
|
|
<div>
|
|
<div class="muted" style="font-size:12px;">{{ worker_lbl[0] }}</div>
|
|
<div class="{{ worker_lbl[2] }}" title="{{ worker_lbl[1] }}">
|
|
{{ worker_lbl[0].split(':')[1].strip() if ':' in worker_lbl[0] else worker_lbl[0] }}
|
|
</div>
|
|
{% if worker_lbl[1] %}
|
|
<div class="muted" style="font-size:11px; max-width:220px;">{{ worker_lbl[1] }}</div>
|
|
{% endif %}
|
|
</div>
|
|
|
|
<!-- Legatura RAR -->
|
|
<div>
|
|
<div class="muted" style="font-size:12px;">Legatura RAR</div>
|
|
<div class="{{ rar_lbl[2] }}" title="{{ rar_lbl[1] }}">
|
|
{{ rar_lbl[0].split(':')[1].strip() if ':' in rar_lbl[0] else rar_lbl[0] }}
|
|
</div>
|
|
{% if rar_lbl[1] and rar_lbl[2] != 's-sent' %}
|
|
<div class="muted" style="font-size:11px; max-width:220px;">{{ rar_lbl[1] }}</div>
|
|
{% endif %}
|
|
</div>
|
|
|
|
<!-- Ultima autentificare RAR -->
|
|
<div>
|
|
<div class="muted" style="font-size:12px;">{{ eticheta_ultima_auth }}</div>
|
|
<div>{{ last_login or '—' }}</div>
|
|
</div>
|
|
|
|
<!-- In asteptare (queued) -->
|
|
<div>
|
|
<div class="muted" style="font-size:12px;">In asteptare</div>
|
|
<div class="s-queued">{{ counts_queued }}</div>
|
|
</div>
|
|
|
|
<!-- Declarate la RAR (sent) -->
|
|
<div>
|
|
<div class="muted" style="font-size:12px;">Declarate la RAR</div>
|
|
<div class="s-sent">{{ counts_sent }}</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<!-- Defalcare blocate pe motiv (doar daca exista) -->
|
|
{% if blocate_defalcat %}
|
|
<div style="margin-top:12px; padding-top:10px; border-top:1px solid var(--line);">
|
|
<div style="font-size:12px; font-weight:600; margin-bottom:6px;">Necesita atentia ta</div>
|
|
<div style="display:flex; gap:16px; flex-wrap:wrap;">
|
|
{% for eticheta, n in blocate_defalcat %}
|
|
{% if n > 0 %}
|
|
<div>
|
|
<span class="{{ eticheta[2] }}" style="font-size:13px;">{{ eticheta[0] }}</span>
|
|
<span class="muted" style="font-size:12px; margin-left:4px;">({{ n }})</span>
|
|
{% if eticheta[1] %}
|
|
<div class="muted" style="font-size:11px; max-width:200px;">{{ eticheta[1] }}</div>
|
|
{% endif %}
|
|
</div>
|
|
{% endif %}
|
|
{% endfor %}
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
|
|
</div>
|