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>
25 lines
834 B
Vue
25 lines
834 B
Vue
<template>
|
|
<div style="max-width: 600px; margin: 2rem auto; text-align: center;">
|
|
<div class="card">
|
|
<h2 style="margin-bottom: 1rem;">Vote enregistré</h2>
|
|
<p style="margin-bottom: 1.5rem;">
|
|
Votre vote a été soumis avec succès. Vous pouvez revenir à l'éditeur pour modifier votre choix
|
|
à tout moment (seul votre dernier vote sera pris en compte).
|
|
</p>
|
|
<div style="display: flex; gap: 1rem; justify-content: center;">
|
|
<NuxtLink :to="`/commune/${slug}`" class="btn btn-primary">
|
|
Modifier mon vote
|
|
</NuxtLink>
|
|
<NuxtLink to="/" class="btn btn-secondary">
|
|
Retour à l'accueil
|
|
</NuxtLink>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
const route = useRoute()
|
|
const slug = route.params.slug as string
|
|
</script>
|