104 lines
3.7 KiB
JavaScript
104 lines
3.7 KiB
JavaScript
import { api } from '../api.js';
|
|
import { escapeHtml, showAlert, hideAlert } from '../utils.js';
|
|
|
|
export async function initDepartmentsData() {
|
|
const deptTbody = document.getElementById('departments-tbody');
|
|
const specTbody = document.getElementById('specialties-tbody');
|
|
|
|
const createDeptForm = document.getElementById('create-department-form');
|
|
const createSpecForm = document.getElementById('create-specialty-form');
|
|
|
|
let departments = [];
|
|
let specialties = [];
|
|
|
|
async function loadData() {
|
|
// Load Departments
|
|
try {
|
|
departments = await api.get('/api/departments');
|
|
renderDepartments();
|
|
} catch (e) {
|
|
deptTbody.innerHTML = '<tr><td colspan="3" class="loading-row">-</td></tr>';
|
|
}
|
|
|
|
// Load Specialties
|
|
try {
|
|
specialties = await api.get('/api/specialties');
|
|
renderSpecialties();
|
|
} catch (e) {
|
|
specTbody.innerHTML = '<tr><td colspan="3" class="loading-row">-</td></tr>';
|
|
}
|
|
}
|
|
|
|
function renderDepartments() {
|
|
if (!departments || !departments.length) {
|
|
deptTbody.innerHTML = '<tr><td colspan="3" class="loading-row">-</td></tr>';
|
|
return;
|
|
}
|
|
deptTbody.innerHTML = departments.map(d => `
|
|
<tr>
|
|
<td>${d.id}</td>
|
|
<td>${escapeHtml(d.departmentName || d.name)}</td>
|
|
<td>${escapeHtml(String(d.departmentCode || d.code))}</td>
|
|
</tr>
|
|
`).join('');
|
|
}
|
|
|
|
function renderSpecialties() {
|
|
if (!specialties || !specialties.length) {
|
|
specTbody.innerHTML = '<tr><td colspan="3" class="loading-row">-</td></tr>';
|
|
return;
|
|
}
|
|
specTbody.innerHTML = specialties.map(s => `
|
|
<tr>
|
|
<td>${s.id}</td>
|
|
<td>${escapeHtml(s.specialityName || s.name)}</td>
|
|
<td>${escapeHtml(s.specialityCode || s.specialtyCode || s.specialty_code)}</td>
|
|
</tr>
|
|
`).join('');
|
|
}
|
|
|
|
createDeptForm.addEventListener('submit', async (e) => {
|
|
e.preventDefault();
|
|
hideAlert('create-dept-alert');
|
|
const name = document.getElementById('dept-name').value.trim();
|
|
const code = document.getElementById('dept-code').value.trim();
|
|
|
|
if (!name || !code) {
|
|
showAlert('create-dept-alert', 'Заполните все поля', 'error');
|
|
return;
|
|
}
|
|
|
|
try {
|
|
await api.post('/api/departments', { departmentName: name, departmentCode: Number(code) });
|
|
showAlert('create-dept-alert', `Кафедра "${name}" создана`, 'success');
|
|
createDeptForm.reset();
|
|
loadData();
|
|
} catch (error) {
|
|
showAlert('create-dept-alert', error.message || 'Ошибка создания кафедры', 'error');
|
|
}
|
|
});
|
|
|
|
createSpecForm.addEventListener('submit', async (e) => {
|
|
e.preventDefault();
|
|
hideAlert('create-spec-alert');
|
|
const name = document.getElementById('spec-name').value.trim();
|
|
const code = document.getElementById('spec-code').value.trim();
|
|
|
|
if (!name || !code) {
|
|
showAlert('create-spec-alert', 'Заполните все поля', 'error');
|
|
return;
|
|
}
|
|
|
|
try {
|
|
await api.post('/api/specialties', { specialityName: name, specialityCode: code });
|
|
showAlert('create-spec-alert', `Специальность "${name}" создана`, 'success');
|
|
createSpecForm.reset();
|
|
loadData();
|
|
} catch (error) {
|
|
showAlert('create-spec-alert', error.message || 'Ошибка создания специальности', 'error');
|
|
}
|
|
});
|
|
|
|
loadData();
|
|
}
|