'use client'; import { useState, useEffect } from 'react'; import { useRouter } from 'next/navigation'; import { PageLayout } from '@/components/organisms/PageLayout'; import { PageHeader } from '@/components/organisms/PageHeader'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select'; import { CreditCard, ArrowLeft, Save } from 'lucide-react'; import type { Card as CardType, CardFormData, CardCompany, CardStatus } from './types'; import { CARD_COMPANIES, CARD_STATUS_LABELS } from './types'; import { getActiveEmployees } from './actions'; interface CardFormProps { mode: 'create' | 'edit'; card?: CardType; onSubmit: (data: CardFormData) => void; } export function CardForm({ mode, card, onSubmit }: CardFormProps) { const router = useRouter(); const [formData, setFormData] = useState({ cardCompany: '', cardType: '', cardNumber: '', cardName: '', alias: '', expiryDate: '', csv: '', paymentDay: '', pinPrefix: '', totalLimit: 0, usedAmount: 0, remainingLimit: 0, status: 'active', userId: '', memo: '', }); // 직원 목록 상태 const [employees, setEmployees] = useState>([]); const [isLoadingEmployees, setIsLoadingEmployees] = useState(true); // 직원 목록 로드 useEffect(() => { const loadEmployees = async () => { setIsLoadingEmployees(true); const result = await getActiveEmployees(); if (result.success && result.data) { setEmployees(result.data); } setIsLoadingEmployees(false); }; loadEmployees(); }, []); // 수정 모드일 때 기존 데이터 로드 useEffect(() => { if (mode === 'edit' && card) { setFormData({ cardCompany: card.cardCompany, cardType: card.cardType || '', cardNumber: card.cardNumber, cardName: card.cardName, alias: card.alias || '', expiryDate: card.expiryDate, csv: card.csv || '', paymentDay: card.paymentDay || '', pinPrefix: card.pinPrefix, totalLimit: card.totalLimit || 0, usedAmount: card.usedAmount || 0, remainingLimit: card.remainingLimit || 0, status: card.status, userId: card.user?.id || '', memo: card.memo || '', }); } }, [mode, card]); const handleBack = () => { if (mode === 'edit' && card) { router.push(`/ko/hr/card-management/${card.id}`); } else { router.push('/ko/hr/card-management'); } }; const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); onSubmit(formData); }; // 카드번호 포맷팅 (1234-1234-1234-1234) const handleCardNumberChange = (value: string) => { const digits = value.replace(/\D/g, '').slice(0, 16); const parts = digits.match(/.{1,4}/g) || []; const formatted = parts.join('-'); setFormData(prev => ({ ...prev, cardNumber: formatted })); }; // 유효기간 포맷팅 (MMYY) const handleExpiryDateChange = (value: string) => { const digits = value.replace(/\D/g, '').slice(0, 4); setFormData(prev => ({ ...prev, expiryDate: digits })); }; // 비밀번호 앞 2자리 const handlePinPrefixChange = (value: string) => { const digits = value.replace(/\D/g, '').slice(0, 2); setFormData(prev => ({ ...prev, pinPrefix: digits })); }; return (
{/* 기본 정보 */} 기본 정보
handleCardNumberChange(e.target.value)} placeholder="1234-1234-1234-1234" maxLength={19} />
handleExpiryDateChange(e.target.value)} placeholder="MMYY" maxLength={4} />
handlePinPrefixChange(e.target.value)} placeholder="**" maxLength={2} />
setFormData(prev => ({ ...prev, cardName: e.target.value }))} placeholder="카드명을 입력해주세요" />
{/* 사용자 정보 */} 사용자 정보
{/* 버튼 영역 */}
); }