init 1
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
venv
|
||||||
|
*pycache*
|
||||||
11
Dockerfile
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
FROM python:3.10
|
||||||
|
|
||||||
|
WORKDIR /code
|
||||||
|
|
||||||
|
COPY ./requirements.txt /code/requirements.txt
|
||||||
|
|
||||||
|
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
|
||||||
|
|
||||||
|
COPY ./app /code/app
|
||||||
|
|
||||||
|
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
|
||||||
BIN
app/.DS_Store
vendored
Normal file
105
app/main.py
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
from fastapi import FastAPI, Request, HTTPException
|
||||||
|
from fastapi.responses import HTMLResponse, FileResponse, JSONResponse
|
||||||
|
from fastapi.staticfiles import StaticFiles
|
||||||
|
from fastapi.templating import Jinja2Templates
|
||||||
|
from pydantic import BaseModel, EmailStr
|
||||||
|
from aiogram import Bot, Dispatcher
|
||||||
|
|
||||||
|
BOT_TOKEN = '7102060229:AAE4SWmgKXkCBC482l8Ble5lKzlCV2YIWnM'
|
||||||
|
ID = '340394898'
|
||||||
|
|
||||||
|
bot = Bot( # Образ Бота
|
||||||
|
token=BOT_TOKEN,
|
||||||
|
)
|
||||||
|
|
||||||
|
app = FastAPI()
|
||||||
|
|
||||||
|
# Монтирование статических файлов
|
||||||
|
app.mount("/static", StaticFiles(directory="app/static"), name="static")
|
||||||
|
|
||||||
|
# Инициализация шаблонов
|
||||||
|
templates = Jinja2Templates(directory="app/templates")
|
||||||
|
|
||||||
|
@app.get("/", response_class=HTMLResponse)
|
||||||
|
async def read_index(request: Request):
|
||||||
|
return templates.TemplateResponse("index.html", {"request": request})
|
||||||
|
|
||||||
|
@app.get("/catalog", response_class=HTMLResponse)
|
||||||
|
async def read_catalog(request: Request):
|
||||||
|
return templates.TemplateResponse("catalog.html", {"request": request})
|
||||||
|
|
||||||
|
@app.get("/about", response_class=HTMLResponse)
|
||||||
|
async def read_about(request: Request):
|
||||||
|
return templates.TemplateResponse("about.html", {"request": request})
|
||||||
|
|
||||||
|
@app.get("/contacts", response_class=HTMLResponse)
|
||||||
|
async def read_contacts(request: Request):
|
||||||
|
return templates.TemplateResponse("contacts.html", {"request": request})
|
||||||
|
|
||||||
|
# Дополнительные маршруты для подразделов каталога
|
||||||
|
@app.get("/catalog/{filter_type}", response_class=HTMLResponse)
|
||||||
|
async def read_filter_type(request: Request, filter_type: str):
|
||||||
|
# Здесь вы можете добавить логику для загрузки конкретных данных о типе фильтра
|
||||||
|
return templates.TemplateResponse(f"catalog_{filter_type}.html", {"request": request, "filter_type": filter_type})
|
||||||
|
|
||||||
|
@app.get("/certificates", response_class=HTMLResponse)
|
||||||
|
async def read_certificates(request: Request):
|
||||||
|
certificates = [
|
||||||
|
{
|
||||||
|
"title": "Сертификат соответствия",
|
||||||
|
"description": "Сертификат соответствия",
|
||||||
|
"image": "/static/img/certificates/сертификат1.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Приложение",
|
||||||
|
"description": "Приложение сертификата соответствия",
|
||||||
|
"image": "/static/img/certificates/сертификат2.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Приложение",
|
||||||
|
"description": "Приложение сертификата соответствия",
|
||||||
|
"image": "/static/img/certificates/сертификат3.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Приложение",
|
||||||
|
"description": "Приложение сертификата соответствия",
|
||||||
|
"image": "/static/img/certificates/сертификат4.png"
|
||||||
|
},
|
||||||
|
# Add more certificates as needed
|
||||||
|
]
|
||||||
|
return templates.TemplateResponse("certificates.html", {"request": request, "certificates": certificates})
|
||||||
|
|
||||||
|
class ContactForm(BaseModel):
|
||||||
|
name: str
|
||||||
|
email: EmailStr
|
||||||
|
message: str
|
||||||
|
|
||||||
|
@app.post("/submit-form")
|
||||||
|
async def submit_form(form_data: ContactForm):
|
||||||
|
try:
|
||||||
|
# Здесь вы можете добавить логику для сохранения данных в базу данных
|
||||||
|
# или отправки электронного письма
|
||||||
|
await send_email(form_data)
|
||||||
|
return JSONResponse(content={"message": "Form submitted successfully"}, status_code=200)
|
||||||
|
except Exception as e:
|
||||||
|
raise HTTPException(status_code=500, detail=str(e))
|
||||||
|
|
||||||
|
async def send_email(form_data: ContactForm):
|
||||||
|
|
||||||
|
body = f"""
|
||||||
|
Сообщение от wanlanda
|
||||||
|
Имя: {form_data.name}
|
||||||
|
Email: {form_data.email}
|
||||||
|
Сообщение:
|
||||||
|
{form_data.message}
|
||||||
|
"""
|
||||||
|
print(body)
|
||||||
|
se = await bot.send_message(
|
||||||
|
ID,
|
||||||
|
body,
|
||||||
|
)
|
||||||
|
print(se)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
import uvicorn
|
||||||
|
uvicorn.run(app, host="0.0.0.0", port=8000)
|
||||||
BIN
app/static/.DS_Store
vendored
Normal file
BIN
app/static/img/.DS_Store
vendored
Normal file
BIN
app/static/img/air-filter.jpg
Normal file
|
After Width: | Height: | Size: 73 KiB |
BIN
app/static/img/b1.jpg
Normal file
|
After Width: | Height: | Size: 297 KiB |
BIN
app/static/img/cabin-filter.jpg
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
app/static/img/certificates/сертификат1.png
Normal file
|
After Width: | Height: | Size: 602 KiB |
BIN
app/static/img/certificates/сертификат2.png
Normal file
|
After Width: | Height: | Size: 474 KiB |
BIN
app/static/img/certificates/сертификат3.png
Normal file
|
After Width: | Height: | Size: 446 KiB |
BIN
app/static/img/certificates/сертификат4.png
Normal file
|
After Width: | Height: | Size: 419 KiB |
BIN
app/static/img/fuel-filter.jpg
Normal file
|
After Width: | Height: | Size: 316 KiB |
BIN
app/static/img/oil-filter.jpg
Normal file
|
After Width: | Height: | Size: 50 KiB |
BIN
app/static/img/pbanner.jpg
Normal file
|
After Width: | Height: | Size: 151 KiB |
BIN
app/static/img/salon-filter.jpg
Normal file
|
After Width: | Height: | Size: 79 KiB |
0
app/static/js/main.js
Normal file
BIN
app/templates/.DS_Store
vendored
Normal file
45
app/templates/about.html
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% block title %}О компании - Wanlanda{% endblock %}
|
||||||
|
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<h1 class="text-3xl sm:text-4xl font-bold mb-8 text-wanlanda-green">О компании АНТХИЛЛ</h1>
|
||||||
|
|
||||||
|
<div class="bg-white p-6 rounded-lg shadow mb-8">
|
||||||
|
<h2 class="text-2xl font-bold mb-4 text-wanlanda-green">Наша компания</h2>
|
||||||
|
<p class="mb-4">Компания АНТХИЛЛ является официальным сертифицированным дилером завода-производителя фильтрующих элементов под брендом WANLANDA на территории Сибирского Федерального округа. Применение предлагаемых нами фильтров очень обширное, начиная с легковых/грузовых автомобилей, заканчивая карьерной спецтехникой.</p>
|
||||||
|
<p class="mb-4">Наши фильтры по качеству сравнимы с оригиналами мировых производителей, таких как: Shantui, Shacman, Shaanxi, Howo, KAMA3 и многих других.</p>
|
||||||
|
<p class="mb-4">Склад с большим ассортиментом фильтров в наличии и постоянным торговым запасом. Для заказных позиции осуществляем прямые поставки в кротчайшие сроки.</p>
|
||||||
|
<p class="mb-4">С каждым клиентом мы работаем индивидуально и предлагаем лучшее предложение на рынке!</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="bg-white p-6 rounded-lg shadow mb-8">
|
||||||
|
<h2 class="text-2xl font-bold mb-4 text-wanlanda-green">О компании Wanlanda</h2>
|
||||||
|
<p class="mb-4">Компания Guanzhou Wanlanda Auto Parts Co. Ltd. была основана в 1989 году. Спустя 35 лет завод является огромным предприятием с передовыми производственными и испытательными мощностями.</p>
|
||||||
|
<p class="mb-4">Wanlanda Filter специализируется на воздушных, салонных, масляных, топливных, фильтрах для всех видов автомобилей и инженерной техники.</p>
|
||||||
|
<p class="mb-4">Для обеспечения высокоэффективной фильтрации и длительного срока службы фильтры Wanlanda производятся строго в соответствии с оригинальными заводскими спецификациями. Все фильтры Wanlanda прошли строгий контроль качества, включая эксперименты по эффективности, испытания на выносливость, испытания на вибрацию и т.д.</p>
|
||||||
|
<p class="mb-4">Компания Wanlanda успешно экспортирует свою продукцию в Южную Америку, на Ближний Восток, Африку, Европу, Центральную и Юго-Восточную Азию, сохраняя оптимальное соотношение конкурентоспособной цены и качества.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="bg-white p-6 rounded-lg shadow">
|
||||||
|
<h2 class="text-2xl font-bold mb-4 text-wanlanda-green">Наши преимущества</h2>
|
||||||
|
<ul class="list-disc list-inside">
|
||||||
|
<li class="mb-2">Эксклюзивное представительство Wanlanda в Сибири</li>
|
||||||
|
<li class="mb-2">Высокое качество продукции: мы предлагаем фильтры премиум класса, соответствующие самым высоким стандартам качества. Наше управление качеством сертифицировано ISO - 9001:2015 и IATF 16949:2016, что подтверждает нашу приверженность качеству и надежности</li>
|
||||||
|
<li class="mb-2">Индивидуальные условия: мы готовы предложить вам гибкие условия поставок, ценообразования и сотрудничества, чтобы удовлетворить особенности вашего бизнеса</li>
|
||||||
|
<li class="mb-2">Гарантия качества</li>
|
||||||
|
<li class="mb-2">Техническая поддержка: наша команда экспертов готова предоставить техническую поддержку и консультации по выбору фильтров</li>
|
||||||
|
<li class="mb-2">Собственный склад с большим запасом товаров</li>
|
||||||
|
<li class="mb-2">Гибкие условия доставки/ услуга самовывоза</li>
|
||||||
|
<li class="mb-2">Ответственная поддержка менеджеров</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mt-8 text-center">
|
||||||
|
<p class="text-xl font-semibold mb-4">Надеемся на долговременное и взаимовыгодное сотрудничество!</p>
|
||||||
|
</div>
|
||||||
|
<div class="bg-wanlanda text-center p-2 rounded-lg ">
|
||||||
|
<a href="/contacts" class="bg-white text-wanlanda-green px-6 py-2 rounded-lg hover:bg-gray-100 transition">Получить консультацию</a>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
105
app/templates/base.html
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ru">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>{% block title %}Wanlanda{% endblock %}</title>
|
||||||
|
<script src="https://cdn.tailwindcss.com"></script>
|
||||||
|
<script>
|
||||||
|
tailwind.config = {
|
||||||
|
theme: {
|
||||||
|
extend: {
|
||||||
|
colors: {
|
||||||
|
'wanlanda-green': '#4CAF50',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body class="flex flex-col min-h-screen bg-gray-100">
|
||||||
|
<header class="bg-black text-white shadow-md">
|
||||||
|
<nav class="container mx-auto px-4 py-4">
|
||||||
|
<div class="flex justify-between items-center">
|
||||||
|
<a href="/" class="text-2xl font-bold flex items-center">
|
||||||
|
<!-- <span class="bg-wanlanda-green text-black px-2 py-1 mr-2">W</span> -->
|
||||||
|
<span class="sm:inline">WANLANDA</span>
|
||||||
|
</a>
|
||||||
|
<button id="mobile-menu-button" class="sm:hidden">
|
||||||
|
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16m-7 6h7"></path>
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
<ul class="hidden sm:flex space-x-6">
|
||||||
|
<a href="/" class="hover:text-wanlanda-green transition">Главная</a>
|
||||||
|
<a href="/catalog" class="hover:text-wanlanda-green transition">Каталог</a>
|
||||||
|
<a href="/about" class="hover:text-wanlanda-green transition">О компании</a>
|
||||||
|
<a href="/certificates" class="hover:text-wanlanda-green transition">Сертификаты</a>
|
||||||
|
<a href="/contacts" class="hover:text-wanlanda-green transition">Контакты</a>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div id="mobile-menu" class="hidden sm:hidden mt-4">
|
||||||
|
<ul class="flex flex-col space-y-2">
|
||||||
|
<a href="/" class="block hover:text-wanlanda-green transition">Главная</a>
|
||||||
|
<a href="/catalog" class="block hover:text-wanlanda-green transition">Каталог</a>
|
||||||
|
<a href="/about" class="block hover:text-wanlanda-green transition">О компании</a>
|
||||||
|
<a href="/certificates" class="block hover:text-wanlanda-green transition">Сертификаты</a>
|
||||||
|
<a href="/contacts" class="block hover:text-wanlanda-green transition">Контакты</a>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<main class="flex-grow container mx-auto px-4 py-8">
|
||||||
|
{% block content %}{% endblock %}
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<footer class="bg-black text-white py-8">
|
||||||
|
<div class="container mx-auto px-4">
|
||||||
|
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-8">
|
||||||
|
<div>
|
||||||
|
<h3 class="text-xl font-semibold mb-4">О компании</h3>
|
||||||
|
<p class="mb-4">Anthill - официальный дилер Wanlanda в Сибирском федеральном округе. Мы поставляем высококачественные фильтры для автомобильной и промышленной техники.</p>
|
||||||
|
<p>© 2024 Anthill. Все права защищены.</p>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h3 class="text-xl font-semibold mb-4">Продукция</h3>
|
||||||
|
<ul class="space-y-2">
|
||||||
|
<li><a href="/catalog/air-filters" class="hover:text-wanlanda-green transition">Воздушные фильтры</a></li>
|
||||||
|
<li><a href="/catalog/oil-filters" class="hover:text-wanlanda-green transition">Масляные фильтры</a></li>
|
||||||
|
<li><a href="/catalog/fuel-filters" class="hover:text-wanlanda-green transition">Топливные фильтры</a></li>
|
||||||
|
<li><a href="/catalog/cabin-filters" class="hover:text-wanlanda-green transition">Салонные фильтры</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h3 class="text-xl font-semibold mb-4">Информация</h3>
|
||||||
|
<ul class="space-y-2">
|
||||||
|
<li><a href="/about" class="hover:text-wanlanda-green transition">О нас</a></li>
|
||||||
|
<li><a href="/catalog" class="hover:text-wanlanda-green transition">Каталог</a></li>
|
||||||
|
<li><a href="/certificates" class="hover:text-wanlanda-green transition">Сертификаты</a></li>
|
||||||
|
|
||||||
|
<!-- <li><a href="/news" class="hover:text-wanlanda-green transition">Новости</a></li> -->
|
||||||
|
<!-- <li><a href="/delivery" class="hover:text-wanlanda-green transition">Доставка</a></li> -->
|
||||||
|
<!-- <li><a href="/warranty" class="hover:text-wanlanda-green transition">Гарантия</a></li> -->
|
||||||
|
<li><a href="/contacts" class="hover:text-wanlanda-green transition">Контакты</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h3 class="text-xl font-semibold mb-4">Контакты</h3>
|
||||||
|
<p class="mb-2">Адрес: г. Новокузнецк, ул. Тольятти, д. 5Б, пом. 10</p>
|
||||||
|
<p class="mb-2">Телефон: +7 (905) 906-84-65</p>
|
||||||
|
<p class="mb-2">Email: anthillsib@gmail.com</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
document.getElementById('mobile-menu-button').addEventListener('click', function() {
|
||||||
|
document.getElementById('mobile-menu').classList.toggle('hidden');
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
{% block extra_js %}{% endblock %}
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
43
app/templates/catalog.html
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% block title %}Каталог - Wanlanda{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<h1 class="text-3xl sm:text-4xl font-bold mb-8 text-wanlanda-green">Каталог фильтров Wanlanda</h1>
|
||||||
|
|
||||||
|
<div class="grid grid-cols-1 md:grid-cols-2 gap-8">
|
||||||
|
<!-- Воздушные фильтры -->
|
||||||
|
<section class="bg-white p-6 rounded-lg shadow">
|
||||||
|
<h2 class="text-2xl font-bold mb-4 text-wanlanda-green">Воздушные фильтры</h2>
|
||||||
|
<img src="/static/img/air-filter.jpg" alt="Воздушный фильтр" class="w-fit max-h-80 object-cover mb-4 rounded">
|
||||||
|
<p class="mb-4">Воздушный фильтр является одним из наиболее важных в системе работы тяжелого дизельного двигателя, позволяет двигателю автомобиля «дышать» чистым воздухом. Воздушный фильтр устраняет любой возможный в воздухе сор, включая частицы самой минимальной величины, которые могут навредить двигателю.</p>
|
||||||
|
<a href="/catalog/air-filters" class="text-wanlanda-green hover:underline">Подробнее о воздушных фильтрах</a>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Масляные фильтры -->
|
||||||
|
<section class="bg-white p-6 rounded-lg shadow">
|
||||||
|
<h2 class="text-2xl font-bold mb-4 text-wanlanda-green">Масляные фильтры</h2>
|
||||||
|
<img src="/static/img/oil-filter.jpg" alt="Масляный фильтр" class="w-fit max-h-80 object-cover mb-4 rounded">
|
||||||
|
<p class="mb-4">Двигатель, работающий на грязном масле, проработает недолго. Масляный фильтр задерживает все вредящие двигателю абразивные частицы еще до того, как они могут повлиять на его работу и срок службы. Фильтр должен не просто очищать масло, а делать это эффективно, без создания значительных помех потоку и должен работать продолжительный период времени между заменами масла.</p>
|
||||||
|
<a href="/catalog/oil-filters" class="text-wanlanda-green hover:underline">Подробнее о масляных фильтрах</a>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Топливные фильтры -->
|
||||||
|
<section class="bg-white p-6 rounded-lg shadow">
|
||||||
|
<h2 class="text-2xl font-bold mb-4 text-wanlanda-green">Топливные фильтры</h2>
|
||||||
|
<img src="/static/img/fuel-filter.jpg" alt="Топливный фильтр" class="w-fit max-h-80 object-cover mb-4 rounded">
|
||||||
|
<p class="mb-4">Топливный фильтр защищает двигатель от попадания в него вместе с топливом грязи, ржавчины и других частиц. При использовании некачественного фильтрующего элемента грязь, влага и ржавчина могут попасть в топливный бак. Топливный фильтр защищает топливную систему от попадания в нее загрязнений и преждевременного вывода из строя инжекторной системы или карбюратора двигателя.</p>
|
||||||
|
<a href="/catalog/fuel-filters" class="text-wanlanda-green hover:underline">Подробнее о топливных фильтрах</a>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Салонные фильтры -->
|
||||||
|
<section class="bg-white p-6 rounded-lg shadow">
|
||||||
|
<h2 class="text-2xl font-bold mb-4 text-wanlanda-green">Салонные фильтры</h2>
|
||||||
|
<img src="/static/img/cabin-filter.jpg" alt="Салонный фильтр" class="w-fit max-h-80 object-cover mb-4 rounded">
|
||||||
|
<p class="mb-4">Салонный фильтр помогает задерживать пыльцу, аллергены, дым, пары и запахи. При регулярной замене салонные фильтры могут помочь уменьшить загрязнение и износ систем отопления, вентиляции и кондиционирования воздуха вашего автомобиля. Таким образом, качественный салонный фильтр в течение всего срока службы транспортного средства будет обеспечивать эффективность работы воздушных систем автомобиля и снижать общие затраты на техническое обслуживание.</p>
|
||||||
|
<a href="/catalog/cabin-filters" class="text-wanlanda-green hover:underline">Подробнее о салонных фильтрах</a>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
28
app/templates/catalog_air-filters.html
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% block title %}Воздушные фильтры - Wanlanda{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<h1 class="text-3xl sm:text-4xl font-bold mb-8 text-wanlanda-green">Воздушные фильтры Wanlanda</h1>
|
||||||
|
|
||||||
|
<div class="bg-white p-6 rounded-lg shadow mb-8">
|
||||||
|
<img src="/static/img/air-filter.jpg" alt="Воздушный фильтр Wanlanda" class="w-fit max-h-96 object-cover mb-6 rounded">
|
||||||
|
<p class="mb-4">Воздушные фильтры Wanlanda обеспечивают максимальную защиту двигателя от пыли, грязи и других загрязняющих частиц, содержащихся в воздухе. Наши фильтры разработаны с использованием передовых технологий фильтрации, что гарантирует оптимальную производительность и долговечность двигателя.</p>
|
||||||
|
<h2 class="text-2xl font-bold mb-4 text-wanlanda-green">Преимущества воздушных фильтров Wanlanda:</h2>
|
||||||
|
<ul class="list-disc list-inside mb-4">
|
||||||
|
<li>Высокая эффективность фильтрации (до 99.9% загрязняющих частиц)</li>
|
||||||
|
<li>Увеличенный срок службы по сравнению с обычными фильтрами</li>
|
||||||
|
<li>Улучшенная производительность двигателя и экономия топлива</li>
|
||||||
|
<li>Устойчивость к воздействию влаги и химических веществ</li>
|
||||||
|
<li>Легкость установки и обслуживания</li>
|
||||||
|
</ul>
|
||||||
|
<h2 class="text-2xl font-bold mb-4 text-wanlanda-green">Применение:</h2>
|
||||||
|
<p>Наши воздушные фильтры подходят для широкого спектра автомобилей, грузовиков и промышленной техники. Используйте каталог подбора на нашем сайте, чтобы найти подходящий фильтр для вашего транспортного средства.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="bg-wanlanda-green text-white p-6 rounded-lg shadow">
|
||||||
|
<h2 class="text-2xl font-bold mb-4">Нужна помощь в выборе?</h2>
|
||||||
|
<p class="mb-4">Наши специалисты готовы помочь вам подобрать оптимальный воздушный фильтр для вашего автомобиля или оборудования.</p>
|
||||||
|
<a href="/contacts" class="bg-white text-wanlanda-green px-6 py-2 rounded-lg hover:bg-gray-100 transition">Связаться с нами</a>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
28
app/templates/catalog_cabin-filters.html
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% block title %}Салонные фильтры - Wanlanda{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<h1 class="text-3xl sm:text-4xl font-bold mb-8 text-wanlanda-green">Салонные фильтры Wanlanda</h1>
|
||||||
|
|
||||||
|
<div class="bg-white p-6 rounded-lg shadow mb-8">
|
||||||
|
<img src="/static/img/cabin-filter.jpg" alt="Салонный фильтр Wanlanda" class="w-fit max-h-96 object-cover mb-6 rounded">
|
||||||
|
<p class="mb-4">Салонные фильтры Wanlanda обеспечивают чистоту и свежесть воздуха в салоне автомобиля. Наши фильтры эффективно удаляют пыль, пыльцу, бактерии и неприятные запахи, создавая комфортную и здоровую атмосферу для водителя и пассажиров.</p>
|
||||||
|
<h2 class="text-2xl font-bold mb-4 text-wanlanda-green">Преимущества салонных фильтров Wanlanda:</h2>
|
||||||
|
<ul class="list-disc list-inside mb-4">
|
||||||
|
<li>Высокая эффективность фильтрации мелких частиц и аллергенов</li>
|
||||||
|
<li>Активный угольный слой для нейтрализации запахов (в отдельных моделях)</li>
|
||||||
|
<li>Антибактериальная пропитка для защиты от микроорганизмов</li>
|
||||||
|
<li>Улучшенный воздухообмен в салоне автомобиля</li>
|
||||||
|
<li>Легкость установки и обслуживания</li>
|
||||||
|
</ul>
|
||||||
|
<h2 class="text-2xl font-bold mb-4 text-wanlanda-green">Применение:</h2>
|
||||||
|
<p>Салонные фильтры Wanlanda подходят для большинства современных легковых автомобилей и легких коммерческих транспортных средств. Используйте наш онлайн-каталог для подбора фильтра, соответствующего вашей модели автомобиля.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="bg-wanlanda-green text-white p-6 rounded-lg shadow">
|
||||||
|
<h2 class="text-2xl font-bold mb-4">Заботитесь о чистоте воздуха в салоне?</h2>
|
||||||
|
<p class="mb-4">Наши эксперты помогут вам выбрать оптимальный салонный фильтр для вашего автомобиля и дадут рекомендации по его обслуживанию.</p>
|
||||||
|
<a href="/contacts" class="bg-white text-wanlanda-green px-6 py-2 rounded-lg hover:bg-gray-100 transition">Получить консультацию</a>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
28
app/templates/catalog_fuel-filters.html
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% block title %}Топливные фильтры - Wanlanda{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<h1 class="text-3xl sm:text-4xl font-bold mb-8 text-wanlanda-green">Топливные фильтры Wanlanda</h1>
|
||||||
|
|
||||||
|
<div class="bg-white p-6 rounded-lg shadow mb-8">
|
||||||
|
<img src="/static/img/fuel-filter.jpg" alt="Топливный фильтр Wanlanda" class="w-fit max-h-96 object-cover mb-6 rounded">
|
||||||
|
<p class="mb-4">Топливные фильтры Wanlanda обеспечивают высочайший уровень защиты топливной системы от загрязнений и воды. Наши фильтры гарантируют чистоту топлива, поступающего в двигатель, что способствует его оптимальной работе и долговечности.</p>
|
||||||
|
<h2 class="text-2xl font-bold mb-4 text-wanlanda-green">Преимущества топливных фильтров Wanlanda:</h2>
|
||||||
|
<ul class="list-disc list-inside mb-4">
|
||||||
|
<li>Эффективное удаление твердых частиц и воды из топлива</li>
|
||||||
|
<li>Высокая пропускная способность для бесперебойной подачи топлива</li>
|
||||||
|
<li>Устойчивость к агрессивным компонентам современного топлива</li>
|
||||||
|
<li>Увеличенный ресурс работы</li>
|
||||||
|
<li>Совместимость с различными типами двигателей и видами топлива</li>
|
||||||
|
</ul>
|
||||||
|
<h2 class="text-2xl font-bold mb-4 text-wanlanda-green">Применение:</h2>
|
||||||
|
<p>Топливные фильтры Wanlanda разработаны для использования в легковых и грузовых автомобилях, спецтехнике и промышленном оборудовании. Воспользуйтесь нашим каталогом для подбора фильтра, соответствующего вашему транспортному средству или оборудованию.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="bg-wanlanda-green text-white p-6 rounded-lg shadow">
|
||||||
|
<h2 class="text-2xl font-bold mb-4">Нужна помощь в выборе?</h2>
|
||||||
|
<p class="mb-4">Наши специалисты готовы помочь вам подобрать оптимальный топливный фильтр для вашего автомобиля или оборудования.</p>
|
||||||
|
<a href="/contacts" class="bg-white text-wanlanda-green px-6 py-2 rounded-lg hover:bg-gray-100 transition">Связаться с нами</a>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
30
app/templates/catalog_oil-filters.html
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% block title %}Масляные фильтры - Wanlanda{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<h1 class="text-3xl sm:text-4xl font-bold mb-8 text-wanlanda-green">Масляные фильтры Wanlanda</h1>
|
||||||
|
|
||||||
|
<div class="bg-white p-6 rounded-lg shadow mb-8">
|
||||||
|
<div class="items-center">
|
||||||
|
<img src="/static/img/oil-filter.jpg" alt="Масляный фильтр Wanlanda" class="items-center w-fit max-h-96 object-cover rounded">
|
||||||
|
</div>
|
||||||
|
<p class="mb-4">Масляные фильтры Wanlanda разработаны для обеспечения максимальной защиты двигателя от вредных примесей в масле. Наши фильтры эффективно удаляют металлические частицы, сажу и другие загрязнения, поддерживая чистоту масла и продлевая срок службы двигателя.</p>
|
||||||
|
<h2 class="text-2xl font-bold mb-4 text-wanlanda-green">Преимущества масляных фильтров Wanlanda:</h2>
|
||||||
|
<ul class="list-disc list-inside mb-4">
|
||||||
|
<li>Высокая эффективность фильтрации даже мельчайших частиц</li>
|
||||||
|
<li>Устойчивость к высоким температурам и давлению</li>
|
||||||
|
<li>Увеличенная грязеемкость для длительной защиты</li>
|
||||||
|
<li>Совместимость с различными типами моторных масел</li>
|
||||||
|
<li>Надежный антидренажный клапан для защиты при холодном пуске</li>
|
||||||
|
</ul>
|
||||||
|
<h2 class="text-2xl font-bold mb-4 text-wanlanda-green">Применение:</h2>
|
||||||
|
<p>Масляные фильтры Wanlanda подходят для легковых и грузовых автомобилей, а также промышленного оборудования. Используйте наш онлайн-каталог для подбора фильтра, соответствующего вашему двигателю.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="bg-wanlanda-green text-white p-6 rounded-lg shadow">
|
||||||
|
<h2 class="text-2xl font-bold mb-4">Нужна консультация?</h2>
|
||||||
|
<p class="mb-4">Наши эксперты готовы ответить на ваши вопросы и помочь с выбором оптимального масляного фильтра.</p>
|
||||||
|
<a href="/contacts" class="bg-white text-wanlanda-green px-6 py-2 rounded-lg hover:bg-gray-100 transition">Получить консультацию</a>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
17
app/templates/certificates.html
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
{% block title %}Сертификаты - Wanlanda{% endblock %}
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
<h1 class="text-3xl sm:text-4xl font-bold mb-8 text-wanlanda-green">Сертификаты</h1>
|
||||||
|
|
||||||
|
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
|
||||||
|
{% for certificate in certificates %}
|
||||||
|
<div class="bg-white p-4 rounded-lg shadow">
|
||||||
|
<img src="{{ certificate.image }}" alt="{{ certificate.title }}" class="w-full h-auto object-cover mb-4 rounded">
|
||||||
|
<h2 class="text-xl font-semibold mb-2">{{ certificate.title }}</h2>
|
||||||
|
<!-- <p class="text-gray-600">{{ certificate.description }}</p> -->
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
76
app/templates/contacts.html
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% block title %}Контакты - Wanlanda{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<h1 class="text-3xl sm:text-4xl font-bold mb-8 text-wanlanda-green">Контакты</h1>
|
||||||
|
|
||||||
|
<div class="grid grid-cols-1 md:grid-cols-2 gap-8">
|
||||||
|
<div class="bg-white p-6 rounded-lg shadow">
|
||||||
|
<h2 class="text-2xl font-bold mb-4 text-wanlanda-green">Контактная информация</h2>
|
||||||
|
<p class="mb-2">Адрес: г. Новокузнецк, ул. Тольятти, д. 5Б, пом. 10</p>
|
||||||
|
<p class="mb-2">Телефон: +7 (905) 906-84-65</p>
|
||||||
|
<p class="mb-2">Email: anthillsib@gmail.com</p>
|
||||||
|
<h3 class="text-xl font-bold mt-6 mb-2 text-wanlanda-green">Часы работы</h3>
|
||||||
|
<p class="mb-2">Пн-Пт: 9:00 - 18:00</p>
|
||||||
|
<!-- <p class="mb-2">Сб: 10:00 - 15:00</p> -->
|
||||||
|
<p class="mb-2">Сб, Вс: выходной</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="bg-white p-6 rounded-lg shadow">
|
||||||
|
<h2 class="text-2xl font-bold mb-4 text-wanlanda-green">Напишите нам</h2>
|
||||||
|
|
||||||
|
<form id="contactForm" onsubmit="submitForm(event)">
|
||||||
|
<div class="mb-4">
|
||||||
|
<label for="name" class="block text-gray-700 font-bold mb-2">Имя</label>
|
||||||
|
<input type="text" id="name" name="name" class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-sybiko-red" required>
|
||||||
|
</div>
|
||||||
|
<div class="mb-4">
|
||||||
|
<label for="email" class="block text-gray-700 font-bold mb-2">Email</label>
|
||||||
|
<input type="email" id="email" name="email" class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-sybiko-red" required>
|
||||||
|
</div>
|
||||||
|
<div class="mb-4">
|
||||||
|
<label for="message" class="block text-gray-700 font-bold mb-2">Сообщение</label>
|
||||||
|
<textarea id="message" name="message" rows="4" class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-sybiko-red" required></textarea>
|
||||||
|
</div>
|
||||||
|
<button type="submit" class="bg-wanlanda-green hover:bg-green-700 text-white font-bold py-2 px-4 rounded focus:outline-none focus:shadow-outline">Отправить</button>
|
||||||
|
</form>
|
||||||
|
<div id="formMessage" class="mt-4 text-center hidden"></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
async function submitForm(event) {
|
||||||
|
event.preventDefault();
|
||||||
|
const form = event.target;
|
||||||
|
const formData = new FormData(form);
|
||||||
|
const formMessage = document.getElementById('formMessage');
|
||||||
|
|
||||||
|
try {
|
||||||
|
const response = await fetch('/submit-form', {
|
||||||
|
method: 'POST',
|
||||||
|
body: JSON.stringify(Object.fromEntries(formData)),
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const result = await response.json();
|
||||||
|
|
||||||
|
if (response.ok) {
|
||||||
|
formMessage.textContent = 'Спасибо за ваше сообщение! Мы свяжемся с вами в ближайшее время.';
|
||||||
|
formMessage.classList.remove('hidden', 'text-red-500');
|
||||||
|
formMessage.classList.add('text-green-500');
|
||||||
|
form.reset();
|
||||||
|
} else {
|
||||||
|
throw new Error(result.detail || 'Произошла ошибка при отправке формы.');
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
formMessage.textContent = error.message;
|
||||||
|
formMessage.classList.remove('hidden', 'text-green-500');
|
||||||
|
formMessage.classList.add('text-red-500');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
{% endblock %}
|
||||||
172
app/templates/index.html
Normal file
@ -0,0 +1,172 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% block title %}Главная - Wanlanda{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<!-- Слайдшоу -->
|
||||||
|
<div class="relative mb-8 h-64 sm:h-96 overflow-hidden rounded-lg">
|
||||||
|
<div class="absolute inset-0 flex">
|
||||||
|
<img src="/static/img/pbanner.jpg" alt="Wanlanda фильтры" class="object-cover w-full">
|
||||||
|
<!-- <img src="/static/img/b1.jpg" alt="Производство Wanlanda" class="object-cover w-full">
|
||||||
|
<img src="/static/img/slide3.jpg" alt="Качество Wanlanda" class="object-cover w-full"> -->
|
||||||
|
</div>
|
||||||
|
<!-- <div class="absolute inset-0 bg-black bg-opacity-50 flex items-center justify-center">
|
||||||
|
<h1 class="text-3xl sm:text-5xl font-bold text-white text-center">Wanlanda</h1>
|
||||||
|
</div> -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Преимущества -->
|
||||||
|
<section class="mb-12 bg-wanlanda-green text-white py-8 px-4 rounded-lg">
|
||||||
|
<div class="container mx-auto">
|
||||||
|
<h2 class="text-2xl sm:text-3xl font-bold mb-6 text-center">Наши преимущества</h2>
|
||||||
|
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6">
|
||||||
|
<div class="text-center">
|
||||||
|
<svg class="w-12 h-12 mx-auto mb-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg>
|
||||||
|
<h3 class="font-semibold">Эксклюзивное представительство Wanlanda в Сибири</h3>
|
||||||
|
</div>
|
||||||
|
<div class="text-center">
|
||||||
|
<svg class="w-12 h-12 mx-auto mb-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg>
|
||||||
|
<h3 class="font-semibold">Оперативная доставка по всей Сибири</h3>
|
||||||
|
</div>
|
||||||
|
<div class="text-center">
|
||||||
|
<svg class="w-12 h-12 mx-auto mb-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01"></path></svg>
|
||||||
|
<h3 class="font-semibold">Широкий ассортимент фильтров</h3>
|
||||||
|
</div>
|
||||||
|
<div class="text-center">
|
||||||
|
<svg class="w-12 h-12 mx-auto mb-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z"></path></svg>
|
||||||
|
<h3 class="font-semibold">Гарантия качества на продукцию</h3>
|
||||||
|
</div>
|
||||||
|
<div class="text-center">
|
||||||
|
<svg class="w-12 h-12 mx-auto mb-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 10h18M7 15h1m4 0h1m-7 4h12a3 3 0 003-3V8a3 3 0 00-3-3H6a3 3 0 00-3 3v8a3 3 0 003 3z"></path></svg>
|
||||||
|
<h3 class="font-semibold">Собственный склад с большим запасом товаров</h3>
|
||||||
|
</div>
|
||||||
|
<div class="text-center">
|
||||||
|
<svg class="w-12 h-12 mx-auto mb-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0zm6 3a2 2 0 11-4 0 2 2 0 014 0zM7 10a2 2 0 11-4 0 2 2 0 014 0z"></path></svg>
|
||||||
|
<h3 class="font-semibold">Ответственная поддержка менеджеров</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Типы фильтров -->
|
||||||
|
<section class="mb-12">
|
||||||
|
<h2 class="text-2xl sm:text-3xl font-bold mb-6 text-wanlanda-green">Типы фильтров Wanlanda</h2>
|
||||||
|
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6">
|
||||||
|
<div class="bg-white p-4 rounded-lg shadow">
|
||||||
|
<img src="/static/img/air-filter.jpg" alt="Воздушный фильтр" class="w-fit object-cover mb-4 rounded">
|
||||||
|
<h3 class="font-semibold mb-2">Воздушные фильтры</h3>
|
||||||
|
<p class="text-sm mb-4">Очищают воздух, поступающий в двигатель, от пыли и других загрязнений.</p>
|
||||||
|
<a href="/catalog/air-filters" class="text-wanlanda-green hover:underline">Подробнее</a>
|
||||||
|
</div>
|
||||||
|
<div class="bg-white p-4 rounded-lg shadow">
|
||||||
|
<img src="/static/img/oil-filter.jpg" alt="Масляный фильтр" class="w-fit object-cover mb-4 rounded">
|
||||||
|
<h3 class="font-semibold mb-2">Масляные фильтры</h3>
|
||||||
|
<p class="text-sm mb-4">Очищают масло от абразивных частиц, продлевая срок службы двигателя.</p>
|
||||||
|
<a href="/catalog/oil-filters" class="text-wanlanda-green hover:underline">Подробнее</a>
|
||||||
|
</div>
|
||||||
|
<div class="bg-white p-4 rounded-lg shadow">
|
||||||
|
<img src="/static/img/fuel-filter.jpg" alt="Топливный фильтр" class="w-fit object-cover mb-4 rounded">
|
||||||
|
<h3 class="font-semibold mb-2">Топливные фильтры</h3>
|
||||||
|
<p class="text-sm mb-4">Защищают двигатель от загрязнений в топливе, обеспечивая его эффективную работу.</p>
|
||||||
|
<a href="/catalog/fuel-filters" class="text-wanlanda-green hover:underline">Подробнее</a>
|
||||||
|
</div>
|
||||||
|
<div class="bg-white p-4 rounded-lg shadow">
|
||||||
|
<img src="/static/img/cabin-filter.jpg" alt="Салонный фильтр" class="w-fit object-cover mb-4 rounded">
|
||||||
|
<h3 class="font-semibold mb-2">Салонные фильтры</h3>
|
||||||
|
<p class="text-sm mb-4">Очищают воздух в салоне от пыльцы, аллергенов и других загрязнений.</p>
|
||||||
|
<a href="/catalog/cabin-filters" class="text-wanlanda-green hover:underline">Подробнее</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="text-center mt-8">
|
||||||
|
<a href="/catalog" class="bg-wanlanda-green text-white px-6 py-3 rounded-lg hover:bg-green-600 transition">Смотреть все фильтры</a>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- О компании -->
|
||||||
|
<section class="mb-12 bg-white p-6 rounded-lg shadow">
|
||||||
|
<h2 class="text-2xl sm:text-3xl font-bold mb-6 text-wanlanda-green">О компании</h2>
|
||||||
|
<div class="grid sm:grid-cols-2 gap-6">
|
||||||
|
<div>
|
||||||
|
<h3 class="text-xl font-semibold mb-4">АНТХИЛЛ - официальный дилер Wanlanda в Сибири</h3>
|
||||||
|
<p class="mb-4">Компания АНТХИЛЛ является первым официальным сертифицированным дилером завода-производителя фильтрующих элементов под брендом WANLANDA на территории Сибирского Федерального округа. </p>
|
||||||
|
<p class="mb-4">Применение предлагаемых нами фильтров очень обширное, начиная легковых/грузовых автомобилей, заканчивая карьерной спецтехникой. Наши фильтры по качеству сравнимы с оригиналами мировых производителей, таких как: Shantui, Shacman, Shaanxi, Howo, KAMA3 и многих других.</p>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h3 class="text-xl font-semibold mb-4">Wanlanda</h3>
|
||||||
|
<p class="mb-4">Компания Guanzhou Wanlanda Auto Parts Co. Ltd. была основана в 1989 году. Спустя 35 лет завод является огромным предприятием с передовыми производственными и испытательными мощностями.
|
||||||
|
Wanlanda Filter специализируется на воздушных, салонных, масляных, топливных, фильтрах для всех видов автомобилей и инженерной техники.
|
||||||
|
</p>
|
||||||
|
<p class="mb-4">
|
||||||
|
Для обеспечения высокоэффективной фильтрации и длительного срока службы фильтры Wanlanda производятся строго в соответствии с оригинальными заводскими спецификациями.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Новости и события -->
|
||||||
|
<!-- <section class="mb-12">
|
||||||
|
<h2 class="text-2xl sm:text-3xl font-bold mb-6 text-wanlanda-green">Новости и события</h2>
|
||||||
|
<div class="grid sm:grid-cols-2 lg:grid-cols-3 gap-6">
|
||||||
|
<div class="bg-white p-4 rounded-lg shadow">
|
||||||
|
<h3 class="font-semibold mb-2">Открытие нового склада в Санкт-Петербурге</h3>
|
||||||
|
<p class="text-gray-600 mb-2">15 июня 2024</p>
|
||||||
|
<p>Мы рады сообщить об открытии нового логистического центра в Санкт-Петербурге, что позволит нам ускорить доставку по Северо-Западному региону.</p>
|
||||||
|
</div>
|
||||||
|
<div class="bg-white p-4 rounded-lg shadow">
|
||||||
|
<h3 class="font-semibold mb-2">Участие в выставке "АвтоТехЭкспо 2024"</h3>
|
||||||
|
<p class="text-gray-600 mb-2">1-5 сентября 2024</p>
|
||||||
|
<p>Приглашаем посетить наш стенд на ежегодной выставке "АвтоТехЭкспо 2024" в Москве. Мы представим новинки нашей продукции.</p>
|
||||||
|
</div>
|
||||||
|
<div class="bg-white p-4 rounded-lg shadow">
|
||||||
|
<h3 class="font-semibold mb-2">Запуск новой линейки промышленных фильтров</h3>
|
||||||
|
<p class="text-gray-600 mb-2">10 июля 2024</p>
|
||||||
|
<p>Wanlanda представляет новую серию высокоэффективных промышленных фильтров для тяжелой техники.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section> -->
|
||||||
|
|
||||||
|
<!-- Контакты -->
|
||||||
|
<section class="bg-white p-6 rounded-lg shadow">
|
||||||
|
<h2 class="text-2xl sm:text-3xl font-bold mb-6 text-wanlanda-green">Свяжитесь с нами</h2>
|
||||||
|
<div class="grid sm:grid-cols-2 gap-6">
|
||||||
|
<div>
|
||||||
|
<h3 class="text-xl font-semibold mb-4">Контактная информация</h3>
|
||||||
|
<p class="mb-2">Адрес: г. Новокузнецк, ул. Тольятти, д. 5Б, пом. 10</p>
|
||||||
|
<p class="mb-2">Телефон: +7 (905) 906-84-65</p>
|
||||||
|
<p class="mb-2">Email: anthillsib@gmail.com</p>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h3 class="text-xl font-semibold mb-4">Часы работы</h3>
|
||||||
|
<p class="mb-2">Пн-Пт: 9:00 - 18:00</p>
|
||||||
|
<!-- <p class="mb-2">Сб: 10:00 - 15:00</p> -->
|
||||||
|
<p class="mb-2">Сб, Вс: выходной</p>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<a href="/contacts" class="text-wanlanda-green px-6 py-2 rounded-lg hover:bg-gray-100 transition">Получить консультацию</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block extra_js %}
|
||||||
|
<script>
|
||||||
|
// Простой слайдер
|
||||||
|
const slides = document.querySelectorAll('.relative > .flex > img');
|
||||||
|
let currentSlide = 0;
|
||||||
|
|
||||||
|
function showSlide(n) {
|
||||||
|
slides[currentSlide].style.display = 'none';
|
||||||
|
currentSlide = (n + slides.length) % slides.length;
|
||||||
|
slides[currentSlide].style.display = 'block';
|
||||||
|
}
|
||||||
|
|
||||||
|
function nextSlide() {
|
||||||
|
showSlide(currentSlide + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Инициализация слайдера
|
||||||
|
showSlide(0);
|
||||||
|
setInterval(nextSlide, 5000); // Меняем слайд каждые 5 секунд
|
||||||
|
</script>
|
||||||
|
{% endblock %}
|
||||||
56
docker-compose.yml
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
version: '3'
|
||||||
|
services:
|
||||||
|
web:
|
||||||
|
build: .
|
||||||
|
expose:
|
||||||
|
- "8000"
|
||||||
|
# networks:
|
||||||
|
# - app-network
|
||||||
|
|
||||||
|
nginx:
|
||||||
|
image: nginx:alpine
|
||||||
|
ports:
|
||||||
|
- "80:80"
|
||||||
|
- "443:443"
|
||||||
|
volumes:
|
||||||
|
- ./nginx.conf:/etc/nginx/nginx.conf:ro
|
||||||
|
- ./certbot/conf:/etc/letsencrypt
|
||||||
|
- ./certbot/www:/var/www/certbot
|
||||||
|
depends_on:
|
||||||
|
- web
|
||||||
|
# networks:
|
||||||
|
# - app-network
|
||||||
|
# command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'"
|
||||||
|
|
||||||
|
certbot:
|
||||||
|
image: certbot/certbot
|
||||||
|
volumes:
|
||||||
|
- ./certbot/conf:/etc/letsencrypt
|
||||||
|
- ./certbot/www:/var/www/certbot
|
||||||
|
depends_on:
|
||||||
|
- nginx
|
||||||
|
# networks:
|
||||||
|
# - app-network
|
||||||
|
# entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew --quiet; sleep 24 & wait $${!}; done;'"
|
||||||
|
|
||||||
|
# networks:
|
||||||
|
# app-network:
|
||||||
|
# driver: bridge
|
||||||
|
|
||||||
|
|
||||||
|
# version: '3'
|
||||||
|
|
||||||
|
# services:
|
||||||
|
# web:
|
||||||
|
# build: .
|
||||||
|
# ports:
|
||||||
|
# - "8000:8000"
|
||||||
|
|
||||||
|
# nginx:
|
||||||
|
# image: nginx:alpine
|
||||||
|
# ports:
|
||||||
|
# - "80:80"
|
||||||
|
# volumes:
|
||||||
|
# - ./nginx.conf:/etc/nginx/nginx.conf:ro
|
||||||
|
# depends_on:
|
||||||
|
# - web
|
||||||
72
init-letsencrypt.sh
Executable file
@ -0,0 +1,72 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
domains=(wanlanda.ru www.wanlanda.ru)
|
||||||
|
rsa_key_size=4096
|
||||||
|
data_path="./certbot"
|
||||||
|
email="ilya_zahvatkin@sybiko.ru" # Adding a valid address is strongly recommended
|
||||||
|
staging=0 # Set to 1 if you're testing your setup to avoid hitting request limits
|
||||||
|
|
||||||
|
if [ -d "$data_path" ]; then
|
||||||
|
read -p "Existing data found for $domains. Continue and replace existing certificate? (y/N) " decision
|
||||||
|
if [ "$decision" != "Y" ] && [ "$decision" != "y" ]; then
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -e "$data_path/conf/options-ssl-nginx.conf" ] || [ ! -e "$data_path/conf/ssl-dhparams.pem" ]; then
|
||||||
|
echo "### Downloading recommended TLS parameters ..."
|
||||||
|
mkdir -p "$data_path/conf"
|
||||||
|
curl -s https://raw.githubusercontent.com/certbot/certbot/master/certbot-nginx/certbot_nginx/_internal/tls_configs/options-ssl-nginx.conf > "$data_path/conf/options-ssl-nginx.conf"
|
||||||
|
curl -s https://raw.githubusercontent.com/certbot/certbot/master/certbot/certbot/ssl-dhparams.pem > "$data_path/conf/ssl-dhparams.pem"
|
||||||
|
echo
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "### Creating dummy certificate for $domains ..."
|
||||||
|
path="/etc/letsencrypt/live/$domains"
|
||||||
|
mkdir -p "$data_path/conf/live/$domains"
|
||||||
|
docker-compose run --rm --entrypoint "\
|
||||||
|
openssl req -x509 -nodes -newkey rsa:$rsa_key_size -days 1\
|
||||||
|
-keyout '$path/privkey.pem' \
|
||||||
|
-out '$path/fullchain.pem' \
|
||||||
|
-subj '/CN=localhost'" certbot
|
||||||
|
echo
|
||||||
|
|
||||||
|
echo "### Starting nginx ..."
|
||||||
|
docker-compose up --force-recreate -d nginx
|
||||||
|
echo
|
||||||
|
|
||||||
|
echo "### Deleting dummy certificate for $domains ..."
|
||||||
|
docker-compose run --rm --entrypoint "\
|
||||||
|
rm -Rf /etc/letsencrypt/live/$domains && \
|
||||||
|
rm -Rf /etc/letsencrypt/archive/$domains && \
|
||||||
|
rm -Rf /etc/letsencrypt/renewal/$domains.conf" certbot
|
||||||
|
echo
|
||||||
|
|
||||||
|
echo "### Requesting Let's Encrypt certificate for $domains ..."
|
||||||
|
#Join $domains to -d args
|
||||||
|
domain_args=""
|
||||||
|
for domain in "${domains[@]}"; do
|
||||||
|
domain_args="$domain_args -d $domain"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Select appropriate email arg
|
||||||
|
case "$email" in
|
||||||
|
"") email_arg="--register-unsafely-without-email" ;;
|
||||||
|
*) email_arg="--email $email" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Enable staging mode if needed
|
||||||
|
if [ $staging != "0" ]; then staging_arg="--staging"; fi
|
||||||
|
|
||||||
|
docker-compose run --rm --entrypoint "\
|
||||||
|
certbot certonly --webroot -w /var/www/certbot \
|
||||||
|
$staging_arg \
|
||||||
|
$email_arg \
|
||||||
|
$domain_args \
|
||||||
|
--rsa-key-size $rsa_key_size \
|
||||||
|
--agree-tos \
|
||||||
|
--force-renewal" certbot
|
||||||
|
echo
|
||||||
|
|
||||||
|
echo "### Reloading nginx ..."
|
||||||
|
docker-compose exec nginx nginx -s reload
|
||||||
56
nginx.conf
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
events {
|
||||||
|
worker_connections 1024;
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name wanlanda.ru www.wanlanda.ru;
|
||||||
|
|
||||||
|
location /.well-known/acme-challenge/ {
|
||||||
|
root /var/www/certbot;
|
||||||
|
}
|
||||||
|
|
||||||
|
location / {
|
||||||
|
return 301 https://$host$request_uri;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 443 ssl;
|
||||||
|
server_name wanlanda.ru www.wanlanda.ru;
|
||||||
|
|
||||||
|
ssl_certificate /etc/letsencrypt/live/wanlanda.ru/fullchain.pem;
|
||||||
|
ssl_certificate_key /etc/letsencrypt/live/wanlanda.ru/privkey.pem;
|
||||||
|
|
||||||
|
include /etc/letsencrypt/options-ssl-nginx.conf;
|
||||||
|
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_pass http://web:8000;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# events {
|
||||||
|
# worker_connections 1024;
|
||||||
|
# }
|
||||||
|
|
||||||
|
# http {
|
||||||
|
# server {
|
||||||
|
# listen 80;
|
||||||
|
# server_name localhost;
|
||||||
|
|
||||||
|
# location / {
|
||||||
|
# proxy_pass http://web:8000;
|
||||||
|
# proxy_set_header Host $host;
|
||||||
|
# proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
# proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
# }
|
||||||
|
# }
|
||||||
|
# }
|
||||||
108
requirements.txt
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
aiofiles==23.2.1
|
||||||
|
aiogram==3.10.0
|
||||||
|
aiohttp==3.9.5
|
||||||
|
aioredis==2.0.1
|
||||||
|
aiosignal==1.3.1
|
||||||
|
aiosqlite==0.17.0
|
||||||
|
annotated-types==0.7.0
|
||||||
|
anyio==4.4.0
|
||||||
|
appnope==0.1.4
|
||||||
|
asttokens==2.4.1
|
||||||
|
async-timeout==4.0.3
|
||||||
|
attrs==23.2.0
|
||||||
|
Babel==2.15.0
|
||||||
|
bcrypt==4.1.3
|
||||||
|
beautifulsoup4==4.12.3
|
||||||
|
bs4==0.0.2
|
||||||
|
certifi==2024.7.4
|
||||||
|
cffi==1.16.0
|
||||||
|
charset-normalizer==3.3.2
|
||||||
|
click==8.1.7
|
||||||
|
comm==0.2.2
|
||||||
|
cryptography==43.0.0
|
||||||
|
databases==0.9.0
|
||||||
|
debugpy==1.8.2
|
||||||
|
decorator==5.1.1
|
||||||
|
dnspython==2.6.1
|
||||||
|
ecdsa==0.19.0
|
||||||
|
email_validator==2.2.0
|
||||||
|
exceptiongroup==1.2.2
|
||||||
|
executing==2.0.1
|
||||||
|
fastapi==0.111.1
|
||||||
|
fastapi-admin==1.0.4
|
||||||
|
fastapi-cli==0.0.4
|
||||||
|
frozenlist==1.4.1
|
||||||
|
greenlet==3.0.3
|
||||||
|
h11==0.14.0
|
||||||
|
httpcore==1.0.5
|
||||||
|
httptools==0.6.1
|
||||||
|
httpx==0.27.0
|
||||||
|
idna==3.7
|
||||||
|
ipykernel==6.29.5
|
||||||
|
ipython==8.26.0
|
||||||
|
iso8601==1.1.0
|
||||||
|
itsdangerous==2.2.0
|
||||||
|
jedi==0.19.1
|
||||||
|
Jinja2==3.1.4
|
||||||
|
jupyter_client==8.6.2
|
||||||
|
jupyter_core==5.7.2
|
||||||
|
magic-filter==1.0.12
|
||||||
|
markdown-it-py==3.0.0
|
||||||
|
MarkupSafe==2.1.5
|
||||||
|
matplotlib-inline==0.1.7
|
||||||
|
mdurl==0.1.2
|
||||||
|
multidict==6.0.5
|
||||||
|
nest-asyncio==1.6.0
|
||||||
|
numpy==2.0.1
|
||||||
|
orjson==3.10.6
|
||||||
|
packaging==24.1
|
||||||
|
pandas==2.2.2
|
||||||
|
parso==0.8.4
|
||||||
|
passlib==1.7.4
|
||||||
|
pendulum==3.0.0
|
||||||
|
pexpect==4.9.0
|
||||||
|
platformdirs==4.2.2
|
||||||
|
prompt_toolkit==3.0.47
|
||||||
|
psutil==6.0.0
|
||||||
|
ptyprocess==0.7.0
|
||||||
|
pure_eval==0.2.3
|
||||||
|
pyasn1==0.6.0
|
||||||
|
pycparser==2.22
|
||||||
|
pydantic==2.8.2
|
||||||
|
pydantic-extra-types==2.9.0
|
||||||
|
pydantic-settings==2.3.4
|
||||||
|
pydantic_core==2.20.1
|
||||||
|
Pygments==2.18.0
|
||||||
|
pypika-tortoise==0.1.6
|
||||||
|
python-dateutil==2.9.0.post0
|
||||||
|
python-dotenv==1.0.1
|
||||||
|
python-jose==3.3.0
|
||||||
|
python-multipart==0.0.9
|
||||||
|
pytz==2024.1
|
||||||
|
PyYAML==6.0.1
|
||||||
|
pyzmq==26.0.3
|
||||||
|
requests==2.32.3
|
||||||
|
rich==13.7.1
|
||||||
|
rsa==4.9
|
||||||
|
shellingham==1.5.4
|
||||||
|
six==1.16.0
|
||||||
|
sniffio==1.3.1
|
||||||
|
soupsieve==2.5
|
||||||
|
SQLAlchemy==2.0.31
|
||||||
|
stack-data==0.6.3
|
||||||
|
starlette==0.37.2
|
||||||
|
time-machine==2.14.2
|
||||||
|
tornado==6.4.1
|
||||||
|
tortoise-orm==0.21.5
|
||||||
|
traitlets==5.14.3
|
||||||
|
typer==0.12.3
|
||||||
|
typing_extensions==4.12.2
|
||||||
|
tzdata==2024.1
|
||||||
|
ujson==5.10.0
|
||||||
|
urllib3==2.2.2
|
||||||
|
uvicorn==0.30.3
|
||||||
|
uvloop==0.19.0
|
||||||
|
watchfiles==0.22.0
|
||||||
|
wcwidth==0.2.13
|
||||||
|
websockets==12.0
|
||||||
|
yarl==1.9.4
|
||||||