From 7ce0d1e501de3e9b46f9ec64babf00ec58429003 Mon Sep 17 00:00:00 2001 From: alekan Date: Wed, 25 Mar 2026 23:18:05 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D1=81=D1=82=D1=80=D0=B0=D0=BD=D0=B8=D1=86=D0=B0?= =?UTF-8?q?=20=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BA?= =?UTF-8?q?=D0=B0=D1=84=D0=B5=D0=B4=D1=80=D1=8B/=D1=81=D0=BF=D0=B5=D1=86?= =?UTF-8?q?=D0=B8=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D1=81=D1=82=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .agents/rules/1.md | 6 ++ .agents/skills/SKILL.md | 29 ++++++ frontend/admin/css/departments-data.css | 11 +++ frontend/admin/index.html | 8 ++ frontend/admin/js/main.js | 2 + frontend/admin/js/views/departments-data.js | 103 ++++++++++++++++++++ frontend/admin/views/departments-data.html | 80 +++++++++++++++ 7 files changed, 239 insertions(+) create mode 100644 .agents/rules/1.md create mode 100644 .agents/skills/SKILL.md create mode 100644 frontend/admin/css/departments-data.css create mode 100644 frontend/admin/js/views/departments-data.js create mode 100644 frontend/admin/views/departments-data.html diff --git a/.agents/rules/1.md b/.agents/rules/1.md new file mode 100644 index 0000000..513a1d3 --- /dev/null +++ b/.agents/rules/1.md @@ -0,0 +1,6 @@ +--- +trigger: always_on +glob: +description: +--- + diff --git a/.agents/skills/SKILL.md b/.agents/skills/SKILL.md new file mode 100644 index 0000000..ec02af3 --- /dev/null +++ b/.agents/skills/SKILL.md @@ -0,0 +1,29 @@ +Контекст проекта: + +Backend: Java 17, Spring Framework. Учитывай возможности этой версии языка и стандарты фреймворка. + +Frontend: HTML, CSS, JavaScript. + +Правила написания кода и комментариев: + +Проверка: Перед написанием кода изучи проект, его структуру и используемые технологии. Не предлагай решения, которые не соответствуют текущей архитектуре или стеку. + +Язык: Все комментарии и объяснения должны быть строго на русском языке. + +Комментирование кода: Оставляй комментарии, объясняющие, за что отвечает та или иная часть кода. Перед крупными или смысловыми блоками обязательно ставь поясняющие метки (например: ``, /* таблица subjects */, // логика обработки subjects). + +Обоснование решений: При написании нового кода кратко и максимально понятно объясняй, почему мы используем именно это решение, а не другое. + +Современные подходы: На фронтенде используй самые современные и актуальные подходы (например, Flexbox, CSS Grid, семантические теги). + +Правила работы с ошибками (Обучающий режим): + +Если ты находишь ошибку в моем коде, не пиши сразу готовый исправленный код. + +Дай мне точную подсказку, чтобы я мог сам найти и исправить баг (например: "У тебя не закрыт тег в 15 строке", "Ты забыл поставить аннотацию в контроллере Spring" или "Проверь отступы в таком-то классе"). Моя цель — научиться. + +Правила работы с дизайном (UI/UX): + +Перед добавлением новых стилей всегда сначала изучай, какие стили уже используются в проекте, чтобы сохранять единообразие. + +Если ты видишь, что текущий дизайн откровенно плох, нелогичен или устарел — смело предлагай свои идеи по улучшению (цветовая палитра, отступы, шрифты). Я открыт к предложениям по улучшению визуала. \ No newline at end of file diff --git a/frontend/admin/css/departments-data.css b/frontend/admin/css/departments-data.css new file mode 100644 index 0000000..7832560 --- /dev/null +++ b/frontend/admin/css/departments-data.css @@ -0,0 +1,11 @@ +/* Стили для формы создания кафедр и специальностей */ +.departments-data-icon { + margin-right: 0.5rem; +} + +#departments-tbody .loading-row, +#specialties-tbody .loading-row { + text-align: center; + color: var(--text-muted); + padding: 2rem; +} diff --git a/frontend/admin/index.html b/frontend/admin/index.html index 7ddec41..158ee8d 100755 --- a/frontend/admin/index.html +++ b/frontend/admin/index.html @@ -15,6 +15,7 @@ + @@ -58,6 +59,13 @@ Кафедра + + + + + + Создание кафедры/специальности + diff --git a/frontend/admin/js/main.js b/frontend/admin/js/main.js index ae85f6a..dbbd55a 100755 --- a/frontend/admin/js/main.js +++ b/frontend/admin/js/main.js @@ -12,6 +12,7 @@ import { initSubjects } from './views/subjects.js'; import {initSchedule} from "./views/schedule.js"; import {initDatabase} from "./views/database.js"; import {initDepartment} from "./views/department.js"; +import {initDepartmentsData} from "./views/departments-data.js"; // Configuration const ROUTES = { @@ -24,6 +25,7 @@ const ROUTES = { schedule: { title: 'Расписание занятий', file: 'views/schedule.html', init: initSchedule }, database: { title: 'База данных', file: 'views/database.html', init: initDatabase }, department: { title: 'Кафедры', file: 'views/department.html', init: initDepartment }, + 'departments-data': { title: 'Создание кафедры/специальности', file: 'views/departments-data.html', init: initDepartmentsData }, }; let currentTab = null; diff --git a/frontend/admin/js/views/departments-data.js b/frontend/admin/js/views/departments-data.js new file mode 100644 index 0000000..489a188 --- /dev/null +++ b/frontend/admin/js/views/departments-data.js @@ -0,0 +1,103 @@ +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 = '
-
'; + } + + // Load Specialties + try { + specialties = await api.get('/api/specialties'); + renderSpecialties(); + } catch (e) { + specTbody.innerHTML = '
-
'; + } + } + + function renderDepartments() { + if (!departments || !departments.length) { + deptTbody.innerHTML = '
-
'; + return; + } + deptTbody.innerHTML = departments.map(d => ` +
+ ${d.id} + ${escapeHtml(d.departmentName || d.name)} + ${escapeHtml(String(d.departmentCode || d.code))} +
+ `).join(''); + } + + function renderSpecialties() { + if (!specialties || !specialties.length) { + specTbody.innerHTML = '
-
'; + return; + } + specTbody.innerHTML = specialties.map(s => ` +
+ ${s.id} + ${escapeHtml(s.specialityName || s.name)} + ${escapeHtml(s.specialityCode || s.specialtyCode || s.specialty_code)} +
+ `).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(); +} diff --git a/frontend/admin/views/departments-data.html b/frontend/admin/views/departments-data.html new file mode 100644 index 0000000..a7ae105 --- /dev/null +++ b/frontend/admin/views/departments-data.html @@ -0,0 +1,80 @@ + +
+

Создание кафедры

+
+
+
+ + +
+
+ + +
+ +
+ +
+
+ +
+
+

Кафедры

+
+
+ + + + + + + + + + + + + +
IDНазваниеКод
Загрузка...
+
+
+ +
+

Создание специальности

+
+
+
+ + +
+
+ + +
+ +
+ +
+
+ +
+
+

Специальности

+
+
+ + + + + + + + + + + + + +
IDНазваниеКод специальности
Загрузка...
+
+