Files
zerp/frontend/src/app/login/page.tsx
2026-03-10 11:54:46 +03:00

135 lines
5.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
'use client'
import { useState, FormEvent } from 'react'
import { useAuth } from '@/contexts/AuthContext'
import Link from 'next/link'
import { LogIn, Mail, Lock, Building2, AlertCircle } from 'lucide-react'
export default function LoginPage() {
const { login } = useAuth()
const [email, setEmail] = useState('')
const [password, setPassword] = useState('')
const [error, setError] = useState('')
const [isLoading, setIsLoading] = useState(false)
const handleSubmit = async (e: FormEvent) => {
e.preventDefault()
setError('')
setIsLoading(true)
try {
await login(email, password)
} catch (err: any) {
setError(err.message || 'فشل تسجيل الدخول. الرجاء المحاولة مرة أخرى.')
} finally {
setIsLoading(false)
}
}
return (
<div className="min-h-screen bg-gradient-to-br from-primary-50 via-white to-primary-50 flex items-center justify-center p-4">
<div className="w-full max-w-md">
{/* Logo and Title */}
<div className="text-center mb-8">
<Link href="/" className="inline-flex items-center gap-3 mb-4">
<div className="bg-primary-600 p-3 rounded-xl">
<Building2 className="h-10 w-10 text-white" />
</div>
</Link>
<h1 className="text-3xl font-bold text-gray-900 mb-2">تسجيل الدخول</h1>
<p className="text-gray-600">ATMATA - نظام إدارة علاقات العملاء</p>
</div>
{/* Login Form */}
<div className="bg-white rounded-2xl shadow-xl p-8 border border-gray-100">
{error && (
<div className="mb-6 p-4 bg-red-50 border border-red-200 rounded-lg flex items-start gap-3">
<AlertCircle className="h-5 w-5 text-red-600 flex-shrink-0 mt-0.5" />
<p className="text-red-800 text-sm">{error}</p>
</div>
)}
<form onSubmit={handleSubmit} className="space-y-6">
{/* Email Field */}
<div>
<label htmlFor="email" className="block text-sm font-semibold text-gray-700 mb-2">
البريد الإلكتروني
</label>
<div className="relative">
<Mail className="absolute left-3 top-1/2 transform -translate-y-1/2 h-5 w-5 text-gray-400" />
<input
id="email"
type="email"
value={email}
onChange={(e) => setEmail(e.target.value)}
required
placeholder="example@atmata.com"
className="w-full pl-10 pr-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary-500 focus:border-transparent transition-all"
disabled={isLoading}
/>
</div>
</div>
{/* Password Field */}
<div>
<label htmlFor="password" className="block text-sm font-semibold text-gray-700 mb-2">
كلمة المرور
</label>
<div className="relative">
<Lock className="absolute left-3 top-1/2 transform -translate-y-1/2 h-5 w-5 text-gray-400" />
<input
id="password"
type="password"
value={password}
onChange={(e) => setPassword(e.target.value)}
required
placeholder="••••••••"
className="w-full pl-10 pr-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary-500 focus:border-transparent transition-all"
disabled={isLoading}
/>
</div>
</div>
{/* Submit Button */}
<button
type="submit"
disabled={isLoading}
className="w-full flex items-center justify-center gap-2 px-6 py-3 bg-primary-600 text-white rounded-lg hover:bg-primary-700 transition-all duration-300 shadow-md hover:shadow-lg disabled:opacity-50 disabled:cursor-not-allowed font-semibold"
>
{isLoading ? (
<>
<div className="animate-spin rounded-full h-5 w-5 border-b-2 border-white"></div>
<span>جاري تسجيل الدخول...</span>
</>
) : (
<>
<LogIn className="h-5 w-5" />
<span>تسجيل الدخول</span>
</>
)}
</button>
</form>
{/* System Administrator
<div className="mt-6 p-4 bg-blue-50 rounded-lg border border-blue-200">
<h3 className="text-sm font-semibold text-blue-900 mb-2">مدير النظام:</h3>
<div className="text-sm text-blue-800">
<p><strong>admin@system.local</strong> / Admin@123</p>
</div>
</div>
*/}
</div>
{/* Back to Home */}
<div className="text-center mt-6">
<Link
href="/"
className="text-primary-600 hover:text-primary-700 font-medium transition-colors"
>
العودة إلى الصفحة الرئيسية
</Link>
</div>
</div>
</div>
)
}