Major UI overhaul and upload system improvements

- Removed hierarchy view and integrated functionality into index.html
- Added book-based document grouping with dedicated book-documents.html page
- Implemented comprehensive multi-file upload system with drag-and-drop reordering
- Added HTML-PDF matching functionality with download capability
- Enhanced upload workflow with 3-step process (File Selection, Book Settings, Order & Match)
- Added book conflict resolution (existing book vs new edition)
- Improved document order adjustment with one-click sort options
- Added modular header component system
- Updated API connectivity for Docker environment
- Enhanced viewer.html with PDF download functionality
- Fixed browser caching issues with version management
- Improved mobile responsiveness and modern UI design
This commit is contained in:
Hyungi Ahn
2025-08-25 15:58:30 +09:00
parent f95f67364a
commit 4038040faa
21 changed files with 3875 additions and 2603 deletions

View File

@@ -17,26 +17,40 @@ window.authModal = () => ({
this.loginError = '';
try {
// 실제 API 호출
const response = await window.api.login(this.loginForm.email, this.loginForm.password);
console.log('🔐 로그인 시도:', this.loginForm.email);
// 토큰 저장
window.api.setToken(response.access_token);
localStorage.setItem('refresh_token', response.refresh_token);
// API 클래스의 login 메서드 사용 (이미 토큰 설정과 사용자 정보 가져오기 포함)
const result = await window.api.login(this.loginForm.email, this.loginForm.password);
// 사용자 정보 가져오기
const userResponse = await window.api.getCurrentUser();
console.log('✅ 로그인 결과:', result);
// 전역 상태 업데이트
window.dispatchEvent(new CustomEvent('auth-changed', {
detail: { isAuthenticated: true, user: userResponse }
}));
// 모달 닫기 (부모 컴포넌트의 상태 변경)
window.dispatchEvent(new CustomEvent('close-login-modal'));
this.loginForm = { email: '', password: '' };
if (result.success) {
// refresh_token 저장 (access_token은 API 클래스에서 이미 처리됨)
const loginResponse = await fetch('/api/auth/login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(this.loginForm)
});
const tokenData = await loginResponse.json();
localStorage.setItem('refresh_token', tokenData.refresh_token);
console.log('💾 토큰 저장 완료');
// 전역 상태 업데이트
window.dispatchEvent(new CustomEvent('auth-changed', {
detail: { isAuthenticated: true, user: result.user }
}));
// 모달 닫기
window.dispatchEvent(new CustomEvent('close-login-modal'));
this.loginForm = { email: '', password: '' };
} else {
this.loginError = result.message || '로그인에 실패했습니다';
}
} catch (error) {
console.error('❌ 로그인 오류:', error);
this.loginError = error.message || '로그인에 실패했습니다';
} finally {
this.loginLoading = false;