From dd7c3910f3d28972f38bd1fdc85c7bba44df503a Mon Sep 17 00:00:00 2001 From: Arnaud Date: Fri, 29 May 2026 13:43:03 +0200 Subject: [PATCH] =?UTF-8?q?feat(admin):=20=C3=A9dition=20de=20cat=C3=A9gor?= =?UTF-8?q?ie=20via=20dashboard?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Nouvelle page /admin/categories/:slug/edit, même pattern que members : - Preview live de la carte catégorie (top border colorée + folder icon tinté + badge "X projets" + label dimension) - Form complet : name, slug, description, color_hex, icon, dimension, sort_order - Color picker natif + champ HEX texte synchronisés, validation /^#[0-9A-Fa-f]{6}$/ côté client - Diff PATCH (champs vides -> null), upper-case normalisé pour color_hex - Si le slug change -> router.replace vers la nouvelle URL - Bouton Supprimer en header désactivé si projects_count > 0 (FK RESTRICT) - 422 -> fieldErrors, 409 -> slug collision, 401 -> session expirée - projects_count récupéré direct depuis GET /api/categories/:slug (la réponse contient ce champ pour la route détail, cf. controller PHP) UI - AdminCategoriesPage : nouveau lien "Éditer" par ligne du tableau - Router : route nommée admin-category-edit avec guard admin Backend - Aucune nouvelle route : PATCH /api/categories/:slug existait déjà - Validation côté serveur : in dimension enum, colorHex format, integer sort_order >= 0, slug auto-unique avec suffixe -2/-3... Co-Authored-By: Claude Opus 4.7 (1M context) --- .../src/pages/admin/AdminCategoriesPage.vue | 21 +- .../src/pages/admin/AdminCategoryEditPage.vue | 298 ++++++++++++++++++ frontend/src/router/index.ts | 1 + 3 files changed, 313 insertions(+), 7 deletions(-) create mode 100644 frontend/src/pages/admin/AdminCategoryEditPage.vue diff --git a/frontend/src/pages/admin/AdminCategoriesPage.vue b/frontend/src/pages/admin/AdminCategoriesPage.vue index ba39258..d3aa16e 100644 --- a/frontend/src/pages/admin/AdminCategoriesPage.vue +++ b/frontend/src/pages/admin/AdminCategoriesPage.vue @@ -1,5 +1,6 @@ + +