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>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<v-card-title class="text-h6 d-flex align-center pb-4">
|
<v-card-title class="text-h6 d-flex align-center pb-4">
|
||||||
|
|
@ -281,53 +279,10 @@
|
||||||
</v-list>
|
</v-list>
|
||||||
</div>
|
</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 -->
|
<!-- Action Buttons Section -->
|
||||||
<div v-if="hasGeneratedEOI && !isEOISigned" class="mt-4 d-flex flex-wrap gap-2">
|
<div v-if="hasGeneratedEOI && !isEOISigned" class="mt-4 d-flex flex-wrap gap-2">
|
||||||
<v-btn
|
<v-btn
|
||||||
@click="generateEOI"
|
@click="showRegenerateConfirmDialog = true"
|
||||||
:loading="isGenerating"
|
:loading="isGenerating"
|
||||||
variant="text"
|
variant="text"
|
||||||
size="small"
|
size="small"
|
||||||
|
|
@ -469,6 +424,53 @@
|
||||||
</v-card>
|
</v-card>
|
||||||
</v-dialog>
|
</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 -->
|
<!-- Slider Confirmation Dialog for Generated Documents -->
|
||||||
<SliderConfirmation
|
<SliderConfirmation
|
||||||
v-model="showDeleteGeneratedConfirmDialog"
|
v-model="showDeleteGeneratedConfirmDialog"
|
||||||
|
|
@ -513,6 +515,7 @@ const isUploading = ref(false);
|
||||||
const selectedFile = ref<File | null>(null);
|
const selectedFile = ref<File | null>(null);
|
||||||
const showDeleteConfirmDialog = ref(false);
|
const showDeleteConfirmDialog = ref(false);
|
||||||
const showDeleteGeneratedConfirmDialog = ref(false);
|
const showDeleteGeneratedConfirmDialog = ref(false);
|
||||||
|
const showRegenerateConfirmDialog = ref(false);
|
||||||
const isDeleting = ref(false);
|
const isDeleting = ref(false);
|
||||||
const isDeletingGenerated = ref(false);
|
const isDeletingGenerated = ref(false);
|
||||||
const signatureStatus = ref<any>(null);
|
const signatureStatus = ref<any>(null);
|
||||||
|
|
@ -522,23 +525,6 @@ const hasGeneratedEOI = computed(() => {
|
||||||
// Primary check: documensoID must exist for a generated EOI
|
// Primary check: documensoID must exist for a generated EOI
|
||||||
// If documensoID is null/undefined, then there's no generated EOI regardless of signature links
|
// 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']);
|
return !!(props.interest['documensoID']);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -567,26 +553,6 @@ const getDeveloperSignatureUrl = computed(() => {
|
||||||
return props.interest['EmbeddedSignatureLinkDeveloper'] || props.interest['Signature Link Developer'];
|
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) => {
|
const generateEOI = async (retryCount = 0) => {
|
||||||
isGenerating.value = true;
|
isGenerating.value = true;
|
||||||
|
|
||||||
|
|
@ -638,6 +604,11 @@ const generateEOI = async (retryCount = 0) => {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const confirmRegenerateEOI = async () => {
|
||||||
|
showRegenerateConfirmDialog.value = false;
|
||||||
|
await generateEOI();
|
||||||
|
};
|
||||||
|
|
||||||
const checkSignatureStatus = async () => {
|
const checkSignatureStatus = async () => {
|
||||||
if (!props.interest['documensoID']) return;
|
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/');
|
const isEmbedded = link.includes('portnimara.com/sign/');
|
||||||
toast.success(`${isEmbedded ? 'Embedded' : 'Direct'} signature link${linkTypeText} copied to clipboard`);
|
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
|
// Update EOI Time Sent if not already set
|
||||||
if (!props.interest['EOI Time Sent']) {
|
if (!props.interest['EOI Time Sent']) {
|
||||||
try {
|
try {
|
||||||
|
|
@ -823,16 +787,15 @@ const uploadEOI = async (file: File) => {
|
||||||
}
|
}
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
console.error('Failed to upload EOI:', error);
|
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 {
|
} finally {
|
||||||
isUploading.value = false;
|
isUploading.value = false;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleUpload = () => {
|
const handleUpload = async () => {
|
||||||
if (selectedFile.value) {
|
if (!selectedFile.value) return;
|
||||||
uploadEOI(selectedFile.value);
|
await uploadEOI(selectedFile.value);
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const closeUploadDialog = () => {
|
const closeUploadDialog = () => {
|
||||||
|
|
@ -855,26 +818,19 @@ const deleteUploadedEOI = async () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
if (response.success) {
|
if (response.success) {
|
||||||
toast.success('Uploaded EOI deleted successfully');
|
toast.success('EOI document deleted successfully');
|
||||||
showDeleteConfirmDialog.value = false;
|
showDeleteConfirmDialog.value = false;
|
||||||
emit('update'); // Refresh parent data
|
emit('update'); // Refresh parent data
|
||||||
}
|
}
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
console.error('Failed to delete uploaded EOI:', error);
|
console.error('Failed to delete EOI:', error);
|
||||||
toast.error(error.data?.statusMessage || 'Failed to delete uploaded EOI');
|
toast.error(error.data?.statusMessage || error.message || 'Failed to delete EOI document');
|
||||||
} finally {
|
} finally {
|
||||||
isDeleting.value = false;
|
isDeleting.value = false;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
>>>>>>> 219522e1b532fdb5f8e445b3dc250d6fe23f90f6
|
|
||||||
const deleteGeneratedEOI = async () => {
|
const deleteGeneratedEOI = async () => {
|
||||||
// Prevent multiple simultaneous deletion attempts
|
|
||||||
if (isDeletingGenerated.value) {
|
|
||||||
console.log('Delete already in progress, ignoring additional clicks');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
isDeletingGenerated.value = true;
|
isDeletingGenerated.value = true;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
@ -891,16 +847,20 @@ const deleteGeneratedEOI = async () => {
|
||||||
if (response.success) {
|
if (response.success) {
|
||||||
toast.success('Generated EOI deleted successfully');
|
toast.success('Generated EOI deleted successfully');
|
||||||
showDeleteGeneratedConfirmDialog.value = false;
|
showDeleteGeneratedConfirmDialog.value = false;
|
||||||
signatureStatus.value = null; // Reset signature status
|
|
||||||
emit('update'); // Refresh parent data
|
emit('update'); // Refresh parent data
|
||||||
}
|
}
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
console.error('Failed to delete generated EOI:', error);
|
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 {
|
} finally {
|
||||||
// Add a small delay before allowing another deletion attempt
|
isDeletingGenerated.value = false;
|
||||||
setTimeout(() => {
|
|
||||||
isDeletingGenerated.value = false;
|
|
||||||
}, 1000);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Check signature status on mount if EOI is generated
|
||||||
|
onMounted(() => {
|
||||||
|
if (hasGeneratedEOI.value && !isEOISigned.value) {
|
||||||
|
checkSignatureStatus();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue