// admin-dashboard.js
// Функции для работы с дашбордом административной панели
function renderDashboard() {
const dashboardContainer = document.getElementById('admin-dashboard');
if (!dashboardContainer) return;
dashboardContainer.innerHTML = `
Статистика системы
Задачи
0
Всего задач в системе
Активные:
0
Закрытые:
0
Удаленные:
0
Статусы назначений
0
Всего назначений
Назначено:
0
В работе:
0
Выполнено:
0
Просрочено:
0
На доработке:
0
Пользователи
0
Зарегистрировано пользователей
Администраторы:
0
Учителя:
0
LDAP:
0
Локальные:
0
Файлы
0
Всего загружено файлов
0 MB
`;
// После создания HTML загружаем статистику
loadDashboardStats();
}
async function loadDashboardStats() {
try {
const response = await fetch('/admin/stats');
if (response.ok) {
const stats = await response.json();
updateStatsUI(stats);
} else {
// Если API недоступно, используем данные из вашего скриншота
const defaultStats = {
totalTasks: 46,
activeTasks: 43,
closedTasks: 0,
deletedTasks: 3,
totalAssignments: 61,
assignedCount: 15,
inProgressCount: 1,
completedCount: 9,
overdueCount: 36,
reworkCount: 0,
totalUsers: 4,
adminUsers: 1,
teacherUsers: 1,
ldapUsers: 4,
localUsers: 0,
totalFiles: 27,
totalFilesSize: 10.96 * 1024 * 1024 // 10.96 MB в байтах
};
updateStatsUI(defaultStats);
}
} catch (error) {
console.error('Ошибка загрузки статистики:', error);
showDashboardError();
}
}
function updateStatsUI(stats) {
// Проверяем, существует ли элемент dashboard
const dashboard = document.getElementById('admin-dashboard');
if (!dashboard || !dashboard.classList.contains('active')) {
return;
}
// Задачи
setElementText('total-tasks', stats.totalTasks || 0);
setElementText('active-tasks', stats.activeTasks || 0);
setElementText('closed-tasks', stats.closedTasks || 0);
setElementText('deleted-tasks', stats.deletedTasks || 0);
// Процент активных задач
if (stats.totalTasks > 0) {
const activePercentage = Math.round((stats.activeTasks / stats.totalTasks) * 100);
const activeBar = document.getElementById('active-tasks-bar');
if (activeBar) {
activeBar.style.width = `${activePercentage}%`;
}
}
// Назначения
setElementText('total-assignments', stats.totalAssignments || 0);
setElementText('assigned-count', stats.assignedCount || 0);
setElementText('in-progress-count', stats.inProgressCount || 0);
setElementText('completed-count', stats.completedCount || 0);
setElementText('overdue-count', stats.overdueCount || 0);
setElementText('rework-count', stats.reworkCount || 0);
// Пользователи
setElementText('total-users', stats.totalUsers || 0);
setElementText('admin-users', stats.adminUsers || 0);
setElementText('teacher-users', stats.teacherUsers || 0);
setElementText('ldap-users', stats.ldapUsers || 0);
setElementText('local-users', stats.localUsers || 0);
// Файлы
setElementText('total-files', stats.totalFiles || 0);
const fileSizeMB = stats.totalFilesSize ? (stats.totalFilesSize / 1024 / 1024).toFixed(2) : '0';
setElementText('total-files-size', `${fileSizeMB} MB`);
}
function setElementText(id, text) {
const element = document.getElementById(id);
if (element) {
element.textContent = text;
}
}
function showDashboardError() {
const dashboardContainer = document.getElementById('admin-dashboard');
if (dashboardContainer) {
dashboardContainer.innerHTML = `
Статистика системы
Не удалось загрузить статистику системы.
Повторить попытку
`;
}
}
// Автоматическое обновление статистики каждые 30 секунд
setInterval(() => {
if (document.getElementById('admin-dashboard')?.classList.contains('active')) {
loadDashboardStats();
}
}, 30000);
// Инициализация дашборда при загрузке страницы
document.addEventListener('DOMContentLoaded', function() {
// Ждем пока основной скрипт проверит авторизацию
setTimeout(() => {
// Если дашборд активен при загрузке, рендерим его
const dashboard = document.getElementById('admin-dashboard');
if (dashboard && dashboard.classList.contains('active')) {
renderDashboard();
}
}, 100);
});
// Экспортируем функции для использования в admin-script.js
window.renderDashboard = renderDashboard;
window.loadDashboardStats = loadDashboardStats;