Добавлены модальные окна для заявок и секция карты

This commit is contained in:
EDeev 2025-12-27 15:52:00 +03:00
parent 4bd1ed72db
commit 634f312edb
2 changed files with 524 additions and 3 deletions

View file

@ -44,7 +44,7 @@
<span id="ordersCount" class="badge bg-primary">0 заявок</span> <span id="ordersCount" class="badge bg-primary">0 заявок</span>
</div> </div>
<div class="card-body"> <div class="card-body">
<div id="emptyState" class="text-center py-5"> <div id="emptyState" class="text-center py-5" style="display: none;">
<i class="bi bi-inbox fs-1 text-muted"></i> <i class="bi bi-inbox fs-1 text-muted"></i>
<h4 class="mt-3">У вас пока нет заявок</h4> <h4 class="mt-3">У вас пока нет заявок</h4>
<p class="text-muted">Оформите заявку на курс или репетитора на главной странице</p> <p class="text-muted">Оформите заявку на курс или репетитора на главной странице</p>
@ -60,11 +60,16 @@
<th>Название</th> <th>Название</th>
<th>Дата</th> <th>Дата</th>
<th>Стоимость</th> <th>Стоимость</th>
<th>Действия</th>
</tr> </tr>
</thead> </thead>
<tbody id="ordersList"></tbody> <tbody id="ordersList"></tbody>
</table> </table>
</div> </div>
<nav>
<ul id="ordersPagination" class="pagination justify-content-center"></ul>
</nav>
</div> </div>
</div> </div>
</div> </div>
@ -83,6 +88,190 @@
</div> </div>
</footer> </footer>
<div class="modal fade" id="orderDetailModal" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Подробности заявки</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body" id="orderDetailContent"></div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Закрыть</button>
</div>
</div>
</div>
</div>
<div class="modal fade" id="editOrderModal" tabindex="-1">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Редактирование заявки</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<form id="editOrderForm">
<input type="hidden" id="editOrderId">
<input type="hidden" id="editCourseId">
<input type="hidden" id="editTutorId">
<div id="editCourseFields" style="display: none;">
<div class="mb-3">
<label class="form-label">Название курса</label>
<input type="text" id="editCourseName" class="form-control" readonly>
</div>
<div class="mb-3">
<label class="form-label">Преподаватель</label>
<input type="text" id="editCourseTeacher" class="form-control" readonly>
</div>
<div class="mb-3">
<label class="form-label">Дата начала</label>
<select id="editCourseStartDate" class="form-select" required></select>
</div>
<div class="mb-3">
<label class="form-label">Время начала</label>
<select id="editCourseStartTime" class="form-select" required></select>
</div>
<div class="mb-3">
<label class="form-label">Продолжительность курса</label>
<input type="text" id="editCourseDuration" class="form-control" readonly>
</div>
<div class="mb-3">
<label class="form-label">Дата окончания курса</label>
<input type="text" id="editCourseEndDate" class="form-control" readonly>
</div>
<div class="mb-3">
<label class="form-label">Количество студентов</label>
<input type="number" id="editStudentsNumber" class="form-control" min="1" max="20" required>
</div>
<div class="mb-3">
<label class="form-label">Автоматические опции</label>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="editEarlyRegistration" disabled>
<label class="form-check-label" for="editEarlyRegistration">
Ранняя регистрация (-10%)
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="editGroupEnrollment" disabled>
<label class="form-check-label" for="editGroupEnrollment">
Групповая скидка (-15%)
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="editIntensiveCourse" disabled>
<label class="form-check-label" for="editIntensiveCourse">
Интенсивный курс (+20%)
</label>
</div>
</div>
<div class="mb-3">
<label class="form-label">Дополнительные опции</label>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="editSupplementary">
<label class="form-check-label" for="editSupplementary">
Дополнительные учебные материалы (+2000₽/студ.)
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="editPersonalized">
<label class="form-check-label" for="editPersonalized">
Индивидуальные занятия (+1500₽/нед.)
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="editExcursions">
<label class="form-check-label" for="editExcursions">
Культурные экскурсии (+25%)
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="editAssessment">
<label class="form-check-label" for="editAssessment">
Оценка уровня владения языком (+300₽)
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="editInteractive">
<label class="form-check-label" for="editInteractive">
Доступ к интерактивной онлайн-платформе (+50%)
</label>
</div>
</div>
</div>
<div id="editTutorFields" style="display: none;">
<div class="mb-3">
<label class="form-label">Репетитор</label>
<input type="text" id="editTutorName" class="form-control" readonly>
</div>
</div>
<div class="mb-3">
<label class="form-label">Ваше имя</label>
<input type="text" id="editStudentName" class="form-control" required>
</div>
<div class="mb-3">
<label class="form-label">Телефон</label>
<input type="tel" id="editStudentPhone" class="form-control" pattern="[+]?[0-9]{10,15}" required>
</div>
<div class="mb-3">
<label class="form-label">Email</label>
<input type="email" id="editStudentEmail" class="form-control" required>
</div>
<div class="mb-3">
<label class="form-label">Сообщение</label>
<textarea id="editStudentMessage" class="form-control" rows="3"></textarea>
</div>
<div class="alert alert-info">
<h5>Итоговая стоимость: <span id="editTotalPrice">0</span></h5>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Отмена</button>
<button type="button" id="saveOrderChanges" class="btn btn-warning">Сохранить</button>
</div>
</div>
</div>
</div>
<div class="modal fade" id="deleteOrderModal" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Удаление</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<p>Вы уверены, что хотите удалить заявку?</p>
<p class="text-muted">Это действие нельзя отменить.</p>
<input type="hidden" id="deleteOrderId">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Нет</button>
<button type="button" id="confirmDelete" class="btn btn-danger">Да, удалить</button>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
<script src="js/api.js"></script>
<script src="js/utils.js"></script>
<script src="js/account.js"></script>
</body> </body>
</html> </html>

