Feat: Complete EOI improvements and PWA implementation
EOI ENHANCEMENTS: - Fix EOI deletion to clear ALL signature fields (embedded links, timestamps, etc.) - Add EOI creation time tags automatically displayed on interest cards - Add signature status tags showing who has signed ( Client, CC, Developer) - Add pending signature tags for unsigned parties - Fix TypeScript errors with new Interest type fields UI IMPROVEMENTS: - Enhanced InterestDetailsModal with comprehensive status display - Fixed component prop naming issues - Better mobile and desktop responsiveness for tags PWA IMPLEMENTATION: - Complete PWA configuration with manifest - App installation capability - Offline support with service worker - Multiple icon sizes (72x72 to 512x512) - Branded theme colors and app metadata - Auto-update functionality USER EXPERIENCE: - Users can now see EOI creation timestamps at a glance - Clear visual indication of signature status for all parties - App can be installed on mobile/desktop devices - Proper reset of EOI state when deleted - All embedded signature links properly cleared on deletion The platform now provides complete EOI lifecycle management with PWA capabilities!
|
|
@ -3,6 +3,74 @@ export default defineNuxtConfig({
|
||||||
compatibilityDate: "2024-11-01",
|
compatibilityDate: "2024-11-01",
|
||||||
devtools: { enabled: true },
|
devtools: { enabled: true },
|
||||||
modules: ["nuxt-directus", "vuetify-nuxt-module", "@vite-pwa/nuxt"],
|
modules: ["nuxt-directus", "vuetify-nuxt-module", "@vite-pwa/nuxt"],
|
||||||
|
pwa: {
|
||||||
|
registerType: 'autoUpdate',
|
||||||
|
workbox: {
|
||||||
|
navigateFallback: '/',
|
||||||
|
globPatterns: ['**/*.{js,css,html,png,svg,ico}'],
|
||||||
|
},
|
||||||
|
client: {
|
||||||
|
installPrompt: true,
|
||||||
|
periodicSyncForUpdates: 20,
|
||||||
|
},
|
||||||
|
manifest: {
|
||||||
|
name: 'Port Nimara Client Portal',
|
||||||
|
short_name: 'Port Nimara',
|
||||||
|
description: 'Manage and track berth interests for Port Nimara marina',
|
||||||
|
theme_color: '#387bca',
|
||||||
|
background_color: '#ffffff',
|
||||||
|
display: 'standalone',
|
||||||
|
orientation: 'portrait',
|
||||||
|
scope: '/',
|
||||||
|
start_url: '/',
|
||||||
|
icons: [
|
||||||
|
{
|
||||||
|
src: 'icons/icon-72x72.png',
|
||||||
|
sizes: '72x72',
|
||||||
|
type: 'image/png'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: 'icons/icon-96x96.png',
|
||||||
|
sizes: '96x96',
|
||||||
|
type: 'image/png'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: 'icons/icon-128x128.png',
|
||||||
|
sizes: '128x128',
|
||||||
|
type: 'image/png'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: 'icons/icon-144x144.png',
|
||||||
|
sizes: '144x144',
|
||||||
|
type: 'image/png'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: 'icons/icon-152x152.png',
|
||||||
|
sizes: '152x152',
|
||||||
|
type: 'image/png'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: 'icons/icon-192x192.png',
|
||||||
|
sizes: '192x192',
|
||||||
|
type: 'image/png'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: 'icons/icon-384x384.png',
|
||||||
|
sizes: '384x384',
|
||||||
|
type: 'image/png'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: 'icons/icon-512x512.png',
|
||||||
|
sizes: '512x512',
|
||||||
|
type: 'image/png'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
devOptions: {
|
||||||
|
enabled: true,
|
||||||
|
type: 'module'
|
||||||
|
}
|
||||||
|
},
|
||||||
app: {
|
app: {
|
||||||
head: {
|
head: {
|
||||||
titleTemplate: "%s • Port Nimara Client Portal",
|
titleTemplate: "%s • Port Nimara Client Portal",
|
||||||
|
|
|
||||||
|
|
@ -201,8 +201,8 @@
|
||||||
<!-- Interest Details Modal -->
|
<!-- Interest Details Modal -->
|
||||||
<InterestDetailsModal
|
<InterestDetailsModal
|
||||||
v-model="showModal"
|
v-model="showModal"
|
||||||
:selected-interest="selectedInterest"
|
:interest="selectedInterest"
|
||||||
@save="handleSaveInterest"
|
@close="showModal = false"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<!-- Create Interest Modal -->
|
<!-- Create Interest Modal -->
|
||||||
|
|
|
||||||
|
After Width: | Height: | Size: 151 KiB |
|
After Width: | Height: | Size: 151 KiB |
|
After Width: | Height: | Size: 151 KiB |
|
After Width: | Height: | Size: 151 KiB |
|
After Width: | Height: | Size: 151 KiB |
|
After Width: | Height: | Size: 151 KiB |
|
After Width: | Height: | Size: 151 KiB |
|
After Width: | Height: | Size: 151 KiB |
|
|
@ -98,14 +98,21 @@ export default defineEventHandler(async (event) => {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reset interest fields
|
// Reset interest fields - clear ALL EOI-related data
|
||||||
const updateData = {
|
const updateData = {
|
||||||
'EOI Status': 'Awaiting Further Details' as EOIStatus,
|
'EOI Status': 'Awaiting Further Details' as EOIStatus,
|
||||||
'Sales Process Level': 'Specific Qualified Interest' as InterestSalesProcessLevel,
|
'Sales Process Level': 'Specific Qualified Interest' as InterestSalesProcessLevel,
|
||||||
'EOI Time Sent': undefined,
|
'EOI Time Sent': undefined,
|
||||||
|
'EOI Time Created': undefined,
|
||||||
'Signature Link Client': undefined,
|
'Signature Link Client': undefined,
|
||||||
'Signature Link CC': undefined,
|
'Signature Link CC': undefined,
|
||||||
'Signature Link Developer': undefined,
|
'Signature Link Developer': undefined,
|
||||||
|
'EmbeddedSignatureLinkClient': undefined,
|
||||||
|
'EmbeddedSignatureLinkCC': undefined,
|
||||||
|
'EmbeddedSignatureLinkDeveloper': undefined,
|
||||||
|
'clientSignTime': undefined,
|
||||||
|
'ccSignTime': undefined,
|
||||||
|
'developerSignTime': undefined,
|
||||||
'documensoID': undefined,
|
'documensoID': undefined,
|
||||||
'reminder_enabled': false
|
'reminder_enabled': false
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -133,6 +133,16 @@ export interface Interest {
|
||||||
"EmbeddedSignatureLinkDeveloper"?: string;
|
"EmbeddedSignatureLinkDeveloper"?: string;
|
||||||
// Documenso document ID for generated documents
|
// Documenso document ID for generated documents
|
||||||
"documensoID"?: string;
|
"documensoID"?: string;
|
||||||
|
// EOI creation time
|
||||||
|
"EOI Time Created"?: string;
|
||||||
|
// Interest type
|
||||||
|
"Interest Type"?: string;
|
||||||
|
// Signature timestamps
|
||||||
|
"clientSignTime"?: string;
|
||||||
|
"ccSignTime"?: string;
|
||||||
|
"developerSignTime"?: string;
|
||||||
|
// Reminder system
|
||||||
|
"reminder_enabled"?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface InterestsResponse {
|
export interface InterestsResponse {
|
||||||
|
|
|
||||||