From f738a5872a53e5d45b1b944555151ee91b95bc70 Mon Sep 17 00:00:00 2001 From: Nicolas Drolet Date: Fri, 2 Jan 2026 17:26:20 -0500 Subject: [PATCH] fix(all): More changes to UI: Timesheet: fix UI spaces with scrolling, change ui to not show preset apply if no preset set to employee. Layout Drawer: fix display of options according to user permissions, fix highlight of menu item to match current route name. Employee list: add functionality to prevent users without user management permissions to see or edit user info and prevent seeing inactive users, add remote to shifts for preset editor, add hover effect to employee items when management mode to visually hint at clickable item. --- .../components/main-layout-left-drawer.vue | 33 ++++---- .../components/login-connection-panel.vue | 30 ++++--- .../dashboard/components/main-carousel.vue | 1 + .../components/employee-list-table-item.vue | 39 +++++++--- .../components/employee-list-table.vue | 17 ++-- .../schedule-presets-dialog-row.vue | 22 ++++++ .../components/overview-list.vue | 9 +-- ... => shift-list-weekly-overview-mobile.vue} | 2 +- .../timesheets/components/shift-list-day.vue | 8 +- .../timesheets/components/shift-list.vue | 11 +-- .../components/timesheet-wrapper.vue | 14 +++- .../timesheets/composables/use-shift-api.ts | 2 +- .../composables/use-timesheet-api.ts | 1 + .../timesheets/models/timesheet.models.ts | 78 +------------------ src/pages/dashboard-page.vue | 2 +- src/pages/employee-list-page.vue | 2 +- src/pages/login-page.vue | 2 +- src/pages/timesheet-approval-page.vue | 10 +-- src/pages/timesheet-page.vue | 1 - src/stores/timesheet-store.ts | 3 + 20 files changed, 141 insertions(+), 146 deletions(-) rename src/modules/timesheets/components/mobile/{shift-list-weekly-overview.vue => shift-list-weekly-overview-mobile.vue} (96%) diff --git a/src/layouts/components/main-layout-left-drawer.vue b/src/layouts/components/main-layout-left-drawer.vue index 371a57a..498d4cf 100644 --- a/src/layouts/components/main-layout-left-drawer.vue +++ b/src/layouts/components/main-layout-left-drawer.vue @@ -13,7 +13,7 @@ const DRAWER_BUTTONS: { i18n_key: string, icon: string, route: RouteNames, required_module?: UserModuleAccess }[] = [ { i18n_key: 'nav_bar.home', icon: "home", route: RouteNames.DASHBOARD, required_module: ModuleNames.DASHBOARD }, { i18n_key: 'nav_bar.timesheet_approvals', icon: "event_available", route: RouteNames.TIMESHEET_APPROVALS, required_module: ModuleNames.TIMESHEETS_APPROVAL }, - { i18n_key: 'nav_bar.employee_list', icon: "groups", route: RouteNames.EMPLOYEE_LIST }, + { i18n_key: 'nav_bar.employee_list', icon: "groups", route: RouteNames.EMPLOYEE_LIST, required_module: ModuleNames.EMPLOYEE_LIST }, { i18n_key: 'nav_bar.timesheet', icon: "punch_clock", route: RouteNames.TIMESHEET, required_module: ModuleNames.TIMESHEETS }, { i18n_key: 'nav_bar.profile', icon: "account_box", route: RouteNames.PROFILE, required_module: ModuleNames.PERSONAL_PROFILE }, { i18n_key: 'nav_bar.help', icon: "contact_support", route: RouteNames.HELP }, @@ -26,7 +26,6 @@ const is_mini = ref(true); const onClickDrawerPage = (page_name: RouteNames) => { - ui_store.current_page = page_name; is_mini.value = true; router.push({ name: page_name }).catch(error => { @@ -43,7 +42,7 @@ }; onMounted(() => { - if(q.platform.is.mobile) { + if (q.platform.is.mobile) { ui_store.is_left_drawer_open = false; } }) @@ -66,22 +65,26 @@ v-for="button, index in DRAWER_BUTTONS" :key="index" v-show="button.required_module ?? true" - class="row items-center full-width q-py-sm cursor-pointer" - :class="ui_store.current_page === button.route ? ($q.dark.isActive ? 'bg-green-10' : 'bg-green-2') : ''" @click="onClickDrawerPage(button.route)" > - -
- {{ $t(button.i18n_key) }} + + +
+ {{ $t(button.i18n_key) }} +
diff --git a/src/modules/auth/components/login-connection-panel.vue b/src/modules/auth/components/login-connection-panel.vue index 1b68a96..f5b1513 100644 --- a/src/modules/auth/components/login-connection-panel.vue +++ b/src/modules/auth/components/login-connection-panel.vue @@ -1,25 +1,31 @@ - + + \ No newline at end of file diff --git a/src/modules/employee-list/components/employee-list-table.vue b/src/modules/employee-list/components/employee-list-table.vue index d442f1a..b612718 100644 --- a/src/modules/employee-list/components/employee-list-table.vue +++ b/src/modules/employee-list/components/employee-list-table.vue @@ -7,13 +7,18 @@ import { onMounted, ref } from 'vue'; import { date, type QTableColumn } from 'quasar'; import { useUiStore } from 'src/stores/ui-store'; + import { useAuthStore } from 'src/stores/auth-store'; import { useEmployeeStore } from 'src/stores/employee-store'; import { useTimesheetStore } from 'src/stores/timesheet-store'; import { employee_list_columns, type EmployeeProfile, type EmployeeListFilters } from 'src/modules/employee-list/models/employee-profile.models'; + const ui_store = useUiStore(); + const auth_store = useAuthStore(); const employee_store = useEmployeeStore(); const timesheet_store = useTimesheetStore(); - const ui_store = useUiStore(); + + const is_management = auth_store.user?.user_module_access.includes('employee_management') ?? false; + const visible_columns = ref<(keyof EmployeeProfile)[]>(['first_name', 'email', 'job_title', 'last_work_day']); const table_grid_container = ref(null); @@ -88,6 +93,7 @@ @@ -185,7 +192,7 @@ + + diff --git a/src/modules/timesheet-approval/components/overview-list.vue b/src/modules/timesheet-approval/components/overview-list.vue index b593d34..2f2d955 100644 --- a/src/modules/timesheet-approval/components/overview-list.vue +++ b/src/modules/timesheet-approval/components/overview-list.vue @@ -40,14 +40,13 @@ }>(); const is_showing_filters = ref(false); - const search_string = ref(''); const overview_rows = computed(() => timesheet_store.pay_period_overviews.filter(overview => overview)); const overview_filters = ref({ is_showing_inactive: false, is_showing_team_only: false, supervisors: [], - name_search_string: search_string.value, + name_search_string: '', }); const onClickedDetails = async (row: TimesheetApprovalOverview) => { @@ -106,7 +105,7 @@ :no-data-label="$t('shared.error.no_data_found')" :no-results-label="$t('shared.error.no_search_results')" :loading-label="$t('shared.label.loading')" - :style="`max-height: ${maxHeight}px;`" + :style="overview_rows.length > 0 ? `max-height: ${maxHeight - (timesheet_store.is_approval_grid_mode ? 0 : 20)}px;` : ''" @row-click="(_evt, row: TimesheetApprovalOverview) => onClickedDetails(row)" >