v1.8.6: сортировка таблиц, спиннеры number input, единый стиль — fix broken HTML, modal-actions → form-actions, card-wrapper
This commit is contained in:
@@ -10,10 +10,7 @@
|
||||
<td><span class="badge badge-{{ a.role }}">{{ {'engineer':'Инженер','technician':'Техник'}[a.role] }}</span></td>
|
||||
<td>{{ a.assigned_at.strftime('%d.%m.%Y %H:%M') if a.assigned_at else '' }}</td>
|
||||
<td class="actions">
|
||||
<form method="post" action="/service/assignments/unassign" style="display:inline">
|
||||
<input type="hidden" name="id" value="{{ a.id }}">
|
||||
<button class="btn btn-danger btn-sm">Отвязать</button>
|
||||
</form>
|
||||
<button class="btn btn-danger btn-sm" onclick="openConfirmUnassign({{ a.id }},'{{ (a.user.full_name if a.user else '')|e }}','{{ (a.object.name if a.object else '')|e }}')" title="Отвязать">✕</button>
|
||||
</td>
|
||||
</tr>{% endfor %}</tbody></table>
|
||||
</div>
|
||||
@@ -25,7 +22,38 @@
|
||||
<div class="form-group"><label>Объект</label><select name="object_id" required>{% for o in objects %}<option value="{{ o.id }}">{{ o.name }}</option>{% endfor %}</select></div>
|
||||
<div class="form-group"><label>Сотрудник</label><select name="user_id" required>{% for u in users %}<option value="{{ u.id }}">{{ u.full_name }} ({{ u.role }})</option>{% endfor %}</select></div>
|
||||
<div class="form-actions"><button type="submit" class="btn btn-primary">Назначить</button>
|
||||
<button type="button" class="btn btn-secondary" onclick="this.closest('.modal-overlay').classList.remove('open')">Отмена</button></div>
|
||||
<button type="button" class="btn" onclick="this.closest('.modal-overlay').classList.remove('open')">Отмена</button></div>
|
||||
</form>
|
||||
</div></div>
|
||||
<div class="modal-overlay" id="confirm-unassign">
|
||||
<div class="modal" style="max-width:420px;">
|
||||
<h2 style="font-size:16px;margin-bottom:8px;">Отвязать сотрудника?</h2>
|
||||
<p style="color:var(--text-secondary);font-size:14px;margin-bottom:20px;">
|
||||
Назначение <strong id="unassign-info"></strong> будет удалено. Это действие нельзя отменить.
|
||||
</p>
|
||||
<div class="form-actions" style="justify-content:flex-end;">
|
||||
<button type="button" class="btn btn-danger" onclick="confirmUnassign()">Отвязать</button>
|
||||
<button type="button" class="btn" onclick="document.getElementById('confirm-unassign').classList.remove('open')">Отмена</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
var unassignId = null;
|
||||
function openConfirmUnassign(id, userName, objectName){
|
||||
unassignId = id;
|
||||
document.getElementById('unassign-info').textContent = userName + ' → ' + objectName;
|
||||
document.getElementById('confirm-unassign').classList.add('open');
|
||||
}
|
||||
function confirmUnassign(){
|
||||
if(!unassignId) return;
|
||||
var form = document.createElement('form');
|
||||
form.method = 'POST';
|
||||
form.action = '/service/assignments/unassign';
|
||||
var input = document.createElement('input');
|
||||
input.type = 'hidden'; input.name = 'id'; input.value = unassignId;
|
||||
form.appendChild(input);
|
||||
document.body.appendChild(form);
|
||||
form.submit();
|
||||
}
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
||||
Reference in New Issue
Block a user