Files
btpxpress-frontend/app/(main)/admin/page.tsx
dahoud a8825a058b Fix: Corriger toutes les erreurs de build du frontend
- Correction des erreurs TypeScript dans userService.ts et workflowTester.ts
- Ajout des propriétés manquantes aux objets User mockés
- Conversion des dates de string vers objets Date
- Correction des appels asynchrones et des types incompatibles
- Ajout de dynamic rendering pour résoudre les erreurs useSearchParams
- Enveloppement de useSearchParams dans Suspense boundary
- Configuration de force-dynamic au niveau du layout principal

Build réussi: 126 pages générées avec succès

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-18 13:23:08 +00:00

115 lines
4.0 KiB
TypeScript

'use client';
export const dynamic = 'force-dynamic';
import React from 'react';
import { Card } from 'primereact/card';
import { Button } from 'primereact/button';
import { useRouter } from 'next/navigation';
import RoleProtectedPage from '@/components/RoleProtectedPage';
const AdminDashboardContent = () => {
const router = useRouter();
const adminModules = [
{
title: 'Gestion des utilisateurs',
description: 'Créer, modifier et gérer les comptes utilisateurs',
icon: 'pi pi-users',
path: '/admin/utilisateurs',
color: 'bg-blue-500'
},
{
title: 'Gestion des rôles',
description: 'Configurer les rôles et permissions',
icon: 'pi pi-shield',
path: '/admin/roles',
color: 'bg-green-500'
},
{
title: 'Demandes d\'accès',
description: 'Traiter les demandes d\'accès en attente',
icon: 'pi pi-key',
path: '/admin/demandes-acces',
color: 'bg-orange-500'
},
{
title: 'Attributions',
description: 'Gérer les attributions de projets et équipes',
icon: 'pi pi-sitemap',
path: '/admin/attributions',
color: 'bg-purple-500'
},
{
title: 'Paramètres système',
description: 'Configuration générale de l\'application',
icon: 'pi pi-cog',
path: '/admin/parametres',
color: 'bg-gray-500'
},
{
title: 'Sauvegarde',
description: 'Gestion des sauvegardes et restaurations',
icon: 'pi pi-database',
path: '/admin/sauvegarde',
color: 'bg-red-500'
}
];
return (
<div className="grid">
<div className="col-12">
<div className="card">
<h1 className="text-3xl font-bold text-900 mb-3">
<i className="pi pi-shield mr-3 text-primary"></i>
Administration
</h1>
<p className="text-600 text-lg mb-5">
Panneau d'administration pour la gestion complète de l'application BTPXpress
</p>
</div>
</div>
{adminModules.map((module, index) => (
<div key={index} className="col-12 md:col-6 lg:col-4">
<Card className="h-full">
<div className="text-center">
<div
className={`${module.color} text-white border-round inline-flex align-items-center justify-content-center mb-3`}
style={{ width: '60px', height: '60px' }}
>
<i className={`${module.icon} text-2xl`}></i>
</div>
<h3 className="text-xl font-semibold text-900 mb-2">
{module.title}
</h3>
<p className="text-600 mb-4 line-height-3">
{module.description}
</p>
<Button
label="Accéder"
icon="pi pi-arrow-right"
onClick={() => router.push(module.path)}
className="w-full"
/>
</div>
</Card>
</div>
))}
</div>
);
};
const AdminDashboard = () => {
return (
<RoleProtectedPage
requiredPage="ADMIN"
fallbackMessage="Seuls les administrateurs peuvent accéder à cette section."
>
<AdminDashboardContent />
</RoleProtectedPage>
);
};
export default AdminDashboard;