216 lines
5.4 KiB
Vue

<template>
<webmailing-template>
<template #webmailing-header>
<div class="d-flex justify-content-between align-items-center mb-4">
<div>
<h3 class="mb-0">
<i class="fas fa-envelope"></i> Webmailing
</h3>
<small class="text-muted">Gérez vos campagnes d'email marketing</small>
</div>
</div>
</template>
<template #webmailing-tabs>
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item" role="presentation">
<button
class="nav-link"
:class="{ active: activeTab === 'compose' }"
@click="activeTab = 'compose'"
type="button"
>
<i class="fas fa-pen"></i> Composer
</button>
</li>
<li class="nav-item" role="presentation">
<button
class="nav-link"
:class="{ active: activeTab === 'history' }"
@click="activeTab = 'history'"
type="button"
>
<i class="fas fa-history"></i> Historique
</button>
</li>
</ul>
</template>
<template #webmailing-content>
<div class="tab-content mt-4">
<!-- Compose Tab -->
<div v-if="activeTab === 'compose'" class="tab-pane active">
<webmailing-form
:initial-data="formData"
@form-data-change="updateFormData"
/>
<div class="mt-4 d-flex justify-content-end gap-2">
<soft-button
color="secondary"
variant="outline"
@click="resetForm"
>
<i class="fas fa-redo"></i> Réinitialiser
</soft-button>
<soft-button
color="success"
@click="sendEmail"
>
<i class="fas fa-paper-plane"></i> Envoyer
</soft-button>
</div>
</div>
<!-- History Tab -->
<div v-if="activeTab === 'history'" class="tab-pane active">
<webmailing-list
:emails="emailHistory"
@view-email="handleViewEmail"
@delete-email="handleDeleteEmail"
/>
</div>
</div>
</template>
</webmailing-template>
</template>
<script setup>
import { ref } from "vue";
import WebmailingTemplate from "@/components/templates/Webmailing/WebmailingTemplate.vue";
import WebmailingForm from "@/components/molecules/Webmailing/WebmailingForm.vue";
import WebmailingList from "@/components/molecules/Webmailing/WebmailingList.vue";
import SoftButton from "@/components/SoftButton.vue";
const activeTab = ref("compose");
const formData = ref({
recipients: "",
subject: "",
body: "",
attachments: [],
sendCopy: false,
scheduled: false,
scheduledDate: "",
});
// Sample email history data
const emailHistory = ref([
{
id: 1,
recipients: "client1@example.com, client2@example.com",
subject: "Bienvenue chez Thanasoft",
sentDate: new Date(Date.now() - 3 * 24 * 60 * 60 * 1000),
status: "sent",
},
{
id: 2,
recipients: "client3@example.com",
subject: "Rappel de rendez-vous",
sentDate: new Date(Date.now() - 1 * 24 * 60 * 60 * 1000),
status: "sent",
},
{
id: 3,
recipients: "client4@example.com, client5@example.com",
subject: "Nouvelle fonctionnalité disponible",
sentDate: new Date(),
status: "scheduled",
},
{
id: 4,
recipients: "client6@example.com",
subject: "Documentation mise à jour",
sentDate: new Date(Date.now() - 7 * 24 * 60 * 60 * 1000),
status: "sent",
},
{
id: 5,
recipients: "client7@example.com",
subject: "Erreur d'envoi",
sentDate: new Date(Date.now() - 2 * 24 * 60 * 60 * 1000),
status: "failed",
},
]);
const updateFormData = (data) => {
formData.value = data;
};
const resetForm = () => {
formData.value = {
recipients: "",
subject: "",
body: "",
attachments: [],
sendCopy: false,
scheduled: false,
scheduledDate: "",
};
alert("Formulaire réinitialisé");
};
const sendEmail = () => {
// Validation
if (!formData.value.recipients.trim()) {
alert("Veuillez entrer au moins un destinataire");
return;
}
if (!formData.value.subject.trim()) {
alert("Veuillez entrer un sujet");
return;
}
if (!formData.value.body.trim()) {
alert("Veuillez entrer un contenu");
return;
}
// Add new email to history
const newEmail = {
id: emailHistory.value.length + 1,
recipients: formData.value.recipients,
subject: formData.value.subject,
sentDate: new Date(),
status: formData.value.scheduled ? "scheduled" : "sent",
};
emailHistory.value.unshift(newEmail);
alert(
formData.value.scheduled
? "Email programmé avec succès!"
: "Email envoyé avec succès!"
);
resetForm();
activeTab.value = "history";
};
const handleViewEmail = (id) => {
const email = emailHistory.value.find((e) => e.id === id);
if (email) {
alert(`Visualisation de l'email: ${email.subject}`);
}
};
const handleDeleteEmail = (id) => {
if (confirm("Êtes-vous sûr de vouloir supprimer cet email?")) {
emailHistory.value = emailHistory.value.filter((e) => e.id !== id);
alert("Email supprimé");
}
};
</script>
<style scoped>
.nav-tabs .nav-link {
color: #6c757d;
cursor: pointer;
}
.nav-tabs .nav-link.active {
color: #0d6efd;
border-bottom: 3px solid #0d6efd;
}
.gap-2 {
gap: 10px;
}
</style>