эксплуатация: показания счётчиков, энергоактивы и РРО

Конфиг счётчиков и день/ночь-тарифы, учёт энергосистем (генераторы,
инверторы), доступ к разделу РРО/ПРРО.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-09-09 18:03:44 +03:00
parent 3e969e29dc
commit 16bf2cf1c7
26 changed files with 2044 additions and 88 deletions
+68
View File
@@ -0,0 +1,68 @@
function utilitiesPageRoot() {
return document.getElementById('utilities-page');
}
function utilitiesGetPharmacyId() {
var root = utilitiesPageRoot();
if (!root) return '';
var select = document.getElementById('utilities-pharmacy-select');
if (select && select.value) return select.value;
return root.getAttribute('data-own-pharmacy') || '';
}
function utilitiesGetReadingMode(pharmacyId, typeId) {
var root = utilitiesPageRoot();
if (!root || !typeId) return 'single';
var configs = {};
var typeModes = {};
try {
configs = JSON.parse(root.getAttribute('data-meter-configs') || '{}');
typeModes = JSON.parse(root.getAttribute('data-type-modes') || '{}');
} catch (e) {
return 'single';
}
if (pharmacyId) {
var key = pharmacyId + ':' + typeId;
if (configs[key]) return configs[key];
}
return typeModes[typeId] || 'single';
}
function utilitiesFormModeUpdate() {
var typeSelect = document.getElementById('utilities-type-select');
var singleWrap = document.getElementById('utilities-single-wrap');
var dayNightWrap = document.getElementById('utilities-daynight-wrap');
var hint = document.getElementById('utilities-mode-hint');
if (!typeSelect || !singleWrap || !dayNightWrap) return;
var pharmacyId = utilitiesGetPharmacyId();
var typeId = typeSelect.value;
var mode = utilitiesGetReadingMode(pharmacyId, typeId);
var isDayNight = mode === 'day_night';
singleWrap.style.display = isDayNight ? 'none' : '';
dayNightWrap.style.display = isDayNight ? '' : 'none';
var valueInput = singleWrap.querySelector('input[name=value]');
var dayInput = dayNightWrap.querySelector('input[name=value_day]');
var nightInput = dayNightWrap.querySelector('input[name=value_night]');
if (valueInput) valueInput.required = !isDayNight;
if (dayInput) dayInput.required = isDayNight;
if (nightInput) nightInput.required = isDayNight;
if (hint) {
hint.textContent = isDayNight
? 'Лічильник у режимі «день / ніч» — вкажіть обидва показники.'
: (typeId ? 'Звичайний лічильник — одне показання.' : '');
}
}
document.body.addEventListener('htmx:afterSwap', function (evt) {
if (document.getElementById('utilities-page')) {
utilitiesFormModeUpdate();
}
});
if (document.getElementById('utilities-page')) {
utilitiesFormModeUpdate();
}