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:
@@ -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(
|
||||
|
||||
@@ -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';
|
||||
|
||||
Reference in New Issue
Block a user