From 527540b05bb549ae855bb6883cbf3b7d10672178 Mon Sep 17 00:00:00 2001 From: brusnitsyn Date: Wed, 17 Jun 2026 10:34:19 +0900 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D1=8B=D0=B9=20=D0=B3=D1=80=D0=B0=D1=84=D0=B8?= =?UTF-8?q?=D0=BA=20=D0=A5=D0=B8=D1=80=D1=83=D1=80=D0=B3=D0=B8=D1=87=D0=B5?= =?UTF-8?q?=D1=81=D0=BA=D0=B0=D1=8F=20=D0=B0=D0=BA=D1=82=D0=B8=D0=B2=D0=BD?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D1=8C=20#7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/js/Pages/Statistic/Headquarters.vue | 41 +++++++++++++------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/resources/js/Pages/Statistic/Headquarters.vue b/resources/js/Pages/Statistic/Headquarters.vue index 94de1d5..589cc2d 100644 --- a/resources/js/Pages/Statistic/Headquarters.vue +++ b/resources/js/Pages/Statistic/Headquarters.vue @@ -368,8 +368,15 @@ const unwantedSeries = computed(() => [{ data: unwantedDepts.value.map(d => d.countUnwanted), }]) -// --- График: Состав по отделениям --- -const consistOptions = computed(() => ({ +// --- График: Хирургическая активность --- +// Формула: (кол-во операций / кол-во выбывших) * 100 +const surgicalActivity = (d) => { + const ops = (d.surgical?.plan ?? 0) + (d.surgical?.emergency ?? 0) + const outcome = d.outcome ?? 0 + return outcome > 0 ? Math.round((ops / outcome) * 100) : 0 +} + +const surgicalActivityOptions = computed(() => ({ chart: baseChart('bar'), theme: { mode: 'dark' }, plotOptions: { @@ -392,6 +399,7 @@ const consistOptions = computed(() => ({ }, dataLabels: { enabled: true, + formatter: v => `${v}%`, style: { fontSize: '10px', fontFamily: FONT, fontWeight: 600, colors: [LABEL_COLOR] }, offsetY: -6, }, @@ -401,15 +409,24 @@ const consistOptions = computed(() => ({ axisBorder: { show: false }, axisTicks: { show: false }, }, - yaxis: { labels: { style: { colors: AXIS_COLOR, fontFamily: FONT } }, tickAmount: 4 }, - colors: ['#818cf8'], - tooltip: { ...baseTooltip, y: { formatter: v => `${v} пациентов` } }, + yaxis: { labels: { style: { colors: AXIS_COLOR, fontFamily: FONT }, formatter: v => `${Math.round(v)}%` }, tickAmount: 4 }, + colors: ['#14b8a6'], + tooltip: { + ...baseTooltip, + y: { + formatter: (val, { dataPointIndex }) => { + const d = departments.value[dataPointIndex] + const ops = (d?.surgical?.plan ?? 0) + (d?.surgical?.emergency ?? 0) + return `${val}% — ${ops} опер. / ${d?.outcome ?? 0} выб.` + }, + }, + }, grid: baseGrid, })) -const consistSeries = computed(() => [{ - name: 'Пациентов', - data: departments.value.map(d => d.consist ?? 0), +const surgicalActivitySeries = computed(() => [{ + name: 'Хир. активность', + data: departments.value.map(d => surgicalActivity(d)), }]) // --- Обновление данных через API --- @@ -655,14 +672,14 @@ onUnmounted(() => {
- - + +