From 97c68531ed520a65bd292bb2a96fbc2b659e0489 Mon Sep 17 00:00:00 2001 From: Arnaud Date: Fri, 29 May 2026 13:47:42 +0200 Subject: [PATCH] =?UTF-8?q?feat(admin):=20cr=C3=A9ation=20de=20membre=20vi?= =?UTF-8?q?a=20dashboard?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Nouvelle page /admin/members/new, jumeau de l'écran d'édition : - Form complet : display_name, slug (auto), initials (auto), kind, bio, email, website, avatar URL - Avatar preview live (initiales / URL d'avatar mis à jour à la saisie) - Slug auto-généré depuis display_name (NFD + lowercase + tirets) tant que l'utilisateur n'a pas édité manuellement (flag slugDirty) - Initiales auto-suggérées (1re lettre de chaque mot, max 3, upper), flag initialsDirty distinct -> tu peux laisser le slug auto mais forcer des initiales manuelles ou vice-versa - Body construit en omettant les champs vides -> l'API génère ses propres initiales si vides, slug auto-uniqueifie sur collision (-2/-3...) - 201 -> redirige vers /admin/members/:slug/edit pour voir le résultat - 422/409/401 gérés comme les autres écrans admin UI - AdminMembersPage : CTA "Nouveau membre" en haut à droite (à côté de la recherche, justify-between sur le wrap parent) - Router : route nommée admin-member-new avec guard admin Backend - Aucune nouvelle route : POST /api/members existait déjà - Le contrôleur valide display_name (required), kind enum, email format, URLs ; auto-génère initiales si non fournies (1res lettres de chaque mot) - Slug auto avec suffixe en cas de collision (cf. Slugger::unique) Co-Authored-By: Claude Opus 4.7 (1M context) --- .../src/pages/admin/AdminMemberNewPage.vue | 243 ++++++++++++++++++ frontend/src/pages/admin/AdminMembersPage.vue | 11 +- frontend/src/router/index.ts | 1 + 3 files changed, 254 insertions(+), 1 deletion(-) create mode 100644 frontend/src/pages/admin/AdminMemberNewPage.vue diff --git a/frontend/src/pages/admin/AdminMemberNewPage.vue b/frontend/src/pages/admin/AdminMemberNewPage.vue new file mode 100644 index 0000000..2b2e4af --- /dev/null +++ b/frontend/src/pages/admin/AdminMemberNewPage.vue @@ -0,0 +1,243 @@ + + +