sposchedule
110 строк · 2.6 Кб
1<script setup lang="ts">
2import Menu from 'primevue/menu';
3import { ref } from 'vue';
4import { useAppStore } from '@/stores/app';
5
6const { isNavbarActive } = useAppStore();
7
8const items = ref([
9{
10label: 'Семестры',
11icon: 'pi pi-hourglass',
12route: '/admin/semesters',
13},
14{
15label: 'Корпуса',
16icon: 'pi pi-building',
17route: '/admin/buildings',
18},
19{
20label: 'Группы',
21icon: 'pi pi-users',
22route: '/admin/groups',
23},
24{
25label: 'Предметы',
26icon: 'pi pi-book',
27route: '/admin/subjects',
28},
29{
30label: 'Преподаватели',
31icon: 'pi pi-user',
32route: '/admin/teachers',
33},
34{
35label: 'Расписание',
36icon: 'pi pi-calendar',
37route: '/admin/schedules/main',
38},
39{
40label: 'Изменения',
41icon: 'pi pi-calendar-plus',
42route: '/admin/schedules/changes',
43},
44{
45label: 'Звонки',
46icon: 'pi pi-bell',
47route: '/admin/bells',
48},
49{
50label: 'Аналитика',
51icon: 'pi pi-chart-bar',
52route: '/analytics',
53},
54{
55label: 'История',
56icon: 'pi pi-list',
57route: '/admin/history',
58},
59]);
60</script>
61
62<template>
63<div
64:class="{ 'active-navbar': isNavbarActive }"
65class="transition-transform fixed z-50 w-80 top-16 left-0 basis-80 flex-grow-0 lg:min-h-screen md:bg-surface-200 md:dark:bg-surface-950"
66>
67<div class="flex flex-col py-4 px-4">
68<Menu :model="items" class="w-full p-4">
69<template #item="{ item, props }">
70<RouterLink
71v-if="item.route"
72v-slot="{ href, navigate }"
73:to="item.route"
74custom
75>
76<a
77:class="{
78'!text-primary-500 font-bold': $route.path === item.route,
79}"
80:href="href"
81v-bind="props.action"
82@click="navigate"
83>
84<span :class="item.icon" />
85<span class="ml-2">{{ item.label }}</span>
86</a>
87</RouterLink>
88<a
89v-else
90:class="{
91'!text-primary-500 font-bold': $route.path === item.route,
92}"
93:href="item.url"
94:target="item.target"
95v-bind="props.action"
96>
97<span :class="item.icon" />
98<span class="ml-2">{{ item.label }}</span>
99</a>
100</template>
101</Menu>
102</div>
103</div>
104</template>
105
106<style>
107.active-navbar {
108transform: translateX(-100%);
109}
110</style>
111