account sidebar urls

This commit is contained in:
2025-05-19 13:44:33 +03:00
parent b9178804c8
commit edd380d78a
9 changed files with 71 additions and 10 deletions

View File

@@ -0,0 +1,18 @@
# Generated by Django 5.2.1 on 2025-05-19 10:28
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('api', '0002_userprofile_account_type_and_more'),
]
operations = [
migrations.AlterField(
model_name='userprofile',
name='account_type',
field=models.CharField(choices=[('lite', 'Lite'), ('standart', 'Standart'), ('premium', 'Premium')], default='free', verbose_name='Тип аккаунта'),
),
]

View File

@@ -0,0 +1,18 @@
# Generated by Django 5.2.1 on 2025-05-19 10:28
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('api', '0003_alter_userprofile_account_type'),
]
operations = [
migrations.AlterField(
model_name='userprofile',
name='account_type',
field=models.CharField(choices=[('lite', 'Lite'), ('standart', 'Standart'), ('premium', 'Premium')], default='lite', verbose_name='Тип аккаунта'),
),
]

View File

@@ -5,7 +5,7 @@ import uuid
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
account_type = models.CharField(choices=account_types, default='free')
account_type = models.CharField(choices=account_types, default='lite', verbose_name="Тип аккаунта")
is_active = models.BooleanField(default=True)
phone_number = models.CharField(max_length=13, verbose_name="Номер телефона")
birthday = models.DateField(null=True, blank=True, verbose_name="Дата рождения")

View File

@@ -1,5 +1,5 @@
account_types = [
("free", "Free"),
("lite", "Lite"),
('pro', "Pro"),
("standart", "Standart"),
('premium', "Premium"),
]

View File

@@ -5,8 +5,10 @@ import { useRouter } from 'next/navigation'
import AccountSidebar from '@/components/AccountSidebar'
import Loader from '@/components/ui/Loader'
import { RiUser3Line } from 'react-icons/ri'
import { FaRoute } from 'react-icons/fa'
import { GoPackageDependents, GoPackageDependencies } from 'react-icons/go'
import { MdOutlinePayments } from 'react-icons/md'
import { CgNotes } from 'react-icons/cg'
import { FaStar } from 'react-icons/fa6'
import useUserStore from '@/app/store/userStore'
export default function AccountLayout({
@@ -37,7 +39,18 @@ export default function AccountLayout({
const userNavigation = [
{ name: 'Профиль', href: '/account', icon: RiUser3Line },
{ name: 'Мои маршруты', href: '/account/routes', icon: CgNotes },
{ name: 'Мои маршруты', href: '/account/routes', icon: FaRoute },
{
name: 'Отправить посылку',
href: '/account/create_as_sender',
icon: GoPackageDependents,
},
{
name: 'Перевезти посылку',
href: '/account/create_as_deliveler',
icon: GoPackageDependencies,
},
{ name: 'Тарифы', href: '/account/payments', icon: MdOutlinePayments },
]
return (

View File

@@ -21,6 +21,8 @@ export interface ButtonProps {
onClick?: () => void
className?: string
text?: string
leftIcon?: React.ReactNode
rightIcon?: React.ReactNode
type?: 'button' | 'submit' | 'reset'
}

View File

@@ -21,11 +21,11 @@ const AccountSidebar: React.FC<AccountSidebarProps> = ({
const getAccountTypeStyles = (accountType: string) => {
switch (accountType.toLowerCase()) {
case 'free':
return 'bg-gray-400 text-white'
case 'lite':
return 'bg-orage/70 text-white'
case 'pro':
return 'bg-gray-400 text-white'
case 'standart':
return 'bg-orange/70 text-white'
case 'premium':
return 'bg-blue-300'
default:
return 'bg-gray-200'

View File

@@ -34,6 +34,7 @@ const Logout = () => {
return (
<Button
text="Выйти из аккаунта"
leftIcon={<IoExitOutline className="mr-1 h-5 w-5" />}
className="w-full text-sm font-medium text-gray-600 hover:bg-gray-100 px-4 py-4 flex items-center rounded-lg transition-colors"
onClick={handleLogout}
/>

View File

@@ -1,14 +1,23 @@
import React from 'react'
import { ButtonProps } from '@/app/types/index'
const Button = ({ onClick, className, text, type }: ButtonProps) => {
const Button = ({
onClick,
className,
text,
type,
leftIcon,
rightIcon,
}: ButtonProps) => {
return (
<button
onClick={onClick}
className={`text-base font-medium rounded-2xl cursor-pointer ${className}`}
type={type}
>
{leftIcon && <span className="mr-2 flex items-center">{leftIcon}</span>}
<span>{text}</span>
{rightIcon && <span className="ml-2 flex items-center">{rightIcon}</span>}
</button>
)
}