feat(ui) : reorganize navbar by business domain — Catalogues + Administration

This commit is contained in:
2026-04-04 17:14:02 +02:00
parent db6fd8f36a
commit 48beff753e

View File

@@ -44,7 +44,7 @@
<!-- Mobile: dropdown groups -->
<li
v-for="group in navGroups"
v-for="group in visibleGroups"
:key="group.id + '-mobile'"
class="mt-1 border-t border-base-200 pt-2"
>
@@ -122,7 +122,7 @@
<!-- Desktop: dropdown groups -->
<li
v-for="group in navGroups"
v-for="group in visibleGroups"
:key="group.id + '-desktop'"
class="relative"
@mouseenter="setDropdown(group.id + '-desktop')"
@@ -271,10 +271,7 @@ import IconLucideLogOut from '~icons/lucide/log-out'
import IconLucideLayoutDashboard from '~icons/lucide/layout-dashboard'
import IconLucideFactory from '~icons/lucide/factory'
import IconLucideCpu from '~icons/lucide/cpu'
import IconLucidePuzzle from '~icons/lucide/puzzle'
import IconLucidePackage from '~icons/lucide/package'
import IconLucideLink from '~icons/lucide/link'
import IconLucideSun from '~icons/lucide/sun'
import IconLucideMoon from '~icons/lucide/moon'
import logoSrc from '~/assets/LOGO_CARRE_BLANC.png'
@@ -296,6 +293,7 @@ interface NavGroup {
icon?: Component
activePaths: string[]
children: NavLink[]
requiresEdit?: boolean
}
const simpleLinks: NavLink[] = [
@@ -305,46 +303,29 @@ const simpleLinks: NavLink[] = [
const navGroups: NavGroup[] = [
{
id: 'component',
label: 'Composants',
icon: IconLucideCpu,
activePaths: ['/component-category', '/component-catalog'],
children: [
{ to: '/component-catalog', label: 'Catalogue des composants' },
{ to: '/component-category', label: 'Catégorie de composant' },
],
},
{
id: 'pieces',
label: 'Pièces',
icon: IconLucidePuzzle,
activePaths: ['/piece-category', '/pieces-catalog'],
children: [
{ to: '/pieces-catalog', label: 'Catalogue des pièces' },
{ to: '/piece-category', label: 'Catégorie de pièce' },
],
},
{
id: 'products',
label: 'Produits',
id: 'catalogues',
label: 'Catalogues',
icon: IconLucidePackage,
activePaths: ['/product-category', '/product-catalog'],
activePaths: ['/catalogues', '/component', '/piece', '/product', '/component-catalog', '/pieces-catalog', '/product-catalog'],
children: [
{ to: '/product-catalog', label: 'Catalogue des produits' },
{ to: '/product-category', label: 'Catégorie de produit' },
{ to: '/catalogues/composants', label: 'Composants' },
{ to: '/catalogues/pieces', label: 'Pièces' },
{ to: '/catalogues/produits', label: 'Produits' },
],
},
{
id: 'resources',
label: 'Ressources liées',
icon: IconLucideLink,
activePaths: ['/sites', '/documents', '/constructeurs', '/activity-log', '/comments'],
id: 'admin',
label: 'Administration',
icon: IconLucideSettings,
activePaths: ['/sites', '/constructeurs', '/activity-log', '/admin', '/documents', '/comments', '/component-category', '/piece-category', '/product-category'],
requiresEdit: true,
children: [
{ to: '/sites', label: 'Sites' },
{ to: '/documents', label: 'Documents' },
{ to: '/constructeurs', label: 'Fournisseurs' },
{ to: '/comments', label: 'Commentaires' },
{ to: '/activity-log', label: 'Journal d\'activité' },
{ to: '/admin', label: 'Profils' },
],
},
]
@@ -353,6 +334,10 @@ const route = useRoute()
const { openDropdown, setDropdown, scheduleDropdownClose, toggleDropdown } = useNavDropdown()
const { activeProfile } = useProfileSession()
const { isAdmin, canEdit } = usePermissions()
const visibleGroups = computed(() =>
navGroups.filter(g => !g.requiresEdit || canEdit.value)
)
const { fetchUnresolvedCount } = useComments()
const { isDark, toggle: toggleDarkMode, init: initDarkMode } = useDarkMode()