diff --git a/src/layout/melissa/MelissaDocumentosTemplates.vue b/src/layout/melissa/MelissaDocumentosTemplates.vue index e770243..bb22fd5 100644 --- a/src/layout/melissa/MelissaDocumentosTemplates.vue +++ b/src/layout/melissa/MelissaDocumentosTemplates.vue @@ -9,7 +9,7 @@ * Lógica idêntica à DocumentTemplatesPage (composable * useDocumentTemplates + DocumentTemplateEditor reusado). */ -import { ref, onMounted } from 'vue'; +import { ref, computed, onMounted } from 'vue'; import { useToast } from 'primevue/usetoast'; import { useConfirm } from 'primevue/useconfirm'; @@ -29,11 +29,15 @@ const { fetchTemplates, create, update, remove, duplicate } = useDocumentTemplates(); -// ── Views ─────────────────────────────────────────────── +// ── Views: list | create | edit | preview ─────────────── const view = ref('list'); const editingTemplate = ref({}); const editingId = ref(null); +// Preview de template global (somente leitura) — abre antes de duplicar +// para o usuário ler o conteúdo. Inclui botão "Duplicar" no header. +const previewTemplate = ref(null); + // ── Acoes ─────────────────────────────────────────────── function openCreate() { editingId.value = null; @@ -56,6 +60,56 @@ function openEdit(tpl) { view.value = 'edit'; } +// Preview de template do sistema — leitura + botão Duplicar. +// Clique na sidebar de templates do sistema cai aqui em vez de +// duplicar direto. +function openPreview(tpl) { + previewTemplate.value = tpl; + view.value = 'preview'; +} + +// Monta HTML completo do template (cabeçalho + corpo + rodapé) com +// estilos básicos pra preview legível dentro do iframe. +const previewHtml = computed(() => { + const tpl = previewTemplate.value; + if (!tpl) return ''; + const cabecalho = tpl.cabecalho_html || ''; + const corpo = tpl.corpo_html || ''; + const rodape = tpl.rodape_html || ''; + return ` + + + + + + + ${cabecalho ? `
${cabecalho}
` : ''} +
${corpo}
+ ${rodape ? `` : ''} + +`; +}); + async function onSave(payload) { try { if (view.value === 'create') { @@ -82,7 +136,12 @@ function onDuplicate(tpl) { accept: async () => { try { await duplicate(tpl.id); - toast.add({ severity: 'success', summary: 'Duplicado', detail: `"${tpl.nome_template}" copiado para Meus Templates.`, life: 3000 }); + toast.add({ severity: 'success', summary: 'Duplicado', detail: `"${tpl.nome_template}" copiado para Seus documentos.`, life: 3000 }); + // Se veio do preview, volta pra list pra mostrar o novo template no main + if (view.value === 'preview') { + view.value = 'list'; + previewTemplate.value = null; + } } catch (e) { toast.add({ severity: 'error', summary: 'Erro', detail: e?.message }); } @@ -152,7 +211,8 @@ onMounted(() => { - + + {{ templates.length }} @@ -210,8 +270,8 @@ onMounted(() => {
- -