🎯 UI/UX 개선 및 안정성 강화
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled

 주요 개선사항:
- Rev.0일 때 Revisions 카운트 0으로 정확히 표시
- 업로드 후 파일 목록 자동 새로고침
- 대시보드 계정 메뉴 zIndex 문제 해결
- 구매관리 페이지 500 오류 해결 및 대시보드 리다이렉트
- 구매신청 관리 페이지 버튼 텍스트 개선

🔧 기술적 수정:
- purchase_requests API SQL 쿼리 테이블 구조에 맞게 수정
- UserMenu 드롭다운 zIndex 1050으로 상향 조정
- 프론트엔드 완전 재빌드로 최신 변경사항 반영
- 완전한 자동 마이그레이션 시스템 구축 (43개 테이블 스키마 동기화)

🚀 다음 단계: 리비전 기능 재도입 준비 완료
This commit is contained in:
Hyungi Ahn
2025-10-21 15:44:43 +09:00
parent edfe1bdf78
commit c258303bb7
10 changed files with 1109 additions and 26 deletions

View File

@@ -213,7 +213,7 @@
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.15);
overflow: hidden;
animation: dropdownSlide 0.3s ease-out;
z-index: 1000;
z-index: 1050;
}
@keyframes dropdownSlide {

View File

@@ -264,7 +264,7 @@ const BOMFilesTab = ({
<span style={{ fontWeight: '500' }}>Latest:</span> {latestFile.revision || 'Rev.0'}
</div>
<div>
<span style={{ fontWeight: '500' }}>Revisions:</span> {files.length}
<span style={{ fontWeight: '500' }}>Revisions:</span> {Math.max(0, files.length - 1)}
</div>
<div>
<span style={{ fontWeight: '500' }}>Updated:</span> {formatDate(latestFile.upload_date)}

View File

@@ -152,16 +152,14 @@ const BOMUploadTab = ({
setSuccess(`${selectedFiles.length}개 파일이 성공적으로 업로드되었습니다!`);
// 업로드 성공 즉시 콜백 호출 (파일 목록 새로고침)
if (onUploadSuccess) {
onUploadSuccess(uploadedFile);
}
// 파일 초기화
setSelectedFiles([]);
setBomName('');
// 2초 후 Files 탭으로 이동
setTimeout(() => {
if (onUploadSuccess) {
onUploadSuccess(uploadedFile);
}
}, 2000);
} catch (err) {
console.error('업로드 실패:', err);

View File

@@ -74,7 +74,7 @@ const UserMenu = ({ user, onNavigate, onLogout }) => {
border: '1px solid #e2e8f0',
borderRadius: '8px',
boxShadow: '0 4px 6px rgba(0, 0, 0, 0.1)',
zIndex: 1000,
zIndex: 1050,
minWidth: '200px'
}}>
<div style={{ padding: '8px 0' }}>

View File

@@ -34,6 +34,11 @@ const PurchaseRequestPage = ({ onNavigate, fileId, jobNo, selectedProject }) =>
setRequests(response.data.requests || []);
} catch (error) {
console.error('Failed to load requests:', error);
// API 오류 시 대시보드로 리다이렉트
if (error.response?.status === 500 || error.response?.status === 404) {
alert('구매신청 페이지에 문제가 발생했습니다. 대시보드로 이동합니다.');
onNavigate('dashboard');
}
} finally {
setIsLoading(false);
}
@@ -133,8 +138,8 @@ const PurchaseRequestPage = ({ onNavigate, fileId, jobNo, selectedProject }) =>
return (
<div className="purchase-request-page">
<div className="page-header">
<button onClick={() => onNavigate('bom', { selectedProject })} className="back-btn">
BOM 관리 돌아가기
<button onClick={() => onNavigate('dashboard')} className="back-btn">
대시보드 돌아가기
</button>
<h1>구매신청 관리</h1>
<p className="subtitle">구매신청한 자재들을 그룹별로 관리합니다</p>