🎨 Добавлен фронтенд для команды и карьеры
Some checks failed
continuous-integration/drone/push Build is failing

 Новые страницы:
- 👥 /team/ - Страница команды с детальной информацией
  • Красивые карточки сотрудников с фото
  • Социальные сети и контактные данные
  • Навыки и опыт работы
  • Адаптивный дизайн с hover эффектами

- 💼 /career/ - Страница карьеры с вакансиями
  • Рекомендуемые и обычные вакансии
  • Фильтры по отделам
  • Детальная информация о позициях
  • Зарплатные вилки и требования
  • Интеграция с email для откликов

🏠 Главная страница:
- Интеграция секций команды и карьеры
- Гармоничное размещение между существующими блоками
- Топ-4 сотрудника и топ-3 вакансии
- Кнопки перехода на полные страницы

🧭 Навигация:
- Добавлены ссылки 'Команда' и 'Карьера' в меню
- Активные состояния для новых страниц
- Адаптивная навигация для мобильных

🎯 UX/UI улучшения:
- Современный градиентный дизайн
- Анимации и hover эффекты
- Skill tags и бейджи
- Responsive дизайн для всех устройств
- Интеграция с социальными сетями
This commit is contained in:
2025-11-25 17:09:15 +09:00
parent ec01a2ae10
commit 9839389fc9
7 changed files with 1435 additions and 1 deletions

View File

@@ -1,5 +1,5 @@
from django.shortcuts import render, get_object_or_404, redirect
from .models import Service, Project, Client, BlogPost, Review, Order, ServiceRequest, HeroBanner, Category, ContactInfo
from .models import Service, Project, Client, BlogPost, Review, Order, ServiceRequest, HeroBanner, Category, ContactInfo, Team, Career
from django.db.models import Avg
from comunication.models import TelegramSettings
import qrcode
@@ -41,12 +41,18 @@ def home(request):
latest_blog_posts = BlogPost.objects.all()[:2] # Последние статьи блога
reviews = Review.objects.all()[:3] # Отзывы клиентов
# Данные для команды и карьеры
team_members = Team.objects.filter(is_active=True, show_on_about=True).order_by('display_order')[:4] # Показываем топ-4 участников команды
featured_careers = Career.objects.filter(status='active', is_featured=True).order_by('-created_at')[:3] # Топ-3 рекомендуемые вакансии
return render(request, 'web/home_modern.html', {
'services': services,
'hero_banners': hero_banners,
'latest_projects': latest_projects,
'latest_blog_posts': latest_blog_posts,
'reviews': reviews,
'team_members': team_members,
'featured_careers': featured_careers,
})
def service_detail(request, pk):
@@ -359,3 +365,30 @@ def check_request_status(request, request_id):
except Exception as e:
logger.error(f"Ошибка при проверке статуса заявки {request_id}: {str(e)}")
return JsonResponse({'error': 'Ошибка сервера'}, status=500)
def team_view(request):
"""Страница команды"""
team_members = Team.objects.filter(is_active=True).order_by('display_order', 'last_name')
return render(request, 'web/team.html', {
'team_members': team_members,
})
def career_view(request):
"""Страница карьеры"""
# Активные вакансии
active_careers = Career.objects.filter(status='active').order_by('-is_featured', '-created_at')
# Рекомендуемые вакансии
featured_careers = active_careers.filter(is_featured=True)
# Статистика
departments = Career.objects.filter(status='active').values_list('department', flat=True).distinct()
return render(request, 'web/career.html', {
'active_careers': active_careers,
'featured_careers': featured_careers,
'departments': departments,
'total_positions': active_careers.count(),
})