diff --git a/design/uiux/prototype/01-로그인.html b/design/uiux/prototype/01-로그인.html index 021240b..3609dc1 100644 --- a/design/uiux/prototype/01-로그인.html +++ b/design/uiux/prototype/01-로그인.html @@ -1,361 +1,314 @@ - - - 로그인 - 회의록 서비스 - - + .logo-icon { + width: 100px; + height: 100px; + font-size: 50px; + } + } + +
- +
- - + + // 대시보드로 이동 + showToast('로그인 성공!', 'success'); + setTimeout(() => { + navigateTo('02-대시보드.html'); + }, 500); + } else { + // 로그인 실패 + submitBtn.disabled = false; + submitBtn.textContent = originalText; + showError('사번 또는 비밀번호가 올바르지 않습니다.'); + } + }, 1500); + } + + /** + * 폼 제출 이벤트 + */ + loginForm.addEventListener('submit', (e) => { + e.preventDefault(); + + // 에러 메시지 초기화 + errorMessageEl.classList.remove('show'); + + // 폼 데이터 가져오기 + const formData = getFormData(loginForm); + + // 유효성 검사 + if (!validateForm(formData)) { + return; + } + + // 로그인 처리 + handleLogin(formData); + }); + + /** + * 비밀번호 찾기 클릭 + */ + forgotPasswordLink.addEventListener('click', (e) => { + e.preventDefault(); + showToast('비밀번호 찾기 기능은 준비중입니다.', 'info'); + }); + + /** + * Enter 키로 다음 필드 이동 + */ + employeeIdInput.addEventListener('keypress', (e) => { + if (e.key === 'Enter') { + e.preventDefault(); + passwordInput.focus(); + } + }); + + /** + * 페이지 로드 시 이미 로그인된 경우 대시보드로 이동 + */ + if (getFromStorage('isLoggedIn')) { + navigateTo('02-대시보드.html'); + } + + console.log('01-로그인 화면 초기화 완료'); + console.log('데모 계정: user-001 또는 demo (비밀번호: 아무거나 8자 이상)'); + - \ No newline at end of file + diff --git a/design/uiux/prototype/02-대시보드.html b/design/uiux/prototype/02-대시보드.html index 80f7b66..5732ce5 100644 --- a/design/uiux/prototype/02-대시보드.html +++ b/design/uiux/prototype/02-대시보드.html @@ -1,684 +1,749 @@ - - - 대시보드 - 회의록 서비스 - - + .minutes-item-meta { + font-size: var(--font-small); + color: var(--gray-500); + display: flex; + gap: var(--space-md); + align-items: center; + } + + /* 빈 상태 */ + .empty-state { + text-align: center; + padding: var(--space-xxl); + color: var(--gray-500); + } + + .empty-icon { + font-size: 48px; + margin-bottom: var(--space-md); + } + + section { + margin-bottom: var(--space-xl); + } + -
- -
-
-

회의록 대시보드

- -
-
- - -
- -
-
-
-
📅
-
-

전체 회의록

-

6

-

이번 달 +2

-
-
-
- -
-
-
-
-

검증 완료

-

4

-

66% 완료율

-
-
-
- -
-
-
📋
-
-

진행 중 Todo

-

35

-

5개 이번 주 마감

-
-
-
-
- - -
-

빠른 작업

-
- -
- - - - - - - -
- - -
-

예정된 회의

- 모두 보기 -
- -
-
-
-

2025년 1분기 제품 기획 회의

-
-
- 📅 - 2025년 10월 25일 14:00 -
-
- 📍 - 본사 2층 대회의실 -
-
- ⏱️ - 90분 -
-
-
-
- 예정 -
-
- -
- 참석자: -
-
-
-
-
-
- +1명 -
- -
- - -
-
- - -
-
-

최근 회의록

- 전체 보기 -
- -
-
-
-

2024 Q4 마케팅 전략 회의

