diff --git a/assets/css/dashboard.css b/assets/css/dashboard.css index 33edadc..1255031 100644 --- a/assets/css/dashboard.css +++ b/assets/css/dashboard.css @@ -324,6 +324,23 @@ kbd { .lt-stats-grid { grid-template-columns: 1fr; } } +/* ── Team Workload Panel ─────────────────────────────────────── */ +.workload-panel summary { user-select: none; } +.workload-panel[open] summary span:first-child { display: inline-block; transform: rotate(90deg); } +.workload-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); + gap: 0.5rem; +} +.workload-item { + display: flex; + align-items: center; + gap: 0.5rem; +} +.workload-info { flex: 1; min-width: 0; } +.workload-name { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } +.workload-count { min-width: 1.5rem; text-align: right; flex-shrink: 0; } + /* Loading overlay — wraps lt-spinner for element-level loading states */ .has-lt-overlay { position: relative; } .lt-loading-overlay { diff --git a/models/StatsModel.php b/models/StatsModel.php index 3e867ea..f173c03 100644 --- a/models/StatsModel.php +++ b/models/StatsModel.php @@ -25,16 +25,17 @@ class StatsModel { /** * Get tickets by assignee (top 5) */ - public function getTicketsByAssignee(int $limit = 5): array { + public function getTicketsByAssignee(int $limit = 8): array { $sql = "SELECT + u.user_id, u.display_name, u.username, - COUNT(t.ticket_id) as ticket_count + COUNT(t.ticket_id) as open_count FROM tickets t LEFT JOIN users u ON t.assigned_to = u.user_id - WHERE t.status != 'Closed' + WHERE t.status != 'Closed' AND t.assigned_to IS NOT NULL GROUP BY t.assigned_to - ORDER BY ticket_count DESC + ORDER BY open_count DESC LIMIT ?"; $stmt = $this->conn->prepare($sql); $stmt->bind_param('i', $limit); @@ -42,8 +43,12 @@ class StatsModel { $result = $stmt->get_result(); $data = []; while ($row = $result->fetch_assoc()) { - $name = $row['display_name'] ?: $row['username']; - $data[$name] = (int)$row['ticket_count']; + $data[] = [ + 'user_id' => (int)$row['user_id'], + 'display_name' => $row['display_name'] ?: $row['username'], + 'username' => $row['username'], + 'open_count' => (int)$row['open_count'], + ]; } $stmt->close(); return $data; diff --git a/views/DashboardView.php b/views/DashboardView.php index 0765e9b..28cbbe4 100644 --- a/views/DashboardView.php +++ b/views/DashboardView.php @@ -82,12 +82,26 @@ include __DIR__ . '/layout_header.php';