fixes
Build And Push Image / docker (push) Successful in 1m29s Details

This commit is contained in:
Matt 2025-08-14 22:05:12 +02:00
parent b059d81c21
commit 4adbb0465a
3 changed files with 80 additions and 155 deletions

View File

@ -231,7 +231,7 @@ const openUserManagement = () => {
}; };
const navigateToProfile = () => { const navigateToProfile = () => {
navigateTo('/dashboard/user'); navigateTo('/dashboard/profile');
}; };
const navigateToSettings = () => { const navigateToSettings = () => {

View File

@ -12,32 +12,34 @@
<p class="text-h6 text-medium-emphasis"> <p class="text-h6 text-medium-emphasis">
MonacoUSA Board Portal MonacoUSA Board Portal
</p> </p>
<v-chip color="primary" variant="elevated" class="mt-2"> <div class="text-center">
<v-icon start>mdi-shield-account</v-icon> <v-chip color="primary" variant="elevated" class="mt-2">
Board Member <v-icon start>mdi-shield-account</v-icon>
</v-chip> Board Member
</v-chip>
</div>
</v-col> </v-col>
</v-row> </v-row>
<!-- Board Tools --> <!-- Board Tools -->
<v-row class="mb-6"> <v-row class="mb-6">
<v-col cols="12" md="3"> <v-col cols="12" md="6">
<v-card class="pa-4 text-center" elevation="2" hover> <v-card class="pa-4 text-center" elevation="2" hover>
<v-icon size="48" color="primary" class="mb-2">mdi-calendar-clock</v-icon> <v-icon size="48" color="primary" class="mb-2">mdi-calendar</v-icon>
<h3 class="mb-2">Meetings</h3> <h3 class="mb-2">Events</h3>
<p class="text-body-2 mb-4">Schedule and manage board meetings</p> <p class="text-body-2 mb-4">View and manage association events</p>
<v-btn <v-btn
color="primary" color="primary"
variant="outlined" variant="outlined"
style="border-color: #a31515; color: #a31515;" style="border-color: #a31515; color: #a31515;"
@click="navigateToMeetings" @click="navigateToEvents"
> >
Manage Meetings View Events
</v-btn> </v-btn>
</v-card> </v-card>
</v-col> </v-col>
<v-col cols="12" md="3"> <v-col cols="12" md="6">
<v-card class="pa-4 text-center" elevation="2" hover> <v-card class="pa-4 text-center" elevation="2" hover>
<v-icon size="48" color="primary" class="mb-2">mdi-account-group</v-icon> <v-icon size="48" color="primary" class="mb-2">mdi-account-group</v-icon>
<h3 class="mb-2">Members</h3> <h3 class="mb-2">Members</h3>
@ -52,38 +54,6 @@
</v-btn> </v-btn>
</v-card> </v-card>
</v-col> </v-col>
<v-col cols="12" md="3">
<v-card class="pa-4 text-center" elevation="2" hover>
<v-icon size="48" color="primary" class="mb-2">mdi-chart-line</v-icon>
<h3 class="mb-2">Reports</h3>
<p class="text-body-2 mb-4">Financial and activity reports</p>
<v-btn
color="primary"
variant="outlined"
style="border-color: #a31515; color: #a31515;"
@click="navigateToReports"
>
View Reports
</v-btn>
</v-card>
</v-col>
<v-col cols="12" md="3">
<v-card class="pa-4 text-center" elevation="2" hover>
<v-icon size="48" color="primary" class="mb-2">mdi-tools</v-icon>
<h3 class="mb-2">Tools</h3>
<p class="text-body-2 mb-4">Board management tools</p>
<v-btn
color="primary"
variant="outlined"
style="border-color: #a31515; color: #a31515;"
@click="navigateToTools"
>
Access Tools
</v-btn>
</v-card>
</v-col>
</v-row> </v-row>
<!-- Board Statistics --> <!-- Board Statistics -->
@ -104,13 +74,9 @@
<div class="text-h4 font-weight-bold" style="color: #a31515;">{{ stats.activeMembers }}</div> <div class="text-h4 font-weight-bold" style="color: #a31515;">{{ stats.activeMembers }}</div>
<div class="text-body-2">Active Members</div> <div class="text-body-2">Active Members</div>
</v-col> </v-col>
<v-col cols="6" md="3" class="text-center"> <v-col cols="6" md="6" class="text-center">
<div class="text-h4 font-weight-bold" style="color: #a31515;">{{ stats.upcomingMeetings }}</div> <div class="text-h4 font-weight-bold" style="color: #a31515;">{{ stats.upcomingEvents }}</div>
<div class="text-body-2">Upcoming Meetings</div> <div class="text-body-2">Upcoming Events</div>
</v-col>
<v-col cols="6" md="3" class="text-center">
<div class="text-h4 font-weight-bold" style="color: #a31515;">{{ stats.pendingActions }}</div>
<div class="text-body-2">Pending Actions</div>
</v-col> </v-col>
</v-row> </v-row>
</v-card-text> </v-card-text>
@ -121,24 +87,24 @@
<v-card elevation="2"> <v-card elevation="2">
<v-card-title class="pa-4" style="background-color: #f5f5f5;"> <v-card-title class="pa-4" style="background-color: #f5f5f5;">
<v-icon class="mr-2" color="primary">mdi-calendar-today</v-icon> <v-icon class="mr-2" color="primary">mdi-calendar-today</v-icon>
Next Meeting Next Event
</v-card-title> </v-card-title>
<v-card-text class="pa-4"> <v-card-text class="pa-4">
<div class="text-h6 mb-2">Board Meeting</div> <div class="text-h6 mb-2">{{ nextEvent.title }}</div>
<div class="text-body-2 mb-2"> <div class="text-body-2 mb-2">
<v-icon size="small" class="mr-1">mdi-calendar</v-icon> <v-icon size="small" class="mr-1">mdi-calendar</v-icon>
{{ nextMeeting.date }} {{ nextEvent.date }}
</div> </div>
<div class="text-body-2 mb-4"> <div class="text-body-2 mb-4">
<v-icon size="small" class="mr-1">mdi-clock</v-icon> <v-icon size="small" class="mr-1">mdi-clock</v-icon>
{{ nextMeeting.time }} {{ nextEvent.time }}
</div> </div>
<v-btn <v-btn
color="primary" color="primary"
variant="outlined" variant="outlined"
size="small" size="small"
style="border-color: #a31515; color: #a31515;" style="border-color: #a31515; color: #a31515;"
@click="viewMeetingDetails" @click="viewEventDetails"
> >
View Details View Details
</v-btn> </v-btn>
@ -159,82 +125,6 @@
</v-col> </v-col>
</v-row> </v-row>
<!-- Recent Board Activity -->
<v-row class="mb-6">
<v-col cols="12">
<v-card elevation="2">
<v-card-title class="pa-4" style="background-color: #f5f5f5;">
<v-icon class="mr-2" color="primary">mdi-history</v-icon>
Recent Board Activity
</v-card-title>
<v-card-text class="pa-4">
<v-list>
<v-list-item v-for="activity in recentActivity" :key="activity.id">
<v-list-item-content>
<v-list-item-title>{{ activity.title }}</v-list-item-title>
<v-list-item-subtitle>{{ activity.description }}</v-list-item-subtitle>
</v-list-item-content>
<v-list-item-action>
<v-chip :color="activity.type" size="small">{{ activity.status }}</v-chip>
</v-list-item-action>
</v-list-item>
</v-list>
</v-card-text>
</v-card>
</v-col>
</v-row>
<!-- Quick Actions -->
<v-row>
<v-col cols="12">
<v-card elevation="2">
<v-card-title class="pa-4" style="background-color: #f5f5f5;">
<v-icon class="mr-2" color="primary">mdi-lightning-bolt</v-icon>
Quick Actions
</v-card-title>
<v-card-text class="pa-4">
<v-row>
<v-col cols="12" md="4">
<v-btn
color="primary"
variant="outlined"
block
style="border-color: #a31515; color: #a31515;"
@click="scheduleNewMeeting"
>
<v-icon start>mdi-plus</v-icon>
Schedule New Meeting
</v-btn>
</v-col>
<v-col cols="12" md="4">
<v-btn
color="primary"
variant="outlined"
block
style="border-color: #a31515; color: #a31515;"
@click="createAnnouncement"
>
<v-icon start>mdi-bullhorn</v-icon>
Create Announcement
</v-btn>
</v-col>
<v-col cols="12" md="4">
<v-btn
color="primary"
variant="outlined"
block
style="border-color: #a31515; color: #a31515;"
@click="generateReport"
>
<v-icon start>mdi-file-chart</v-icon>
Generate Report
</v-btn>
</v-col>
</v-row>
</v-card-text>
</v-card>
</v-col>
</v-row>
<!-- View Member Dialog --> <!-- View Member Dialog -->
<ViewMemberDialog <ViewMemberDialog
@ -284,17 +174,16 @@ const selectedMember = ref<Member | null>(null);
const stats = ref({ const stats = ref({
totalMembers: 0, totalMembers: 0,
activeMembers: 0, activeMembers: 0,
upcomingMeetings: 0, upcomingEvents: 0
pendingActions: 0
}); });
const nextMeeting = ref({ const nextEvent = ref({
id: null, id: null,
title: 'Board Meeting', title: 'Next Event',
date: 'Loading...', date: 'Loading...',
time: 'Loading...', time: 'Loading...',
location: 'TBD', location: 'TBD',
description: 'Monthly board meeting' description: 'Upcoming association event'
}); });
const isLoading = ref(true); const isLoading = ref(true);
@ -321,8 +210,7 @@ const loadBoardData = async () => {
stats.value = { stats.value = {
totalMembers: statsData.data.totalMembers || 0, totalMembers: statsData.data.totalMembers || 0,
activeMembers: statsData.data.activeMembers || 0, activeMembers: statsData.data.activeMembers || 0,
upcomingMeetings: statsData.data.upcomingMeetings || 0, upcomingEvents: statsData.data.upcomingEvents || 0
pendingActions: statsData.data.pendingActions || 0
}; };
} }
} }
@ -331,13 +219,13 @@ const loadBoardData = async () => {
if (meetingResponse.status === 'fulfilled') { if (meetingResponse.status === 'fulfilled') {
const meetingData = meetingResponse.value as any; const meetingData = meetingResponse.value as any;
if (meetingData?.success) { if (meetingData?.success) {
nextMeeting.value = { nextEvent.value = {
id: meetingData.data.id, id: meetingData.data.id,
title: meetingData.data.title || 'Board Meeting', title: meetingData.data.title || 'Next Event',
date: meetingData.data.date || 'TBD', date: meetingData.data.date || 'TBD',
time: meetingData.data.time || 'TBD', time: meetingData.data.time || 'TBD',
location: meetingData.data.location || 'TBD', location: meetingData.data.location || 'TBD',
description: meetingData.data.description || 'Monthly board meeting' description: meetingData.data.description || 'Upcoming association event'
}; };
} }
} }
@ -401,9 +289,10 @@ const handleMemberUpdated = (member: Member) => {
// stats.value = await fetchUpdatedStats(); // stats.value = await fetchUpdatedStats();
}; };
// Navigation methods (placeholder implementations) // Navigation methods
const navigateToMeetings = () => { const navigateToEvents = () => {
console.log('Navigate to meetings'); // Navigate to events page
navigateTo('/dashboard/events');
}; };
const navigateToMembers = () => { const navigateToMembers = () => {
@ -411,16 +300,8 @@ const navigateToMembers = () => {
navigateTo('/dashboard/member-list'); navigateTo('/dashboard/member-list');
}; };
const navigateToReports = () => { const viewEventDetails = () => {
console.log('Navigate to reports'); console.log('View event details');
};
const navigateToTools = () => {
console.log('Navigate to tools');
};
const viewMeetingDetails = () => {
console.log('View meeting details');
}; };
const scheduleNewMeeting = () => { const scheduleNewMeeting = () => {

View File

@ -341,6 +341,33 @@
</v-card> </v-card>
</v-col> </v-col>
</v-row> </v-row>
<!-- Contact Support -->
<v-row class="mt-6">
<v-col cols="12">
<v-card elevation="2">
<v-card-title class="pa-4" style="background-color: #f5f5f5;">
<v-icon class="mr-2" color="primary">mdi-help-circle-outline</v-icon>
Need Help?
</v-card-title>
<v-card-text class="pa-4">
<p class="mb-4">
If you need assistance or have questions about your membership,
please don't hesitate to contact our support team.
</p>
<v-btn
color="primary"
variant="outlined"
style="border-color: #a31515; color: #a31515;"
@click="contactSupport"
>
<v-icon start>mdi-email</v-icon>
Contact Support
</v-btn>
</v-card-text>
</v-card>
</v-col>
</v-row>
</div> </div>
<!-- Snackbar for notifications --> <!-- Snackbar for notifications -->
@ -596,6 +623,23 @@ const getDaysRemainingColor = (days: number): string => {
return 'text-success'; return 'text-success';
}; };
const contactSupport = () => {
const subject = encodeURIComponent('MonacoUSA Portal Support Request');
const body = encodeURIComponent(`Hello,
I need assistance with:
[Please describe your issue]
Member ID: ${memberData.value?.member_id || 'Not provided'}
Name: ${fullName.value || 'Not provided'}
Email: ${memberData.value?.email || user.value?.email || 'Not provided'}
Thank you!`);
window.open(`mailto:support@monacousa.org?subject=${subject}&body=${body}`, '_self');
};
// Initialize // Initialize
onMounted(() => { onMounted(() => {
loadMemberData(); loadMemberData();