Adds time reporting UI with filtering and charts
Implements comprehensive hours report tab with: - Period and employee filtering - Statistical overview cards - Hours per week and absence distribution charts - Detailed employee hours table Enhances reports page interactivity and data visualization
This commit is contained in:
parent
2f92b0eb7b
commit
0144e1ae17
4 changed files with 605 additions and 49 deletions
|
|
@ -1,9 +1,10 @@
|
|||
/**
|
||||
* Reports - Statistik og Rapporter
|
||||
*
|
||||
* Feature-specific styling for reports pages.
|
||||
* Feature-specific styling for reports pages (Salgsrapport, Timerapport).
|
||||
* Reuses: swp-stats-row (stats.css), swp-stat-card (stats.css),
|
||||
* swp-tab-bar (tabs.css), swp-data-table (components.css)
|
||||
* swp-tab-bar (tabs.css), swp-data-table (components.css),
|
||||
* swp-status-badge (components.css), swp-card (components.css)
|
||||
*/
|
||||
|
||||
/* ===========================================
|
||||
|
|
@ -359,6 +360,100 @@ swp-page-btn {
|
|||
}
|
||||
}
|
||||
|
||||
/* ===========================================
|
||||
PERIOD SELECTOR (for time reports)
|
||||
=========================================== */
|
||||
swp-period-selector {
|
||||
display: flex;
|
||||
background: var(--color-background-alt);
|
||||
border-radius: var(--radius-md);
|
||||
padding: var(--spacing-1);
|
||||
|
||||
& button {
|
||||
padding: var(--spacing-3) var(--spacing-5);
|
||||
font-size: var(--font-size-md);
|
||||
font-weight: var(--font-weight-medium);
|
||||
font-family: var(--font-family);
|
||||
border: none;
|
||||
background: transparent;
|
||||
color: var(--color-text-secondary);
|
||||
border-radius: var(--radius-sm);
|
||||
cursor: pointer;
|
||||
transition: all var(--transition-fast);
|
||||
|
||||
&:hover {
|
||||
color: var(--color-text);
|
||||
}
|
||||
|
||||
&.active {
|
||||
background: var(--color-teal);
|
||||
color: white;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* ===========================================
|
||||
HOURS TABLE - Grid columns
|
||||
=========================================== */
|
||||
swp-card.hours-table {
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
swp-card.hours-table swp-data-table {
|
||||
grid-template-columns: 200px repeat(7, 1fr);
|
||||
}
|
||||
|
||||
swp-card.hours-table swp-data-table-header {
|
||||
padding: var(--spacing-4) var(--card-padding);
|
||||
}
|
||||
|
||||
swp-card.hours-table swp-data-table-row {
|
||||
padding: var(--spacing-5) var(--card-padding);
|
||||
}
|
||||
|
||||
swp-card.hours-table swp-data-table-cell.name {
|
||||
font-weight: var(--font-weight-medium);
|
||||
}
|
||||
|
||||
swp-card.hours-table swp-data-table-cell.number {
|
||||
font-family: var(--font-mono);
|
||||
font-size: var(--font-size-sm);
|
||||
}
|
||||
|
||||
swp-card.hours-table swp-data-table-cell.danger {
|
||||
color: var(--color-red);
|
||||
}
|
||||
|
||||
swp-card.hours-table swp-data-table-cell.warning {
|
||||
color: var(--color-amber);
|
||||
}
|
||||
|
||||
swp-card.hours-table swp-data-table-cell.purple {
|
||||
color: var(--color-purple);
|
||||
}
|
||||
|
||||
/* ===========================================
|
||||
STATUS BADGE ADDITIONS (absence percentages)
|
||||
=========================================== */
|
||||
swp-status-badge.low {
|
||||
background: var(--bg-green-strong);
|
||||
color: var(--color-green);
|
||||
font-family: var(--font-mono);
|
||||
}
|
||||
|
||||
swp-status-badge.medium {
|
||||
background: var(--bg-amber-strong);
|
||||
color: var(--color-amber);
|
||||
font-family: var(--font-mono);
|
||||
}
|
||||
|
||||
swp-status-badge.high {
|
||||
background: var(--bg-red-strong);
|
||||
color: var(--color-red);
|
||||
font-family: var(--font-mono);
|
||||
}
|
||||
|
||||
/* ===========================================
|
||||
RESPONSIVE
|
||||
=========================================== */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue