Files
app-autotest/site/static/js/views.js
T
naeel 9fda5f042c fix: tracker_remove в сценариях + прямая загрузка логов (v1.2.36)
Баг 1: удалённые сценарием инстансы показывались как 'creating'
  — run_scenario() не вызывал tracker_remove после delete
  — фикс: tracker_remove после успешного delete-шага

Баг 2: чёрный экран на вкладке Логи
  — views.js копировал пустую log-panel
  — фикс: прямая загрузка fetch('/api/log')
2026-08-03 09:48:03 +04:00

68 lines
3.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// views.js — переключение видов (Консоль / Обзор / История / Сценарии / Логи)
//
// Каждый вид — div.view с id="view-{name}".
// Активный вид — без класса .hidden.
// Все остальные — с классом .hidden (display: none).
//
// Переключение:
// switchView('overview') — Обзор (инфраструктура)
// switchView('console') — Консоль (ручной режим)
// switchView('history-view') — История (автозагрузка при открытии)
// switchView('scenarios-view') — Сценарии (автозагрузка)
// switchView('logs-view') — Логи (специальная обработка)
/**
* Переключиться на вид по его ID.
*
* @param {string} viewId — суффикс после "view-" (напр. "console" → #view-console)
*/
function switchView(viewId) {
// Скрыть ВСЕ виды
document.querySelectorAll('.view').forEach(v => v.classList.add('hidden'));
// Показать целевой вид
const target = document.getElementById('view-' + viewId);
if (target) target.classList.remove('hidden');
// Подсветка активного пункта в sidebar
document.querySelectorAll('.sidebar-item').forEach(el => el.classList.remove('active'));
const btn = document.querySelector('.sidebar-item[data-view="' + viewId + '"]');
if (btn) btn.classList.add('active');
// ── Автозагрузка при открытии вида ──
// История: автозагрузка только если ещё не загружена
if (viewId === 'history-view' && typeof toggleHistory === 'function') {
if (!historyOpen) toggleHistory();
}
// Сценарии: автозагрузка
if (viewId === 'scenarios-view' && typeof toggleScenario === 'function') {
if (!scenarioOpen) toggleScenario();
}
// Логи: прямая загрузка с API, не полагаемся на нижнюю панель
if (viewId === 'logs-view') {
const lvc = document.getElementById('log-view-content');
if (lvc) {
lvc.innerHTML = '<span style="color:#888;">Логи загружаются...</span>';
fetch('/api/log').then(r => r.json()).then(lines => {
if (lines.length) {
lvc.innerHTML = lines.map(l => `<div>${_esc(l)}</div>`).join('');
} else {
lvc.innerHTML = '<span style="color:#888;">Логов пока нет</span>';
}
}).catch(() => {
lvc.innerHTML = '<span style="color:#f88;">Ошибка загрузки логов</span>';
});
}
// Скрываем нижнюю лог-панель если была открыта
const lp = document.getElementById('log-panel');
if (lp) lp.style.display = 'none';
} else {
// На всех видах кроме логов — скрываем нижнюю лог-панель
const lp = document.getElementById('log-panel');
if (lp) lp.style.display = 'none';
}
}