it_manager/locations: редактор шаблона этикеток, раздельная печать QR/EAN и карточка поставщика.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-10-07 16:40:48 +03:00
parent 82ad90c661
commit d54f6fbe42
18 changed files with 1192 additions and 66 deletions
+16 -6
View File
@@ -464,9 +464,13 @@
</thead>
<tbody>
{% for vendor in vendors %}
<tr class="tr-hover dislo-vendor-row" style="border-bottom:1px solid var(--color-border);"
<tr class="tr-hover dislo-vendor-row" style="border-bottom:1px solid var(--color-border); cursor:pointer;"
data-name="{{ vendor.name|default:''|escape }}"
data-status="{% if vendor.is_active %}active{% else %}inactive{% endif %}">
data-status="{% if vendor.is_active %}active{% else %}inactive{% endif %}"
hx-get="/dislocation/vendors/{{ vendor.pk }}/"
hx-target="#main-content"
hx-push-url="/dislocation/vendors/{{ vendor.pk }}/"
hx-indicator="#loader">
<td style="padding:0.625rem 1rem; color:var(--color-card-foreground); font-weight:500;">{{ vendor.name|default:"—" }}</td>
<td style="padding:0.625rem 1rem; color:var(--color-muted-foreground);">{{ vendor.location_region.name|default:"—" }}</td>
<td style="padding:0.625rem 1rem; color:var(--color-foreground);">
@@ -485,15 +489,16 @@
{% endif %}
</td>
{% if can_manage_vendors %}
<td style="padding:0.625rem 1rem; text-align:right;">
<td style="padding:0.625rem 1rem; text-align:right;" onclick="event.stopPropagation();">
<button type="button" class="btn btn-ghost" style="font-size:0.75rem; padding:0.25rem 0.5rem;"
onclick="disloVendorEdit({{ vendor.pk }})"
onclick="event.stopPropagation(); disloVendorEdit({{ vendor.pk }})"
data-name="{{ vendor.name|escapejs }}"
data-region="{{ vendor.location_region_id|default:'' }}"
data-street="{{ vendor.street|escapejs }}"
data-house="{{ vendor.house_number|escapejs }}"
data-building="{{ vendor.building|escapejs }}"
data-apartment="{{ vendor.apartment|escapejs }}"
data-location="{{ vendor.location|escapejs }}"
data-comments="{{ vendor.comments|escapejs }}"
data-active="{% if vendor.is_active %}1{% else %}0{% endif %}">{% trans "Изменить" %}</button>
</td>
@@ -551,6 +556,10 @@
{{ vendor_form.apartment }}
</div>
</div>
<div>
<label style="display:block; font-size:0.8125rem; font-weight:500; color:var(--color-foreground); margin-bottom:0.375rem;">{% trans "Координаты" %} <span style="font-weight:400; color:var(--color-muted-foreground);">lat,lng</span></label>
{{ vendor_form.location }}
</div>
<div>
<label style="display:block; font-size:0.8125rem; font-weight:500; color:var(--color-foreground); margin-bottom:0.375rem;">{% trans "Комментарий" %}</label>
{{ vendor_form.comments }}
@@ -652,7 +661,7 @@ function disloVendorPanelOpen() {
if (nameEl) nameEl.value = '';
const regionEl = form.querySelector('[name="location_region"]');
if (regionEl) regionEl.value = '';
['street', 'house_number', 'building', 'apartment', 'comments'].forEach(function (n) {
['street', 'house_number', 'building', 'apartment', 'location', 'comments'].forEach(function (n) {
const el = form.querySelector('[name="' + n + '"]');
if (el) el.value = '';
});
@@ -672,7 +681,7 @@ function disloVendorPanelClose() {
function disloVendorEdit(pk) {
const form = document.getElementById('dislo-vendor-form');
if (!form) return;
const btn = document.querySelector('button[onclick="disloVendorEdit(' + pk + ')"]');
const btn = document.querySelector('button[onclick*="disloVendorEdit(' + pk + ')"]');
if (!btn) return;
form.setAttribute('hx-post', '/dislocation/vendors/' + pk + '/update/');
if (window.htmx) htmx.process(form);
@@ -688,6 +697,7 @@ function disloVendorEdit(pk) {
set('house_number', btn.dataset.house);
set('building', btn.dataset.building);
set('apartment', btn.dataset.apartment);
set('location', btn.dataset.location);
set('comments', btn.dataset.comments);
const activeEl = form.querySelector('[name="is_active"]');
if (activeEl) activeEl.checked = btn.dataset.active === '1';