"use client"; import { useState } from "react"; import { useRouter } from "next/navigation"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { LanguageSelect } from "@/components/LanguageSelect"; import { ThemeSelect } from "@/components/ThemeSelect"; import { companyInfoSchema, userInfoSchema, planSelectionSchema } from "@/lib/validations/auth"; import { ArrowLeft, Building2, User, Mail, Phone, Lock, Briefcase, Users, FileText } from "lucide-react"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; export function SignupPage() { const router = useRouter(); const [step, setStep] = useState(1); const [formData, setFormData] = useState({ // 회사 정보 companyName: "", businessNumber: "", industry: "", companySize: "", // 담당자 정보 name: "", position: "", email: "", phone: "", userId: "", password: "", passwordConfirm: "", // 플랜 및 추천인 plan: "demo", salesCode: "", // 약관 agreeTerms: false, agreePrivacy: false, }); const handleInputChange = (field: string, value: string | boolean) => { setFormData(prev => ({ ...prev, [field]: value })); }; const handleSubmit = () => { // 회원가입 처리 (실제로는 API 호출) const userData = { ...formData, role: "CEO", // 기본 역할 }; // Save user data to localStorage (client-side only) if (typeof window !== "undefined") { localStorage.setItem("user", JSON.stringify(userData)); } // Navigate to dashboard router.push("/dashboard"); }; const [stepErrors, setStepErrors] = useState<{ [key: string]: string }>({}); const validateStep1 = () => { const result = companyInfoSchema.safeParse({ companyName: formData.companyName, businessNumber: formData.businessNumber, industry: formData.industry, companySize: formData.companySize, }); if (!result.success) { const firstError = result.error.issues[0]; setStepErrors({ step1: firstError.message }); return false; } setStepErrors({}); return true; }; const validateStep2 = () => { const result = userInfoSchema.safeParse({ name: formData.name, position: formData.position, email: formData.email, phone: formData.phone, userId: formData.userId, password: formData.password, passwordConfirm: formData.passwordConfirm, }); if (!result.success) { const firstError = result.error.issues[0]; setStepErrors({ step2: firstError.message }); return false; } setStepErrors({}); return true; }; const validateStep3 = () => { const result = planSelectionSchema.safeParse({ plan: formData.plan, salesCode: formData.salesCode, agreeTerms: formData.agreeTerms, agreePrivacy: formData.agreePrivacy, }); if (!result.success) { const firstError = result.error.issues[0]; setStepErrors({ step3: firstError.message }); return false; } setStepErrors({}); return true; }; const isStep1Valid = formData.companyName && formData.businessNumber && formData.industry && formData.companySize; const isStep2Valid = formData.name && formData.email && formData.phone && formData.userId && formData.password && formData.password === formData.passwordConfirm; const isStep3Valid = formData.agreeTerms && formData.agreePrivacy; return (
MES 시스템을 도입할 회사의 기본 정보를 알려주세요
{stepErrors.step1}
시스템 관리자 계정으로 사용될 정보입니다
비밀번호가 일치하지 않습니다
)}{stepErrors.step2}
먼저 30일 무료 체험으로 시작해보세요
유효하지 않은 코드입니다
)}💡 예시 코드: SALES2024 (20%), PARTNER30 (30%), VIP50 (50%)
이미 계정이 있으신가요?{" "}