'use client'; import { useState } from 'react'; import { useRouter } from 'next/navigation'; import { useForm, Controller } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import { z } from 'zod'; import { Box, TextField, Button, Checkbox, FormControlLabel, Typography, Link, Divider, Paper, InputAdornment, IconButton, } from '@mui/material'; import { Visibility, VisibilityOff, Email, Lock, ChatBubble } from '@mui/icons-material'; import { useAuthStore } from '@/stores/authStore'; import { useUIStore } from '@/stores/uiStore'; // 유효성 검사 스키마 const loginSchema = z.object({ email: z .string() .min(1, '이메일을 입력해주세요') .email('올바른 이메일 형식이 아닙니다'), password: z .string() .min(8, '비밀번호는 8자 이상이어야 합니다') .regex(/^(?=.*[A-Za-z])(?=.*\d)/, '영문과 숫자를 포함해야 합니다'), rememberMe: z.boolean().optional(), }); type LoginFormData = z.infer; export default function LoginPage() { const router = useRouter(); const { login } = useAuthStore(); const { showToast, setLoading } = useUIStore(); const [showPassword, setShowPassword] = useState(false); const { control, handleSubmit, formState: { errors }, } = useForm({ resolver: zodResolver(loginSchema), defaultValues: { email: '', password: '', rememberMe: false, }, }); const onSubmit = async (data: LoginFormData) => { try { setLoading(true); // TODO: API 연동 시 실제 로그인 처리 // const response = await axios.post(`${USER_HOST}/api/v1/auth/login`, { // email: data.email, // password: data.password, // }); // 임시 로그인 처리 (API 연동 전) await new Promise(resolve => setTimeout(resolve, 1000)); const mockUser = { id: '1', name: '홍길동', phone: '010-1234-5678', email: data.email, businessName: '홍길동 고깃집', businessType: 'restaurant', }; login(mockUser, 'mock-jwt-token'); showToast('로그인되었습니다', 'success'); router.push('/'); } catch { showToast('로그인에 실패했습니다. 이메일과 비밀번호를 확인해주세요.', 'error'); } finally { setLoading(false); } }; const handleSocialLogin = (provider: 'kakao' | 'naver') => { // TODO: 소셜 로그인 구현 showToast(`${provider === 'kakao' ? '카카오톡' : '네이버'} 로그인은 준비 중입니다`, 'info'); }; return ( {/* 로고 및 타이틀 */} 🎉 KT AI 이벤트 소상공인을 위한 스마트 마케팅 {/* 로그인 폼 */}
( ), }} /> )} /> ( ), endAdornment: ( setShowPassword(!showPassword)} edge="end" size="small" > {showPassword ? : } ), }} /> )} /> ( } label={ 로그인 상태 유지 } /> )} /> 비밀번호 찾기 | 회원가입
{/* 소셜 로그인 */} 또는 {/* 약관 동의 안내 */} 회원가입 시{' '} 이용약관 {' '} 및{' '} 개인정보처리방침 에 동의하게 됩니다.
); }