From 647e0a4fa33752d7d8edeb3503508559a92cd5f6 Mon Sep 17 00:00:00 2001 From: yabo0812 Date: Thu, 23 Oct 2025 17:42:41 +0900 Subject: [PATCH] =?UTF-8?q?Todo=20=EA=B4=80=EB=A6=AC=20=ED=99=94=EB=A9=B4?= =?UTF-8?q?=20UI/UX=20=EA=B0=9C=EC=84=A0=20(=ED=86=B5=EA=B3=84=20=EB=B8=94?= =?UTF-8?q?=EB=A1=9D=20=EB=B0=8F=20=ED=8E=B8=EC=A7=91=20=EB=AA=A8=EB=8B=AC?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 통계 블록 디자인 개선 - 그라데이션 제거 → 모던한 단색 배경 + 좌측 4px 액센트 라인 - 상태별 연한 단색 배경 (블루/오렌지/레드) - 호버 효과 추가 (translateY -2px) - 미묘한 그림자로 깊이감 표현 - 모바일에서도 3개 블록 한 줄 유지 (grid 3열 고정) - Todo 편집 모달 전체화면 모드로 변경 - 모바일: 전체화면 (100vh), 헤더/바디/푸터 flexbox 구조 - 바디 영역만 스크롤 가능 - 데스크톱: 중앙 모달 (max-width: 600px) - 버튼 크기 확대 및 가로 균등 배치 - 설계서 업데이트 (v1.4.8) - 변경 이력에 개선 내용 추가 - 09-Todo관리 인터랙션 섹션 상세화 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- design/uiux/prototype/09-Todo관리.html | 160 ++++++++++++++++++++----- design/uiux/uiux.md | 79 +++++++++--- 2 files changed, 187 insertions(+), 52 deletions(-) diff --git a/design/uiux/prototype/09-Todo관리.html b/design/uiux/prototype/09-Todo관리.html index 757c592..6281fdd 100644 --- a/design/uiux/prototype/09-Todo관리.html +++ b/design/uiux/prototype/09-Todo관리.html @@ -83,8 +83,11 @@ /* 페이지 특화 스타일 */ - /* 통계 영역 - 모바일 최적화 */ + /* 통계 영역 - 모바일에서도 한 줄 유지 */ .stats-overview { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: var(--space-sm); margin-bottom: var(--space-md); } @@ -92,27 +95,35 @@ .stat-box { min-height: 80px; padding: var(--space-sm); - background: var(--gray-100); /* 플랫한 배경 */ - border: 1px solid var(--gray-200); /* 얇은 경계선 */ - border-radius: var(--radius-md); /* 부드러운 모서리 */ - box-shadow: none; /* 그림자 제거 */ - transition: none; /* 호버 효과 제거 */ + background: var(--white); + border: 1px solid var(--gray-200); + border-radius: var(--radius-md); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05); + transition: transform 0.2s ease, box-shadow 0.2s ease; } - /* 상태별 컬러 코딩 */ + .stat-box:hover { + transform: translateY(-2px); + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.08); + } + + /* 상태별 컬러 코딩 - 단색 배경 + 좌측 액센트 라인 */ .stat-box.stat-incomplete { - background: linear-gradient(135deg, #E3F2FD 0%, #BBDEFB 100%); /* 차분한 블루 그라데이션 */ - border-color: #90CAF9; + background: #F8FBFF; + border-left: 4px solid #2196F3; + border-color: #E3F2FD; } .stat-box.stat-urgent { - background: linear-gradient(135deg, #FFF3E0 0%, #FFE0B2 100%); /* 주의 오렌지 그라데이션 */ - border-color: #FFB74D; + background: #FFFBF5; + border-left: 4px solid #FF9800; + border-color: #FFE0B2; } .stat-box.stat-overdue { - background: linear-gradient(135deg, #FFEBEE 0%, #FFCDD2 100%); /* 긴급 레드 그라데이션 */ - border-color: #EF5350; + background: #FFF8F8; + border-left: 4px solid #F44336; + border-color: #FFCDD2; } .stat-number { @@ -289,6 +300,7 @@ display: flex; gap: var(--space-md); align-items: flex-start; + position: relative; } .todo-checkbox-wrapper { @@ -363,9 +375,11 @@ display: none; } - /* 액션 버튼 영역 */ + /* 액션 버튼 영역 - 우측 상단에 배치 */ .todo-actions { - margin-top: var(--space-xs); + position: absolute; + top: var(--space-md); + right: var(--space-md); } /* 아이콘 버튼 */ @@ -379,22 +393,19 @@ background: none; border: none; border-radius: var(--radius-md); - color: var(--gray-600); + font-size: 20px; cursor: pointer; transition: all var(--transition-fast); } .icon-btn:hover { background: var(--gray-100); - color: var(--primary); + transform: scale(1.1); } .icon-btn:active { background: var(--gray-200); - } - - .icon-btn .material-icons { - font-size: 20px; + transform: scale(1); } /* 빈 상태 */ @@ -420,11 +431,6 @@ margin-bottom: var(--space-lg); } - @media (min-width: 768px) { - .stats-overview { - grid-template-columns: repeat(4, 1fr); - } - } /* 날짜 입력 필드 래퍼 - 달력 아이콘 보호 */ .date-input-wrapper { @@ -466,6 +472,96 @@ box-shadow: 0 0 0 3px rgba(77, 213, 167, 0.15), 0 4px 0 0 var(--primary); } + + /* Todo 편집 모달 - 모바일 전체화면 */ + #editTodoModal .modal { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + width: 100%; + height: 100vh; + max-width: none; + max-height: none; + margin: 0; + border-radius: 0; + display: flex; + flex-direction: column; + overflow: hidden; + } + + #editTodoModal .modal-header { + flex-shrink: 0; + padding: var(--space-lg) var(--space-md); + border-bottom: 1px solid var(--gray-200); + display: flex; + align-items: center; + justify-content: space-between; + } + + #editTodoModal .modal-title { + font-size: var(--font-h3); + font-weight: var(--font-weight-bold); + margin: 0; + } + + #editTodoModal .modal-close { + width: 40px; + height: 40px; + display: flex; + align-items: center; + justify-content: center; + font-size: 28px; + background: none; + border: none; + cursor: pointer; + color: var(--gray-600); + border-radius: var(--radius-md); + transition: all var(--transition-fast); + } + + #editTodoModal .modal-close:hover { + background: var(--gray-100); + color: var(--gray-900); + } + + #editTodoModal .modal-body { + flex: 1; + overflow-y: auto; + padding: var(--space-lg) var(--space-md); + -webkit-overflow-scrolling: touch; + } + + #editTodoModal .modal-footer { + flex-shrink: 0; + padding: var(--space-md); + border-top: 1px solid var(--gray-200); + display: flex; + gap: var(--space-sm); + background: var(--white); + } + + #editTodoModal .modal-footer .btn { + flex: 1; + } + + /* 데스크톱에서는 중앙 모달로 복원 */ + @media (min-width: 768px) { + #editTodoModal .modal { + position: relative; + top: auto; + left: auto; + right: auto; + bottom: auto; + width: 90%; + max-width: 600px; + height: auto; + max-height: 90vh; + margin: 0 auto; + border-radius: var(--radius-lg); + } + } @@ -771,13 +867,11 @@ ${formatDate(todo.dueDate)} - ${!isCompleted ? ` -
- -
- ` : ''} + ${!isCompleted ? ` +
+ +
+ ` : ''} `); diff --git a/design/uiux/uiux.md b/design/uiux/uiux.md index ddead8e..adeacbb 100644 --- a/design/uiux/uiux.md +++ b/design/uiux/uiux.md @@ -4,7 +4,7 @@ - **작성일**: 2025-10-21 - **최종 수정일**: 2025-10-23 - **작성자**: 이미준 (서비스 기획자) -- **버전**: 1.4.7 +- **버전**: 1.4.8 - **설계 철학**: Mobile First Design --- @@ -1121,10 +1121,14 @@ graph TD - "Todo 관리" 타이틀 - 프로필 아이콘 (모바일) -- **상단 통계 블록** (4개 블록) - - **전체**: 미완료 전체 개수 - - **마감임박**: 기한 3일 이내 미완료 개수 (강조 스타일) - - **지연**: 기한이 지난 미완료 개수 +- **상단 통계 블록** (3개 블록, 정보 표시 전용) + - **디자인 특징**: + - 플랫한 디자인 (그림자 제거, 호버 효과 없음) + - 상태별 컬러 배경 + - 큰 숫자 + 작은 레이블로 정보 계층 명확화 + - **미완료**: 미완료 전체 개수 (블루) + - **마감임박**: 기한 3일 이내 미완료 개수 (오렌지) + - **지연**: 기한이 지난 미완료 개수 (레드) - **필터 탭** - **전체 (개수)**: 완료/미완료 전체 @@ -1134,20 +1138,37 @@ graph TD - **Todo 리스트 블록** - **정렬**: 미완료 → 완료 순서, 기한일 오래된 순 (복합 정렬) - - **각 Todo 카드** (블록 형태): - - **체크박스** (완료/미완료 토글, 액션 가능 표시) - - **Todo 제목** - - **상태 뱃지**: D+n(지연) / D-day / D-n / 완료 - - **우선순위 뱃지**: 높음(빨강) / 보통(노랑) / 낮음(회색) - - **기한** - - **회의록 제목 + 링크** (클릭 시 10-회의록상세조회 대시보드 탭으로 이동) - - **편집 버튼** (권한 있는 경우에만 노출, 액션 가능 표시) + - **각 Todo 카드** (컴팩트 디자인): + - **레이아웃 구조**: + ``` + [체크박스] [배지] [배지] [✏️] + [Todo 제목] + [🔗 회의록 링크] [마감일] + ``` + - **좌측**: **체크박스** (완료/미완료 토글, 24×24px) + - **우측 상단**: **✏️ 편집 버튼** (absolute position, 32×32px 아이콘 버튼) + - 호버: 연한 회색 배경 + 1.1배 확대 + - 권한 있는 경우에만 노출 (미완료 Todo) + - **콘텐츠 영역** (상단→하단 순서): + - **배지 영역**: 상태 뱃지 + 우선순위 뱃지 (가로 배치) + - 상태 뱃지: D+n(지연) / D-day / D-n / 완료 + - 우선순위 뱃지: 높음(빨강) / 보통(노랑) / 낮음(회색) + - **Todo 제목** (일반 폰트) + - **하단 메타 정보**: 회의록 링크 + 마감일 (연한 회색) + - 🔗 회의록 제목 (연한 초록색 링크, 클릭 시 10-회의록상세조회 대시보드 탭으로 이동) + - 마감일 (회색 텍스트) + - **담당자 정보**: 표시 안 함 (간결한 디자인) + - **카드 스타일**: + - 얇은 테두리 (1px solid #gray-200) + - 얇은 그림자 (0 1px 3px rgba(0,0,0,0.08)) + - 호버: 테두리 Primary 컬러로 변경 + 그림자 증가 - **페이징**: 최초 10건 노출, 10건 이상일 경우 하단에 "10개 더보기" 버튼 **Tablet/Desktop (768px+)** - 좌측 사이드바 + 메인 콘텐츠 영역 -- 통계 블록 4개 가로 배치 +- 통계 블록 3개 가로 배치 - Todo 리스트 그리드 레이아웃 (2열) +- 편집 버튼: 32×32px 아이콘 버튼 (우측 상단 고정) #### 인터랙션 1. **Todo 완료/미완료 상태 변경** @@ -1160,8 +1181,12 @@ graph TD 2. **Todo 편집 (UFR-TODO-040)** - **편집 버튼 클릭** (권한: 담당자 본인 OR 회의 생성자): - 편집 모달 표시 - - **모바일**: 바텀시트 형식 - - **데스크톱**: 중앙 모달 + - **모바일**: 전체화면 모드 + - `position: fixed`, 화면 전체 크기 (100vh) + - Flexbox 구조: 헤더(고정) + 바디(스크롤) + 푸터(고정) + - 바디 영역만 스크롤 가능 (`overflow-y: auto`, `-webkit-overflow-scrolling: touch`) + - 닫기 버튼 크기 확대 (40×40px) + - **데스크톱**: 중앙 모달 (max-width: 600px, max-height: 90vh) - **수정 가능 항목**: - ✏️ Todo 제목 (input, 필수) - 👤 담당자 (select, 회의록 참석자 중 선택) - **회의 생성자만 변경 가능** @@ -1170,6 +1195,9 @@ graph TD - **권한 표시**: - 담당자 본인: "본인에게 할당된 Todo만 수정할 수 있습니다. 담당자는 변경할 수 없습니다." - 회의 생성자: "회의 생성자로서 모든 항목을 수정할 수 있습니다. 담당자 변경 시 알림이 전송됩니다." + - **버튼 배치**: + - 모바일: 하단 고정, 가로로 균등 배치 (`flex: 1`) + - 데스크톱: 모달 하단, 우측 정렬 - **저장 버튼 클릭**: - 유효성 검사 (제목, 마감일 필수) - "Todo가 수정되었습니다" 토스트 메시지 @@ -1191,12 +1219,24 @@ graph TD - 페이지 새로고침 없이 무한 스크롤 방식 #### 디자인 요구사항 -- **액션 블록 vs 정보 블록 차별화**: - - 액션 가능 (체크박스, 편집 버튼): 호버 시 배경색 변경, 그림자 효과 - - 정보 표시 (상태 뱃지, 우선순위, 기한): 정적 표시, 호버 효과 없음 +- **정보 블록 vs 인터랙티브 블록 시각적 차별화**: + - **통계 블록** (정보 표시): + - 플랫한 디자인, 그림자 제거 + - 상태별 색상 배경 + - 호버 효과 없음 (읽기 전용 의도 명확화) + - **Todo 카드** (인터랙티브): + - 얇은 테두리 + 얇은 그림자 + - 호버: 테두리 색상 변경 + 그림자 증가 + - 체크박스, 편집 버튼, 회의록 링크 액션 가능 +- **편집 버튼 디자인**: + - ✏️ 이모지 아이콘 사용 (Material Icons 대신) + - 32×32px 정사각형 아이콘 버튼 + - 우측 상단 절대 위치 (absolute positioning) + - 호버: 연한 회색 배경 + 1.1배 확대 애니메이션 - **모바일 최적화**: - 바텀시트 편집 모달 (전체 화면 X) - 터치 영역 최소 44px × 44px + - 컴팩트 카드 레이아웃으로 스크롤 최소화 #### 데이터 요구사항 - **입력**: 사용자 ID (내가 담당자인 Todo만 조회) @@ -2034,6 +2074,7 @@ graph TD | 1.4.5 | 2025-10-23 | 강지수 | 로그아웃 기능 추가 (Desktop 사이드바 + Mobile 헤더)
- **Desktop 좌측 사이드바**: 하단에 사용자 정보 영역 추가
- 사용자 정보 (아바타 + 이름 + 이메일)
- 로그아웃 버튼 (btn-ghost btn-sm)
- **Mobile 상단 헤더**: 우측에 프로필 아이콘 버튼 추가 (👤)
- 클릭 시 드롭다운 메뉴 표시 (사용자 정보 + 로그아웃 버튼)
- 드롭다운 위치: 우측 상단 기준 아래로 펼침
- 오버레이 배경으로 UX 개선
- **프로토타입 파일**: 02-대시보드.html, 09-Todo관리.html, 12-회의록목록조회.html
- **JavaScript 함수**: toggleProfileMenu(), logout() 추가
- **반응형 처리**: Desktop에서는 드롭다운 숨김, Mobile에서는 사이드바 사용자 영역 숨김
- **설계서-프로토타입 일관성**: 로그아웃 기능 완전 통일 | | 1.4.6 | 2025-10-23 | 강지수 | 검증완료 섹션 잠금해제 정책 단순화
- **정책 변경**: 검증완료 섹션은 회의 생성자만 잠금 해제 후 수정 가능 (참석자는 수정 불가)
- **제거**: 참석자용 잠금해제 요청 기능 완전 제거 (공수 절감)
- **11-회의록수정**: 검증완료 섹션에 "🔒 읽기 전용" 배지 표시 (참석자 화면)
- 잠금해제요청 버튼 제거
- unlockSection() 함수 제거
- 읽기 전용 안내 텍스트 추가: "(잠금됨 · 회의 생성자만 수정 가능)"
- **06-검증완료**: 회의 생성자용 잠금해제 버튼 유지 (변경 없음)
- **인터랙션**: "3. 섹션 잠금 해제" → "3. 검증완료 섹션 (권한별 차등 표시)"로 수정
- **유저스토리**: UFR-MEET-055, UFR-COLLAB-030 권한 제어 명확화 | | 1.4.7 | 2025-10-23 | 강지수, 도그냥 | Todo 및 회의록 관련 UI/UX 재정의
- **09-Todo관리**: "Todo수정" → "Todo관리" 기능 확장
- 통계 블록: 전체(미완료), 마감임박(3일 이내), 지연(기한 경과)
- 필터 탭 개수 표시: 전체(개수), 지연(개수), 마감임박(개수), 완료(개수)
- 편집 모달: 제목, 담당자, 마감일, 우선순위 수정
- 체크박스 확인 모달: 완료/미완료 전환 시 확인
- 프로토타입: 09-Todo관리.html (통계, 필터, 모달 구현)
- **10-회의록상세조회**: 탭 순서 및 기본 노출 변경
- 탭 순서: 대시보드 → 회의록 (기존: 회의록 → 대시보드)
- 기본 활성 탭: 대시보드 (Desktop/Mobile 공통)
- 프로토타입: 10-회의록상세조회.html (탭 순서 변경, active 클래스 이동)
- **11-회의록수정**: 진입 경로 및 권한 제어 명확화
- 진입 경로: 10-회의록상세조회 → "수정" 버튼 클릭
- 권한 제어: 검증완료 전(모든 참석자), 검증완료 후(회의 생성자만)
- 회의 일시/장소: 읽기 전용 표시 추가 "(읽기 전용)"
- UI 구성: 회의록 리스트 제거, 직접 편집 화면으로 시작
- 프로토타입: 11-회의록수정.html (권한 코멘트 추가, readonly 표시) | +| 1.4.8 | 2025-10-23 | 강지수 | Todo 관리 화면 UI/UX 개선 (컴팩트 디자인 및 시각적 계층 차별화)
- **09-Todo관리**: 통계 블록 및 Todo 카드 디자인 전면 개선
- **통계 블록**: 정보 표시 전용 디자인으로 변경
- 그라데이션 제거 → 모던한 단색 배경 + 좌측 4px 액센트 라인
- 상태별 연한 단색 배경 (블루 #F8FBFF / 오렌지 #FFFBF5 / 레드 #FFF8F8)
- 호버 효과 추가: 살짝 떠오르는 애니메이션 (translateY -2px)
- 미묘한 그림자로 깊이감 표현 (0 1px 3px rgba(0,0,0,0.05))
- 모바일에서도 3개 블록 한 줄 유지 (grid-template-columns: repeat(3, 1fr))
- 큰 숫자 + 작은 레이블로 정보 계층 명확화
- **Todo 카드**: 컴팩트 레이아웃으로 재설계
- 레이아웃: [체크박스] [배지] [배지] [✏️] / [제목] / [🔗 링크] [마감일]
- 편집 버튼: 우측 상단 절대 위치, ✏️ 이모지 아이콘 사용 (32×32px)
- 담당자 정보 제거 (간결한 디자인)
- 얇은 테두리 + 얇은 그림자로 인터랙티브 의도 명확화
- **Todo 편집 모달**: 모바일 전체화면 모드로 변경
- 모바일: 전체화면 (100vh), 헤더/바디/푸터 flexbox 구조
- 바디 영역만 스크롤 가능 (overflow-y: auto, -webkit-overflow-scrolling: touch)
- 데스크톱: 중앙 모달 (max-width: 600px, max-height: 90vh)
- 버튼 크기 확대 (40px) 및 가로 균등 배치 (flex: 1)
- **시각적 차별화**: 정보 블록 vs 인터랙티브 블록
- 통계 블록: 정보 표시 + 부드러운 호버 효과
- Todo 카드: 인터랙티브 (호버 시 테두리/그림자 변경)
- **프로토타입**: design/uiux/prototype/09-Todo관리.html 전면 개선 | ---