d4067e9105
- Backend FastAPI avec auth par cookie (users dans config.json) - Upload PDF drag & drop, progression en temps réel (SSE) - Identification des séries via Ollama (config URL dans config.json) - Téléchargement ICS par série + historique des traitements - Bouton vider le cache (site web + mapping LLM) - Docker Swarm ready (docker-compose.yml + Dockerfile) - Compatible iOS/Android/PC (responsive mobile-first) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
119 lines
4.3 KiB
HTML
119 lines
4.3 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="fr">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Planning → ICS</title>
|
|
<link rel="stylesheet" href="/static/style.css">
|
|
</head>
|
|
<body>
|
|
|
|
<!-- ── Page Login ─────────────────────────────────────────── -->
|
|
<div id="page-login" class="page">
|
|
<div class="login-card">
|
|
<div class="login-logo">♫</div>
|
|
<h1>Planning → ICS</h1>
|
|
<p class="subtitle">Opéra Orchestre National Montpellier</p>
|
|
<form id="form-login">
|
|
<div class="field">
|
|
<label for="username">Utilisateur</label>
|
|
<input type="text" id="username" autocomplete="username" required>
|
|
</div>
|
|
<div class="field">
|
|
<label for="password">Mot de passe</label>
|
|
<input type="password" id="password" autocomplete="current-password" required>
|
|
</div>
|
|
<div id="login-error" class="error-msg hidden"></div>
|
|
<button type="submit" class="btn btn-primary btn-full">Se connecter</button>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- ── Page App ───────────────────────────────────────────── -->
|
|
<div id="page-app" class="page hidden">
|
|
|
|
<header>
|
|
<div class="header-left">
|
|
<span class="header-icon">♫</span>
|
|
<span class="header-title">Planning → ICS</span>
|
|
</div>
|
|
<div class="header-right">
|
|
<span id="header-user"></span>
|
|
<button id="btn-logout" class="btn btn-ghost-white">Déconnexion</button>
|
|
</div>
|
|
</header>
|
|
|
|
<main>
|
|
|
|
<!-- Upload -->
|
|
<section class="card">
|
|
<h2>Importer des plannings PDF</h2>
|
|
<div id="drop-zone" class="drop-zone">
|
|
<div class="drop-content">
|
|
<div class="drop-icon">📄</div>
|
|
<p>Glissez vos PDFs ici</p>
|
|
<p class="drop-hint">ou</p>
|
|
<label for="file-input" class="btn btn-secondary">Choisir des fichiers</label>
|
|
<input type="file" id="file-input" accept=".pdf" multiple hidden>
|
|
</div>
|
|
</div>
|
|
<div id="file-list" class="file-list hidden"></div>
|
|
<div id="upload-actions" class="upload-actions hidden">
|
|
<button id="btn-process" class="btn btn-primary">Convertir en ICS</button>
|
|
<button id="btn-clear-files" class="btn btn-ghost">Effacer</button>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- Progression -->
|
|
<section id="section-progress" class="card hidden">
|
|
<h2>Traitement en cours…</h2>
|
|
<div class="progress-bar"><div id="progress-fill" class="progress-fill"></div></div>
|
|
<div id="progress-log" class="progress-log"></div>
|
|
</section>
|
|
|
|
<!-- Résultats -->
|
|
<section id="section-results" class="card hidden">
|
|
<div class="section-header">
|
|
<h2>Séries générées</h2>
|
|
<button id="btn-dl-all" class="btn btn-secondary btn-sm">Télécharger tout</button>
|
|
</div>
|
|
<div id="series-grid" class="series-grid"></div>
|
|
</section>
|
|
|
|
<!-- Historique -->
|
|
<section class="card">
|
|
<h2>Historique</h2>
|
|
<div id="history-list"><p class="empty-msg">Aucun traitement précédent</p></div>
|
|
</section>
|
|
|
|
<!-- Paramètres -->
|
|
<section class="card">
|
|
<h2>Paramètres</h2>
|
|
<div class="settings-grid">
|
|
<div class="setting-item">
|
|
<div class="setting-label">Serveur Ollama</div>
|
|
<div id="cfg-ollama-url" class="setting-value">—</div>
|
|
</div>
|
|
<div class="setting-item">
|
|
<div class="setting-label">Modèle clustering</div>
|
|
<div id="cfg-cluster-model" class="setting-value">—</div>
|
|
</div>
|
|
<div class="setting-item">
|
|
<div class="setting-label">Cache site web</div>
|
|
<div id="cache-website" class="setting-value">—</div>
|
|
</div>
|
|
<div class="setting-item">
|
|
<div class="setting-label">Cache séries LLM</div>
|
|
<div id="cache-series" class="setting-value">—</div>
|
|
</div>
|
|
</div>
|
|
<button id="btn-clear-cache" class="btn btn-danger">Vider le cache</button>
|
|
</section>
|
|
|
|
</main>
|
|
</div>
|
|
|
|
<script src="/static/app.js"></script>
|
|
</body>
|
|
</html>
|