Files
planning2ics/webapp/static/index.html
T
sylvain d4067e9105 Ajout de la webapp Docker (FastAPI + HTML/JS vanilla)
- 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>
2026-03-08 13:08:18 +01:00

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 &#8594; 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">&#9835;</div>
<h1>Planning &#8594; ICS</h1>
<p class="subtitle">Op&#233;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">&#9835;</span>
<span class="header-title">Planning &#8594; ICS</span>
</div>
<div class="header-right">
<span id="header-user"></span>
<button id="btn-logout" class="btn btn-ghost-white">D&#233;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">&#128196;</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&#8230;</h2>
<div class="progress-bar"><div id="progress-fill" class="progress-fill"></div></div>
<div id="progress-log" class="progress-log"></div>
</section>
<!-- R&#233;sultats -->
<section id="section-results" class="card hidden">
<div class="section-header">
<h2>S&#233;ries g&#233;n&#233;r&#233;es</h2>
<button id="btn-dl-all" class="btn btn-secondary btn-sm">T&#233;l&#233;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&#233;c&#233;dent</p></div>
</section>
<!-- Param&#232;tres -->
<section class="card">
<h2>Param&#232;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">&#8212;</div>
</div>
<div class="setting-item">
<div class="setting-label">Mod&#232;le clustering</div>
<div id="cfg-cluster-model" class="setting-value">&#8212;</div>
</div>
<div class="setting-item">
<div class="setting-label">Cache site web</div>
<div id="cache-website" class="setting-value">&#8212;</div>
</div>
<div class="setting-item">
<div class="setting-label">Cache s&#233;ries LLM</div>
<div id="cache-series" class="setting-value">&#8212;</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>