Files
Caramel-CRM/resources/js/components/AppSidebar.vue
T

114 lines
3.5 KiB
Vue
Raw Normal View History

2025-10-20 08:57:51 +02:00
<script setup lang="ts">
import NavFooter from '@/components/NavFooter.vue';
import NavMain from '@/components/NavMain.vue';
2026-02-17 10:35:03 +01:00
import { Sidebar, SidebarContent, SidebarFooter, SidebarHeader, SidebarTrigger } from '@/components/ui/crm-sidebar';
import { useSidebar } from '@/components/ui/crm-sidebar/utils'
import { dashboard, pipeline, offers, invoices, newInvoice, products, timesheets, customers, leads, achievements } from '@/routes';
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip'
2025-10-23 08:26:38 +02:00
import { Kbd, KbdGroup } from '@/components/ui/kbd'
2025-11-26 10:05:43 +01:00
import { type NavGroup } from '@/types';
import { Link, usePage } from '@inertiajs/vue3';
2026-02-17 10:35:03 +01:00
import { Kanban, Euro, Trophy, Calculator, Timer, ContactRound, Headset, Plus, Package } from 'lucide-vue-next';
2025-10-20 08:57:51 +02:00
import AppLogo from './AppLogo.vue';
2025-11-14 17:45:57 +01:00
import { computed } from 'vue';
2026-02-17 10:35:03 +01:00
const { open } = useSidebar()
2025-11-14 17:45:57 +01:00
const page = usePage();
const auth = computed(() => page.props.auth);
2025-10-20 08:57:51 +02:00
const mainNavGroups: NavGroup[] = [
{
title: 'CRM',
items: [
{
title: 'Pipeline',
2026-02-17 10:35:03 +01:00
href: pipeline(),
2025-10-20 08:57:51 +02:00
icon: Kanban,
},
{
title: 'Akquise',
href: leads(),
icon: Headset,
},
{
title: 'Kunden',
href: customers(),
2026-02-17 10:35:03 +01:00
icon: ContactRound,
2025-10-20 08:57:51 +02:00
},
{
title: 'Erfolge',
href: achievements(),
icon: Trophy,
},
],
},
{
2025-11-26 10:05:43 +01:00
title: 'Rechnungswesen',
2025-10-20 08:57:51 +02:00
items: [
{
title: 'Angebote',
href: offers(),
icon: Calculator,
2025-11-26 10:05:43 +01:00
},
2025-10-20 08:57:51 +02:00
{
title: 'Rechnungen',
href: invoices(),
icon: Euro,
action: {
title: "Neue Rechnung",
icon: Plus,
href: newInvoice()
}
2025-10-20 08:57:51 +02:00
},
2026-02-17 10:35:03 +01:00
{
title: 'Produkte',
href: products(),
icon: Package,
},
2025-10-20 08:57:51 +02:00
{
title: 'Zeiterfassung',
href: timesheets(),
icon: Timer,
},
],
}
];
</script>
<template>
2026-02-17 10:35:03 +01:00
<Sidebar collapsible="icon">
2025-10-20 08:57:51 +02:00
<SidebarHeader>
2025-11-18 20:44:52 +01:00
<Link :href="dashboard()" prefetch class="flex row items-center mt-3">
<AppLogo />
2025-10-20 08:57:51 +02:00
</Link>
<TooltipProvider>
<Tooltip>
2026-02-17 10:35:03 +01:00
<TooltipTrigger class="w-fit absolute top-9" :class="open ? 'right-[.666rem]' : 'right-[1.14333rem]'">
<SidebarTrigger class="hidden md:flex" />
</TooltipTrigger>
<TooltipContent>
2026-02-17 10:35:03 +01:00
<span>Seitenleiste </span>
<KbdGroup class="ml-2">
<Kbd class="visible-mac"></Kbd>
<Kbd class="visible-pc">Ctrl</Kbd>
<Kbd>B</Kbd>
</KbdGroup>
</TooltipContent>
</Tooltip>
</TooltipProvider>
2025-10-20 08:57:51 +02:00
</SidebarHeader>
2025-11-14 17:45:57 +01:00
<SidebarContent class="flex min-h-0 flex-1 flex-col gap-2 overflow-y-auto overflow-x-hidden">
2025-10-20 08:57:51 +02:00
<NavMain :groups="mainNavGroups" />
</SidebarContent>
<SidebarFooter>
2025-11-14 17:45:57 +01:00
<NavFooter :user="auth.user" />
2025-10-20 08:57:51 +02:00
</SidebarFooter>
</Sidebar>
<slot />
</template>