1e233a70c8
- AppLayout: v-navigation-drawer (теало-нуар sidebar 240px) + brand-block + nav-tree из 8 пунктов в 3 группах (Работа/Финансы/Команда), v-app-bar с crumb «Рабочая область → currentPage» + search ⌘K + bell + user-chip. Mobile (md<): drawer toggleable. - DashboardView: page-head «Доброе утро, Иван» + page-meta + range-toggle 4 опции (Сегодня/7д/30д/Период). KPI-row из 4 cards: 3 outlined (получено лидов/конверсия/активные проекты) + 1 hero balance с runway-bar 4/7 заполненных сегментов teal #32C8A9. - AppShell упрощён до layout-mapper (route.meta.layout 'app'/'auth'). - Маршрут /dashboard (meta.layout='app') в router + web.php. - histoire.setup расширен 8 app-stub-маршрутами для AppLayout. - Vitest +11 тестов: AppLayout 6 (brand+3 группы+8 пунктов+счётчики+crumb), DashboardView 5, AppShell.spec.ts переписан под layout-mapper. - cspell-words.txt: JBM. Регресс: lint+type-check+format OK; vitest 35/35 за 4.92s; vite build DashboardView lazy-chunk 14.9KB; story:build 8/8 за 28.97s; Pest 48/48 за 4.88s. CLAUDE.md v1.20->v1.21, реестр Открытых_вопросов v1.29->v1.30. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
24 lines
894 B
Vue
24 lines
894 B
Vue
<script setup lang="ts">
|
|
/**
|
|
* Корневой shell приложения. Мапит meta.layout текущего route'а на layout-компонент.
|
|
*
|
|
* meta.layout = 'auth' → AuthLayout (двухпанельный для login/register/2fa/forgot/recovery).
|
|
* meta.layout не задан или 'app' → AppLayout (sidebar + topbar для авторизованных страниц).
|
|
*
|
|
* Источник дизайна: liderra_v8_handoff/concepts/v8_login.html (auth) и
|
|
* v8_dashboard.html (app).
|
|
*/
|
|
import { computed } from 'vue';
|
|
import { useRoute } from 'vue-router';
|
|
import AppLayout from '../layouts/AppLayout.vue';
|
|
import AuthLayout from '../layouts/AuthLayout.vue';
|
|
|
|
const route = useRoute();
|
|
const layoutName = computed(() => route.meta.layout ?? 'app');
|
|
</script>
|
|
|
|
<template>
|
|
<AuthLayout v-if="layoutName === 'auth'" />
|
|
<AppLayout v-else />
|
|
</template>
|