Инфентировал страницы логи и стили добавил

This commit is contained in:
Maxim
2026-06-18 13:38:17 +03:00
parent e92c7d8f09
commit 627c18c2b3
9 changed files with 1226 additions and 245 deletions

View File

@@ -64,6 +64,20 @@ window.addEventListener("DOMContentLoaded", () => {
});
});
document.addEventListener('DOMContentLoaded', () => {
// Обработчик для кнопки закрытия камеры
const closeBtn = document.getElementById('camCloseBtn');
const toggleBtn = document.getElementById('camToggle');
if (closeBtn) {
closeBtn.addEventListener('click', () => {
if (toggleBtn) {
toggleBtn.click(); // Эмулируем нажатие кнопки переключения
}
});
}
});
document.addEventListener("keydown", (e: KeyboardEvent) => {
const leftPanel = document.getElementById("leftPanel");
const rightPanel = document.getElementById("rightPanel");

View File

@@ -50,6 +50,7 @@ interface EventsResponse {
returned: number;
start_index: number;
end_index: number;
order?: string;
}
// ============================================
@@ -123,7 +124,9 @@ async function loadFileList(): Promise<void> {
<div class="file-name">${file.name}</div>
<div class="file-info">${file.time} | ${(file.size / 1024).toFixed(1)} KB</div>
`;
div.addEventListener('click', () => loadFileData(file.name));
div.addEventListener('click', () => {
void loadFileData(file.name);
});
DOM.fileList?.appendChild(div);
});
@@ -182,11 +185,11 @@ async function loadEvents(page: number = 1): Promise<void> {
// Показываем индикатор загрузки
if (DOM.eventsContent) {
DOM.eventsContent.innerHTML = '<div class="loading-indicator">Загрузка событий...</div>';
DOM.eventsContent.innerHTML = '<div class="loading-indicator">Загрузка событий...</div>';
}
const url = `/api/log/events?page=${page}&page_size=${PAGE_SIZE}`;
console.log(`[Logs] Загрузка страницы ${page}`);
const url = `/api/log/events?page=${page}&page_size=${PAGE_SIZE}&order=newest_first`;
console.log(`[Logs] Загрузка страницы ${page} (новые сверху)`);
const response = await fetch(url);
const data: EventsResponse = await response.json();
@@ -201,6 +204,7 @@ async function loadEvents(page: number = 1): Promise<void> {
updatePagination(data);
console.log(`[Logs] Загружено: ${data.returned} событий, Страница: ${page}/${data.total_pages}`);
console.log(`[Logs] Порядок: ${data.order || 'newest_first'}, Показаны записи ${data.start_index}-${data.end_index} из ${data.total}`);
} catch (error) {
console.error('[Logs] Ошибка загрузки событий:', error);
@@ -317,7 +321,8 @@ function updatePagination(data: EventsResponse): void {
if (total === 0) {
DOM.pageInfo.textContent = 'Нет записей';
} else {
DOM.pageInfo.textContent = `Страница ${page} из ${total_pages} (записи ${start_index}-${end_index} из ${total})`;
const orderText = data.order === 'newest_first' ? 'новые сверху' : 'старые сверху';
DOM.pageInfo.textContent = `Страница ${page} из ${total_pages} (записи ${start_index}-${end_index} из ${total}) ${orderText}`;
}
}
@@ -335,7 +340,7 @@ function updatePagination(data: EventsResponse): void {
}
// ============================================
// НАВИГАЦИЯ ПО СТРАНИЦАМ
// НАВИГАЦИЯ ПО СТРАНИЦАМ (ИСПРАВЛЕНО)
// ============================================
function goToPage(page: number): void {
@@ -343,21 +348,23 @@ function goToPage(page: number): void {
if (page > state.totalPages) page = state.totalPages;
if (page === state.currentPage) return;
loadEvents(page);
void loadEvents(page);
}
function goToFirstPage(): void {
goToPage(1);
goToPage(1); // Первая страница = самые новые
}
function goToLastPage(): void {
goToPage(state.totalPages);
goToPage(state.totalPages); // Последняя страница = самые старые
}
// "◀ Предыдущая" → страница с номером на 1 меньше (более новые записи)
function goToPreviousPage(): void {
goToPage(state.currentPage - 1);
}
// "Следующая ▶" → страница с номером на 1 больше (более старые записи)
function goToNextPage(): void {
goToPage(state.currentPage + 1);
}
@@ -398,11 +405,11 @@ function initPaginationControls(): void {
paginationContainer.className = 'pagination-container';
paginationContainer.innerHTML = `
<div class="pagination-controls">
<button id="firstPage" class="pagination-btn" title="Первая страница">⏮</button>
<button id="prevPage" class="pagination-btn" title="Предыдущая страница">◀</button>
<button id="firstPage" class="pagination-btn" title="Первая страница (самые новые)">⏮</button>
<button id="prevPage" class="pagination-btn" title="Предыдущая страница (более новые)">◀</button>
<span id="pageInfo" class="pagination-info">Страница 1 из 1</span>
<button id="nextPage" class="pagination-btn" title="Следующая страница">▶</button>
<button id="lastPage" class="pagination-btn" title="Последняя страница">⏭</button>
<button id="nextPage" class="pagination-btn" title="Следующая страница (более старые)">▶</button>
<button id="lastPage" class="pagination-btn" title="Последняя страница (самые старые)">⏭</button>
<span class="pagination-goto">
<input type="number" id="pageInput" min="1" value="1" class="pagination-input">
<button id="goToPage" class="pagination-btn pagination-goto-btn">Перейти</button>
@@ -470,16 +477,16 @@ function initTabs(): void {
if (tabName === 'events') {
// Загружаем первую страницу событий
if (state.currentEvents.length === 0) {
loadEvents(1);
void loadEvents(1);
}
}
});
});
}
function init(): void {
async function init(): Promise<void> {
console.log('[Logs] Инициализация...');
// Инициализация пагинации
initPaginationControls();
@@ -487,16 +494,18 @@ function init(): void {
initTabs();
// Загрузка списка файлов
loadFileList();
await loadFileList();
// Обновление времени
updateTime();
setInterval(updateTime, 1000);
await updateTime();
setInterval(() => {
void updateTime();
}, 1000);
// Если вкладка "События" активна по умолчанию, загружаем события
const eventsTab = document.getElementById('tab-events');
if (eventsTab && eventsTab.classList.contains('active')) {
loadEvents(1);
await loadEvents(1);
}
console.log('[Logs] Инициализация завершена');
@@ -508,7 +517,9 @@ function init(): void {
// Запускаем инициализацию после загрузки DOM
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', init);
document.addEventListener('DOMContentLoaded', () => {
void init();
});
} else {
init();
void init();
}