Files
cantarire-etichetare/cantarire/templates/fields/list.html
T
ske087 bff6d70b17 Initial commit: aplicatie de cantarire si etichetare
Aplicatie Flask + SQLite pentru productie alimentara: cantarirea
componentelor unui produs finit si tiparirea etichetei prin QZ Tray.

- produse finite (retete) formate din componente cantarite
- designer vizual de etichete (mm/px, zona sigura, campuri variabile,
  cod QR cu continut din mai multe bucati)
- legare produs finit -> sablon de eticheta
- navigare pe doua taburi: Cantarire / Setari
- administrare: componente, produse finite, sabloane, campuri, istoric
- backup, resetare baza de date, checklist de pregatire, /healthz
- CLI de administrare si serviciu systemd pentru productie
- vendor/syncpulse-scale-bridge (GPL-3.0-or-later) pentru citirea cantarului
2026-10-18 23:38:45 +03:00

76 lines
2.6 KiB
HTML

{% extends "base.html" %}
{% block title %}Câmpuri variabile{% endblock %}
{% block content %}
<section class="page-head">
<div>
<h1>Câmpuri variabile</h1>
<p class="subtitle">
Text gata de pus pe etichetă, care poate prelua date din pachet, produs sau firmă.
</p>
</div>
<a class="btn primary" href="{{ url_for('fields.create') }}">+ Câmp nou</a>
</section>
<section class="card">
{% if fields %}
<div class="table-wrap">
<table class="table">
<thead>
<tr>
<th>Denumire</th>
<th>Text</th>
<th>Rezultat (demo)</th>
<th>Cheie</th>
<th>Șabloane</th>
<th>Stare</th>
<th></th>
</tr>
</thead>
<tbody>
{% for f in fields %}
<tr class="{{ 'row-muted' if not f.active }}">
<td><strong>{{ f.label }}</strong></td>
<td><code class="field-template">{{ f.template }}</code></td>
<td>{{ f.preview or "-" }}</td>
<td><code class="muted">{{ f.key }}</code></td>
<td>
{% if f.usage %}<a class="link" href="{{ url_for('label_templates.index') }}">{{ f.usage }}</a>
{% else %}<span class="muted">-</span>{% endif %}
</td>
<td>
{% if f.active %}<span class="badge ok">activ</span>
{% else %}<span class="badge off">inactiv</span>{% endif %}
</td>
<td class="right nowrap">
<a class="link" href="{{ url_for('fields.edit', field_id=f.id) }}">Editează</a>
<form class="inline" method="post" action="{{ url_for('fields.remove', field_id=f.id) }}"
onsubmit="return confirm('Ștergi câmpul {{ f.label }}?{% if f.usage %} Este folosit în {{ f.usage }} șabloane și va apărea gol.{% endif %}');">
<button class="link danger" type="submit">Șterge</button>
</form>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% else %}
<p class="muted">
Nu există câmpuri proprii. <a href="{{ url_for('fields.create') }}">Adaugă primul câmp</a>
sau folosește câmpurile fixe din designer.
</p>
{% endif %}
</section>
<section class="card">
<h2>Cum funcționează</h2>
<p class="muted small">
În textul câmpului poți scrie orice, iar între acolade poți pune un câmp existent:
<code>Tel. {{ '{{company.phone}}' }}</code> sau
<code>{{ '{{recipe.name}}' }} · lot {{ '{{package.lot}}' }}</code>.
La tipărire, acestea sunt înlocuite cu datele reale. Câmpurile proprii apar în designer
în grupul <strong>Câmpuri proprii</strong>.
</p>
</section>
{% endblock %}