feat: Improve UI styling in ExpenseDetailsModal and ExpenseList, enhance authentication middleware caching, and optimize PDF generation for receipt fetching

This commit is contained in:
2025-07-10 17:05:08 -04:00
parent 3ba8542e4f
commit 6ebe96bbf4
7 changed files with 58 additions and 86 deletions

View File

@@ -24,7 +24,7 @@
<v-card class="mb-6">
<v-card-text class="pa-6">
<v-row align="center" class="mb-0">
<v-col cols="12" sm="6" md="3">
<v-col cols="12" sm="6" md="2">
<v-text-field
v-model="filters.startDate"
type="date"
@@ -32,11 +32,10 @@
variant="outlined"
density="comfortable"
hide-details
@change="fetchExpenses"
/>
</v-col>
<v-col cols="12" sm="6" md="3">
<v-col cols="12" sm="6" md="2">
<v-text-field
v-model="filters.endDate"
type="date"
@@ -44,11 +43,10 @@
variant="outlined"
density="comfortable"
hide-details
@change="fetchExpenses"
/>
</v-col>
<v-col cols="12" sm="6" md="3">
<v-col cols="12" sm="6" md="2">
<v-select
v-model="filters.category"
:items="['', 'Food/Drinks', 'Shop', 'Online', 'Other']"
@@ -57,11 +55,23 @@
density="comfortable"
hide-details
clearable
@update:model-value="fetchExpenses"
/>
</v-col>
<v-col cols="12" sm="6" md="3">
<v-col cols="12" sm="6" md="2">
<v-btn
@click="fetchExpenses"
color="primary"
variant="flat"
size="large"
class="w-100"
prepend-icon="mdi-magnify"
>
Apply
</v-btn>
</v-col>
<v-col cols="12" sm="6" md="2">
<v-btn
@click="resetToCurrentMonth"
variant="outlined"
@@ -187,7 +197,7 @@
<div class="d-flex flex-wrap align-center">
<span class="text-subtitle-1 font-weight-medium mr-6">Export Options:</span>
<div class="d-flex gap-4">
<div class="d-flex gap-6">
<v-btn
@click="exportCSV"
:disabled="selectedExpenses.length === 0"

View File

@@ -116,7 +116,7 @@
</v-card-title>
<v-divider />
<v-card-text class="pa-4" style="max-height: 600px; overflow-y: auto;">
<div class="d-flex flex-column gap-6">
<div class="d-flex flex-column gap-4">
<v-card
v-for="berth in getBerthsByStatus(status.value)"
:key="berth.Id"
@@ -137,14 +137,24 @@
</div>
<div class="d-flex justify-space-between align-center">
<span class="text-body-2 font-weight-medium">${{ formatPrice(berth.Price) }}</span>
<v-chip
v-if="getInterestedCount(berth)"
size="x-small"
color="primary"
variant="flat"
>
{{ getInterestedCount(berth) }} interested
</v-chip>
<v-tooltip v-if="getInterestedCount(berth)" location="top">
<template v-slot:activator="{ props }">
<v-chip
v-bind="props"
size="x-small"
color="primary"
variant="flat"
>
{{ getInterestedCount(berth) }} interested
</v-chip>
</template>
<div class="pa-2">
<div class="text-subtitle-2 mb-1">Interested Parties:</div>
<div v-for="party in berth['Interested Parties']" :key="party.Id" class="text-body-2">
{{ party['Full Name'] }}
</div>
</div>
</v-tooltip>
</div>
</v-card-text>
</v-card>