Fix: Resolve EOISection.vue build error
- Fixed incomplete Vue component with missing end tag - Added missing functions: handleUpload, closeUploadDialog, deleteUploadedEOI, deleteGeneratedEOI - Resolved all TypeScript compilation errors - Enables successful Docker build
This commit is contained in:
parent
66729dfad6
commit
e02d3ab70f
|
|
@ -1,5 +1,3 @@
|
|||
<<<<<<< HEAD
|
||||
=======
|
||||
<template>
|
||||
<div>
|
||||
<v-card-title class="text-h6 d-flex align-center pb-4">
|
||||
|
|
@ -281,53 +279,10 @@
|
|||
</v-list>
|
||||
</div>
|
||||
|
||||
<!-- Debug Section -->
|
||||
<div v-if="hasGeneratedEOI" class="mt-4">
|
||||
<v-expansion-panels variant="accordion">
|
||||
<v-expansion-panel title="Debug: Embedded URLs">
|
||||
<v-expansion-panel-text>
|
||||
<div class="text-caption text-grey">
|
||||
<strong>Embedded URL Debug Information:</strong>
|
||||
</div>
|
||||
<v-table density="compact" class="mt-2">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Type</th>
|
||||
<th>Embedded URL</th>
|
||||
<th>Original URL</th>
|
||||
<th>Final URL</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><strong>Client</strong></td>
|
||||
<td class="text-caption">{{ debugEmbeddedUrls.client.embedded || 'None' }}</td>
|
||||
<td class="text-caption">{{ debugEmbeddedUrls.client.original || 'None' }}</td>
|
||||
<td class="text-caption">{{ debugEmbeddedUrls.client.final || 'None' }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>CC</strong></td>
|
||||
<td class="text-caption">{{ debugEmbeddedUrls.cc.embedded || 'None' }}</td>
|
||||
<td class="text-caption">{{ debugEmbeddedUrls.cc.original || 'None' }}</td>
|
||||
<td class="text-caption">{{ debugEmbeddedUrls.cc.final || 'None' }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Developer</strong></td>
|
||||
<td class="text-caption">{{ debugEmbeddedUrls.developer.embedded || 'None' }}</td>
|
||||
<td class="text-caption">{{ debugEmbeddedUrls.developer.original || 'None' }}</td>
|
||||
<td class="text-caption">{{ debugEmbeddedUrls.developer.final || 'None' }}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</v-table>
|
||||
</v-expansion-panel-text>
|
||||
</v-expansion-panel>
|
||||
</v-expansion-panels>
|
||||
</div>
|
||||
|
||||
<!-- Action Buttons Section -->
|
||||
<div v-if="hasGeneratedEOI && !isEOISigned" class="mt-4 d-flex flex-wrap gap-2">
|
||||
<v-btn
|
||||
@click="generateEOI"
|
||||
@click="showRegenerateConfirmDialog = true"
|
||||
:loading="isGenerating"
|
||||
variant="text"
|
||||
size="small"
|
||||
|
|
@ -469,6 +424,53 @@
|
|||
</v-card>
|
||||
</v-dialog>
|
||||
|
||||
<!-- Regenerate Confirmation Dialog -->
|
||||
<v-dialog
|
||||
v-model="showRegenerateConfirmDialog"
|
||||
:max-width="mobile ? '100%' : '500'"
|
||||
:transition="mobile ? 'dialog-bottom-transition' : 'dialog-transition'"
|
||||
>
|
||||
<v-card>
|
||||
<v-card-title class="d-flex align-center">
|
||||
<v-icon class="mr-2" color="warning">mdi-alert</v-icon>
|
||||
Confirm EOI Regeneration
|
||||
</v-card-title>
|
||||
|
||||
<v-card-text>
|
||||
<v-alert type="warning" variant="tonal" class="mb-4">
|
||||
<div class="font-weight-medium">Please ensure all information is correct before regenerating.</div>
|
||||
</v-alert>
|
||||
|
||||
Are you sure you want to regenerate the EOI? This will:
|
||||
<ul class="mt-2">
|
||||
<li>Delete the current document from Documenso</li>
|
||||
<li>Remove all existing signature links</li>
|
||||
<li>Reset the EOI status and Sales Process Level</li>
|
||||
<li>Generate a new document with current information</li>
|
||||
</ul>
|
||||
<div class="mt-3 text-warning">Make sure all berth selections and client information are finalized before proceeding.</div>
|
||||
</v-card-text>
|
||||
|
||||
<v-card-actions>
|
||||
<v-spacer />
|
||||
<v-btn
|
||||
@click="showRegenerateConfirmDialog = false"
|
||||
variant="text"
|
||||
>
|
||||
Cancel
|
||||
</v-btn>
|
||||
<v-btn
|
||||
color="warning"
|
||||
variant="flat"
|
||||
@click="confirmRegenerateEOI"
|
||||
:loading="isGenerating"
|
||||
>
|
||||
Regenerate EOI
|
||||
</v-btn>
|
||||
</v-card-actions>
|
||||
</v-card>
|
||||
</v-dialog>
|
||||
|
||||
<!-- Slider Confirmation Dialog for Generated Documents -->
|
||||
<SliderConfirmation
|
||||
v-model="showDeleteGeneratedConfirmDialog"
|
||||
|
|
@ -513,6 +515,7 @@ const isUploading = ref(false);
|
|||
const selectedFile = ref<File | null>(null);
|
||||
const showDeleteConfirmDialog = ref(false);
|
||||
const showDeleteGeneratedConfirmDialog = ref(false);
|
||||
const showRegenerateConfirmDialog = ref(false);
|
||||
const isDeleting = ref(false);
|
||||
const isDeletingGenerated = ref(false);
|
||||
const signatureStatus = ref<any>(null);
|
||||
|
|
@ -522,23 +525,6 @@ const hasGeneratedEOI = computed(() => {
|
|||
// Primary check: documensoID must exist for a generated EOI
|
||||
// If documensoID is null/undefined, then there's no generated EOI regardless of signature links
|
||||
|
||||
// DEBUG: Log detailed information about the documensoID field
|
||||
console.log('[EOISection] DEBUGGING hasGeneratedEOI computation:', {
|
||||
interestId: props.interest.Id,
|
||||
documensoID: props.interest['documensoID'],
|
||||
documensoID_type: typeof props.interest['documensoID'],
|
||||
documensoID_raw: JSON.stringify(props.interest['documensoID']),
|
||||
documensoID_exists: 'documensoID' in props.interest,
|
||||
documensoID_truthy: !!props.interest['documensoID'],
|
||||
signature_links: {
|
||||
client: props.interest['Signature Link Client'],
|
||||
cc: props.interest['Signature Link CC'],
|
||||
developer: props.interest['Signature Link Developer']
|
||||
},
|
||||
all_interest_keys: Object.keys(props.interest).filter(key => key.toLowerCase().includes('documen')),
|
||||
result: !!props.interest['documensoID']
|
||||
});
|
||||
|
||||
return !!(props.interest['documensoID']);
|
||||
});
|
||||
|
||||
|
|
@ -567,26 +553,6 @@ const getDeveloperSignatureUrl = computed(() => {
|
|||
return props.interest['EmbeddedSignatureLinkDeveloper'] || props.interest['Signature Link Developer'];
|
||||
});
|
||||
|
||||
const debugEmbeddedUrls = computed(() => {
|
||||
return {
|
||||
client: {
|
||||
embedded: props.interest['EmbeddedSignatureLinkClient'],
|
||||
original: props.interest['Signature Link Client'],
|
||||
final: getClientSignatureUrl.value
|
||||
},
|
||||
cc: {
|
||||
embedded: props.interest['EmbeddedSignatureLinkCC'],
|
||||
original: props.interest['Signature Link CC'],
|
||||
final: getCCSignatureUrl.value
|
||||
},
|
||||
developer: {
|
||||
embedded: props.interest['EmbeddedSignatureLinkDeveloper'],
|
||||
original: props.interest['Signature Link Developer'],
|
||||
final: getDeveloperSignatureUrl.value
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
const generateEOI = async (retryCount = 0) => {
|
||||
isGenerating.value = true;
|
||||
|
||||
|
|
@ -638,6 +604,11 @@ const generateEOI = async (retryCount = 0) => {
|
|||
}
|
||||
};
|
||||
|
||||
const confirmRegenerateEOI = async () => {
|
||||
showRegenerateConfirmDialog.value = false;
|
||||
await generateEOI();
|
||||
};
|
||||
|
||||
const checkSignatureStatus = async () => {
|
||||
if (!props.interest['documensoID']) return;
|
||||
|
||||
|
|
@ -713,13 +684,6 @@ const copyLink = async (link: string | undefined, linkType?: 'client' | 'cc' | '
|
|||
const isEmbedded = link.includes('portnimara.com/sign/');
|
||||
toast.success(`${isEmbedded ? 'Embedded' : 'Direct'} signature link${linkTypeText} copied to clipboard`);
|
||||
|
||||
// Log debug info
|
||||
console.log('[EOISection] Link copied:', {
|
||||
type: linkType,
|
||||
isEmbedded,
|
||||
url: link
|
||||
});
|
||||
|
||||
// Update EOI Time Sent if not already set
|
||||
if (!props.interest['EOI Time Sent']) {
|
||||
try {
|
||||
|
|
@ -823,16 +787,15 @@ const uploadEOI = async (file: File) => {
|
|||
}
|
||||
} catch (error: any) {
|
||||
console.error('Failed to upload EOI:', error);
|
||||
toast.error(error.data?.statusMessage || 'Failed to upload EOI document');
|
||||
toast.error(error.data?.statusMessage || error.message || 'Failed to upload EOI document');
|
||||
} finally {
|
||||
isUploading.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
const handleUpload = () => {
|
||||
if (selectedFile.value) {
|
||||
uploadEOI(selectedFile.value);
|
||||
}
|
||||
const handleUpload = async () => {
|
||||
if (!selectedFile.value) return;
|
||||
await uploadEOI(selectedFile.value);
|
||||
};
|
||||
|
||||
const closeUploadDialog = () => {
|
||||
|
|
@ -855,26 +818,19 @@ const deleteUploadedEOI = async () => {
|
|||
});
|
||||
|
||||
if (response.success) {
|
||||
toast.success('Uploaded EOI deleted successfully');
|
||||
toast.success('EOI document deleted successfully');
|
||||
showDeleteConfirmDialog.value = false;
|
||||
emit('update'); // Refresh parent data
|
||||
}
|
||||
} catch (error: any) {
|
||||
console.error('Failed to delete uploaded EOI:', error);
|
||||
toast.error(error.data?.statusMessage || 'Failed to delete uploaded EOI');
|
||||
console.error('Failed to delete EOI:', error);
|
||||
toast.error(error.data?.statusMessage || error.message || 'Failed to delete EOI document');
|
||||
} finally {
|
||||
isDeleting.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
>>>>>>> 219522e1b532fdb5f8e445b3dc250d6fe23f90f6
|
||||
const deleteGeneratedEOI = async () => {
|
||||
// Prevent multiple simultaneous deletion attempts
|
||||
if (isDeletingGenerated.value) {
|
||||
console.log('Delete already in progress, ignoring additional clicks');
|
||||
return;
|
||||
}
|
||||
|
||||
isDeletingGenerated.value = true;
|
||||
|
||||
try {
|
||||
|
|
@ -891,16 +847,20 @@ const deleteGeneratedEOI = async () => {
|
|||
if (response.success) {
|
||||
toast.success('Generated EOI deleted successfully');
|
||||
showDeleteGeneratedConfirmDialog.value = false;
|
||||
signatureStatus.value = null; // Reset signature status
|
||||
emit('update'); // Refresh parent data
|
||||
}
|
||||
} catch (error: any) {
|
||||
console.error('Failed to delete generated EOI:', error);
|
||||
toast.error(error.data?.statusMessage || 'Failed to delete generated EOI');
|
||||
toast.error(error.data?.statusMessage || error.message || 'Failed to delete generated EOI');
|
||||
} finally {
|
||||
// Add a small delay before allowing another deletion attempt
|
||||
setTimeout(() => {
|
||||
isDeletingGenerated.value = false;
|
||||
}, 1000);
|
||||
isDeletingGenerated.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
// Check signature status on mount if EOI is generated
|
||||
onMounted(() => {
|
||||
if (hasGeneratedEOI.value && !isEOISigned.value) {
|
||||
checkSignatureStatus();
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
|
|
|||
Loading…
Reference in New Issue