| <!DOCTYPE html> |
| <html lang="fr"> |
| <head> |
| <meta charset="UTF-8"> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| <title>Gestion Clients - Système Entreprise</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"> |
| <script> |
| tailwind.config = { |
| theme: { |
| extend: { |
| colors: { |
| primary: '#2563eb', |
| secondary: '#64748b', |
| accent: '#f59e0b', |
| } |
| } |
| } |
| } |
| </script> |
| <style> |
| .sidebar { |
| transition: all 0.3s ease; |
| } |
| @media (max-width: 768px) { |
| .sidebar { |
| transform: translateX(-100%); |
| position: fixed; |
| z-index: 50; |
| height: 100vh; |
| } |
| .sidebar.open { |
| transform: translateX(0); |
| } |
| } |
| .chart-container { |
| position: relative; |
| height: 300px; |
| } |
| </style> |
| </head> |
| <body class="bg-gray-50 font-sans"> |
| |
| <div class="fixed top-0 left-0 right-0 bg-white shadow-md p-4 flex justify-between items-center md:hidden z-50"> |
| <h1 class="text-xl font-bold text-primary">ClientManager</h1> |
| <button id="mobile-menu-button" class="text-gray-600"> |
| <i class="fas fa-bars text-xl"></i> |
| </button> |
| </div> |
|
|
| <div class="flex"> |
| |
| <div class="sidebar bg-white w-64 min-h-screen shadow-md fixed md:relative"> |
| <div class="p-5 border-b"> |
| <h1 class="text-2xl font-bold text-primary hidden md:block">ClientManager</h1> |
| </div> |
| <nav class="mt-6"> |
| <div class="px-4 py-2 text-secondary uppercase text-xs font-semibold">Navigation</div> |
| <a href="#" class="flex items-center px-6 py-3 text-primary bg-blue-50 border-r-4 border-primary"> |
| <i class="fas fa-home mr-3"></i> |
| Tableau de bord |
| </a> |
| <a href="#" class="flex items-center px-6 py-3 text-gray-600 hover:bg-gray-100"> |
| <i class="fas fa-users mr-3"></i> |
| Clients |
| </a> |
| <a href="#" class="flex items-center px-6 py-3 text-gray-600 hover:bg-gray-100"> |
| <i class="fas fa-database mr-3"></i> |
| Base de données |
| </a> |
| <a href="#" class="flex items-center px-6 py-3 text-gray-600 hover:bg-gray-100"> |
| <i class="fas fa-chart-bar mr-3"></i> |
| Rapports |
| </a> |
| <a href="#" class="flex items-center px-6 py-3 text-gray-600 hover:bg-gray-100"> |
| <i class="fas fa-cog mr-3"></i> |
| Paramètres |
| </a> |
| </nav> |
| <div class="absolute bottom-0 w-full p-4 border-t"> |
| <div class="flex items-center"> |
| <div class="w-10 h-10 rounded-full bg-primary flex items-center justify-center text-white"> |
| <i class="fas fa-user"></i> |
| </div> |
| <div class="ml-3"> |
| <p class="text-sm font-semibold">Admin</p> |
| <p class="text-xs text-gray-500">Administrateur</p> |
| </div> |
| </div> |
| </div> |
| </div> |
|
|
| |
| <div class="flex-1 md:ml-0"> |
| <div class="p-6 md:p-8"> |
| <div class="mb-6"> |
| <h2 class="text-2xl font-bold text-gray-800">Tableau de bord</h2> |
| <p class="text-gray-600">Vue d'ensemble de votre gestion client</p> |
| </div> |
|
|
| |
| <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8"> |
| <div class="bg-white rounded-lg shadow p-6"> |
| <div class="flex items-center"> |
| <div class="p-3 rounded-full bg-blue-100 text-primary"> |
| <i class="fas fa-users text-xl"></i> |
| </div> |
| <div class="ml-4"> |
| <p class="text-gray-600">Clients totaux</p> |
| <h3 class="text-2xl font-bold">248</h3> |
| </div> |
| </div> |
| <div class="mt-4"> |
| <p class="text-green-500 text-sm"><i class="fas fa-arrow-up"></i> 12% depuis le mois dernier</p> |
| </div> |
| </div> |
|
|
| <div class="bg-white rounded-lg shadow p-6"> |
| <div class="flex items-center"> |
| <div class="p-3 rounded-full bg-green-100 text-green-500"> |
| <i class="fas fa-database text-xl"></i> |
| </div> |
| <div class="ml-4"> |
| <p class="text-gray-600">Enregistrements</p> |
| <h3 class="text-2xl font-bold">5,248</h3> |
| </div> |
| </div> |
| <div class="mt-4"> |
| <p class="text-green-500 text-sm"><i class="fas fa-arrow-up"></i> 8% depuis le mois dernier</p> |
| </div> |
| </div> |
|
|
| <div class="bg-white rounded-lg shadow p-6"> |
| <div class="flex items-center"> |
| <div class="p-3 rounded-full bg-orange-100 text-accent"> |
| <i class="fas fa-chart-pie text-xl"></i> |
| </div> |
| <div class="ml-4"> |
| <p class="text-gray-600">Rapports générés</p> |
| <h3 class="text-2xl font-bold">42</h3> |
| </div> |
| </div> |
| <div class="mt-4"> |
| <p class="text-green-500 text-sm"><i class="fas fa-arrow-up"></i> 5% depuis le mois dernier</p> |
| </div> |
| </div> |
|
|
| <div class="bg-white rounded-lg shadow p-6"> |
| <div class="flex items-center"> |
| <div class="p-3 rounded-full bg-purple-100 text-purple-500"> |
| <i class="fas fa-tasks text-xl"></i> |
| </div> |
| <div class="ml-4"> |
| <p class="text-gray-600">Tâches en cours</p> |
| <h3 class="text-2xl font-bold">18</h3> |
| </div> |
| </div> |
| <div class="mt-4"> |
| <p class="text-red-500 text-sm"><i class="fas fa-arrow-down"></i> 2% depuis le mois dernier</p> |
| </div> |
| </div> |
| </div> |
|
|
| |
| <div class="grid grid-cols-1 lg:grid-cols-3 gap-6 mb-8"> |
| <div class="lg:col-span-2 bg-white rounded-lg shadow p-6"> |
| <h3 class="text-lg font-semibold mb-4">Évolution des clients</h3> |
| <div class="chart-container"> |
| <canvas id="clientChart"></canvas> |
| </div> |
| </div> |
|
|
| <div class="bg-white rounded-lg shadow p-6"> |
| <h3 class="text-lg font-semibold mb-4">Activité récente</h3> |
| <div class="space-y-4"> |
| <div class="flex items-start"> |
| <div class="p-2 rounded-full bg-blue-100 text-primary mt-1"> |
| <i class="fas fa-user-plus"></i> |
| </div> |
| <div class="ml-3"> |
| <p class="font-medium">Nouveau client ajouté</p> |
| <p class="text-sm text-gray-500">Société ABC • Il y a 10 min</p> |
| </div> |
| </div> |
| <div class="flex items-start"> |
| <div class="p-2 rounded-full bg-green-100 text-green-500 mt-1"> |
| <i class="fas fa-file-export"></i> |
| </div> |
| <div class="ml-3"> |
| <p class="font-medium">Rapport exporté</p> |
| <p class="text-sm text-gray-500">Rapport mensuel • Il y a 2 h</p> |
| </div> |
| </div> |
| <div class="flex items-start"> |
| <div class="p-2 rounded-full bg-purple-100 text-purple-500 mt-1"> |
| <i class="fas fa-database"></i> |
| </div> |
| <div class="ml-3"> |
| <p class="font-medium">Base de données mise à jour</p> |
| <p class="text-sm text-gray-500">Sauvegarde effectuée • Il y a 5 h</p> |
| </div> |
| </div> |
| <div class="flex items-start"> |
| <div class="p-2 rounded-full bg-yellow-100 text-yellow-500 mt-1"> |
| <i class="fas fa-bell"></i> |
| </div> |
| <div class="ml-3"> |
| <p class="font-medium">Notification système</p> |
| <p class="text-sm text-gray-500">Mise à jour disponible • Hier</p> |
| </div> |
| </div> |
| </div> |
| </div> |
| </div> |
|
|
| |
| <div class="bg-white rounded-lg shadow overflow-hidden"> |
| <div class="px-6 py-4 border-b flex justify-between items-center"> |
| <h3 class="text-lg font-semibold">Clients récents</h3> |
| <button class="bg-primary text-white px-4 py-2 rounded-lg text-sm">Nouveau client</button> |
| </div> |
| <div class="overflow-x-auto"> |
| <table class="min-w-full divide-y divide-gray-200"> |
| <thead class="bg-gray-50"> |
| <tr> |
| <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Client</th> |
| <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Email</th> |
| <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Téléphone</th> |
| <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Statut</th> |
| <th 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> |
| <td class="px-6 py-4 whitespace-nowrap"> |
| <div class="flex items-center"> |
| <div class="h-10 w-10 flex-shrink-0 bg-blue-100 rounded-full flex items-center justify-center text-blue-600"> |
| <i class="fas fa-building"></i> |
| </div> |
| <div class="ml-4"> |
| <div class="font-medium text-gray-900">Entreprise ABC</div> |
| <div class="text-gray-500">Technologie</div> |
| </div> |
| </div> |
| </td> |
| <td class="px-6 py-4 whitespace-nowrap">contact@abc.com</td> |
| <td class="px-6 py-4 whitespace-nowrap">+33 1 23 45 67 89</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">Actif</span> |
| </td> |
| <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500"> |
| <button class="text-blue-600 hover:text-blue-900 mr-3"><i class="fas fa-edit"></i></button> |
| <button class="text-red-600 hover:text-red-900"><i class="fas fa-trash"></i></button> |
| </td> |
| </tr> |
| <tr> |
| <td class="px-6 py-4 whitespace-nowrap"> |
| <div class="flex items-center"> |
| <div class="h-10 w-10 flex-shrink-0 bg-green-100 rounded-full flex items-center justify-center text-green-600"> |
| <i class="fas fa-store"></i> |
| </div> |
| <div class="ml-4"> |
| <div class="font-medium text-gray-900">Société XYZ</div> |
| <div class="text-gray-500">Commerce</div> |
| </div> |
| </div> |
| </td> |
| <td class="px-6 py-4 whitespace-nowrap">info@xyz.fr</td> |
| <td class="px-6 py-4 whitespace-nowrap">+33 1 98 76 54 32</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">Actif</span> |
| </td> |
| <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500"> |
| <button class="text-blue-600 hover:text-blue-900 mr-3"><i class="fas fa-edit"></i></button> |
| <button class="text-red-600 hover:text-red-900"><i class="fas fa-trash"></i></button> |
| </td> |
| </tr> |
| <tr> |
| <td class="px-6 py-4 whitespace-nowrap"> |
| <div class="flex items-center"> |
| <div class="h-10 w-10 flex-shrink-0 bg-yellow-100 rounded-full flex items-center justify-center text-yellow-600"> |
| <i class="fas fa-industry"></i> |
| </div> |
| <div class="ml-4"> |
| <div class="font-medium text-gray-900">Manufacturing Inc</div> |
| <div class="text-gray-500">Production</div> |
| </div> |
| </div> |
| </td> |
| <td class="px-6 py-4 whitespace-nowrap">contact@manufacturing.com</td> |
| <td class="px-6 py-4 whitespace-nowrap">+33 1 45 67 89 10</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">En attente</span> |
| </td> |
| <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500"> |
| <button class="text-blue-600 hover:text-blue-900 mr-3"><i class="fas fa-edit"></i></button> |
| <button class="text-red-600 hover:text-red-900"><i class="fas fa-trash"></i></button> |
| </td> |
| </tr> |
| </tbody> |
| </table> |
| </div> |
| </div> |
| </div> |
| </div> |
| </div> |
|
|
| <script> |
| |
| document.getElementById('mobile-menu-button').addEventListener('click', function() { |
| document.querySelector('.sidebar').classList.toggle('open'); |
| }); |
| |
| |
| document.addEventListener('DOMContentLoaded', function() { |
| const canvas = document.getElementById('clientChart'); |
| const ctx = canvas.getContext('2d'); |
| |
| |
| canvas.width = canvas.parentElement.offsetWidth; |
| canvas.height = canvas.parentElement.offsetHeight; |
| |
| |
| ctx.beginPath(); |
| ctx.moveTo(50, 250); |
| ctx.lineTo(100, 200); |
| ctx.lineTo(150, 220); |
| ctx.lineTo(200, 150); |
| ctx.lineTo(250, 180); |
| ctx.lineTo(300, 120); |
| ctx.lineTo(350, 160); |
| ctx.strokeStyle = '#2563eb'; |
| ctx.lineWidth = 3; |
| ctx.stroke(); |
| |
| |
| const points = [[50, 250], [100, 200], [150, 220], [200, 150], [250, 180], [300, 120], [350, 160]]; |
| points.forEach(point => { |
| ctx.beginPath(); |
| ctx.arc(point[0], point[1], 5, 0, 2 * Math.PI); |
| ctx.fillStyle = '#2563eb'; |
| ctx.fill(); |
| }); |
| |
| |
| ctx.fillStyle = '#64748b'; |
| ctx.font = '12px sans-serif'; |
| ctx.fillText('Jan', 45, 270); |
| ctx.fillText('Fév', 95, 270); |
| ctx.fillText('Mar', 145, 270); |
| ctx.fillText('Avr', 195, 270); |
| ctx.fillText('Mai', 245, 270); |
| ctx.fillText('Juin', 295, 270); |
| ctx.fillText('Juil', 345, 270); |
| |
| ctx.textAlign = 'right'; |
| ctx.fillText('250', 40, 255); |
| ctx.fillText('200', 40, 205); |
| ctx.fillText('150', 40, 155); |
| ctx.fillText('100', 40, 105); |
| ctx.fillText('50', 40, 55); |
| |
| |
| ctx.strokeStyle = '#e2e8f0'; |
| ctx.lineWidth = 1; |
| |
| |
| for (let i = 0; i < 5; i++) { |
| ctx.beginPath(); |
| ctx.moveTo(50, 50 + i * 50); |
| ctx.lineTo(350, 50 + i * 50); |
| ctx.stroke(); |
| } |
| |
| |
| for (let i = 0; i < 7; i++) { |
| ctx.beginPath(); |
| ctx.moveTo(50 + i * 50, 50); |
| ctx.lineTo(50 + i * 50, 250); |
| ctx.stroke(); |
| } |
| }); |
| </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=Abdou2003/abdou" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body> |
| </html> |