feat(admin): implement analytics and monitoring center

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

- Business Dashboard: revenue/orders/customers/AOV/top products/low stock/recent activity/warnings/completion% (Overview tab)
- Marketplace Health: real completion checks (images, SEO, categories, reviews, orders, translations, homepage, backend, performance) with clickable recommendations
- Product Analytics: top selling/most reviewed/worst rated/hidden/archived counts; top-viewed honestly marked Unknown (no view tracking exists)
- Customer Analytics: new/returning customers, average spend, retention - derived from real order data
- Search & Traffic tabs: honest 'Unknown - available after backend integration' placeholders, no fabricated numbers
- Recommendations engine: actionable cards (missing images/SEO/category, empty categories, incomplete homepage, unpublished static pages) linking to the relevant admin page
- System Monitoring: added real draft/publish/sync/backend-connectivity state from AdminDashboardFacade
- CSV export extended to top products and health checks; added print action
- New adminAnalytics.* and adminMarketplaceHealth.* i18n namespaces (en/ru/hy), no raw i18n keys
- Reused existing shared UI (app-table/app-badge/app-skeleton/app-empty-state) and content-health-widget completion-meter pattern - no new backend APIs, no storage changes
This commit is contained in:
sdarbinyan
2026-07-18 22:33:36 +04:00
parent 3c9b425203
commit 6af746c561
10 changed files with 1009 additions and 75 deletions

View File

@@ -1589,10 +1589,100 @@ export const ru: Translations = {
adminMonitoring: {
eventsEmptyTitle: 'События не найдены',
eventsEmptyDescription: 'Попробуйте изменить фильтр категории или поисковый запрос.',
systemState: 'Состояние системы',
backendConnectivity: 'Бэкенд',
connected: 'Подключено',
loading: 'Загрузка',
draftState: 'Черновик',
unsavedChanges: 'Есть несохранённые изменения',
noDraft: 'Черновика нет',
lastSaved: 'Последнее сохранение',
lastPublished: 'Последняя публикация',
syncStatus: 'Синхронизация',
},
adminAnalytics: {
topProductsEmptyTitle: 'Нет продаж товаров за этот период',
topProductsEmptyDescription: 'Попробуйте выбрать более широкий диапазон дат.',
print: 'Печать',
tabsLabel: 'Разделы аналитики',
tab: {
overview: 'Обзор',
health: 'Здоровье',
products: 'Товары',
customers: 'Клиенты',
search: 'Поиск',
traffic: 'Трафик',
recommendations: 'Рекомендации',
},
revenue: 'Выручка',
orders: 'Заказы',
customers: 'Клиенты',
avgOrderValue: 'Средний чек',
conversion: 'Конверсия',
completionPercent: 'Готовность',
unknown: 'Неизвестно',
salesChart: 'Продажи',
quantitySold: 'Продано, шт.',
lowStock: 'Мало на складе',
lowStockEmptyTitle: 'Нет товаров с низким остатком',
quantity: 'Количество',
status: 'Статус',
recentActivity: 'Недавняя активность',
recentActivityEmptyTitle: 'Нет недавней активности',
activityDraftSaved: 'Черновик сохранён',
activityPublished: 'Опубликовано',
warnings: 'Предупреждения',
topViewed: 'Самые просматриваемые',
hiddenProducts: 'Скрытые товары',
archivedProducts: 'Архивные товары',
mostReviewed: 'Больше всего отзывов',
worstRated: 'Худший рейтинг',
noReviewedProducts: 'Пока нет товаров с отзывами',
reviewCount: 'Отзывы',
avgRating: 'Средний рейтинг',
newCustomers: 'Новые клиенты',
returningCustomers: 'Повторные клиенты',
averageSpend: 'Средние траты',
retention: 'Удержание',
searchAnalytics: 'Аналитика поиска',
trafficAnalytics: 'Трафик',
availableAfterBackend: 'Будет доступно после интеграции с бэкендом.',
pendingBackend: 'Ожидает бэкенд',
pendingBackendHint: 'Отслеживание поисковых запросов пока не реализовано.',
funnelsHeatmaps: 'Воронки и тепловые карты',
visitors: 'Посетители',
products: 'Товары',
categories: 'Категории',
},
adminMarketplaceHealth: {
title: 'Здоровье маркетплейса',
complete: 'готово',
recommendationsTitle: 'Рекомендации',
recommendNone: 'Всё в порядке.',
checkImages: 'У товаров есть изображения',
checkSeo: 'У товаров заполнено SEO',
checkCategories: 'В категориях есть товары',
checkReviews: 'Отзывы модерируются',
checkOrders: 'Заказы обрабатываются',
checkTranslations: 'Переводы заполнены',
checkHomepage: 'Главная страница настроена',
checkBackend: 'Связь с бэкендом',
checkPerformance: 'Производительность',
recommendImages: 'Добавьте изображения товарам без них',
recommendImagesCount: 'Товары без изображений снижают конверсию.',
recommendSeo: 'Заполните SEO для товаров без него',
recommendSeoCount: 'Отсутствие SEO ухудшает видимость в поиске.',
recommendCategory: 'Назначьте категорию товарам без категории',
recommendCategoryCount: 'Товары без категории труднее найти.',
recommendEmptyCategories: 'Категории без товаров',
recommendEmptyCategoriesCount: 'Рассмотрите объединение или удаление пустых категорий.',
recommendHomepage: 'Главная страница не заполнена',
recommendStaticPages: 'Есть неопубликованные статические страницы',
severity: {
info: 'Инфо',
warning: 'Внимание',
critical: 'Критично',
},
},
adminShell: {
skipToContent: 'Перейти к содержимому',