Bewerbungen: Zeile öffnet /bewerbung/:id statt Inline-Aufklappen
Entfernt den ausklappbaren Detailbereich (Status-Verlauf, Notizen, interne Notizen) unter jeder Bewerbungs-Zeile auf der Startseite. Ein Klick auf die Zeile öffnet stattdessen die ganze Bewerbung unter /bewerbung/:id. Die Aktions-Buttons (Merken, Bearbeiten, Löschen) bleiben separat bedienbar. Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
+10
-75
@@ -213,22 +213,10 @@
|
||||
<div class="group-body collapsible">
|
||||
<div class="collapsible-inner">
|
||||
<% groups[statusKey].forEach(app => { %>
|
||||
<%
|
||||
const hatNotizen = app.notizen && app.notizen.trim().length > 0;
|
||||
const hatInterne = app.interne_notizen && app.interne_notizen.trim().length > 0;
|
||||
const hatVerlauf = app.verlauf && app.verlauf.length > 0;
|
||||
const hatDetails = hatNotizen || hatInterne || hatVerlauf;
|
||||
%>
|
||||
<div class="app-row border-t border-gray-100 dark:border-gray-700/60 <%= hatDetails ? 'has-details' : '' %>">
|
||||
<!-- Eine Zeile pro Bewerbung -->
|
||||
<div class="app-line app-grid px-6 py-3 text-sm transition-colors <%= hatDetails ? 'cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-700/50' : '' %>">
|
||||
<span class="flex items-center justify-center">
|
||||
<% if (hatDetails) { %>
|
||||
<svg class="chevron w-4 h-4 text-gray-400 dark:text-gray-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"></path>
|
||||
</svg>
|
||||
<% } %>
|
||||
</span>
|
||||
<div class="app-row border-t border-gray-100 dark:border-gray-700/60">
|
||||
<!-- Eine Zeile pro Bewerbung – Klick öffnet die ganze Bewerbung -->
|
||||
<div class="app-line app-grid px-6 py-3 text-sm transition-colors cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-700/50" data-bewerbung="<%= app.id %>">
|
||||
<span class="flex items-center justify-center"></span>
|
||||
<span class="whitespace-nowrap text-gray-900 dark:text-white"><%= new Date(app.datum).toLocaleDateString('de-DE') %></span>
|
||||
<span class="min-w-0 truncate font-medium text-gray-900 dark:text-white" title="<%= app.firma %>"><%= app.firma %></span>
|
||||
<span class="min-w-0">
|
||||
@@ -273,58 +261,6 @@
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
<% if (hatDetails) { %>
|
||||
<!-- Klappbarer Detailbereich unter der Zeile -->
|
||||
<div class="app-details collapsible">
|
||||
<div class="collapsible-inner">
|
||||
<div class="px-6 pb-5 pt-1 space-y-3">
|
||||
<% if (hatVerlauf) { %>
|
||||
<div class="rounded-lg border-l-4 border-indigo-400 dark:border-indigo-500 bg-indigo-50/60 dark:bg-gray-700/40 px-4 py-3">
|
||||
<div class="flex items-center gap-2 mb-2">
|
||||
<svg class="w-4 h-4 text-indigo-500 dark:text-indigo-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"></path>
|
||||
</svg>
|
||||
<span class="text-xs font-semibold uppercase tracking-wider text-indigo-600 dark:text-indigo-400">Status-Verlauf</span>
|
||||
</div>
|
||||
<ol class="space-y-1.5">
|
||||
<% app.verlauf.forEach(v => { %>
|
||||
<li class="flex flex-wrap gap-x-2 text-sm">
|
||||
<span class="text-gray-500 dark:text-gray-400 whitespace-nowrap"><%= new Date(v.datum).toLocaleDateString('de-DE') %></span>
|
||||
<span class="font-semibold text-gray-800 dark:text-gray-100"><%= v.status %></span>
|
||||
<% if (v.kommentar && v.kommentar.trim()) { %>
|
||||
<span class="text-gray-600 dark:text-gray-300 whitespace-pre-wrap break-words">– <%= v.kommentar %></span>
|
||||
<% } %>
|
||||
</li>
|
||||
<% }); %>
|
||||
</ol>
|
||||
</div>
|
||||
<% } %>
|
||||
<% if (hatNotizen) { %>
|
||||
<div class="rounded-lg border-l-4 border-blue-400 dark:border-blue-500 bg-blue-50/70 dark:bg-gray-700/40 px-4 py-3">
|
||||
<div class="flex items-center gap-2 mb-2">
|
||||
<svg class="w-4 h-4 text-blue-500 dark:text-blue-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"></path>
|
||||
</svg>
|
||||
<span class="text-xs font-semibold uppercase tracking-wider text-blue-600 dark:text-blue-400">Notizen</span>
|
||||
</div>
|
||||
<p class="whitespace-pre-wrap break-words text-base leading-relaxed text-gray-800 dark:text-gray-200"><%= app.notizen %></p>
|
||||
</div>
|
||||
<% } %>
|
||||
<% if (hatInterne) { %>
|
||||
<div class="rounded-lg border-l-4 border-amber-400 dark:border-amber-500 bg-amber-50/70 dark:bg-gray-700/40 px-4 py-3">
|
||||
<div class="flex items-center gap-2 mb-2">
|
||||
<svg class="w-4 h-4 text-amber-500 dark:text-amber-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z"></path>
|
||||
</svg>
|
||||
<span class="text-xs font-semibold uppercase tracking-wider text-amber-600 dark:text-amber-400">Interne Notizen · nicht im PDF</span>
|
||||
</div>
|
||||
<p class="whitespace-pre-wrap break-words text-base leading-relaxed text-gray-800 dark:text-gray-200"><%= app.interne_notizen %></p>
|
||||
</div>
|
||||
<% } %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% } %>
|
||||
</div>
|
||||
<% }); %>
|
||||
</div>
|
||||
@@ -436,14 +372,13 @@
|
||||
});
|
||||
});
|
||||
|
||||
// Detailbereich einer einzelnen Bewerbung auf-/zuklappen.
|
||||
qsa('.app-row.has-details').forEach(function (row) {
|
||||
var line = row.querySelector('.app-line');
|
||||
// Klick auf eine Bewerbungs-Zeile öffnet die ganze Bewerbung
|
||||
// (/bewerbung/:id). Klicks auf die Aktions-Buttons (Merken,
|
||||
// Bearbeiten, Löschen) werden nicht abgefangen.
|
||||
qsa('.app-line[data-bewerbung]').forEach(function (line) {
|
||||
line.addEventListener('click', function (e) {
|
||||
if (e.target.closest('.app-actions')) return; // Bearbeiten/Löschen nicht abfangen
|
||||
var details = row.querySelector('.app-details');
|
||||
var chev = line.querySelector('.chevron');
|
||||
setOpen(details, chev, !details.classList.contains('open'));
|
||||
if (e.target.closest('.app-actions')) return;
|
||||
window.location.href = '/bewerbung/' + line.getAttribute('data-bewerbung');
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user