Fix: одна строка за клик (extra_js вне content), подпись Удалить у чекбокса
Made-with: Cursor
This commit is contained in:
12
HISTORY.md
12
HISTORY.md
@@ -2,6 +2,18 @@
|
|||||||
|
|
||||||
# История изменений ERP WaterSurf
|
# История изменений 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 – Поле «Цена»: ввод с клавиатуры сохраняется
|
## 2025-02-25 22:45 UTC – Поле «Цена»: ввод с клавиатуры сохраняется
|
||||||
|
|
||||||
**Проблема**: В табличной части заказа в поле «Цена» сохранялось только изменение стрелками вверх/вниз, введённое с клавиатуры значение не сохранялось.
|
**Проблема**: В табличной части заказа в поле «Цена» сохранялось только изменение стрелками вверх/вниз, введённое с клавиатуры значение не сохранялось.
|
||||||
|
|||||||
@@ -132,6 +132,13 @@
|
|||||||
width: 5%;
|
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 {
|
.ws-table-items .ws-col-product select {
|
||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
|||||||
@@ -72,7 +72,7 @@
|
|||||||
<td class="ws-col-currency">{{ f.currency }}</td>
|
<td class="ws-col-currency">{{ f.currency }}</td>
|
||||||
<td class="ws-col-qty">{{ f.quantity }}</td>
|
<td class="ws-col-qty">{{ f.quantity }}</td>
|
||||||
<td class="row-amount ws-col-cost ws-num">—</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>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
@@ -88,6 +88,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
{% endblock %}
|
||||||
{% block extra_js %}
|
{% block extra_js %}
|
||||||
<script>
|
<script>
|
||||||
(function() {
|
(function() {
|
||||||
@@ -155,10 +156,14 @@
|
|||||||
});
|
});
|
||||||
var amountCell = clone.querySelector('.row-amount');
|
var amountCell = clone.querySelector('.row-amount');
|
||||||
if (amountCell) amountCell.textContent = '—';
|
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);
|
tbody.appendChild(clone);
|
||||||
totalInput.value = nextIndex + 1;
|
totalInput.value = nextIndex + 1;
|
||||||
});
|
});
|
||||||
})();
|
})();
|
||||||
</script>
|
</script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
{% endblock %}
|
|
||||||
|
|||||||
@@ -79,7 +79,7 @@
|
|||||||
<td class="ws-col-currency">{{ f.currency }}</td>
|
<td class="ws-col-currency">{{ f.currency }}</td>
|
||||||
<td class="ws-col-qty">{{ f.quantity }}</td>
|
<td class="ws-col-qty">{{ f.quantity }}</td>
|
||||||
<td class="row-amount ws-col-cost ws-num">—</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>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
@@ -161,6 +161,11 @@
|
|||||||
});
|
});
|
||||||
var amountCell = clone.querySelector('.row-amount');
|
var amountCell = clone.querySelector('.row-amount');
|
||||||
if (amountCell) amountCell.textContent = '—';
|
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);
|
tbody.appendChild(clone);
|
||||||
totalInput.value = nextIndex + 1;
|
totalInput.value = nextIndex + 1;
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user