'use client'; import { useMemo } from 'react'; import { Input } from '@/components/ui/input'; import { DatePicker } from '@/components/ui/date-picker'; import { Label } from '@/components/ui/label'; import { CurrencyInput } from '@/components/ui/currency-input'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Switch } from '@/components/ui/switch'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select'; import type { SectionProps } from './types'; import { INSTRUMENT_TYPE_OPTIONS, DIRECTION_OPTIONS, MEDIUM_OPTIONS, ENDORSEMENT_OPTIONS, BILL_CATEGORY_OPTIONS, STORAGE_OPTIONS, PAYMENT_METHOD_OPTIONS, ENDORSEMENT_ORDER_PAPER, ENDORSEMENT_ORDER_ELECTRONIC, } from '../constants'; interface BasicInfoSectionProps extends SectionProps { clients: { id: string; name: string }[]; conditions: { isReceived: boolean; isIssued: boolean; isCheck: boolean; isBill: boolean; canBeElectronic: boolean; isElectronic: boolean; receivedStatusOptions: readonly { value: string; label: string }[]; issuedStatusOptions: readonly { value: string; label: string }[]; paymentPlaceOptions: readonly { value: string; label: string }[]; }; onInstrumentTypeChange: (v: string) => void; onDirectionChange: (v: string) => void; } export function BasicInfoSection({ formData, updateField, isViewMode, clients, conditions, onInstrumentTypeChange, onDirectionChange, }: BasicInfoSectionProps) { const { isReceived, isIssued, isCheck, isBill, canBeElectronic, isElectronic, receivedStatusOptions, issuedStatusOptions, paymentPlaceOptions, } = conditions; const endorsementOrderOptions = useMemo( () => isElectronic ? ENDORSEMENT_ORDER_ELECTRONIC : [...ENDORSEMENT_ORDER_PAPER], [isElectronic] ); return ( 기본 정보
{/* 어음번호 */}
updateField('billNumber', e.target.value)} placeholder="자동생성 또는 직접입력" disabled={isViewMode} />
{/* 증권종류 */}
{/* 거래방향 */}
{/* 전자/지류 */}
{/* 거래처 */}
{/* 금액 */}
updateField('amount', v ?? 0)} disabled={isViewMode} />
{/* 발행일 */}
updateField('issueDate', d)} disabled={isViewMode} />
{/* 만기일 (수표는 일람출급이므로 없음) */} {isBill && (
updateField('maturityDate', d)} disabled={isViewMode} />
)} {/* 은행 */}
updateField(isReceived ? 'issuerBank' : 'settlementBank', e.target.value)} placeholder={isReceived ? '예: 국민은행' : '예: 신한은행'} disabled={isViewMode} />
{/* 지급장소 */}
{/* 지급장소 상세 */} {formData.paymentPlace === 'other' && (
updateField('paymentPlaceDetail', e.target.value)} placeholder="지급장소를 직접 입력" disabled={isViewMode} />
)} {/* 어음구분 (어음만) */} {isBill && (
)} {/* ===== 받을어음 전용 필드 ===== */} {isReceived && ( <>
{/* 할인여부 (수표 제외) */} {isBill && (
{ updateField('isDiscounted', c); if (c) updateField('receivedStatus', 'discounted'); }} disabled={isViewMode} /> {formData.isDiscounted ? '할인 적용' : '미적용'}
)} )} {/* ===== 지급어음 전용 필드 ===== */} {isIssued && ( <>
updateField('actualPaymentDate', d)} disabled={isViewMode} />
)} {/* 입출금 계좌 */}
updateField('bankAccountInfo', e.target.value)} placeholder="계좌 정보" disabled={isViewMode} />
{/* 비고 */}
updateField('note', e.target.value)} placeholder="비고를 입력해주세요" disabled={isViewMode} />
); }