Files
portal/app/resources/js/views/admin/AdminPlaceholderView.vue
T
Дмитрий da65cf4bf7 phase2(admin): AdminLayout + AdminTenantsView - админка SaaS (12/13 концептов)
- 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>
2026-05-08 19:23:28 +03:00

38 lines
1.2 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<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>