feat(sales-stats): конкретика в сводке

- «Активные подписки» теперь с % (нетто-изменение за период: новые
  платные − истёкшие; обычная дельта снимка была бы всегда 0).
- Новая карточка «Новые платные подписки» (с дельтой период-к-периоду).
- «Доход» больше не включает ручные пополнения (бэк отвязал).
- Убрал «Средняя длит.» из триалов — была вечный 0 и непонятна.
- Сводка 9 карточек: сетка 2/3 с orphan-fill на мобайле, без пустот.
This commit is contained in:
c0mrade
2026-06-02 19:38:38 +03:00
parent 436d9f860c
commit 3adda6fa03
7 changed files with 33 additions and 14 deletions

View File

@@ -4,7 +4,7 @@ import { useTranslation } from 'react-i18next';
import type { SalesStatsParams } from '../../api/adminSalesStats';
import { salesStatsApi } from '../../api/adminSalesStats';
import { SALES_STATS } from '../../constants/salesStats';
import { ClockIcon, GiftIcon, PercentIcon, UserPlusIcon } from '../../components/icons';
import { GiftIcon, PercentIcon, UserPlusIcon } from '../../components/icons';
import { StatCard } from '../stats';
import { DonutChart } from './DonutChart';
@@ -61,7 +61,7 @@ export function TrialsTab({ params }: TrialsTabProps) {
return (
<div className="space-y-4">
<div className="grid grid-cols-2 gap-3 sm:grid-cols-4">
<div className="grid grid-cols-1 gap-3 sm:grid-cols-3">
<StatCard
label={t('admin.salesStats.trials.totalRegistrations')}
value={data.total_registrations}
@@ -80,12 +80,6 @@ export function TrialsTab({ params }: TrialsTabProps) {
icon={<PercentIcon className="h-5 w-5" />}
tone="success"
/>
<StatCard
label={t('admin.salesStats.trials.avgDuration')}
value={`${data.avg_trial_duration_days} ${t('admin.trafficUsage.days')}`}
icon={<ClockIcon className="h-5 w-5" />}
tone="neutral"
/>
</div>
<div className="grid grid-cols-1 gap-4 lg:grid-cols-2">