import React, { useEffect, useState } from 'react'; import { useForm } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import { z } from 'zod'; import { toast } from 'sonner'; import { EyeIcon, EyeSlashIcon, HeartIcon, SunIcon, MoonIcon } from '@heroicons/react/24/outline'; import { useAuthStore } from '../stores/authStore'; import { useUiStore } from '../stores/uiStore'; const schema = z.object({ mobile: z.string().min(10, 'شماره موبایل معتبر نیست'), password: z.string().min(6, 'رمز عبور باید حداقل ۶ کاراکتر باشد'), }); type FormData = z.infer; export default function LoginPage() { const login = useAuthStore((s) => s.login); const darkMode = useUiStore((s) => s.darkMode); const toggleDarkMode = useUiStore((s) => s.toggleDarkMode); const [showPass, setShowPass] = useState(false); const { register, handleSubmit, formState: { errors, isSubmitting } } = useForm({ resolver: zodResolver(schema), }); useEffect(() => { document.documentElement.classList.toggle('dark', darkMode); }, [darkMode]); const onSubmit = async (data: FormData) => { try { const res = await fetch('/api/v1/user/login', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ mobile_number: data.mobile, password: data.password }), }); if (!res.ok) { const err = await res.json(); toast.error(err?.errors?.[0]?.message ?? 'خطا در ورود'); return; } const json = await res.json(); login(json.access_token, json.refresh_token ?? ''); toast.success('خوش آمدید'); } catch { toast.error('خطا در اتصال به سرور'); } }; return (
{/* ── Left panel: branding ───────────────── */}
{/* Gradient orbs */}
{/* Logo */}
ClinicPro
{/* Center content */}

سیستم مدیریت
کلینیک هوشمند

مدیریت نوبت‌دهی، پزشکان، کلینیک‌ها و پرداخت‌ها در یک پنل یکپارچه

{/* Feature pills */}
{['نوبت‌دهی آنلاین', 'مدیریت پزشکان', 'گزارش‌گیری', 'پرداخت امن'].map((f) => ( {f} ))}
{/* Bottom note */}

نسخه ۱.۰.۰ — تمامی حقوق محفوظ است

{/* ── Right panel: form ──────────────────── */}
{/* Dark mode toggle */}
{/* Mobile logo */}
ClinicPro

ورود به پنل

اطلاعات حساب مدیریتی خود را وارد کنید

{/* Mobile number */}
{errors.mobile && (

{errors.mobile.message}

)}
{/* Password */}
{errors.password && (

{errors.password.message}

)}
{/* Submit */}
); }