feat: 피팅류 엑셀 내보내기 개선 및 프로젝트 비활성화 버그 수정
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled

 피팅류 엑셀 내보내기 개선:
- 품목명에 상세 피팅 타입 표시 (SOCK-O-LET, ELBOW 90° LR 등)
- G열부터 압력등급/스케줄/재질/사용자요구/추가요청사항 체계적 배치
- 분류기 추출 요구사항(J열)과 사용자 입력 요구사항(K열) 분리
- P열 납기일 고정 규칙 유지, 관리항목 자동 채움

🐛 프로젝트 비활성화 버그 수정:
- 백엔드: job_no 필드 추가로 프론트엔드 호환성 확보
- 프론트엔드: 안전한 프로젝트 식별자 처리 로직 구현
- 개별 프로젝트 비활성화 시 전체 프로젝트 영향 문제 해결
- 디버깅 로그 추가로 상태 변경 추적 가능

🔧 기타 개선사항:
- BOM 페이지 이모지 제거
- 구매신청 후 자재 비활성화 기능 구현
- 모든 카테고리 뷰에 onPurchasedMaterialsUpdate 콜백 추가
This commit is contained in:
hyungi
2025-10-16 14:00:44 +09:00
parent 22baea38e1
commit c7297c6fb7
9 changed files with 339 additions and 86 deletions

View File

@@ -167,7 +167,16 @@ const BOMManagementPage = ({
userRequirements,
setUserRequirements,
purchasedMaterials,
onPurchasedMaterialsUpdate: (materialIds) => {
setPurchasedMaterials(prev => {
const newSet = new Set(prev);
materialIds.forEach(id => newSet.add(id));
console.log(`📦 구매신청 자재 추가: 기존 ${prev.size}개 → 신규 ${newSet.size}`);
return newSet;
});
},
fileId,
jobNo,
user,
onNavigate
};

View File

@@ -43,9 +43,20 @@ const DashboardPage = ({
// 프로젝트 비활성화
const handleDeactivateProject = (project) => {
if (window.confirm(`"${project.job_name || project.job_no}" 프로젝트를 비활성화하시겠습니까?`)) {
setInactiveProjects(prev => new Set([...prev, project.job_no]));
if (selectedProject?.job_no === project.job_no) {
const projectId = project.job_no || project.official_project_code || project.id;
const projectName = project.job_name || project.project_name || projectId;
console.log('🔍 비활성화 요청:', { project, projectId, projectName });
if (window.confirm(`"${projectName}" 프로젝트를 비활성화하시겠습니까?`)) {
setInactiveProjects(prev => {
const newSet = new Set([...prev, projectId]);
console.log('📦 비활성화 프로젝트 업데이트:', { prev: Array.from(prev), new: Array.from(newSet) });
return newSet;
});
const selectedProjectId = selectedProject?.job_no || selectedProject?.official_project_code || selectedProject?.id;
if (selectedProjectId === projectId) {
setSelectedProject(null);
}
setShowProjectDropdown(false);
@@ -323,7 +334,10 @@ const DashboardPage = ({
</div>
) : (
projects
.filter(project => !inactiveProjects.has(project.job_no))
.filter(project => {
const projectId = project.job_no || project.official_project_code || project.id;
return !inactiveProjects.has(projectId);
})
.map((project) => (
<div
key={project.job_no}