Инфентировал страницы логи и стили добавил
This commit is contained in:
@@ -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");
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
Reference in New Issue
Block a user