Fix sent emails: use data-attributes for read modal, fix delete route collision with /emails/<email_id>

This commit is contained in:
eric 2026-02-23 08:54:00 +00:00
parent 7a9a69c86d
commit 04eaac3094
2 changed files with 29 additions and 20 deletions

2
app.py
View file

@ -3570,7 +3570,7 @@ def delete_journal_entry(message_id):
return redirect(url_for('email_log_view'))
@app.route('/emails/sent/<int:sent_id>/delete', methods=['POST'])
@app.route('/api/sent-emails/<int:sent_id>/delete', methods=['POST'])
@login_required
def delete_sent_email(sent_id):
"""Löscht einen einzelnen Outbox-Eintrag."""

View file

@ -154,11 +154,16 @@
</td>
<td>
<div class="d-flex gap-1">
<button class="btn btn-sm btn-secondary"
onclick="showSentEmail({{ mail.id }}, {{ mail.to_address|tojson }}, {{ mail.subject|tojson }}, {{ mail.sent_at|tojson }}, {{ mail.triggered_by|tojson }}, {{ (mail.body or '')|tojson }})"
<button class="btn btn-sm btn-secondary sent-read-btn"
data-id="{{ mail.id }}"
data-to="{{ mail.to_address }}"
data-subject="{{ mail.subject|e }}"
data-date="{{ mail.sent_at }}"
data-agent="{{ mail.triggered_by }}"
data-body="{{ (mail.body or '')|e }}"
title="Lesen">👁</button>
<button class="btn btn-sm btn-danger"
onclick="deleteSentEmail({{ mail.id }})"
<button class="btn btn-sm btn-danger sent-delete-btn"
data-id="{{ mail.id }}"
title="Löschen">✕</button>
</div>
</td>
@ -214,22 +219,26 @@ function viewEmail(emailId, subject, from) {
.catch(e => { document.getElementById('emailBody').textContent = 'Fehler: ' + e.message; });
}
function showSentEmail(id, to, subject, date, agent, body) {
document.getElementById('sentEmailSubject').textContent = subject;
document.getElementById('sentEmailTo').textContent = to;
document.getElementById('sentEmailDate').textContent = date.replace('T', ' ').slice(0, 16);
document.getElementById('sentEmailAgent').textContent = agent;
document.getElementById('sentEmailBody').textContent = body || '(kein Inhalt gespeichert)';
// Lesen
document.addEventListener('click', function(e) {
const btn = e.target.closest('.sent-read-btn');
if (!btn) return;
document.getElementById('sentEmailSubject').textContent = btn.dataset.subject;
document.getElementById('sentEmailTo').textContent = btn.dataset.to;
document.getElementById('sentEmailDate').textContent = btn.dataset.date.replace('T',' ').slice(0,16);
document.getElementById('sentEmailAgent').textContent = btn.dataset.agent;
document.getElementById('sentEmailBody').textContent = btn.dataset.body || '(kein Inhalt gespeichert)';
new bootstrap.Modal(document.getElementById('sentEmailModal')).show();
}
});
function deleteSentEmail(id) {
// Löschen
document.addEventListener('click', function(e) {
const btn = e.target.closest('.sent-delete-btn');
if (!btn) return;
const id = btn.dataset.id;
if (!confirm('Eintrag #' + id + ' aus dem Log löschen?')) return;
fetch('/emails/sent/' + id + '/delete', {
method: 'POST',
headers: {'Accept': 'application/json'}
})
.then(r => r.json())
fetch('/api/sent-emails/' + id + '/delete', {method: 'POST'})
.then(r => { if (!r.ok) throw new Error('HTTP ' + r.status); return r.json(); })
.then(d => {
if (d.success) {
const row = document.getElementById('sent-row-' + id);
@ -238,7 +247,7 @@ function deleteSentEmail(id) {
alert('Fehler: ' + d.message);
}
})
.catch(() => alert('Netzwerkfehler.'));
}
.catch(err => alert('Fehler: ' + err.message));
});
</script>
{% endblock %}