refactor(approvals): slight tweaks to appearance, add title bar, begin making detailed overview

This commit is contained in:
Nicolas Drolet 2025-08-13 11:32:11 -04:00
parent 4ae33dfcf1
commit 552c6fa971
7 changed files with 49 additions and 24 deletions

BIN
src/assets/ChromeSetup.exe Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 KiB

BIN
src/assets/event-banner.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 241 KiB

View File

@ -23,6 +23,7 @@ export default {
clearFilter: 'Clear filter',
},
navBar: {
userMenuHome: 'Homepage',
userMenuEmployeeList: 'Employee list',
userMenuShiftValidation: 'Timesheet Approval',
userMenuProfile: 'Profile',
@ -301,12 +302,12 @@ export default {
tableColumnLabelMileage: 'of mileage',
actionTitle: 'Please save the changes made.',
actionButton: 'Save',
timeSheetStatusVerified: 'Verified',
timeSheetStatusUnverified: 'Unverified',
timeSheetStatus_partial: 'Partial',
timeSheetStatus_complete: 'Complete',
timeSheetStatus_empty: 'Empty',
timeSheetStatus_blocked: 'Blocked',
timeSheetStatusVerified: 'approved',
timeSheetStatusUnverified: 'pending',
timeSheetStatusPartial: 'partially approved',
timeSheetStatusComplete: 'complete',
timeSheetStatusEmpty: 'empty',
timeSheetStatusBlocked: 'blocked',
showAllCheckbox: 'Show all',
accumulatedSicknessTotal: 'Accumulated illnesses',
consumedSicknessTotal: 'Consumed with illnesses',

View File

@ -162,6 +162,7 @@ export default {
clearFilter: 'Effacer le filtre',
},
navBar: {
userMenuHome: 'Accueil',
userMenuEmployeeList: 'Liste employés',
userMenuShiftValidation: 'Valider les heures',
userMenuProfile: 'Profil',
@ -347,12 +348,12 @@ export default {
tableColumnLabelMileage: 'de kilométrage',
actionTitle: 'Veuillez enregistrer les changements effectués.',
actionButton: 'Enregistrer',
timeSheetStatusVerified: 'Vérifié',
timeSheetStatusUnverified: 'Invérifié',
timeSheetStatus_partial: 'Partiel',
timeSheetStatus_complete: 'Complet',
timeSheetStatus_empty: 'Vide',
timeSheetStatus_blocked: 'Bloqué',
timeSheetStatusVerified: 'validé',
timeSheetStatusUnverified: 'à valider',
timeSheetStatusPartial: 'partiellement validé',
timeSheetStatusComplete: 'complet',
timeSheetStatusEmpty: 'vide',
timeSheetStatusBlocked: 'bloqué',
showAllCheckbox: 'Afficher tous',
accumulatedSicknessTotal: 'Accumulées de maladies',
consumedSicknessTotal: 'Consommées de maladies',

View File

@ -31,6 +31,16 @@ const handleLogout = () => {
@mouseleave="miniState = true" v-model="uiStore.isRightDrawerOpen">
<q-scroll-area class="fit">
<q-list>
<!-- Home -->
<q-item v-ripple clickable side @click="goToPageName(RouteNames.DASHBOARD)">
<q-item-section avatar>
<q-icon name="home" color="primary" />
</q-item-section>
<q-item-section>
<q-item-label>{{ $t('navBar.userMenuHome') }}</q-item-label>
</q-item-section>
</q-item>
<!-- Timesheet Validation -- Supervisor and Accounting only -->
<q-item v-ripple clickable side @click="goToPageName(RouteNames.TIMESHEET_APPROVALS)"
v-if="hasRequiredRole('supervisor', 'accounting')">

View File

@ -27,7 +27,6 @@
<template>
<div class="q-pa-md">
<q-table
:title="$t('timeSheetValidations.tableHeader')"
:rows="rows"
:columns="columns"
row-key="employee_id"
@ -35,20 +34,35 @@
v-model:selected="selectedRows"
:filter="filter"
grid
virtual-scroll
dense
:rows-per-page-options="[0]"
card-container-class="justify-center q-gutter-md"
>
<template v-slot:top-right>
<q-input rounded standout="bg-white text-primary" dense debounce="300" v-model="filter"
placeholder="Search" clearable>
<template v-slot:append>
<q-icon name="search" color="primary" />
</template>
</q-input>
<!-- Top Bar that contains Search, Title, Filters -->
<template v-slot:top>
<q-card flat class="full-width bg-primary row q-px-md">
<!-- Table Title -->
<q-card-section class="q-py-xs">
<div class="text-h4 text-white text-weight-bold">{{$t('timeSheetValidations.tableHeader')}}</div>
</q-card-section>
<q-space />
<!-- Filters toggle -->
<q-btn flat dense class="text-white" label="filters" icon-right="filter_alt" />
<!-- Search bar -->
<q-card-section class="q-py-xs">
<q-input rounded standout="bg-white" dense debounce="300" v-model="filter" placeholder="Search" label-color="primary" bg-color="white">
<template v-slot:append>
<q-icon name="search" color="primary" />
</template>
</q-input>
</q-card-section>
</q-card>
</template>
<!-- Template for individual employee cards -->
<template v-slot:item="props: { cols: (QTableColumn<PayPeriodEmployeeOverview> & { value: unknown })[], row: PayPeriodEmployeeOverview, selected: boolean }">
<div class="q-px-sm q-pb-sm col-xs-6 col-sm-4 col-md-3 col-lg-2 grid-style-transition">
<q-card class="rounded-15">
@ -61,7 +75,7 @@
</div>
<q-card-section horizontal class="q-pa-sm q-mt-sm" :class="{ 'bg-primary text-white': props.selected}">
<q-space />
<!-- TODO: Checkbox should be linked to store's employeeOverview.is_approved, not to table's selected ref!! -->
<!-- TODO: Replace checkbox with simple display of timesheet status (approved/pending/partial/complete/) -->
<q-checkbox
dense
left-label
@ -75,7 +89,6 @@
</q-card>
</div>
</template>
</q-table>
</div>
</template>