feat: 가스켓 카테고리 개선 및 엑셀 내보내기 최적화
Some checks failed
SonarQube Analysis / SonarQube Scan (push) Has been cancelled

- 가스켓 카테고리 정렬 오류 수정 (FilterableHeader props 추가)
- 가스켓 엑셀 내보내기 개선:
  * 품목명을 BOM 페이지 타입과 동일하게 표시 (SPIRAL WOUND GASKET 등)
  * 재질을 재질1/재질2로 분리 (SS304/GRAPHITE → 재질1: SS304/GRAPHITE, 재질2: /SS304/SS304)
  * originalDescription에서 4개 재질 패턴 우선 추출
  * P열 납기일 규칙 준수
- 프로젝트 비활성화 기능 수정 (localStorage 영구 저장)
- 모든 카테고리 정렬 함수 안전성 강화
This commit is contained in:
hyungi
2025-10-16 15:51:24 +09:00
parent 379af6b1e3
commit a27213e0e5
7 changed files with 430 additions and 139 deletions

View File

@@ -34,7 +34,25 @@ function App() {
const [newProjectName, setNewProjectName] = useState('');
const [newClientName, setNewClientName] = useState('');
const [pendingSignupCount, setPendingSignupCount] = useState(0);
const [inactiveProjects, setInactiveProjects] = useState(new Set());
const [inactiveProjects, setInactiveProjects] = useState(() => {
// localStorage에서 비활성화된 프로젝트 목록 로드
try {
const saved = localStorage.getItem('inactiveProjects');
return saved ? new Set(JSON.parse(saved)) : new Set();
} catch (error) {
console.error('비활성화 프로젝트 목록 로드 실패:', error);
return new Set();
}
});
// 비활성화 프로젝트 목록이 변경될 때마다 localStorage에 저장
useEffect(() => {
try {
localStorage.setItem('inactiveProjects', JSON.stringify(Array.from(inactiveProjects)));
} catch (error) {
console.error('비활성화 프로젝트 목록 저장 실패:', error);
}
}, [inactiveProjects]);
// 승인 대기 중인 회원가입 수 조회
const loadPendingSignups = async () => {