relancezen / index.html
LudoSLN's picture
Add 2 files
2e417fb verified
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>RelanceZen - Gestion des relances clients</title>
<script src="https://cdn.tailwindcss.com"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<style>
.custom-scrollbar::-webkit-scrollbar {
width: 6px;
height: 6px;
}
.custom-scrollbar::-webkit-scrollbar-track {
background: #f1f1f1;
}
.custom-scrollbar::-webkit-scrollbar-thumb {
background: #888;
border-radius: 3px;
}
.custom-scrollbar::-webkit-scrollbar-thumb:hover {
background: #555;
}
.fade-in {
animation: fadeIn 0.3s ease-in-out;
}
@keyframes fadeIn {
from { opacity: 0; transform: translateY(10px); }
to { opacity: 1; transform: translateY(0); }
}
.pulse {
animation: pulse 2s infinite;
}
@keyframes pulse {
0% { box-shadow: 0 0 0 0 rgba(99, 102, 241, 0.4); }
70% { box-shadow: 0 0 0 10px rgba(99, 102, 241, 0); }
100% { box-shadow: 0 0 0 0 rgba(99, 102, 241, 0); }
}
</style>
</head>
<body class="bg-gray-50 font-sans">
<div class="min-h-screen flex flex-col">
<!-- Header -->
<header class="bg-indigo-600 text-white shadow-md">
<div class="container mx-auto px-4 py-6">
<div class="flex justify-between items-center">
<div class="flex items-center space-x-3">
<i class="fas fa-bell text-2xl"></i>
<h1 class="text-2xl font-bold">RelanceZen</h1>
</div>
<nav>
<ul class="flex space-x-6">
<li><a href="#" class="hover:text-indigo-200 transition">Accueil</a></li>
<li><a href="#" class="hover:text-indigo-200 transition">Clients</a></li>
<li><a href="#" class="hover:text-indigo-200 transition">Statistiques</a></li>
<li><a href="#" class="hover:text-indigo-200 transition">Paramètres</a></li>
</ul>
</nav>
<div class="flex items-center space-x-4">
<div class="relative">
<i class="fas fa-bell text-xl cursor-pointer"></i>
<span class="absolute -top-1 -right-1 bg-red-500 text-white text-xs rounded-full h-4 w-4 flex items-center justify-center">3</span>
</div>
<div class="h-8 w-8 rounded-full bg-indigo-400 flex items-center justify-center cursor-pointer">
<span class="text-white font-medium">JD</span>
</div>
</div>
</div>
</div>
</header>
<!-- Main Content -->
<main class="flex-grow container mx-auto px-4 py-8">
<div class="grid grid-cols-1 lg:grid-cols-3 gap-8">
<!-- Left Column -->
<div class="lg:col-span-2 space-y-8">
<!-- Upload Section -->
<section class="bg-white rounded-lg shadow-md p-6 fade-in">
<div class="flex justify-between items-center mb-6">
<h2 class="text-xl font-semibold text-gray-800">Importer des clients</h2>
<button id="helpBtn" class="text-indigo-600 hover:text-indigo-800">
<i class="fas fa-question-circle"></i>
</button>
</div>
<div id="helpText" class="hidden bg-indigo-50 text-indigo-800 p-4 rounded-lg mb-6">
<p class="mb-2">Format accepté : fichier CSV ou Excel avec les colonnes :</p>
<ul class="list-disc pl-5">
<li>Nom du client</li>
<li>Email</li>
<li>Montant dû</li>
<li>Date d'échéance</li>
</ul>
</div>
<div class="border-2 border-dashed border-gray-300 rounded-lg p-8 text-center hover:border-indigo-400 transition cursor-pointer">
<div class="flex flex-col items-center justify-center">
<i class="fas fa-cloud-upload-alt text-4xl text-indigo-500 mb-4"></i>
<p class="text-gray-600 mb-2">Glissez-déposez votre fichier ici</p>
<p class="text-sm text-gray-500 mb-4">ou</p>
<label for="fileUpload" class="bg-indigo-600 text-white px-4 py-2 rounded-md hover:bg-indigo-700 transition cursor-pointer">
Sélectionner un fichier
</label>
<input type="file" id="fileUpload" class="hidden" accept=".csv, .xlsx, .xls">
</div>
</div>
<div id="fileInfo" class="hidden mt-4 bg-gray-100 p-3 rounded-md">
<div class="flex justify-between items-center">
<div class="flex items-center">
<i class="fas fa-file-excel text-green-500 mr-2"></i>
<span id="fileName" class="font-medium">clients.xlsx</span>
</div>
<button id="removeFile" class="text-red-500 hover:text-red-700">
<i class="fas fa-times"></i>
</button>
</div>
<div class="mt-2">
<div class="w-full bg-gray-200 rounded-full h-2.5">
<div class="bg-indigo-600 h-2.5 rounded-full" style="width: 100%"></div>
</div>
<p class="text-right text-xs text-gray-500 mt-1">100% importé</p>
</div>
</div>
</section>
<!-- Client Table -->
<section class="bg-white rounded-lg shadow-md overflow-hidden fade-in">
<div class="p-6">
<div class="flex justify-between items-center mb-6">
<h2 class="text-xl font-semibold text-gray-800">Suivi des relances</h2>
<div class="flex space-x-3">
<button class="bg-indigo-100 text-indigo-700 px-3 py-1 rounded-md text-sm hover:bg-indigo-200 transition">
<i class="fas fa-filter mr-1"></i> Filtrer
</button>
<button class="bg-indigo-100 text-indigo-700 px-3 py-1 rounded-md text-sm hover:bg-indigo-200 transition">
<i class="fas fa-download mr-1"></i> Exporter
</button>
</div>
</div>
<div class="overflow-x-auto custom-scrollbar">
<table class="min-w-full divide-y divide-gray-200">
<thead class="bg-gray-50">
<tr>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
<input type="checkbox" class="rounded text-indigo-600">
</th>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Client</th>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Montant</th>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Date</th>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Statut</th>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Actions</th>
</tr>
</thead>
<tbody class="bg-white divide-y divide-gray-200">
<tr class="hover:bg-gray-50">
<td class="px-6 py-4 whitespace-nowrap">
<input type="checkbox" class="rounded text-indigo-600">
</td>
<td class="px-6 py-4 whitespace-nowrap">
<div class="flex items-center">
<div class="flex-shrink-0 h-10 w-10 rounded-full bg-indigo-100 flex items-center justify-center">
<span class="text-indigo-600 font-medium">AB</span>
</div>
<div class="ml-4">
<div class="text-sm font-medium text-gray-900">Alexandre Bernard</div>
<div class="text-sm text-gray-500">[email protected]</div>
</div>
</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<div class="text-sm text-gray-900">1,250.00 €</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<div class="text-sm text-gray-900">15/06/2023</div>
<div class="text-xs text-red-500">+7 jours</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-red-100 text-red-800">
En retard
</span>
</td>
<td class="px-6 py-4 whitespace-nowrap text-right text-sm font-medium">
<button class="text-indigo-600 hover:text-indigo-900 mr-3">
<i class="fas fa-eye"></i>
</button>
<button class="text-indigo-600 hover:text-indigo-900">
<i class="fas fa-pencil-alt"></i>
</button>
</td>
</tr>
<tr class="hover:bg-gray-50">
<td class="px-6 py-4 whitespace-nowrap">
<input type="checkbox" class="rounded text-indigo-600">
</td>
<td class="px-6 py-4 whitespace-nowrap">
<div class="flex items-center">
<div class="flex-shrink-0 h-10 w-10 rounded-full bg-green-100 flex items-center justify-center">
<span class="text-green-600 font-medium">CD</span>
</div>
<div class="ml-4">
<div class="text-sm font-medium text-gray-900">Claire Dubois</div>
<div class="text-sm text-gray-500">[email protected]</div>
</div>
</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<div class="text-sm text-gray-900">3,420.50 €</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<div class="text-sm text-gray-900">20/06/2023</div>
<div class="text-xs text-yellow-500">Aujourd'hui</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-yellow-100 text-yellow-800">
À échéance
</span>
</td>
<td class="px-6 py-4 whitespace-nowrap text-right text-sm font-medium">
<button class="text-indigo-600 hover:text-indigo-900 mr-3">
<i class="fas fa-eye"></i>
</button>
<button class="text-indigo-600 hover:text-indigo-900">
<i class="fas fa-pencil-alt"></i>
</button>
</td>
</tr>
<tr class="hover:bg-gray-50">
<td class="px-6 py-4 whitespace-nowrap">
<input type="checkbox" class="rounded text-indigo-600">
</td>
<td class="px-6 py-4 whitespace-nowrap">
<div class="flex items-center">
<div class="flex-shrink-0 h-10 w-10 rounded-full bg-blue-100 flex items-center justify-center">
<span class="text-blue-600 font-medium">EM</span>
</div>
<div class="ml-4">
<div class="text-sm font-medium text-gray-900">Élodie Martin</div>
<div class="text-sm text-gray-500">[email protected]</div>
</div>
</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<div class="text-sm text-gray-900">850.00 €</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<div class="text-sm text-gray-900">25/06/2023</div>
<div class="text-xs text-gray-500">Dans 5 jours</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-blue-100 text-blue-800">
À venir
</span>
</td>
<td class="px-6 py-4 whitespace-nowrap text-right text-sm font-medium">
<button class="text-indigo-600 hover:text-indigo-900 mr-3">
<i class="fas fa-eye"></i>
</button>
<button class="text-indigo-600 hover:text-indigo-900">
<i class="fas fa-pencil-alt"></i>
</button>
</td>
</tr>
<tr class="hover:bg-gray-50">
<td class="px-6 py-4 whitespace-nowrap">
<input type="checkbox" class="rounded text-indigo-600">
</td>
<td class="px-6 py-4 whitespace-nowrap">
<div class="flex items-center">
<div class="flex-shrink-0 h-10 w-10 rounded-full bg-purple-100 flex items-center justify-center">
<span class="text-purple-600 font-medium">TP</span>
</div>
<div class="ml-4">
<div class="text-sm font-medium text-gray-900">Thomas Petit</div>
<div class="text-sm text-gray-500">[email protected]</div>
</div>
</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<div class="text-sm text-gray-900">2,150.00 €</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<div class="text-sm text-gray-900">10/06/2023</div>
<div class="text-xs text-green-500">Payé</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-green-100 text-green-800">
Réglé
</span>
</td>
<td class="px-6 py-4 whitespace-nowrap text-right text-sm font-medium">
<button class="text-indigo-600 hover:text-indigo-900 mr-3">
<i class="fas fa-eye"></i>
</button>
<button class="text-indigo-600 hover:text-indigo-900">
<i class="fas fa-pencil-alt"></i>
</button>
</td>
</tr>
</tbody>
</table>
</div>
<div class="flex items-center justify-between mt-6">
<div class="text-sm text-gray-500">
Affichage de <span class="font-medium">1</span> à <span class="font-medium">4</span> sur <span class="font-medium">12</span> clients
</div>
<div class="flex space-x-2">
<button class="px-3 py-1 border rounded-md text-sm bg-white text-gray-700 hover:bg-gray-50">
Précédent
</button>
<button class="px-3 py-1 border rounded-md text-sm bg-indigo-600 text-white hover:bg-indigo-700">
1
</button>
<button class="px-3 py-1 border rounded-md text-sm bg-white text-gray-700 hover:bg-gray-50">
2
</button>
<button class="px-3 py-1 border rounded-md text-sm bg-white text-gray-700 hover:bg-gray-50">
Suivant
</button>
</div>
</div>
</div>
</section>
</div>
<!-- Right Column -->
<div class="space-y-8">
<!-- Send Reminder -->
<section class="bg-white rounded-lg shadow-md p-6 fade-in">
<h2 class="text-xl font-semibold text-gray-800 mb-6">Envoyer une relance</h2>
<div class="space-y-4">
<div>
<label class="block text-sm font-medium text-gray-700 mb-1">Sélectionnez des clients</label>
<select multiple class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 h-32">
<option>Alexandre Bernard</option>
<option selected>Claire Dubois</option>
<option>Élodie Martin</option>
<option>Thomas Petit</option>
</select>
<p class="mt-1 text-xs text-gray-500">Maintenez Ctrl (Windows) ou Cmd (Mac) pour sélectionner plusieurs clients</p>
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-1">Modèle de relance</label>
<select class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500">
<option>Relance standard</option>
<option>Relance urgente</option>
<option>Relance amicale</option>
<option>Relance finale</option>
</select>
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-1">Personnaliser le message</label>
<textarea rows="4" class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500">Bonjour [Nom],
Nous vous rappelons que votre paiement de [Montant] était attendu pour le [Date].
Pourriez-vous nous faire parvenir votre règlement dans les plus brefs délais ?
Cordialement,
[Votre nom]</textarea>
</div>
<button id="sendReminderBtn" class="w-full bg-indigo-600 text-white py-3 px-4 rounded-md hover:bg-indigo-700 transition flex items-center justify-center pulse">
<i class="fas fa-paper-plane mr-2"></i> Envoyer la relance
</button>
</div>
</section>
<!-- Testimonials -->
<section class="bg-white rounded-lg shadow-md p-6 fade-in">
<h2 class="text-xl font-semibold text-gray-800 mb-6">Témoignages</h2>
<div class="space-y-6">
<div class="flex">
<div class="flex-shrink-0">
<div class="h-10 w-10 rounded-full bg-indigo-100 flex items-center justify-center">
<span class="text-indigo-600 font-medium">SL</span>
</div>
</div>
<div class="ml-4">
<div class="text-sm font-medium text-gray-900">Sophie Lambert</div>
<div class="text-xs text-gray-500">Comptable - Entreprise ABC</div>
<div class="mt-2 text-sm text-gray-700">
"RelanceZen a simplifié notre processus de relance. Nous gagnons plusieurs heures par semaine !"
</div>
<div class="mt-2 flex text-yellow-400">
<i class="fas fa-star"></i>
<i class="fas fa-star"></i>
<i class="fas fa-star"></i>
<i class="fas fa-star"></i>
<i class="fas fa-star"></i>
</div>
</div>
</div>
<div class="flex">
<div class="flex-shrink-0">
<div class="h-10 w-10 rounded-full bg-indigo-100 flex items-center justify-center">
<span class="text-indigo-600 font-medium">MB</span>
</div>
</div>
<div class="ml-4">
<div class="text-sm font-medium text-gray-900">Marc Bertrand</div>
<div class="text-xs text-gray-500">Freelance</div>
<div class="mt-2 text-sm text-gray-700">
"En tant qu'indépendant, les relances prenaient trop de temps. Maintenant c'est automatisé et professionnel."
</div>
<div class="mt-2 flex text-yellow-400">
<i class="fas fa-star"></i>
<i class="fas fa-star"></i>
<i class="fas fa-star"></i>
<i class="fas fa-star"></i>
<i class="fas fa-star-half-alt"></i>
</div>
</div>
</div>
</div>
<button class="mt-6 w-full bg-gray-100 text-indigo-600 py-2 px-4 rounded-md hover:bg-gray-200 transition">
<i class="fas fa-plus mr-2"></i> Ajouter un témoignage
</button>
</section>
<!-- Stats -->
<section class="bg-white rounded-lg shadow-md p-6 fade-in">
<h2 class="text-xl font-semibold text-gray-800 mb-6">Statistiques</h2>
<div class="grid grid-cols-2 gap-4">
<div class="bg-indigo-50 p-4 rounded-lg">
<div class="text-sm font-medium text-indigo-700">Clients en retard</div>
<div class="text-2xl font-bold text-indigo-900 mt-1">8</div>
<div class="text-xs text-indigo-500 mt-1">+2 cette semaine</div>
</div>
<div class="bg-green-50 p-4 rounded-lg">
<div class="text-sm font-medium text-green-700">Clients réglés</div>
<div class="text-2xl font-bold text-green-900 mt-1">24</div>
<div class="text-xs text-green-500 mt-1">+5 cette semaine</div>
</div>
<div class="bg-yellow-50 p-4 rounded-lg">
<div class="text-sm font-medium text-yellow-700">Relances envoyées</div>
<div class="text-2xl font-bold text-yellow-900 mt-1">32</div>
<div class="text-xs text-yellow-500 mt-1">+12 cette semaine</div>
</div>
<div class="bg-blue-50 p-4 rounded-lg">
<div class="text-sm font-medium text-blue-700">Montant récupéré</div>
<div class="text-2xl font-bold text-blue-900 mt-1">12,450€</div>
<div class="text-xs text-blue-500 mt-1">+3,200€ cette semaine</div>
</div>
</div>
</section>
</div>
</div>
</main>
<!-- Email Modal -->
<div id="emailModal" class="fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 hidden">
<div class="bg-white rounded-lg shadow-xl w-full max-w-2xl max-h-[90vh] overflow-y-auto">
<div class="p-6">
<div class="flex justify-between items-center mb-4">
<h3 class="text-lg font-semibold text-gray-900">Aperçu de l'email de relance</h3>
<button id="closeModal" class="text-gray-400 hover:text-gray-500">
<i class="fas fa-times"></i>
</button>
</div>
<div class="border border-gray-200 rounded-lg p-4 mb-4">
<div class="mb-4">
<span class="text-sm text-gray-500">De :</span>
<p>[email protected]</p>
</div>
<div class="mb-4">
<span class="text-sm text-gray-500">À :</span>
<p>[email protected]</p>
</div>
<div class="mb-4">
<span class="text-sm text-gray-500">Objet :</span>
<p>Relance de paiement - Facture #12345</p>
</div>
<div class="border-t border-gray-200 pt-4">
<p>Bonjour Claire Dubois,</p>
<p class="mt-2">Nous vous rappelons que votre paiement de 3,420.50 € était attendu pour le 20/06/2023.</p>
<p class="mt-2">Pourriez-vous nous faire parvenir votre règlement dans les plus brefs délais ?</p>
<p class="mt-4">Cordialement,<br>[Votre nom]</p>
</div>
</div>
<div class="flex justify-end space-x-3">
<button id="cancelSend" class="px-4 py-2 border border-gray-300 rounded-md text-sm font-medium text-gray-700 hover:bg-gray-50">
Annuler
</button>
<button id="confirmSend" class="px-4 py-2 bg-indigo-600 rounded-md text-sm font-medium text-white hover:bg-indigo-700">
<i class="fas fa-paper-plane mr-2"></i> Confirmer l'envoi
</button>
</div>
</div>
</div>
</div>
<!-- Success Toast -->
<div id="successToast" class="fixed bottom-4 right-4 bg-green-500 text-white px-6 py-3 rounded-lg shadow-lg flex items-center space-x-3 hidden">
<i class="fas fa-check-circle text-xl"></i>
<div>
<p class="font-medium">Relance envoyée avec succès !</p>
<p class="text-sm">L'email a été envoyé à 1 client.</p>
</div>
<button id="closeToast" class="text-white hover:text-green-100 ml-4">
<i class="fas fa-times"></i>
</button>
</div>
<!-- Footer -->
<footer class="bg-gray-100 border-t border-gray-200 py-6">
<div class="container mx-auto px-4">
<div class="flex flex-col md:flex-row justify-between items-center">
<div class="flex items-center space-x-3 mb-4 md:mb-0">
<i class="fas fa-bell text-indigo-600"></i>
<span class="font-medium">RelanceZen</span>
</div>
<div class="text-sm text-gray-500">
© 2023 RelanceZen. Tous droits réservés.
</div>
<div class="flex space-x-4 mt-4 md:mt-0">
<a href="#" class="text-gray-500 hover:text-gray-700">
<i class="fab fa-twitter"></i>
</a>
<a href="#" class="text-gray-500 hover:text-gray-700">
<i class="fab fa-linkedin"></i>
</a>
<a href="#" class="text-gray-500 hover:text-gray-700">
<i class="fab fa-facebook"></i>
</a>
</div>
</div>
</div>
</footer>
</div>
<script>
// Toggle help text
document.getElementById('helpBtn').addEventListener('click', function() {
const helpText = document.getElementById('helpText');
helpText.classList.toggle('hidden');
});
// File upload simulation
document.getElementById('fileUpload').addEventListener('change', function(e) {
if (e.target.files.length > 0) {
const fileName = e.target.files[0].name;
document.getElementById('fileName').textContent = fileName;
document.getElementById('fileInfo').classList.remove('hidden');
}
});
// Remove file
document.getElementById('removeFile').addEventListener('click', function() {
document.getElementById('fileInfo').classList.add('hidden');
document.getElementById('fileUpload').value = '';
});
// Send reminder button
document.getElementById('sendReminderBtn').addEventListener('click', function() {
document.getElementById('emailModal').classList.remove('hidden');
});
// Close modal
document.getElementById('closeModal').addEventListener('click', function() {
document.getElementById('emailModal').classList.add('hidden');
});
// Cancel send
document.getElementById('cancelSend').addEventListener('click', function() {
document.getElementById('emailModal').classList.add('hidden');
});
// Confirm send
document.getElementById('confirmSend').addEventListener('click', function() {
document.getElementById('emailModal').classList.add('hidden');
// Show success toast
const toast = document.getElementById('successToast');
toast.classList.remove('hidden');
// Hide toast after 5 seconds
setTimeout(() => {
toast.classList.add('hidden');
}, 5000);
});
// Close toast
document.getElementById('closeToast').addEventListener('click', function() {
document.getElementById('successToast').classList.add('hidden');
});
</script>
<p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=LudoSLN/relancezen" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
</html>