Checkpoint: Nouvelle navigation hiérarchique avec 4 menus principaux (Itinova, Santinova, Soins et Santé, St Exupéry), sous-menus dépliables (Établissements, DSI), sidebar partagée AppSidebar sur toutes les pages, et pages placeholder pour les sections à venir.

This commit is contained in:
Manus
2026-06-02 20:50:23 +00:00
parent 73475b697d
commit 751ac207c0
12 changed files with 421 additions and 210 deletions

View File

@@ -7,8 +7,6 @@ import { useState, useMemo, useEffect } from 'react';
import { useLocation } from 'wouter';
import {
Building2,
BarChart3,
Settings,
ChevronDown,
Monitor,
PlusCircle,
@@ -26,6 +24,7 @@ import {
TrendingUp,
AlertCircle,
} from 'lucide-react';
import { AppSidebar } from '../components/AppSidebar';
import bp2027Raw from '../data_bp2027.json';
import budgetRaw from '../data_budget.json';
import { useParametres } from '../contexts/ParametresContext';
@@ -257,50 +256,7 @@ export default function Budget2027() {
return (
<div className="min-h-screen flex bg-background">
{/* Sidebar */}
<aside className="w-64 flex-shrink-0 bg-[oklch(0.22_0.06_240)] text-white flex flex-col" style={{ minHeight: '100vh' }}>
<div className="px-4 py-5 border-b border-white/10">
<div className="flex items-center gap-3">
<div className="w-8 h-8 rounded-lg bg-primary flex items-center justify-center flex-shrink-0">
<BarChart3 className="w-4 h-4 text-white" />
</div>
<div className="min-w-0">
<p className="font-bold text-sm leading-tight" style={{ fontFamily: 'Sora, sans-serif' }}>Budget SI 2027</p>
<p className="text-[10px] text-white/50 mt-0.5">Itinova Renouvellement</p>
</div>
</div>
</div>
<nav className="flex-1 px-3 py-4 space-y-1">
<button onClick={() => navigate('/')} className="w-full flex items-center gap-3 px-3 py-2.5 rounded-lg text-white/60 hover:bg-white/10 hover:text-white transition-colors">
<Building2 className="w-4 h-4 flex-shrink-0" />
<span className="text-sm font-medium">Renouvellement PC</span>
</button>
<div className="flex items-center gap-3 px-3 py-2.5 rounded-lg bg-white/10 text-white">
<FileText className="w-4 h-4 flex-shrink-0" />
<span className="text-sm font-medium">Construction BP 2027</span>
</div>
<button onClick={() => navigate('/parametres')} className="w-full flex items-center gap-3 px-3 py-2.5 rounded-lg text-white/60 hover:bg-white/10 hover:text-white transition-colors">
<Settings className="w-4 h-4 flex-shrink-0" />
<span className="text-sm font-medium">Paramètres</span>
</button>
</nav>
{/* Stats saisies */}
<div className="px-4 py-4 border-t border-white/10">
<p className="text-[10px] text-white/40 uppercase tracking-wider mb-2">Saisies enregistrées</p>
<div className="flex items-center gap-2">
<div className="flex-1 bg-white/10 rounded-full h-1.5">
<div
className="bg-emerald-400 h-1.5 rounded-full transition-all"
style={{ width: `${Math.min(100, (nbSaisies / bp2027Data.etablissements.length) * 100)}%` }}
/>
</div>
<span className="text-xs text-white font-medium">{nbSaisies}/{bp2027Data.etablissements.length}</span>
</div>
<p className="text-[10px] text-white/40 mt-1">établissements renseignés</p>
</div>
</aside>
<AppSidebar />
{/* Contenu principal */}
<main className="flex-1 flex flex-col min-w-0 overflow-hidden">