Fix: одна строка за клик (extra_js вне content), подпись Удалить у чекбокса

Made-with: Cursor
This commit is contained in:
2026-02-26 12:40:27 +00:00
parent 7673a12027
commit 817fe38e87
4 changed files with 32 additions and 3 deletions

View File

@@ -2,6 +2,18 @@
# История изменений ERP WaterSurf
## 2025-02-25 22:50 UTC Добавление строки: одна строка за клик, понятное удаление
**Проблема**: По кнопке «Добавить строку» добавлялось сразу две строки; было неочевидно, как удалить лишнюю.
**Причина**: В order_form.html блок `{% block extra_js %}` был вложен в `{% block content %}`, из‑за чего скрипт попадал на страницу дважды и на кнопку вешались два обработчика.
**Решение**: Блок контента формы закрыт до скрипта: сначала `{% endblock %}`, затем `{% block extra_js %}` со скриптом — скрипт подключается один раз, добавляется одна строка за клик. Для удаления строки: у чекбокса в колонке «Удалить» добавлена подпись «Удалить» (label), при клонировании строки у новой подписи обновляется атрибут `for` под новый id чекбокса. Стили для подписи: cursor pointer, мелкий текст.
**Изменения**: order_form.html (структура блоков, label «Удалить», обновление for у клона), supplier_order_form.html (label «Удалить», обновление for у клона), theme-compact.css (стили .ws-delete-row-label).
---
## 2025-02-25 22:45 UTC Поле «Цена»: ввод с клавиатуры сохраняется
**Проблема**: В табличной части заказа в поле «Цена» сохранялось только изменение стрелками вверх/вниз, введённое с клавиатуры значение не сохранялось.

View File

@@ -132,6 +132,13 @@
width: 5%;
}
.ws-table-items label.ws-delete-row-label {
cursor: pointer;
font-size: 13px;
color: var(--ws-text-muted);
white-space: nowrap;
}
.ws-table-items .ws-col-product select {
max-width: 100%;
overflow: hidden;

View File

@@ -72,7 +72,7 @@
<td class="ws-col-currency">{{ f.currency }}</td>
<td class="ws-col-qty">{{ f.quantity }}</td>
<td class="row-amount ws-col-cost ws-num"></td>
<td>{% if f.DELETE %}{{ f.DELETE }}{% endif %}</td>
<td class="ws-col-del"><label class="ws-delete-row-label">{% if f.DELETE %}{{ f.DELETE }}{% endif %} Удалить</label></td>
</tr>
{% endfor %}
</tbody>
@@ -88,6 +88,7 @@
</div>
</form>
</div>
{% endblock %}
{% block extra_js %}
<script>
(function() {
@@ -155,10 +156,14 @@
});
var amountCell = clone.querySelector('.row-amount');
if (amountCell) amountCell.textContent = '—';
var delCheckbox = clone.querySelector('input[name$="-DELETE"]');
if (delCheckbox) {
var delLabel = clone.querySelector('label.ws-delete-row-label');
if (delLabel) delLabel.setAttribute('for', delCheckbox.id);
}
tbody.appendChild(clone);
totalInput.value = nextIndex + 1;
});
})();
</script>
{% endblock %}
{% endblock %}

View File

@@ -79,7 +79,7 @@
<td class="ws-col-currency">{{ f.currency }}</td>
<td class="ws-col-qty">{{ f.quantity }}</td>
<td class="row-amount ws-col-cost ws-num"></td>
<td>{% if f.DELETE %}{{ f.DELETE }}{% endif %}</td>
<td class="ws-col-del"><label class="ws-delete-row-label">{% if f.DELETE %}{{ f.DELETE }}{% endif %} Удалить</label></td>
</tr>
{% endfor %}
</tbody>
@@ -161,6 +161,11 @@
});
var amountCell = clone.querySelector('.row-amount');
if (amountCell) amountCell.textContent = '—';
var delCheckbox = clone.querySelector('input[name$="-DELETE"]');
if (delCheckbox) {
var delLabel = clone.querySelector('label.ws-delete-row-label');
if (delLabel) delLabel.setAttribute('for', delCheckbox.id);
}
tbody.appendChild(clone);
totalInput.value = nextIndex + 1;
});