+
+
{statsLoading ? (
) : (
@@ -211,13 +216,12 @@ function DashboardPage() {
items={[
{
label: 'Активные VPS',
- value: stats?.activeVpsCount ?? activeVps.length,
+ value: `${activeCount} из ${totalCount}`,
icon:
,
- hint: `всего ${stats?.totalVpsCount ?? snap.vps.length}`,
onClick: () => navigate({ to: '/vps' }),
},
{
- label: 'Расход/мес',
+ label: 'Расход в месяц',
value: formatInBaseCurrency(
stats?.monthlyBurnEstimate ?? 0,
baseCur,
@@ -239,7 +243,7 @@ function DashboardPage() {
onClick: () => navigate({ to: '/accounts' }),
},
{
- label: 'Runway (мин.)',
+ label: 'Runway',
value: stats?.minRunwayDays != null ? `${stats.minRunwayDays} дн` : '—',
icon:
,
variant: stats?.minRunwayDays != null && stats.minRunwayDays < 14 ? 'warning' : 'default',
@@ -253,55 +257,59 @@ function DashboardPage() {
},
{
label: 'Истекает 7 дн',
- value: stats?.expiringWithin7Days ?? 0,
+ value:
+ expiringCount > 0 ? (
+
+ {expiringCount}
+
+
+ ) : (
+ expiringCount
+ ),
icon:
,
- variant: (stats?.expiringWithin7Days ?? 0) > 0 ? 'warning' : 'default',
- badge:
- (stats?.expiringWithin7Days ?? 0) > 0 ? (
-
- внимание
-
- ) : undefined,
+ variant: expiringCount > 0 ? 'warning' : 'default',
onClick: () => navigate({ to: '/vps', search: { health: 'expiring-soon' } }),
},
{
label: 'Проблемы',
- value: issues.length,
+ value:
+ issuesCount > 0 ? (
+
+ {issuesCount}
+
+
+ ) : (
+ issuesCount
+ ),
icon:
,
- variant: issues.length > 0 ? 'destructive' : 'default',
+ variant: issuesCount > 0 ? 'destructive' : 'default',
+ onClick: handleGoToIssues,
},
]}
/>
)}
- {issues.length > 0 ? (
-
-
- Требует внимания
-
- Обнаружено {issues.length} категорий проблем в инвентаре. Проверьте вкладку «Проблемы».
-
-
- ) : null}
-
-
-
+
-
-
+
-
+
+
Проблемы
@@ -360,6 +368,7 @@ function DashboardPage() {
/>
+
}>