L'admin mélangeait pipeline legacy et récent (onglet "Queue" pointait vers geocode_queue mort → erreur "Cannot read properties of undefined (reading 'reduce')"), dispersait les logs (Monitor/Historique/Jobs) et les actions (Géocodage/Jobs/Checkpoints) sur des onglets séparés sans lien entre eux. Nouvelle nav (5 onglets) : - Vue d'ensemble : stats bands + genre/pays (ex-Dashboard) + cartes live auto-refresh 15s (crawl en cours, géocodage, jobs en attente, file d'enrichissement) — fusion Dashboard+Monitor+Queue. - Groupes : liste bands inchangée + filtre "Conflits seulement" (nouveau has_conflict sur GET /admin/api/bands) ; le modal band affiche maintenant une section "Conflits en attente" resolvable inline (garder ma valeur / accepter Metal Archives) — remplace l'onglet Conflits séparé. - Activité : liste chronologique unique (GET /admin/api/activity, fusion crawl_run tous types + admin_audit_log), cliquable → dialog avec logs complets du run (GET /admin/api/logs?run_id=) ou diff avant/après pour une action admin. Remplace Crawl runs + Historique + Audit + la liste de jobs de l'ex-onglet Jobs. - Actions : toutes les commandes (crawl, géocodage, maintenance) sur une seule page, groupées, chaque bouton vérifié contre son endpoint réel + checkpoints en lecture seule. Remplace Jobs + les boutons de Géocodage. - LLM : inchangé. Backend - endpoints morts supprimés (audit-log, conflicts liste, crawl-runs liste — tous remplacés par /admin/api/activity ou le filtre has_conflict) ; vérifié 1:1 qu'aucun appel front ne pointe vers un endpoint disparu et qu'aucun endpoint restant n'est orphelin. - GET /admin/api/bands : nouveau filtre has_conflict. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
50 lines
1.7 KiB
HTML
50 lines
1.7 KiB
HTML
<!doctype html>
|
|
<html lang="fr">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<meta name="robots" content="noindex, nofollow">
|
|
<title>Admin — metalfrom.eu</title>
|
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
<link href="https://fonts.googleapis.com/css2?family=UnifrakturCook:wght@700&family=Inter:wght@400;600;700;800&display=swap" rel="stylesheet">
|
|
<link rel="stylesheet" href="styles.css">
|
|
</head>
|
|
<body>
|
|
|
|
<div id="login-screen" class="login-screen">
|
|
<form id="login-form" class="login-card">
|
|
<div class="brand">Admin</div>
|
|
<p class="login-sub">metalfrom.eu — accès restreint</p>
|
|
<label>Utilisateur
|
|
<input type="text" id="login-username" autocomplete="username" required>
|
|
</label>
|
|
<label>Mot de passe
|
|
<input type="password" id="login-password" autocomplete="current-password" required>
|
|
</label>
|
|
<button type="submit" class="btn btn-primary">Se connecter</button>
|
|
<div id="login-error" class="login-error"></div>
|
|
</form>
|
|
</div>
|
|
|
|
<div id="app" class="app hidden">
|
|
<header id="topbar">
|
|
<div class="brand">Admin</div>
|
|
<nav id="nav" class="nav">
|
|
<a href="#/dashboard" data-view="dashboard">Vue d'ensemble</a>
|
|
<a href="#/bands" data-view="bands">Groupes</a>
|
|
<a href="#/activity" data-view="activity">Activité</a>
|
|
<a href="#/actions" data-view="actions">Actions</a>
|
|
<a href="#/llm" data-view="llm">LLM</a>
|
|
</nav>
|
|
<div class="topbar-right">
|
|
<span id="whoami" class="whoami"></span>
|
|
<button id="logout-btn" class="btn btn-mini">Déconnexion</button>
|
|
</div>
|
|
</header>
|
|
|
|
<main id="content" class="content"></main>
|
|
</div>
|
|
|
|
<script src="app.js"></script>
|
|
</body>
|
|
</html>
|