-
-
- 📅 - 2024년 01월 15일 14:00 -
-
- ⏱️ - 90분 -
-
- 💬 - 32회 발언 -
-
-
-
- 검증 완료 -
-
- -
- 참석자: -
-
-
-
- Todo 5개 -
- -
- - -
-
-
-
- - - - - - + + +
- - + - setInterval(() => { - if (isRecording && !isPaused) { - // 현재 speaking 상태 제거 - participants.forEach(p => p.classList.remove('speaking')); - // 랜덤하게 speaking 상태 추가 - const randomParticipant = participants[Math.floor(Math.random() * participants.length)]; - randomParticipant.classList.add('speaking'); - } - }, 8000); // 8초마다 화자 변경 - } - - // Todo 자동 추출 시뮬레이션 - function startTodoExtractionSimulation() { - const todoTemplates = [ - { text: '프로토타입 완성 및 리뷰 요청', assignee: '최유진', priority: 'medium' }, - { text: 'API 성능 테스트 및 최적화', assignee: '이준호', priority: 'high' }, - { text: '사용자 피드백 수집 및 분석', assignee: '박서연', priority: 'low' } - ]; - - let todoIndex = 0; - setInterval(() => { - if (isRecording && !isPaused && todoIndex < todoTemplates.length) { - addTodoItem(todoTemplates[todoIndex]); - todoIndex++; - } - }, 25000); // 25초마다 새로운 Todo 추가 - } - - // Todo 항목 추가 - function addTodoItem(data) { - const todoContent = document.getElementById('todoContent'); - const todoItem = document.createElement('div'); - todoItem.className = 'todo-item new'; - - const dueDate = new Date(); - dueDate.setDate(dueDate.getDate() + Math.floor(Math.random() * 7) + 1); - const formattedDate = `${dueDate.getMonth() + 1}/${String(dueDate.getDate()).padStart(2, '0')}`; - - todoItem.innerHTML = ` - -
-
${data.text}
-
- ${data.assignee} - 마감: ${formattedDate} - ${data.priority === 'high' ? '높음' : data.priority === 'medium' ? '보통' : '낮음'} -
-
- `; - - todoContent.appendChild(todoItem); - - // 배지 업데이트 - const todoCount = todoContent.children.length; - document.querySelector('.todo-section .badge').textContent = `${todoCount}개`; - - // 새로운 Todo 알림 - setTimeout(() => { - todoItem.classList.remove('new'); - }, 3000); - } - - // 자동 스크롤 - function autoScrollTranscription() { - const transcriptionContent = document.getElementById('transcriptionContent'); - - // MutationObserver로 새로운 내용 감지 - const observer = new MutationObserver(() => { - transcriptionContent.scrollTop = transcriptionContent.scrollHeight; - }); - - observer.observe(transcriptionContent, { childList: true }); - } - - // 데이터 수집 함수들 - function getTranscriptionData() { - const items = document.querySelectorAll('.transcription-item'); - return Array.from(items).map(item => ({ - speaker: item.querySelector('.speaker-name').textContent, - text: item.querySelector('.transcription-text').textContent, - timestamp: item.querySelector('.timestamp').textContent, - confidence: item.querySelector('.confidence-indicator').textContent - })); - } - - function getTodoData() { - const items = document.querySelectorAll('.todo-item'); - return Array.from(items).map(item => ({ - text: item.querySelector('.todo-text').textContent, - assignee: item.querySelector('.todo-assignee').textContent, - meta: item.querySelector('.todo-meta').textContent, - completed: item.querySelector('.todo-checkbox').checked - })); - } - - function getParticipantData() { - const items = document.querySelectorAll('.participant-item'); - return Array.from(items).map(item => ({ - name: item.querySelector('.participant-name').textContent, - role: item.querySelector('.participant-role').textContent, - stats: item.querySelector('.participation-stats').textContent - })); - } - - // 페이지 종료 시 경고 - window.addEventListener('beforeunload', (e) => { - if (isRecording) { - e.preventDefault(); - e.returnValue = '회의가 진행 중입니다. 페이지를 나가시겠습니까?'; - } - }); - - - \ No newline at end of file + \ No newline at end of file diff --git a/design/uiux/prototype/06-검증완료.html b/design/uiux/prototype/06-검증완료.html index 8301cae..589ccf4 100644 --- a/design/uiux/prototype/06-검증완료.html +++ b/design/uiux/prototype/06-검증완료.html @@ -6,457 +6,412 @@ 검증 완료 - 회의록 서비스 -
- -
-
-

회의록 검증 완료!

-

AI가 회의록을 분석하여 품질을 검증했습니다

-
+
+ +
+
+ +

검증 완료

+
+
+
- -
-
-
-

2025년 1분기 제품 기획 회의

-

검증 완료 • 2025-10-21 15:42

+ +
+ +
+
+

전체 진행률

+ 50% +
+
+
+
+

4개 섹션 중 2개 검증 완료

+
+ + +
+
+

2025년 1분기 제품 기획 회의

+
+
+
+
+ 📅 2025-10-25 14:00 + ⏱️ 90분 +
+
👥 김민준, 박서연, 이준호, 최유진
+
-
-
-
47
-
확인된 액션 아이템
+ +
+

섹션별 검증 상태

+ + +
+
+
+

회의 개요

+
+
+
+
+
+ 2명 검증 완료 +
+
+
-
-
12
-
참석자 발언
+ + +
+
+
+

+ 논의 사항 + 🔒 +

+
+
+
+
+
+
+ 3명 검증 완료 · 잠금됨 +
+
+
-
-
8
-
의사결정 사항
+ + +
+
+
+

결정 사항

+
+
+
+
+ 1명 검증 완료 +
+
+
-
-
3
-
전문용어 정의
+ + +
+
+
+

액션 아이템

+
+ 아직 검증되지 않음 +
+
+
+ + +
+ + +
- -
-
- - - - -
92점
-
-
AI 품질 점수
-
+ + +
- -
-
- 💡 -

AI 개선 제안

+ +