обновил дизайн, добавил дашборд
This commit is contained in:
@@ -20,47 +20,106 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
startDropdownAutoObserver();
|
||||
});
|
||||
|
||||
import { initUsers } from './views/users.js';
|
||||
import { initGroups } from './views/groups.js';
|
||||
import { initEduForms } from './views/edu-forms.js';
|
||||
import { initEquipments } from './views/equipments.js';
|
||||
import { initClassrooms } from './views/classrooms.js';
|
||||
import { initSubjects } from './views/subjects.js';
|
||||
import {initSchedule} from "./views/schedule.js";
|
||||
import {initDatabase} from "./views/database.js";
|
||||
import {initDepartmentsData} from "./views/departments-data.js";
|
||||
import {initAuditoriumWorkload} from "./views/auditorium-workload.js";
|
||||
import {initProfiles} from "./views/profiles.js";
|
||||
import {initAcademicCalendar} from "./views/academic-calendar.js";
|
||||
import {initScheduleView} from "./views/schedule-view.js";
|
||||
import {initDepartmentWorkspace} from "./views/department-workspace.js";
|
||||
|
||||
// Configuration
|
||||
const ROUTES = {
|
||||
users: { title: 'Управление пользователями', file: '/admin/views/users.html', init: initUsers },
|
||||
groups: { title: 'Управление группами', file: '/admin/views/groups.html', init: initGroups },
|
||||
'edu-forms': { title: 'Формы обучения', file: '/admin/views/edu-forms.html', init: initEduForms },
|
||||
equipments: { title: 'Оборудование', file: '/admin/views/equipments.html', init: initEquipments },
|
||||
classrooms: { title: 'Аудитории', file: '/admin/views/classrooms.html', init: initClassrooms },
|
||||
subjects: { title: 'Дисциплины и преподаватели', file: '/admin/views/subjects.html', init: initSubjects },
|
||||
'department-workspace': { title: 'Кабинет кафедры', file: '/admin/views/department-workspace.html', init: initDepartmentWorkspace },
|
||||
'schedule-view': { title: 'Просмотр расписаний', file: '/admin/views/schedule-view.html', init: initScheduleView },
|
||||
schedule: { title: 'Расписание занятий', file: '/admin/views/schedule.html', init: initSchedule },
|
||||
'academic-calendar': { title: 'Календарный учебный график', file: '/admin/views/academic-calendar.html', init: initAcademicCalendar },
|
||||
'auditorium-workload': { title: 'Загруженность', file: '/admin/views/auditorium-workload.html', init: initAuditoriumWorkload },
|
||||
database: { title: 'База данных', file: '/admin/views/database.html', init: initDatabase },
|
||||
'departments-data': { title: 'Создание кафедры/специальности', file: '/admin/views/departments-data.html', init: initDepartmentsData },
|
||||
profiles: { title: 'Профили обучения', file: '/admin/views/profiles.html', init: initProfiles },
|
||||
dashboard: {
|
||||
title: 'Дашборд',
|
||||
file: '/admin/views/dashboard.html',
|
||||
init: async () => {
|
||||
const module = await import('./views/dashboard.js');
|
||||
await module.initDashboard();
|
||||
}
|
||||
},
|
||||
users: {
|
||||
title: 'Управление пользователями',
|
||||
file: '/admin/views/users.html',
|
||||
init: async () => {
|
||||
const module = await import('./views/users.js');
|
||||
await module.initUsers();
|
||||
}
|
||||
},
|
||||
groups: {
|
||||
title: 'Управление группами',
|
||||
file: '/admin/views/groups.html',
|
||||
init: async () => {
|
||||
const module = await import('./views/groups.js');
|
||||
await module.initGroups();
|
||||
}
|
||||
},
|
||||
classrooms: {
|
||||
title: 'Аудиторный фонд',
|
||||
file: '/admin/views/classrooms.html',
|
||||
init: async () => {
|
||||
const module = await import('./views/classrooms.js');
|
||||
await module.initClassrooms();
|
||||
}
|
||||
},
|
||||
subjects: {
|
||||
title: 'Дисциплины',
|
||||
file: '/admin/views/subjects.html',
|
||||
init: async () => {
|
||||
const module = await import('./views/subjects.js');
|
||||
await module.initSubjects();
|
||||
}
|
||||
},
|
||||
'university-structure': {
|
||||
title: 'Структура вуза',
|
||||
file: '/admin/views/university-structure.html',
|
||||
init: async () => {
|
||||
const module = await import('./views/university-structure.js');
|
||||
await module.initUniversityStructure();
|
||||
}
|
||||
},
|
||||
'department-workspace': {
|
||||
title: 'Кабинет кафедры',
|
||||
file: '/admin/views/department-workspace.html',
|
||||
init: async () => {
|
||||
const module = await import('./views/department-workspace.js');
|
||||
await module.initDepartmentWorkspace();
|
||||
}
|
||||
},
|
||||
'schedule-view': {
|
||||
title: 'Просмотр расписаний',
|
||||
file: '/admin/views/schedule-view.html',
|
||||
init: async () => {
|
||||
const module = await import('./views/schedule-view.js');
|
||||
await module.initScheduleView();
|
||||
}
|
||||
},
|
||||
schedule: {
|
||||
title: 'Расписание занятий',
|
||||
file: '/admin/views/schedule.html',
|
||||
init: async () => {
|
||||
const module = await import('./views/schedule.js');
|
||||
await module.initSchedule();
|
||||
}
|
||||
},
|
||||
'academic-calendar': {
|
||||
title: 'Календарный учебный график',
|
||||
file: '/admin/views/academic-calendar.html',
|
||||
init: async () => {
|
||||
const module = await import('./views/academic-calendar.js');
|
||||
await module.initAcademicCalendar();
|
||||
}
|
||||
},
|
||||
'auditorium-workload': {
|
||||
title: 'Загруженность',
|
||||
file: '/admin/views/auditorium-workload.html',
|
||||
init: async () => {
|
||||
const module = await import('./views/auditorium-workload.js');
|
||||
await module.initAuditoriumWorkload();
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
const ROLE_NAVIGATION = {
|
||||
ADMIN: {
|
||||
defaultTab: 'users',
|
||||
tabs: Object.keys(ROUTES)
|
||||
defaultTab: 'dashboard',
|
||||
tabs: ['dashboard', 'schedule', 'academic-calendar', 'auditorium-workload', 'schedule-view', 'classrooms', 'groups', 'university-structure', 'subjects', 'users']
|
||||
},
|
||||
EDUCATION_OFFICE: {
|
||||
defaultTab: 'schedule-view',
|
||||
tabs: ['schedule-view', 'schedule', 'academic-calendar', 'auditorium-workload', 'classrooms', 'equipments']
|
||||
defaultTab: 'dashboard',
|
||||
tabs: ['dashboard', 'schedule', 'academic-calendar', 'auditorium-workload', 'schedule-view', 'classrooms']
|
||||
},
|
||||
DEPARTMENT: {
|
||||
defaultTab: 'department-workspace',
|
||||
@@ -176,10 +235,13 @@ async function switchTab(tab) {
|
||||
|
||||
// Initialize logic for the tab
|
||||
if (ROUTES[tab].init) {
|
||||
ROUTES[tab].init();
|
||||
await ROUTES[tab].init();
|
||||
}
|
||||
|
||||
currentTab = tab;
|
||||
if (window.location.hash !== `#${tab}`) {
|
||||
window.location.hash = tab;
|
||||
}
|
||||
} catch (e) {
|
||||
appContent.innerHTML = `<div class="form-alert error">Ошибка загрузки вкладки: ${e.message}</div>`;
|
||||
console.error(e);
|
||||
@@ -211,3 +273,10 @@ function configureRoleInterface() {
|
||||
|
||||
const hashTab = window.location.hash.replace('#', '');
|
||||
switchTab(allowedTabs.has(hashTab) ? hashTab : roleNavigation.defaultTab);
|
||||
|
||||
window.addEventListener('hashchange', () => {
|
||||
const hashTab = window.location.hash.replace('#', '');
|
||||
if (allowedTabs.has(hashTab) && hashTab !== currentTab) {
|
||||
switchTab(hashTab);
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user