Full-stack app for participatory water pricing using Bezier curves. - Backend: FastAPI + SQLAlchemy + SQLite with JWT auth - Frontend: Nuxt 4 + TypeScript with interactive SVG editor - Math engine: cubic Bezier tarification with Cardano solver - Admin: commune management, household import, vote monitoring, CMS - Citizen: interactive curve editor, vote submission - Docker-compose deployment ready Includes fixes for: - Impact table snake_case/camelCase property mismatch - CMS content backend API + frontend editor (was stub) - Admin route protection middleware - Public content display on commune page - Vote confirmation page link fix Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
47 lines
1.1 KiB
Vue
47 lines
1.1 KiB
Vue
<template>
|
|
<div style="max-width: 500px; margin: 2rem auto;">
|
|
<div class="page-header" style="text-align: center;">
|
|
<h1>Connexion</h1>
|
|
<p style="color: var(--color-text-muted);">Choisissez votre espace.</p>
|
|
</div>
|
|
|
|
<div class="grid grid-2">
|
|
<NuxtLink to="/login/commune" class="card login-choice">
|
|
<h3>Commune</h3>
|
|
<p>Gérer les données et la tarification de votre commune.</p>
|
|
</NuxtLink>
|
|
<NuxtLink to="/login/admin" class="card login-choice">
|
|
<h3>Super Admin</h3>
|
|
<p>Gestion globale des communes et administrateurs.</p>
|
|
</NuxtLink>
|
|
</div>
|
|
|
|
<p style="text-align: center; margin-top: 1.5rem;">
|
|
<NuxtLink to="/">← Retour à l'accueil</NuxtLink>
|
|
</p>
|
|
</div>
|
|
</template>
|
|
|
|
<style scoped>
|
|
.login-choice {
|
|
text-align: center;
|
|
cursor: pointer;
|
|
transition: box-shadow 0.15s;
|
|
}
|
|
|
|
.login-choice:hover {
|
|
box-shadow: var(--shadow-md);
|
|
text-decoration: none;
|
|
}
|
|
|
|
.login-choice h3 {
|
|
color: var(--color-primary);
|
|
margin-bottom: 0.5rem;
|
|
}
|
|
|
|
.login-choice p {
|
|
font-size: 0.8rem;
|
|
color: var(--color-text-muted);
|
|
}
|
|
</style>
|