From b7bc52be8524d4dfff7ccd2bd22b931df17e449d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Thu, 2 Jul 2026 08:28:12 +0300 Subject: [PATCH] =?UTF-8?q?feat(external):=20=D1=84=D1=80=D0=BE=D0=BD?= =?UTF-8?q?=D1=82=20=E2=80=94=20=D0=BF=D0=BB=D0=B8=D1=82=D0=BA=D0=B0=20?= =?UTF-8?q?=C2=AB=D0=92=D0=BD=D0=B5=D1=88=D0=BD=D0=B8=D0=B5=20=D1=81=D0=B5?= =?UTF-8?q?=D1=80=D0=B2=D0=B8=D1=81=D1=8B=C2=BB=20(=D0=B1=D0=B0=D0=BB?= =?UTF-8?q?=D0=B0=D0=BD=D1=81=20+=20=D0=B6=D0=B8=D0=B2=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D1=8C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Статус-текст для сервисов без денежного баланса (жив/не отвечает/выключено), метки и иконки почты/ЮKassa/Jivo/капчи, обновлённые подписи плитки и дрилла. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../js/views/admin/AdminDashboardView.vue | 34 +++++++++++++++---- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/app/resources/js/views/admin/AdminDashboardView.vue b/app/resources/js/views/admin/AdminDashboardView.vue index c35e155b..b0246951 100644 --- a/app/resources/js/views/admin/AdminDashboardView.vue +++ b/app/resources/js/views/admin/AdminDashboardView.vue @@ -103,11 +103,19 @@ const SERVICE_LABELS: Record = { dadata: 'DaData', supplier: 'Поставщик', yandex_cloud: 'Yandex Cloud', + email: 'Почта', + yookassa: 'ЮKassa', + jivosite: 'JivoSite', + captcha: 'Капча', }; const SERVICE_ICONS: Record = { dadata: '🧭', supplier: '📦', yandex_cloud: '☁️', + email: '✉️', + yookassa: '💳', + jivosite: '💬', + captcha: '🛡', }; function serviceLabel(key: string): string { @@ -122,6 +130,17 @@ function daysLeftLabel(days: number | null): string { return days === null ? '—' : `~${days} дн.`; } +/** Значение в строке сервиса: деньги (если есть баланс) или статус живости. */ +function serviceValue(s: { balance_amount: string | null; light: string; ok: boolean }): string { + if (s.balance_amount !== null) { + return s.ok ? rub(s.balance_amount) : '—'; + } + // Сервис без денег — показываем статус живости. + if (s.light === 'green') return 'жив'; + if (s.light === 'red') return 'не отвечает'; + return 'выключено'; // grey +} + /** Подпись светофора Клиентов на плитке. */ function clientsLightLabel(): string { const d = summary.value?.clients.dormant ?? 0; @@ -542,7 +561,7 @@ defineExpose({ period, dateFrom, dateTo, showCustom, selected, summary, finance, {{ s.ok ? rub(s.balance_amount) : 'нет данных' }} + >{{ serviceValue(s) }} @@ -870,12 +889,13 @@ v-for="g in supply?.groups ?? []" :key="g.signal_type + '|' + g.identifier" - 💳 Балансы внешних сервисов — детали + 🌐 Внешние сервисы — баланс и доступность - Баланс платных сервисов проверяется раз в сутки (06:30 МСК). Светофор: 🔴 мало денег - или хватит меньше 3 дней, 🟡 меньше 7 дней, ⚪ не удалось обновить. - Кнопка «Пополнить» открывает страницу оплаты сервиса. + Внешние сервисы проверяются раз в сутки (06:30 МСК): у платных — остаток денег, + у остальных — жив ли сервис. Светофор: 🔴 упал / мало денег / хватит меньше 3 дней, + 🟡 меньше 7 дней, ⚪ не удалось проверить или выключен. При переходе в 🔴 приходит + письмо на ops-адрес. @@ -891,9 +911,9 @@ v-for="g in supply?.groups ?? []" :key="g.signal_type + '|' + g.identifier" {{ serviceIcon(s.service_key) }} {{ serviceLabel(s.service_key) }} - {{ s.ok ? rub(s.balance_amount) : '—' }} + {{ serviceValue(s) }} - {{ s.ok ? daysLeftLabel(s.days_left) : '—' }} + {{ s.balance_amount !== null && s.ok ? daysLeftLabel(s.days_left) : '—' }}