From dcf99f011a84e2293185ecee6fd125772aa10511 Mon Sep 17 00:00:00 2001 From: Arnaud Date: Fri, 29 May 2026 13:45:25 +0200 Subject: [PATCH] =?UTF-8?q?feat(admin):=20cr=C3=A9ation=20de=20cat=C3=A9go?= =?UTF-8?q?rie=20via=20dashboard?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Nouvelle page /admin/categories/new, jumeau de l'écran d'édition : - Form complet : name, slug (auto), description, color_hex, icon, dimension, sort_order - Preview live identique à l'éditeur (top border + folder tinté + badge) - Slug auto-généré depuis le nom (normalisation NFD + lowercase + dashes) tant que l'utilisateur n'a pas touché manuellement au champ. Flag slugDirty mis à true sur premier @input du slug -> on arrête l'auto. - Validation color_hex /^#RRGGBB$/ côté client + normalisation upper-case - Body construit en omettant les champs vides -> l'API applique ses défauts (color_hex='#888888', dimension='transversal', sort_order=0) - Sur 201 : redirige vers /admin/categories/:slug/edit pour que l'admin voie tout de suite sa nouvelle catégorie et puisse ajuster - 422/409/401 gérés comme sur les autres écrans admin UI - AdminCategoriesPage : CTA "Nouvelle catégorie" en haut à droite - Router : route nommée admin-category-new avec guard admin Backend - Aucune nouvelle route : POST /api/categories existait déjà - Le contrôleur valide name (required, max 128), dimension enum, color hex format, slug auto-unique Co-Authored-By: Claude Opus 4.7 (1M context) --- .../src/pages/admin/AdminCategoriesPage.vue | 18 +- .../src/pages/admin/AdminCategoryNewPage.vue | 247 ++++++++++++++++++ frontend/src/router/index.ts | 1 + 3 files changed, 263 insertions(+), 3 deletions(-) create mode 100644 frontend/src/pages/admin/AdminCategoryNewPage.vue diff --git a/frontend/src/pages/admin/AdminCategoriesPage.vue b/frontend/src/pages/admin/AdminCategoriesPage.vue index d3aa16e..860cf90 100644 --- a/frontend/src/pages/admin/AdminCategoriesPage.vue +++ b/frontend/src/pages/admin/AdminCategoriesPage.vue @@ -60,10 +60,22 @@ async function destroy(c: Category) { - - +
+ + + + + Nouvelle catégorie + +
-
+ + + +
diff --git a/frontend/src/pages/admin/AdminCategoryNewPage.vue b/frontend/src/pages/admin/AdminCategoryNewPage.vue new file mode 100644 index 0000000..0289158 --- /dev/null +++ b/frontend/src/pages/admin/AdminCategoryNewPage.vue @@ -0,0 +1,247 @@ + + +