refactor(WEB): 프론트엔드 대규모 코드 정리 및 리팩토링

- 미사용 코드 삭제: ThemeContext, itemStore, utils/date.ts, utils/formatAmount.ts
- 유틸리티 이동: date, formatAmount → src/lib/utils/ (중앙 집중화)
- 다수 page.tsx 클라이언트 컴포넌트 패턴 통일
- DateRangeSelector 리팩토링 및 date-range-picker UI 컴포넌트 추가
- ThemeSelect/themeStore Zustand 직접 연동으로 전환
- 건설/회계/영업/품목/출하 등 전반적 컴포넌트 개선
- UniversalListPage, IntegratedListTemplateV2 타입 확장
- 프론트엔드 종합 리뷰 문서 및 개선 체크리스트 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
유병철
2026-02-19 16:30:07 +09:00
parent b8dcb69e47
commit a2c3e4c41e
136 changed files with 1987 additions and 896 deletions

View File

@@ -5,6 +5,7 @@ import { deleteItemFile, ItemFileType } from '@/lib/api/items';
import { downloadFileById } from '@/lib/utils/fileDownload';
import { BendingDetail } from '@/types/item';
import { ItemType } from '@/types/item';
import { toast } from 'sonner';
/**
* 파일 정보 타입 (API 응답)
@@ -217,7 +218,7 @@ export function useFileHandling({
await downloadFileById(fileId, fileName);
} catch (error) {
console.error('[useFileHandling] 다운로드 실패:', error);
alert('파일 다운로드에 실패했습니다.');
toast.error('파일 다운로드에 실패했습니다.');
}
};
@@ -247,7 +248,7 @@ export function useFileHandling({
if (!fileId) {
console.error('[useFileHandling] 파일 ID를 찾을 수 없습니다:', fileType);
alert('파일 ID를 찾을 수 없습니다.');
toast.error('파일 ID를 찾을 수 없습니다.');
return;
}
@@ -276,10 +277,10 @@ export function useFileHandling({
setExistingCertificationFileId(null);
}
alert('파일이 삭제되었습니다.');
toast.success('파일이 삭제되었습니다.');
} catch (error) {
console.error('[useFileHandling] 파일 삭제 실패:', error);
alert('파일 삭제에 실패했습니다.');
toast.error('파일 삭제에 실패했습니다.');
} finally {
setIsDeletingFile(null);
}

View File

@@ -35,6 +35,7 @@ import type { ItemFieldResponse } from '@/types/item-master-api';
import { uploadItemFile, ItemFileType, checkItemCodeDuplicate, DuplicateCheckResult } from '@/lib/api/items';
import { DuplicateCodeError } from '@/lib/api/error-handler';
import { isNextRedirectError } from '@/lib/utils/redirect-error';
import { toast } from 'sonner';
/**
* 메인 DynamicItemForm 컴포넌트
@@ -400,7 +401,7 @@ export default function DynamicItemForm({
if (fileUploadErrors.length > 0) {
console.warn('[DynamicItemForm] 일부 파일 업로드 실패:', fileUploadErrors.join(', '));
// 품목은 저장되었으므로 경고만 표시하고 진행
alert(`품목이 저장되었습니다.\n\n일부 파일 업로드에 실패했습니다: ${fileUploadErrors.join(', ')}\n수정 화면에서 다시 업로드해 주세요.`);
toast.warning(`품목이 저장되었습니다. 일부 파일 업로드에 실패했습니다: ${fileUploadErrors.join(', ')}. 수정 화면에서 다시 업로드해 주세요.`);
}
}