View file

@ -30,6 +30,9 @@
<li class="nav-item"> <li class="nav-item">
<a class="nav-link" href="#tutors">Репетиторы</a> <a class="nav-link" href="#tutors">Репетиторы</a>
</li> </li>
<li class="nav-item">
<a class="nav-link" href="#map">Карта</a>
</li>
<li class="nav-item"> <li class="nav-item">
<a class="nav-link" href="#contacts">Контакты</a> <a class="nav-link" href="#contacts">Контакты</a>
</li> </li>
@ -90,6 +93,33 @@
</div> </div>
</div> </div>
</div> </div>
<div class="col">
<div class="card h-100 text-center border-0 shadow-sm">
<div class="card-body">
<i class="bi bi-clock fs-1 text-primary mb-3"></i>
<h5 class="card-title">Гибкий график</h5>
<p class="card-text">Занятия в удобное для вас время, включая выходные дни</p>
</div>
</div>
</div>
<div class="col">
<div class="card h-100 text-center border-0 shadow-sm">
<div class="card-body">
<i class="bi bi-people fs-1 text-primary mb-3"></i>
<h5 class="card-title">Малые группы</h5>
<p class="card-text">Индивидуальный подход к каждому студенту в группах до 10 человек</p>
</div>
</div>
</div>
<div class="col">
<div class="card h-100 text-center border-0 shadow-sm">
<div class="card-body">
<i class="bi bi-award fs-1 text-primary mb-3"></i>
<h5 class="card-title">Сертификация</h5>
<p class="card-text">Получите международный сертификат по окончании курса</p>
</div>
</div>
</div>
</div> </div>
</div> </div>
</section> </section>
@ -97,13 +127,76 @@
<section id="courses" class="py-5"> <section id="courses" class="py-5">
<div class="container"> <div class="container">
<h2 class="text-center mb-5">Наши курсы</h2> <h2 class="text-center mb-5">Наши курсы</h2>
<div class="card mb-4">
<div class="card-body">
<div class="row g-3">
<div class="col-12 col-md-4">
<input type="text" id="courseSearch" class="form-control" placeholder="Поиск по названию">
</div>
<div class="col-12 col-md-3">
<select id="levelFilter" class="form-select">
<option value="">Все уровни</option>
<option value="Beginner">Начальный</option>
<option value="Intermediate">Средний</option>
<option value="Advanced">Продвинутый</option>
</select>
</div>
<div class="col-12 col-md-5">
<select id="sortCourses" class="form-select">
<option value="">Сортировка</option>
<option value="duration_asc">Длительность ↑</option>
<option value="duration_desc">Длительность ↓</option>
<option value="price_asc">Цена ↑</option>
<option value="price_desc">Цена ↓</option>
</select>
</div>
</div>
</div>
</div>
<div id="coursesList"></div> <div id="coursesList"></div>
<nav>
<ul id="coursesPagination" class="pagination justify-content-center"></ul>
</nav>
</div> </div>
</section> </section>
<section id="tutors" class="py-5 bg-light"> <section id="tutors" class="py-5 bg-light">
<div class="container"> <div class="container">
<h2 class="text-center mb-5">Доступные репетиторы</h2> <h2 class="text-center mb-5">Доступные репетиторы</h2>
<div class="card mb-4">
<div class="card-body">
<div class="row g-3">
<div class="col-md-3">
<select id="tutorLevelFilter" class="form-select">
<option value="">Все уровни</option>
<option value="Beginner">Начальный</option>
<option value="Intermediate">Средний</option>
<option value="Advanced">Продвинутый</option>
</select>
</div>
<div class="col-md-3">
<input type="number" id="minExperience" class="form-control" placeholder="Мин. опыт (лет)" min="0">
</div>
<div class="col-md-3">
<select id="languageFilter" class="form-select">
<option value="">Все языки</option>
</select>
</div>
<div class="col-md-3">
<select id="sortTutors" class="form-select">
<option value="">Сортировка</option>
<option value="price_asc">Цена ↑</option>
<option value="price_desc">Цена ↓</option>
</select>
</div>
</div>
</div>
</div>
<div class="table-responsive"> <div class="table-responsive">
<table class="table table-hover"> <table class="table table-hover">
<thead> <thead>
@ -113,11 +206,60 @@
<th>Языки</th> <th>Языки</th>
<th>Опыт</th> <th>Опыт</th>
<th>Ставка</th> <th>Ставка</th>
<th>Действие</th>
</tr> </tr>
</thead> </thead>
<tbody id="tutorsList"></tbody> <tbody id="tutorsList"></tbody>
</table> </table>
</div> </div>
<nav>
<ul id="tutorsPagination" class="pagination justify-content-center"></ul>
</nav>
</div>
</section>
<section id="map" class="py-5">
<div class="container">
<h2 class="text-center mb-3">Карта учебных ресурсов</h2>
<p class="text-center text-muted mb-4">Найдите библиотеки, коворкинги и другие места для обучения</p>
<div class="mb-4">
<div class="d-flex flex-wrap justify-content-center gap-2" role="group">
<button type="button" class="btn btn-outline-primary map-filter-btn active" data-filter="all">
Все ресурсы
</button>
<button type="button" class="btn btn-outline-primary map-filter-btn" data-filter="education">
Образовательные учреждения
</button>
<button type="button" class="btn btn-outline-primary map-filter-btn" data-filter="library">
Библиотеки
</button>
<button type="button" class="btn btn-outline-primary map-filter-btn" data-filter="language_school">
Языковые школы
</button>
<button type="button" class="btn btn-outline-primary map-filter-btn" data-filter="coworking">
Коворкинги
</button>
<button type="button" class="btn btn-outline-primary map-filter-btn" data-filter="cultural_center">
Культурные центры
</button>
</div>
</div>
<div class="row">
<div class="col-lg-8 mb-4 mb-lg-0">
<div id="resourceMap" style="height: 500px; border-radius: 8px;"></div>
</div>
<div class="col-lg-4">
<div class="card">
<div class="card-header">
<h5 class="mb-0">Список ресурсов</h5>
</div>
<div id="resourcesList" class="card-body" style="max-height: 500px; overflow-y: auto;"></div>
</div>
</div>
</div>
</div> </div>
</section> </section>
@ -148,6 +290,196 @@
</div> </div>
</footer> </footer>
<div class="modal fade" id="courseModal" tabindex="-1">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Оформление заявки на курс</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<form id="courseOrderForm">
<input type="hidden" id="courseId">
<input type="hidden" id="orderMode" value="create">
<div class="mb-3">
<label class="form-label">Название курса</label>
<input type="text" id="courseName" class="form-control" readonly>
</div>
<div class="mb-3">
<label class="form-label">Преподаватель</label>
<input type="text" id="courseTeacher" class="form-control" readonly>
</div>
<div class="mb-3">
<label class="form-label">Дата начала <span class="text-danger">*</span></label>
<select id="courseStartDate" class="form-select" required>
<option value="">Выберите дату</option>
</select>
</div>
<div class="mb-3">
<label class="form-label">Время начала <span class="text-danger">*</span></label>
<select id="courseStartTime" class="form-select" required disabled>
<option value="">Сначала выберите дату</option>
</select>
</div>
<div class="mb-3">
<label class="form-label">Продолжительность курса</label>
<input type="text" id="courseDuration" class="form-control" readonly>
</div>
<div class="mb-3">
<label class="form-label">Дата окончания курса</label>
<input type="text" id="courseEndDate" class="form-control" readonly>
</div>
<div class="mb-3">
<label class="form-label">Количество студентов <span class="text-danger">*</span></label>
<input type="number" id="studentsNumber" class="form-control" min="1" max="20" value="1" required>
</div>
<div class="mb-3">
<label class="form-label">Автоматические опции</label>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="earlyRegistration" disabled>
<label class="form-check-label" for="earlyRegistration">
Ранняя регистрация (-10%)
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="groupEnrollment" disabled>
<label class="form-check-label" for="groupEnrollment">
Групповая скидка (-15%)
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="intensiveCourse" disabled>
<label class="form-check-label" for="intensiveCourse">
Интенсивный курс (+20%)
</label>
</div>
</div>
<div class="mb-3">
<label class="form-label">Дополнительные опции</label>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="supplementary">
<label class="form-check-label" for="supplementary">
Дополнительные учебные материалы (+2000₽/студ.)
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="personalized">
<label class="form-check-label" for="personalized">
Индивидуальные занятия (+1500₽/нед.)
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="excursions">
<label class="form-check-label" for="excursions">
Культурные экскурсии (+25%)
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="assessment">
<label class="form-check-label" for="assessment">
Оценка уровня владения языком (+300₽)
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="interactive">
<label class="form-check-label" for="interactive">
Доступ к интерактивной онлайн-платформе (+50%)
</label>
</div>
</div>
<div class="mb-3">
<label class="form-label">Ваше имя <span class="text-danger">*</span></label>
<input type="text" id="studentName" class="form-control" required>
</div>
<div class="mb-3">
<label class="form-label">Телефон <span class="text-danger">*</span></label>
<input type="tel" id="studentPhone" class="form-control" pattern="[+]?[0-9]{10,15}" required>
</div>
<div class="mb-3">
<label class="form-label">Email <span class="text-danger">*</span></label>
<input type="email" id="studentEmail" class="form-control" required>
</div>
<div class="mb-3">
<label class="form-label">Сообщение</label>
<textarea id="studentMessage" class="form-control" rows="3"></textarea>
</div>
<div class="alert alert-info">
<h5>Итоговая стоимость: <span id="totalPrice">0</span></h5>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Отмена</button>
<button type="button" id="submitCourseOrder" class="btn btn-primary">Отправить заявку</button>
</div>
</div>
</div>
</div>
<div class="modal fade" id="tutorModal" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Заявка на репетитора</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<form id="tutorOrderForm">
<input type="hidden" id="tutorId">
<div class="mb-3">
<label class="form-label">Репетитор</label>
<input type="text" id="tutorName" class="form-control" readonly>
</div>
<div class="mb-3">
<label class="form-label">Ваше имя <span class="text-danger">*</span></label>
<input type="text" id="tutorStudentName" class="form-control" required>
</div>
<div class="mb-3">
<label class="form-label">Телефон <span class="text-danger">*</span></label>
<input type="tel" id="tutorStudentPhone" class="form-control" pattern="[+]?[0-9]{10,15}" required>
</div>
<div class="mb-3">
<label class="form-label">Email <span class="text-danger">*</span></label>
<input type="email" id="tutorStudentEmail" class="form-control" required>
</div>
<div class="mb-3">
<label class="form-label">Сообщение</label>
<textarea id="tutorStudentMessage" class="form-control" rows="3"></textarea>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Отмена</button>
<button type="button" id="submitTutorOrder" class="btn btn-success">Отправить заявку</button>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://api-maps.yandex.ru/2.1/?apikey=ff34c822-32b5-439f-ab28-f191c8ed28cd&lang=ru_RU" defer></script>
<script src="js/api.js"></script>
<script src="js/utils.js"></script>
<script src="js/app.js"></script>
<script src="js/map.js"></script>
</body> </body>
</html> </html>