fix: [제품검사] 우편번호 찾기 기능 연결

- InspectionCreate, InspectionDetail에 useDaumPostcode 훅 연결
- 우편번호 찾기 버튼 onClick → openPostcode 바인딩
- 주소 필드 readOnly 처리 (우편번호 검색으로만 입력)
- useMemo deps에 openPostcode 추가 (stale closure 방지)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-20 16:15:50 +09:00
parent 2472e7d36f
commit 3607beee12
2 changed files with 36 additions and 4 deletions

View File

@@ -13,6 +13,7 @@
import { useState, useCallback, useMemo } from 'react';
import dynamic from 'next/dynamic';
import { useRouter } from 'next/navigation';
import { useDaumPostcode } from '@/hooks/useDaumPostcode';
import { Plus, Trash2, ClipboardCheck } from 'lucide-react';
import { Button } from '@/components/ui/button';
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
@@ -61,6 +62,20 @@ import {
export function InspectionCreate() {
const router = useRouter();
// Daum 우편번호 서비스
const { openPostcode } = useDaumPostcode({
onComplete: (result) => {
setFormData(prev => ({
...prev,
scheduleInfo: {
...prev.scheduleInfo,
sitePostalCode: result.zonecode,
siteAddress: result.address,
},
}));
},
});
// 폼 상태
const [formData, setFormData] = useState<InspectionFormData>({
qualityDocNumber: '',
@@ -663,7 +678,7 @@ export function InspectionCreate() {
onChange={(e) => updateNested('scheduleInfo', 'sitePostalCode', e.target.value)}
className="w-28"
/>
<Button variant="outline" size="sm" type="button">
<Button variant="outline" size="sm" type="button" onClick={openPostcode}>
</Button>
</div>
@@ -674,6 +689,7 @@ export function InspectionCreate() {
value={formData.scheduleInfo.siteAddress}
onChange={(e) => updateNested('scheduleInfo', 'siteAddress', e.target.value)}
placeholder="주소 입력"
readOnly
/>
</div>
<div className="space-y-2">
@@ -710,7 +726,7 @@ export function InspectionCreate() {
</CardContent>
</Card>
</div>
), [formData, orderSummary, orderGroups, updateField, updateNested, handleRemoveOrderItem, handleOpenInspectionInput, handleUpdateOrderItemField, orderModalOpen]);
), [formData, orderSummary, orderGroups, updateField, updateNested, handleRemoveOrderItem, handleOpenInspectionInput, handleUpdateOrderItemField, orderModalOpen, openPostcode]);
// 이미 선택된 수주 ID 목록 (orderId 기준, 중복 제거)
const excludeOrderIds = useMemo(

View File

@@ -13,6 +13,7 @@
import { useState, useCallback, useEffect, useMemo } from 'react';
import dynamic from 'next/dynamic';
import { useRouter, useSearchParams } from 'next/navigation';
import { useDaumPostcode } from '@/hooks/useDaumPostcode';
import {
FileText,
PlayCircle,
@@ -124,6 +125,20 @@ export function InspectionDetail({ id }: InspectionDetailProps) {
const searchParams = useSearchParams();
const isEditModeParam = searchParams.get('mode') === 'edit';
// Daum 우편번호 서비스
const { openPostcode } = useDaumPostcode({
onComplete: (result) => {
setFormData(prev => ({
...prev,
scheduleInfo: {
...prev.scheduleInfo,
sitePostalCode: result.zonecode,
siteAddress: result.address,
},
}));
},
});
// 상세 데이터
const [inspection, setInspection] = useState<ProductInspection | null>(null);
const [isLoading, setIsLoading] = useState(true);
@@ -1259,7 +1274,7 @@ export function InspectionDetail({ id }: InspectionDetailProps) {
onChange={(e) => updateNested('scheduleInfo', 'sitePostalCode', e.target.value)}
className="w-28"
/>
<Button variant="outline" size="sm" type="button">
<Button variant="outline" size="sm" type="button" onClick={openPostcode}>
</Button>
</div>
@@ -1269,6 +1284,7 @@ export function InspectionDetail({ id }: InspectionDetailProps) {
<Input
value={formData.scheduleInfo.siteAddress}
onChange={(e) => updateNested('scheduleInfo', 'siteAddress', e.target.value)}
readOnly
/>
</div>
<div className="space-y-2">
@@ -1305,7 +1321,7 @@ export function InspectionDetail({ id }: InspectionDetailProps) {
</Card>
</div>
);
}, [inspection, formData, orderSummary, orderGroups, updateField, updateNested, handleRemoveOrderItem, handleOpenInspectionInput, handleUpdateOrderItemField, orderModalOpen, renderFqcBadge, renderFqcProgressBar]);
}, [inspection, formData, orderSummary, orderGroups, updateField, updateNested, handleRemoveOrderItem, handleOpenInspectionInput, handleUpdateOrderItemField, orderModalOpen, renderFqcBadge, renderFqcProgressBar, openPostcode]);
// ===== 모드 & Config =====
const mode = isEditMode ? 'edit' : 'view';