feat: 품목관리 기능 개선 및 문서화 업데이트

- 품목 상세/수정 페이지 파일 다운로드 기능 개선
- DynamicItemForm 파일 업로드 UI/UX 개선 (시방서, 인정서)
- BendingDiagramSection 조립/절곡 부품 전개도 통합
- API proxy route 품목 타입별 라우팅 개선
- ItemListClient 파일 다운로드 유틸리티 적용
- 품목코드 중복 체크 및 다이얼로그 추가

문서화:
- DynamicItemForm 훅 분리 계획서 추가 (2161줄 → 900줄 목표)
- 백엔드 API 마이그레이션 문서 추가
- 대용량 파일 처리 전략 가이드 추가
- 테넌트 데이터 격리 감사 문서 추가

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
byeongcheolryu
2025-12-16 11:01:25 +09:00
parent 8457dba0fc
commit b1587071f2
25 changed files with 3905 additions and 183 deletions

View File

@@ -157,12 +157,12 @@ export function useItemList(): UseItemListResult {
try {
// 각 유형별로 병렬 조회
const [allResponse, fgResponse, ptResponse, smResponse, rmResponse, csResponse] = await Promise.all([
fetch('/api/proxy/items?size=1'), // 전체 (size=1로 최소 데이터만)
fetch('/api/proxy/items?type=FG&size=1'), // 제품
fetch('/api/proxy/items?type=PT&size=1'), // 부품
fetch('/api/proxy/items?type=SM&size=1'), // 부자재
fetch('/api/proxy/items?type=RM&size=1'), // 원자재
fetch('/api/proxy/items?type=CS&size=1'), // 소모품
fetch('/api/proxy/items?group_id=1&size=1'), // 전체 (품목관리 그룹)
fetch('/api/proxy/items?type=FG&size=1'), // 제품
fetch('/api/proxy/items?type=PT&size=1'), // 부품
fetch('/api/proxy/items?type=SM&size=1'), // 부자재
fetch('/api/proxy/items?type=RM&size=1'), // 원자재
fetch('/api/proxy/items?type=CS&size=1'), // 소모품
]);
const [allResult, fgResult, ptResult, smResult, rmResult, csResult] = await Promise.all([
@@ -196,9 +196,16 @@ export function useItemList(): UseItemListResult {
if (filters.search && filters.search.trim()) {
params.append('search', filters.search.trim());
}
// 타입별 조회 vs 전체 조회
if (filters.type && filters.type !== 'all') {
// 특정 타입 조회: type 파라미터 사용
params.append('type', filters.type);
} else {
// 전체 조회: group_id=1 (품목관리 그룹)
params.append('group_id', '1');
}
if (filters.page) {
params.append('page', String(filters.page));
}