Изменил визуал и добавил отметку в 100% по задаче #6

This commit is contained in:
brusnitsyn
2026-06-17 10:26:22 +09:00
parent 7e2eefeddf
commit abb608fb1e

View File

@@ -109,47 +109,65 @@ const baseTooltip = {
style: { fontSize: '12px', fontFamily: FONT }, style: { fontSize: '12px', fontFamily: FONT },
} }
// --- График: Загруженность коек (горизонтальный бар) --- // --- График: Загруженность коек (вертикальные столбцы, как «Норма и выбытие») ---
// Верхняя граница оси: минимум 100%, с запасом если есть перегруженные отделения
const bedMax = computed(() => {
const peak = Math.max(0, ...departments.value.map(d => d.percentLoadedBeds ?? 0))
return peak <= 100 ? 100 : Math.ceil(peak / 10) * 10
})
const bedOccupancyOptions = computed(() => ({ const bedOccupancyOptions = computed(() => ({
chart: baseChart('bar'), chart: baseChart('bar'),
theme: { mode: 'dark' }, theme: { mode: 'dark' },
plotOptions: { plotOptions: {
bar: { bar: {
horizontal: true,
borderRadius: 5, borderRadius: 5,
borderRadiusApplication: 'end', borderRadiusApplication: 'end',
distributed: true, distributed: true,
barHeight: '58%', columnWidth: '60%',
dataLabels: { position: 'top' }, dataLabels: { position: 'top' },
}, },
}, },
fill: { fill: {
type: 'gradient', type: 'gradient',
gradient: { gradient: {
type: 'horizontal', shade: 'dark',
opacityFrom: 0.75, type: 'vertical',
opacityTo: 1, opacityFrom: 1,
opacityTo: 0.55,
stops: [0, 100], stops: [0, 100],
}, },
}, },
dataLabels: { dataLabels: {
enabled: true, enabled: true,
formatter: v => `${v}%`, formatter: v => `${v}%`,
style: { fontSize: '11px', fontFamily: FONT, fontWeight: 600, colors: [LABEL_COLOR] }, style: { fontSize: '10px', fontFamily: FONT, fontWeight: 600, colors: [LABEL_COLOR] },
offsetX: 28, offsetY: -6,
}, },
xaxis: { xaxis: {
categories: departments.value.map(d => d.department), categories: departments.value.map(d => d.department),
max: 100, labels: { style: { colors: AXIS_COLOR, fontSize: '10px', fontFamily: FONT }, rotate: -40, rotateAlways: true },
labels: { style: { colors: AXIS_COLOR, fontSize: '11px', fontFamily: FONT }, formatter: v => `${v}%` },
axisBorder: { show: false }, axisBorder: { show: false },
axisTicks: { show: false }, axisTicks: { show: false },
}, },
yaxis: { yaxis: {
labels: { min: 0,
style: { colors: AXIS_COLOR, fontSize: '11px', fontFamily: FONT }, max: bedMax.value,
maxWidth: 170, tickAmount: 5,
}, labels: { style: { colors: AXIS_COLOR, fontFamily: FONT }, formatter: v => `${Math.round(v)}%` },
},
annotations: {
yaxis: [{
y: 100,
borderColor: '#d03050',
strokeDashArray: 4,
label: {
text: '100%',
position: 'right',
borderColor: '#d03050',
style: { background: '#d03050', color: '#fff', fontSize: '10px', fontFamily: FONT },
},
}],
}, },
colors: departments.value.map(d => loadColor(d.percentLoadedBeds)), colors: departments.value.map(d => loadColor(d.percentLoadedBeds)),
tooltip: { tooltip: {
@@ -161,7 +179,7 @@ const bedOccupancyOptions = computed(() => ({
}, },
}, },
}, },
grid: { ...baseGrid, yaxis: { lines: { show: false } } }, grid: baseGrid,
legend: { show: false }, legend: { show: false },
})) }))