feat(admin): build shared admin shell

Sidebar (Dashboard/Catalog group/Products/Categories/Orders/Transactions/
Reviews/Reports/Content/Media/Marketplace Builder/Users/Settings/
Monitoring/Analytics + Documentation/Help/Logout), sticky topbar
(breadcrumbs, page title/description, search, notifications, tenant
selector and quick-publish placeholders, current user), reserved
right-rail slot, scrollable content area. Desktop 280px sidebar, tablet
icon rail, mobile drawer with focus management and Escape-to-close.

Nav items without a built page (Reviews, Reports, Settings, Docs, Help)
render disabled with a coming-soon badge instead of dead links; Content
and Marketplace Builder route to the existing project-editor pages
(static-pages / general) rather than duplicating them.

All 15 /backoffice/** routes now render through AdminLayoutComponent;
the public storefront header/back-button/footer no longer render on
admin routes (app.ts/app.html gate on a new isAdminRoute signal).

Added the adminShell i18n namespace (ru/en/hy) for every new shell
string so this doesn't add to the existing untranslated-admin-UI gap
tracked in KNOWN-ISSUES.md.

Colors/type sizes follow DESIGN.md tokens; the two rgba() modal-scrim
values are a documented, intentional exception (neutral overlay,
not a themed token).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
sdarbinyan
2026-07-18 00:12:19 +04:00
parent 6be3c5892d
commit eb7b5c996d
12 changed files with 1384 additions and 15 deletions

View File

@@ -955,4 +955,61 @@ export const ru: Translations = {
topProductsEmptyTitle: 'Нет продаж товаров за этот период',
topProductsEmptyDescription: 'Попробуйте выбрать более широкий диапазон дат.',
},
adminShell: {
skipToContent: 'Перейти к содержимому',
openSidebar: 'Открыть меню',
closeSidebar: 'Закрыть меню',
collapseSidebar: 'Свернуть меню',
expandSidebar: 'Развернуть меню',
nav: {
dashboard: 'Панель управления',
catalogGroup: 'Каталог',
products: 'Товары',
categories: 'Категории',
orders: 'Заказы',
transactions: 'Транзакции',
reviews: 'Отзывы',
reports: 'Отчёты',
content: 'Контент',
mediaLibrary: 'Медиатека',
marketplaceBuilder: 'Конструктор маркетплейса',
users: 'Пользователи',
settings: 'Настройки',
monitoring: 'Мониторинг',
analytics: 'Аналитика',
documentation: 'Документация',
help: 'Помощь',
logout: 'Выйти',
comingSoonBadge: 'Скоро',
},
topbar: {
searchLabel: 'Поиск по админ-панели',
searchPlaceholder: 'Искать товары, заказы, страницы...',
notifications: 'Уведомления',
notificationsEmpty: 'Новых уведомлений нет',
account: 'Аккаунт администратора',
tenantSelector: 'Магазин',
tenantSelectorComingSoon: 'Переключение между магазинами скоро появится',
quickPublish: 'Опубликовать',
quickPublishComingSoon: 'Быстрая публикация скоро появится',
},
breadcrumbHome: 'Админ-панель',
pages: {
dashboard: { title: 'Панель управления', description: 'Обзор состояния вашего маркетплейса' },
products: { title: 'Товары', description: 'Управляйте карточками товаров и их видимостью' },
productCreate: { title: 'Новый товар', description: 'Заполните карточку, чтобы добавить товар в каталог' },
productEdit: { title: 'Редактирование товара', description: 'Измените данные товара' },
productDuplicate: { title: 'Копия товара', description: 'Создайте новый товар на основе существующего' },
categories: { title: 'Категории', description: 'Постройте дерево категорий каталога' },
categoryCreate: { title: 'Новая категория', description: 'Добавьте категорию в дерево каталога' },
categoryEdit: { title: 'Редактирование категории', description: 'Измените данные категории' },
orders: { title: 'Заказы', description: 'Просматривайте и обрабатывайте заказы покупателей' },
orderDetail: { title: 'Заказ', description: 'Детали и статус заказа' },
transactions: { title: 'Транзакции', description: 'Платежи, возвраты и проверка мошенничества' },
media: { title: 'Медиатека', description: 'Изображения и файлы для товаров и страниц' },
users: { title: 'Пользователи', description: 'Команда администраторов и права доступа' },
monitoring: { title: 'Мониторинг', description: 'Состояние очередей, вебхуков и системных событий' },
analytics: { title: 'Аналитика', description: 'Продажи, товары и поведение покупателей' },
},
},
};