route handler for account/main
This commit is contained in:
@@ -36,7 +36,7 @@ class UserDataView(ViewSet):
|
||||
status=status.HTTP_404_NOT_FOUND
|
||||
)
|
||||
|
||||
class AccountActions(ViewSet):
|
||||
class AccountActionsView(ViewSet):
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
@action(detail=False, methods=['patch'])
|
||||
|
||||
@@ -8,7 +8,7 @@ LoginViewSet,
|
||||
LogoutView,
|
||||
RefreshTokenView)
|
||||
|
||||
from api.account.client.views import UserDataView
|
||||
from api.account.client.views import UserDataView, AccountActionsView
|
||||
|
||||
urlpatterns = [
|
||||
path("v1/faq/", FAQView.as_view(), name='faqMain'),
|
||||
@@ -21,4 +21,6 @@ urlpatterns = [
|
||||
path("v1/logout", LogoutView.as_view(), name="logout"),
|
||||
|
||||
path ("v1/user/", UserDataView.as_view({'get': 'user_data'}), name="user"),
|
||||
|
||||
path("v1/account/change_main_data/", AccountActionsView.as_view({'patch':'change_data_main_tab'}), name='change_data_main_tab')
|
||||
]
|
||||
@@ -14,10 +14,12 @@ const validationRules = {
|
||||
lastName: { required: false },
|
||||
phone_number: { required: true },
|
||||
email: { required: true },
|
||||
country: { required: false },
|
||||
city: { required: false },
|
||||
}
|
||||
|
||||
const AccountPage = () => {
|
||||
const { user } = useUserStore()
|
||||
const { user, setUser } = useUserStore()
|
||||
|
||||
const { values, handleChange, handleSubmit } = useForm(
|
||||
{
|
||||
@@ -31,10 +33,30 @@ const AccountPage = () => {
|
||||
validationRules,
|
||||
async (values) => {
|
||||
try {
|
||||
// await updateMainTab(values)
|
||||
const response = await fetch('/api/account/main', {
|
||||
method: 'PATCH',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
body: JSON.stringify(values),
|
||||
})
|
||||
|
||||
if (!response.ok) {
|
||||
const error = await response.json()
|
||||
throw new Error(error.error || 'Ошибка при обновлении данных')
|
||||
}
|
||||
|
||||
const result = await response.json()
|
||||
setUser(result.user)
|
||||
showToast({ type: 'success', message: 'Данные успешно обновлены!' })
|
||||
} catch {
|
||||
showToast({ type: 'error', message: 'Ой, что то пошло не так..' })
|
||||
} catch (error) {
|
||||
showToast({
|
||||
type: 'error',
|
||||
message:
|
||||
error instanceof Error
|
||||
? error.message
|
||||
: 'Ой, что то пошло не так..',
|
||||
})
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
324
frontend/app/(urls)/publichnaya-oferta/page.tsx
Normal file
324
frontend/app/(urls)/publichnaya-oferta/page.tsx
Normal file
@@ -0,0 +1,324 @@
|
||||
import React from 'react'
|
||||
|
||||
const PublicOffer = () => {
|
||||
return (
|
||||
<div className="max-w-4xl mx-auto px-4 py-8">
|
||||
<h1 className="text-3xl font-bold mb-8">Публичная оферта</h1>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-semibold mb-4">1. ОБЩИЕ ПОЛОЖЕНИЯ</h2>
|
||||
<div className="space-y-4">
|
||||
<p className="text-gray-700">
|
||||
1.1. Настоящий Публичный договор (далее – Оферта, договор)
|
||||
представляет собой официальное предложение Интернет-сервиса
|
||||
tripwb.com (далее — Компания) на оказание Информационных услуг
|
||||
дееспособным физическим лицам (далее – Пользователь) по попутной
|
||||
доставке посылок, либо совместной автомобильной поездке, через
|
||||
вебсайт tripwb.com регулирует порядок использования Сайта и
|
||||
взаимоотношения, возникающие при использовании Сайта и Сервисов
|
||||
Пользователями. Компания не гарантирует доступность Сайта и Сервисов
|
||||
круглосуточно. Компания имеет право в любой момент отказать любому
|
||||
Пользователю, в использовании Сервисов при нарушении договора.
|
||||
</p>
|
||||
<p className="text-gray-700">
|
||||
1.2. Принятие (акцепт) данной Оферты означает полное и
|
||||
безоговорочное принятие Пользователем всех условий без каких-либо
|
||||
исключений и/или ограничений и приравнивается в соответствии со
|
||||
статьей 395 Гражданского Кодекса Республики Казахстан настоящее
|
||||
Пользовательское соглашение признается офертой. Соглашение,
|
||||
заключаемое в форме оферты, предусмотрено Гражданским Кодексом
|
||||
Республики Казахстан, не требует двустороннего подписания и
|
||||
действительно в электронном виде.
|
||||
</p>
|
||||
<p className="text-gray-700">
|
||||
1.3. Данная Оферта считается заключенной (акцептированной) с момента
|
||||
принятия Пользователем условий Сервиса путем заполнения учетной
|
||||
записи на Сайте Компании.
|
||||
</p>
|
||||
<p className="text-gray-700">
|
||||
1.4. Компания и Пользователь предоставляют взаимные гарантии своей
|
||||
право и дееспособности, необходимые для заключения и исполнения
|
||||
настоящей Оферты.
|
||||
</p>
|
||||
<p className="text-gray-700">
|
||||
1.5. Пользователи не согласные с данной Офертой или с отдельными ее
|
||||
пунктами, вправе отказаться от использования сайта
|
||||
https://tripwb.com (далее — «Сайт»).
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-semibold mb-4">2. Используемые Термины</h2>
|
||||
<div className="space-y-4">
|
||||
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
|
||||
<div className="bg-gray-50 p-4 rounded-lg">
|
||||
<p className="font-semibold">«Компания»</p>
|
||||
<p className="text-gray-700">tripwb.com</p>
|
||||
</div>
|
||||
<div className="bg-gray-50 p-4 rounded-lg">
|
||||
<p className="font-semibold">«Администрация Сайта»</p>
|
||||
<p className="text-gray-700">
|
||||
уполномоченные сотрудники Компании, а также иные лица,
|
||||
уполномоченные на управление Сайтом и предоставление Сервисов
|
||||
Пользователям при использовании Сайта в соответствии с настоящим
|
||||
Соглашением
|
||||
</p>
|
||||
</div>
|
||||
<div className="bg-gray-50 p-4 rounded-lg">
|
||||
<p className="font-semibold">«Сайт»</p>
|
||||
<p className="text-gray-700">
|
||||
Интернет-Сервис по попутной доставке посылок, а также совместных
|
||||
автомобильных поездок, доступный на вебсайте tripwb.com
|
||||
</p>
|
||||
</div>
|
||||
<div className="bg-gray-50 p-4 rounded-lg">
|
||||
<p className="font-semibold">«Аккаунт»</p>
|
||||
<p className="text-gray-700">
|
||||
учетная запись, создание которой является обязательным условием
|
||||
регистрации на Сайте для получения доступа к использованию
|
||||
Сервисов Сайта
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-semibold mb-4">3. Основные положения</h2>
|
||||
<div className="space-y-4">
|
||||
<p className="text-gray-700">
|
||||
3.1. Компанией разработана платформа для оказания информационных
|
||||
услуг по попутной доставке посылок и совместных автомобильных
|
||||
поездках, доступная на вебсайте по адресу tripwb.com. Целью данной
|
||||
платформы является предоставление Перевозчиками, следующим в
|
||||
определенном направлении, возможности установления связи с
|
||||
Отправителем, которым необходимо передать посылку, груз, либо
|
||||
осуществить поездку в том же направлении, для уменьшения собственных
|
||||
расходов.
|
||||
</p>
|
||||
<p className="text-gray-700">
|
||||
3.2. Нажимая «Войти через Google» или через «Логин» и «Пароль».
|
||||
Пользователь соглашается, принимает, и обязуется безоговорочно
|
||||
следовать всем его условиям, также, Пользователь вправе отказаться
|
||||
от использования Сайта tripwb.com.
|
||||
</p>
|
||||
<p className="text-gray-700">
|
||||
3.3. Компания оставляет за собой право изменять условия Соглашения и
|
||||
всех его неотъемлемых частей без согласования с Пользователем с
|
||||
уведомлением последнего посредством размещения на Сайте новой
|
||||
редакции Соглашения.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div className="mt-8 text-sm text-gray-500">
|
||||
<p>Последнее обновление: 20.05.2025</p>
|
||||
</div>
|
||||
|
||||
<div className="mt-16 border-t-2 pt-8">
|
||||
<h1 className="text-3xl font-bold mb-8">Жария шарт (Оферта)</h1>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-semibold mb-4">1. ЖАЛПЫ ЕРЕЖЕЛЕР</h2>
|
||||
<div className="space-y-4">
|
||||
<p className="text-gray-700">
|
||||
1.1. Осы Жария шарт (бұдан әрі – Оферта, шарт) іс-әрекетке
|
||||
қабілетті жеке тұлғаларға (бұдан әрі — Пайдаланушы) сәлемдемелерді
|
||||
ілеспе жеткізу не бірлескен автомобиль сапары бойынша ақпараттық
|
||||
қызметтер көрсетуге tripwb.com Интернет – сервистің (бұдан
|
||||
әрі-Компания) ресми ұсынысын білдіреді, tripwb.com веб-сайт арқылы
|
||||
Сайтты пайдалану тәртібін және Пайдаланушылар Сайтты және
|
||||
Сервистерді пайдаланған кезде туындайтын қатынастарды реттейді.
|
||||
Компания Сайт пен Сервистердің тәулік бойы қолжетімділігіне
|
||||
кепілдік бермейді. Компания кез келген уақытта кез келген
|
||||
Пайдаланушыға https://tripwb.com/ru/info_page/publichnaya-oferta/
|
||||
Шартты бұзған кезде Сервистерді пайдаланудан бас тартуға құқылы.
|
||||
</p>
|
||||
<p className="text-gray-700">
|
||||
1.2. Осы Офертаны қабылдау (акцепт) Пайдаланушының қандай да бір
|
||||
ерекшеліктерсіз және/немесе шектеулерсіз барлық шарттарды толық
|
||||
және сөзсіз қабылдауын білдіреді және Қазақстан Республикасы
|
||||
Азаматтық Кодексінің 395-бабына сәйкес теңестіріледі осы
|
||||
Пайдаланушы келісімі оферта деп танылады. Оферта нысанында
|
||||
жасалатын Келісім Қазақстан Республикасының Азаматтық кодексінде
|
||||
көзделген, екіжақты қол қоюды талап етпейді және электрондық түрде
|
||||
жарамды.
|
||||
</p>
|
||||
<p className="text-gray-700">
|
||||
1.3. Бұл Оферта Пайдаланушы Компания Сайтындағы тіркеу жазбасын
|
||||
толтыру арқылы Сервис шарттарын қабылдаған сәттен бастап жасалған
|
||||
(акцептелген) болып есептеледі.
|
||||
</p>
|
||||
<p className="text-gray-700">
|
||||
1.4. Компания мен Пайдаланушы осы Офертаны жасасу және орындау
|
||||
үшін қажетті өз құқығы мен әрекет қабілеттілігіне өзара
|
||||
кепілдіктер береді.
|
||||
</p>
|
||||
<p className="text-gray-700">
|
||||
1.5. Осы Офертамен немесе оның жекелеген тармақтарымен келіспеген
|
||||
пайдаланушылар https://tripwb.com (бұдан әрі - "Сайт") Сайтты
|
||||
пайдаланудан бас тартуға құқылы.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-semibold mb-4">
|
||||
2. Қолданылатын Терминдер
|
||||
</h2>
|
||||
<div className="space-y-4">
|
||||
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
|
||||
<div className="bg-gray-50 p-4 rounded-lg">
|
||||
<p className="font-semibold">«Компания»</p>
|
||||
<p className="text-gray-700">tripwb.com</p>
|
||||
</div>
|
||||
<div className="bg-gray-50 p-4 rounded-lg">
|
||||
<p className="font-semibold">«Сайт Әкімшілігі»</p>
|
||||
<p className="text-gray-700">
|
||||
Компанияның уәкілетті қызметкерлері, сондай-ақ осы Келісімге
|
||||
сәйкес Сайтты пайдалану кезінде Пайдаланушыларға Сайтты
|
||||
басқаруға және Сервистерді ұсынуға уәкілеттік берілген өзге де
|
||||
тұлғалар, сондай-ақ Сайтқа барлық тиісті айрықша мүліктік
|
||||
құқықтары, оның ішінде Сайттың домендік атауына және оны
|
||||
әкімшілендіруді жүзеге асыратын құқығы бар тұлғалар.
|
||||
</p>
|
||||
</div>
|
||||
<div className="bg-gray-50 p-4 rounded-lg">
|
||||
<p className="font-semibold">«Сайт»</p>
|
||||
<p className="text-gray-700">
|
||||
Сәлемдемелерді, сондай-ақ tripwb.com вебсайтта қолжетімді
|
||||
бірлескен автомобиль сапарларын ілеспе жеткізу жөніндегі
|
||||
Интернет-Сервис.
|
||||
</p>
|
||||
</div>
|
||||
<div className="bg-gray-50 p-4 rounded-lg">
|
||||
<p className="font-semibold">«Аккаунт»</p>
|
||||
<p className="text-gray-700">
|
||||
тіркеу жазбасы, оны құру Сайттың Сервистерін пайдалануға қол
|
||||
жеткізу үшін Сайтта тіркелудің міндетті шарты болып табылады.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-semibold mb-4">3. Негізгі ережелер</h2>
|
||||
<div className="space-y-4">
|
||||
<p className="text-gray-700">
|
||||
3.1. Компания сәлемдемелерді ілеспе жеткізу және бірлескен
|
||||
автомобиль сапарлары бойынша ақпараттық қызметтер көрсету үшін
|
||||
tripwb.com вебсайтта қолжетімді платформа әзірледі. Бұл
|
||||
платформаның мақсаты белгілі бір бағытта жүретін
|
||||
Тасымалдаушылардың сілтемені, жүкті беруі немесе өз шығындарын
|
||||
азайту үшін сол бағытта жүруді жүзеге асыруы қажет Жөнелтушімен
|
||||
байланыс орнату мүмкіндігін ұсынуы болып табылады.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-semibold mb-4">
|
||||
4. Пайдаланушыны тіркеу
|
||||
</h2>
|
||||
<div className="space-y-4">
|
||||
<p className="text-gray-700">
|
||||
4.1. Сайтты 18 жасқа толған жеке тұлғалар пайдалана алады.
|
||||
Кәмелетке толмағандарға Сайтта тіркелуге қатаң тыйым салынады.
|
||||
Платформаға қол жеткізе отырып, оның Сервистерін қолдана отырып
|
||||
және Аккаунтты тіркей отырып, Пайдаланушылар кәмелетке толған және
|
||||
толық қабілетті адамдар екендігін растайды және кепілдік береді.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-semibold mb-4">
|
||||
5. Сайт Сервистері бойынша жалпы ережелер
|
||||
</h2>
|
||||
<div className="space-y-4">
|
||||
<p className="text-gray-700">
|
||||
5.1. Әкімшілік кез-келген Пайдаланушы Сайтта орналастырмас бұрын
|
||||
кез-келген түрдегі контентті қарауға міндетті емес.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-semibold mb-4">
|
||||
6. Сервистерді пайдалану
|
||||
</h2>
|
||||
<div className="space-y-4">
|
||||
<p className="text-gray-700">
|
||||
6.1. Хабарландыруларды жариялау. Төмендегі шарттар орындалған
|
||||
жағдайда, Сіз Пайдаланушы ретінде Тасымалдаушы (Тасымалдау) және
|
||||
Жөнелтуші (Тапсырыс) ретінде хабарландырулар жасай және жариялай
|
||||
аласыз.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-semibold mb-4">
|
||||
7. Дауларды қарау ережелері
|
||||
</h2>
|
||||
<div className="space-y-4">
|
||||
<p className="text-gray-700">
|
||||
Осы дауларды қарау қағидалары (бұдан әрі - Қағидалар) "TWB" онлайн
|
||||
– сервисін пайдалану туралы келісімнің (бұдан әрі - Келісім)
|
||||
ажырамас бөлігі болып табылады және Пайдаланушылар арасындағы
|
||||
дауларды шешу тәртібін белгілейді.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-semibold mb-4">
|
||||
8. Хабарландыруларды жою себептері
|
||||
</h2>
|
||||
<div className="space-y-4">
|
||||
<p className="text-gray-700">
|
||||
Пайдаланушының хабарландыруын Компания Пайдаланушының осы
|
||||
Келісімнің талаптарын бұзуы себебінен, сондай-ақ мынадай себептер
|
||||
бойынша жоюы мүмкін.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-semibold mb-4">
|
||||
9. Компанияның жауапкершілігін шектеу
|
||||
</h2>
|
||||
<div className="space-y-4">
|
||||
<p className="text-gray-700">
|
||||
Сайттың Сервистерін пайдалана отырып, Пайдаланушы Сайтты және оның
|
||||
Сервистерді өз тәуекелімен және "сол қалпында" пайдаланатындығына
|
||||
келісімін растайды.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="mb-8">
|
||||
<h2 className="text-2xl font-semibold mb-4">
|
||||
10. Хабарламалар Сервисі
|
||||
</h2>
|
||||
<div className="space-y-4">
|
||||
<p className="text-gray-700">
|
||||
Мәміле жасалғаннан кейін Пайдаланушыға Пайдаланушылар арасында
|
||||
мәміле бойынша міндеттемелерді орындау үшін қажетті қосымша
|
||||
ақпаратпен алмасуға мүмкіндік беретін хабар алмасу қызметіне қол
|
||||
жетімділік беріледі.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div className="mt-8 text-sm text-gray-500">
|
||||
<p>Соңғы жаңарту: 20.05.2025</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default PublicOffer
|
||||
@@ -1,5 +1,49 @@
|
||||
import { NextRequest } from 'next/server'
|
||||
import { getServerSession } from 'next-auth'
|
||||
import { authOptions } from '@/app/api/auth/[...nextauth]/route'
|
||||
|
||||
export async function PUT(req: NextRequest) {
|
||||
// обновляем данные в аккаунте
|
||||
export async function PATCH(req: NextRequest) {
|
||||
try {
|
||||
const session = await getServerSession(authOptions)
|
||||
|
||||
if (!session) {
|
||||
return new Response(JSON.stringify({ error: 'Unauthorized' }), {
|
||||
status: 401,
|
||||
})
|
||||
}
|
||||
|
||||
const data = await req.json()
|
||||
const { firstName, lastName, email, phone_number, country, city } = data
|
||||
|
||||
const response = await fetch(
|
||||
`${process.env.NEXT_PUBLIC_API_URL}/account/change_main_data/`,
|
||||
{
|
||||
method: 'PATCH',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
Authorization: `Bearer ${session.accessToken}`,
|
||||
},
|
||||
body: JSON.stringify({
|
||||
firstName,
|
||||
lastName,
|
||||
email,
|
||||
phone_number,
|
||||
country,
|
||||
city,
|
||||
}),
|
||||
}
|
||||
)
|
||||
|
||||
if (!response.ok) {
|
||||
const error = await response.json()
|
||||
return new Response(JSON.stringify(error), { status: response.status })
|
||||
}
|
||||
|
||||
const result = await response.json()
|
||||
return new Response(JSON.stringify(result), { status: 200 })
|
||||
} catch (error) {
|
||||
return new Response(JSON.stringify({ error: 'Internal Server Error' }), {
|
||||
status: 500,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,7 +42,7 @@ interface GoogleToken extends JWT {
|
||||
error?: string
|
||||
}
|
||||
|
||||
const authOptions: NextAuthOptions = {
|
||||
export const authOptions: NextAuthOptions = {
|
||||
providers: [
|
||||
//google login flow
|
||||
// GoogleProvider({
|
||||
|
||||
@@ -31,7 +31,7 @@ const Footer = () => {
|
||||
<EmailHandler />
|
||||
<div className="flex gap-4 justify-center md:justify-start">
|
||||
<a
|
||||
href="https://instagram.com"
|
||||
href="https://instagram.com/tripwb_com"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
@@ -41,7 +41,7 @@ const Footer = () => {
|
||||
/>
|
||||
</a>
|
||||
<a
|
||||
href="https://telegram.com"
|
||||
href="https://t.me/tripWB"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
@@ -51,7 +51,7 @@ const Footer = () => {
|
||||
/>
|
||||
</a>
|
||||
<a
|
||||
href="https://vk.com"
|
||||
href="https://vk.com/club226251027"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
@@ -61,7 +61,7 @@ const Footer = () => {
|
||||
/>
|
||||
</a>
|
||||
<a
|
||||
href="https://facebook.com"
|
||||
href="https://www.facebook.com/share/p/tckdLFiyXm9r2925/?mibextid=WC7FNe"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
@@ -71,7 +71,7 @@ const Footer = () => {
|
||||
/>
|
||||
</a>
|
||||
<a
|
||||
href="https://tiktok.com"
|
||||
href="https://www.tiktok.com/@tripwithbonus?_t=8qHingfQWNq"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
@@ -81,7 +81,7 @@ const Footer = () => {
|
||||
/>
|
||||
</a>
|
||||
<a
|
||||
href="https://youtube.com"
|
||||
href="https://youtube.com/@tripwb?si=oiNZrtiOqx6OePJv"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
@@ -236,7 +236,7 @@ const Footer = () => {
|
||||
<div className="flex flex-col justify-between md:flex-row px-6 py-4 md:py-8 w-[95%] mx-auto text-center md:text-left">
|
||||
<div>Copyright © {new Date().getFullYear()}. Все права защищены.</div>
|
||||
<div className="flex flex-col md:flex-row py-4 md:py-0 md:space-x-5 items-center md:items-start">
|
||||
<Link href="/" className="hover:text-orange">
|
||||
<Link href="/publichnaya-oferta" className="hover:text-orange">
|
||||
Публичная оферта
|
||||
</Link>
|
||||
<Link href="/" className="hover:text-orange">
|
||||
|
||||
Reference in New Issue
Block a user