feat: A4 Gridstack.js template designer + Puppeteer PDF renderer

This commit is contained in:
root
2026-07-16 07:57:16 +00:00
parent 56abeb9e4d
commit 70735502f2
10 changed files with 1802 additions and 3 deletions

View File

@@ -222,7 +222,8 @@ async function loadTemplates() {
<div class="text-muted text-sm mt-8">${t.description || ''}</div>
</div>
<div class="flex gap-8">
<button class="btn btn-sm btn-outline" onclick="showBuilder('${t.id}')">Edit in Builder</button>
<button class="btn btn-sm btn-outline" onclick="showDesigner('${t.id}')">A4 Designer</button>
<button class="btn btn-sm btn-outline" onclick="showBuilder('${t.id}')">Visual Builder</button>
<button class="btn btn-sm btn-danger" onclick="deleteTemplate('${t.id}')">Delete</button>
</div>
</div>
@@ -541,6 +542,7 @@ async function viewGeneratedCV(id) {
<textarea id="cv-edit-content" style="min-height:500px;font-family:monospace;font-size:13px">${content}</textarea>
<div class="flex gap-8 mt-16">
<button class="btn btn-green" onclick="saveGeneratedCV('${id}')">Save</button>
<button class="btn btn-outline" onclick="downloadGenPDF('${id}')">Download PDF</button>
<select id="cv-status-select" class="btn btn-outline">
<option value="draft" ${data.status === 'draft' ? 'selected' : ''}>Draft</option>
<option value="reviewed" ${data.status === 'reviewed' ? 'selected' : ''}>Reviewed</option>
@@ -576,6 +578,19 @@ async function deleteGeneratedCV(id) {
loadGeneratedCVs();
}
async function downloadGenPDF(genId) {
toast('Rendering PDF...');
try {
const result = await api('/api/generated-cvs/' + genId + '/render-pdf', 'POST');
if (result.pdf_url) {
window.open(result.pdf_url, '_blank');
toast('PDF generated');
}
} catch(e) {
toast('PDF render failed: ' + e.message, 'error');
}
}
// ============================================================
// CHAT
// ============================================================