feat: 프로젝트 관리 및 비밀번호 변경 기능 개선

주요 변경사항:
- 비활성화된 프로젝트 관리 기능 추가
  * 프로젝트 관리 페이지에 접을 수 있는 비활성 프로젝트 섹션 추가
  * 비활성화된 프로젝트 복구 기능 제공
  * 업로드 시에는 활성 프로젝트만 표시되도록 API 호출 분리

- 헤더 비밀번호 변경 기능 완전 구현
  * CommonHeader.js에 완전한 비밀번호 변경 모달 구현
  * ESC 키 지원, 실시간 유효성 검사, 토스트 메시지 추가
  * 중복 코드 제거 및 통일된 함수 호출 구조

- 수신함 수정 내용 표시 문제 해결
  * description 우선 표시로 최신 수정 내용 반영
  * 관리함에서 final_description/final_category 업데이트 로직 추가

- 현황판 날짜 그룹화 개선
  * 업로드일 기준에서 관리함 진입일(reviewed_at) 기준으로 변경
  * Invalid Date 오류 해결

- 프로젝트 관리 페이지 JavaScript 오류 수정
  * 중복 변수 선언 및 함수 참조 오류 해결
  * 페이지 초기화 로직 개선

기술적 개선:
- API 호출 최적화 (active_only 매개변수 명시적 전달)
- 프론트엔드 표시 우선순위 통일 (description || final_description)
- 백엔드 final_* 필드 업데이트 로직 추가
This commit is contained in:
hyungi
2025-10-26 15:28:23 +09:00
parent fd0579805c
commit c16fc53f3b
25 changed files with 295 additions and 169 deletions

View File

@@ -293,11 +293,7 @@ class App {
* 이벤트 리스너 등록
*/
registerEventListeners() {
// 비밀번호 변경
document.getElementById('passwordChangeForm').addEventListener('submit', (e) => {
e.preventDefault();
this.handlePasswordChange();
});
// 비밀번호 변경은 CommonHeader에서 처리
// 모바일 반응형
window.addEventListener('resize', () => {
@@ -358,46 +354,7 @@ class App {
document.getElementById('mobileOverlay').classList.remove('active');
}
/**
* 비밀번호 변경 모달 표시
*/
showPasswordChangeModal() {
document.getElementById('passwordModal').classList.remove('hidden');
document.getElementById('passwordModal').classList.add('flex');
}
/**
* 비밀번호 변경 모달 숨기기
*/
hidePasswordChangeModal() {
document.getElementById('passwordModal').classList.add('hidden');
document.getElementById('passwordModal').classList.remove('flex');
document.getElementById('passwordChangeForm').reset();
}
/**
* 비밀번호 변경 처리
*/
async handlePasswordChange() {
const currentPassword = document.getElementById('currentPassword').value;
const newPassword = document.getElementById('newPassword').value;
const confirmPassword = document.getElementById('confirmPassword').value;
if (newPassword !== confirmPassword) {
this.showError('새 비밀번호가 일치하지 않습니다.');
return;
}
try {
// API 호출 (구현 필요)
// await AuthAPI.changePassword(currentPassword, newPassword);
this.showSuccess('비밀번호가 성공적으로 변경되었습니다.');
this.hidePasswordChangeModal();
} catch (error) {
this.showError('비밀번호 변경에 실패했습니다.');
}
}
// 비밀번호 변경 기능은 CommonHeader.js에서 처리됩니다.
/**
* 로그아웃
@@ -472,13 +429,7 @@ function toggleSidebar() {
window.app.toggleSidebar();
}
function showPasswordChangeModal() {
window.app.showPasswordChangeModal();
}
function hidePasswordChangeModal() {
window.app.hidePasswordChangeModal();
}
// 비밀번호 변경 기능은 CommonHeader.showPasswordModal()을 사용합니다.
function logout() {
window.app.logout();