da65cf4bf7
- AdminLayout: отдельный sidebar теало-нуар с под-брендом ADMIN (red error 10px JBM uppercase) + 4 nav (Тенанты 142 / Биллинг / Инциденты 3 / Система) + topbar с crumb «Админка → currentPage» + admin-user-chip с error-color avatar. - AdminTenantsView (/admin/tenants): page-head + 5-stats + Экспорт + search/Статус/Тариф фильтры + v-data-table 7 колонок (Тенант с двухстрочным name+inn / Статус-chip 4 цвета / Тариф / Баланс ₽ с error-color при <0 / Желаем×факт / MRR с «—» / Активность). - mockTenants.ts соответствует schema v8.7 §3: 4 статуса × 5 тарифов, 7 mock с разнообразием (active/trial/overdue/suspended) + AdminStats (142/128/9/5/ 1 248 600 ₽). - AdminPlaceholderView универсальный для Биллинг/Инциденты/Система с описаниями ссылающимися на schema v8.7 (incidents_log §9 / system_settings §10). - AppShell расширен meta.layout='admin'. Router: /admin redirect на /tenants + 4 admin-route'а с lazy-imports. Web.php fallback покрывает /admin/*. - cspell-words.txt: Екб. Vitest +11 (всего 129/129 за 10.02s): - заголовок + 5 stats (regex nbsp в 1 248 600 ₽) + 7 columns + 7 rows + Окна Москва ИНН + overdue −1 200 + trial 4 дня + suspended + search filter «Натяжные» → 1 row + Экспорт/Статус/Тариф кнопки. Регресс: lint+type+format OK; vitest 129/129; vite build (admin views в lazy-chunks; main 104.99 KB); story:build 21/28 за 30.32s; Pest 48/48 за 4.89s. CLAUDE.md v1.30->v1.31, реестр Открытых_вопросов v1.39->v1.40. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
38 lines
1.2 KiB
Vue
38 lines
1.2 KiB
Vue
<script setup lang="ts">
|
||
/**
|
||
* Универсальный placeholder для ещё-не-реализованных admin-разделов
|
||
* (Биллинг / Инциденты / Система). Конфигурация через `route.meta.title`
|
||
* и `route.meta.description`.
|
||
*/
|
||
import { computed } from 'vue';
|
||
import { useRoute } from 'vue-router';
|
||
|
||
const route = useRoute();
|
||
|
||
const title = computed(() => (route.meta.title as string | undefined) ?? 'Раздел');
|
||
const description = computed(
|
||
() => (route.meta.description as string | undefined) ?? 'Раздел в разработке. Реализуется в следующих коммитах.',
|
||
);
|
||
</script>
|
||
|
||
<template>
|
||
<v-container fluid class="admin-placeholder pa-6">
|
||
<header class="page-head mb-4">
|
||
<h1 class="text-h4 page-title">{{ title }}</h1>
|
||
</header>
|
||
<v-alert type="info" variant="tonal" density="compact">
|
||
<strong>В разработке.</strong> {{ description }}
|
||
</v-alert>
|
||
</v-container>
|
||
</template>
|
||
|
||
<style scoped>
|
||
.admin-placeholder {
|
||
max-width: 1200px;
|
||
}
|
||
.page-title {
|
||
font-variation-settings: 'opsz' 28;
|
||
letter-spacing: -0.018em;
|
||
}
|
||
</style>
|