feat: Step 1.2 V2 견적 등록 페이지 API 연동
- test-new 페이지에서 Mock 저장을 실제 createQuote API 호출로 변경 - transformV2ToApi 함수로 V2 폼 데이터 변환 - 저장 후 실제 생성된 견적 ID로 상세 페이지 이동 - 에러 처리 및 사용자 피드백 유지 관련: docs/plans/quote-management-url-migration-plan.md
This commit is contained in:
@@ -13,6 +13,8 @@ import { QuoteRegistrationV2, QuoteFormDataV2 } from '@/components/quotes/QuoteR
|
|||||||
import { IntegratedDetailTemplate } from '@/components/templates/IntegratedDetailTemplate';
|
import { IntegratedDetailTemplate } from '@/components/templates/IntegratedDetailTemplate';
|
||||||
import { quoteCreateConfig } from '@/components/quotes/quoteConfig';
|
import { quoteCreateConfig } from '@/components/quotes/quoteConfig';
|
||||||
import { toast } from 'sonner';
|
import { toast } from 'sonner';
|
||||||
|
import { createQuote } from '@/components/quotes/actions';
|
||||||
|
import { transformV2ToApi } from '@/components/quotes/types';
|
||||||
|
|
||||||
export default function QuoteTestNewPage() {
|
export default function QuoteTestNewPage() {
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
@@ -25,20 +27,29 @@ export default function QuoteTestNewPage() {
|
|||||||
const handleSave = useCallback(async (data: QuoteFormDataV2, saveType: 'temporary' | 'final') => {
|
const handleSave = useCallback(async (data: QuoteFormDataV2, saveType: 'temporary' | 'final') => {
|
||||||
setIsSaving(true);
|
setIsSaving(true);
|
||||||
try {
|
try {
|
||||||
// TODO: API 연동 시 실제 저장 로직 구현
|
// V2 폼 데이터를 API 형식으로 변환
|
||||||
console.log('[테스트] 저장 데이터:', data);
|
const updatedData = { ...data, status: saveType };
|
||||||
console.log('[테스트] 저장 타입:', saveType);
|
const apiData = transformV2ToApi(updatedData);
|
||||||
|
|
||||||
// 테스트용 지연
|
console.log('[QuoteTestNewPage] 저장 데이터:', apiData);
|
||||||
await new Promise((resolve) => setTimeout(resolve, 1000));
|
console.log('[QuoteTestNewPage] 저장 타입:', saveType);
|
||||||
|
|
||||||
toast.success(`[테스트] ${saveType === 'temporary' ? '임시' : '최종'} 저장 완료`);
|
// API 호출
|
||||||
|
const result = await createQuote(apiData);
|
||||||
|
|
||||||
// 저장 후 상세 페이지로 이동 (테스트용으로 ID=1 사용)
|
if (!result.success) {
|
||||||
if (saveType === 'final') {
|
toast.error(result.error || '저장 중 오류가 발생했습니다.');
|
||||||
router.push('/sales/quote-management/test/1');
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
toast.success(`${saveType === 'temporary' ? '임시' : '최종'} 저장 완료`);
|
||||||
|
|
||||||
|
// 저장 후 상세 페이지로 이동 (실제 생성된 ID 사용)
|
||||||
|
if (result.data?.id) {
|
||||||
|
router.push(`/sales/quote-management/test/${result.data.id}`);
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
console.error('[QuoteTestNewPage] 저장 오류:', error);
|
||||||
toast.error('저장 중 오류가 발생했습니다.');
|
toast.error('저장 중 오류가 발생했습니다.');
|
||||||
} finally {
|
} finally {
|
||||||
setIsSaving(false);
|
setIsSaving(false);
|
||||||
|
|||||||
Reference in New Issue
Block a user