Files
SR-SYSTEM/docs/05-ui-screens.md
2026-06-02 13:50:39 +09:00

16 KiB
Raw Permalink Blame History

화면 설계 명세서 (UI & Screen Specification)

프론트엔드: Next.js 14+ (App Router), TypeScript, Tailwind CSS, Pinia

1. 전역 레이아웃 (Global Layout)

┌─────────────────────────────────────────────────┐
│  GNB (Global Navigation Bar)                    │
│  ┌──────┬─────────────────────────────────┬──┐ │
│  │ Logo │          (검색/제목)             │🔔│👤│ │
│  └──────┴─────────────────────────────────┴──┘ │
├──────┬──────────────────────────────────────────┤
│ LNB  │  Content Area                           │
│      │                                         │
│ Menu │  (Page Component Rendering)             │
│  1   │                                         │
│      │                                         │
│ Menu │                                         │
│  2   │                                         │
│      │                                         │
│ Menu │                                         │
│  3   │                                         │
│      │                                         │
└──────┴──────────────────────────────────────────┘

GNB (Global Navigation Bar)

  • 알림 뱃지(🔔): GET /api/v1/notifications/unread 폴링 — 0개면 숨김
  • 프로필: GET /api/v1/employees/me — 사용자명 및 권한 표시

LNB (Left Navigation Bar) — RBAC 기반 동적 메뉴

메뉴 EMPLOYEE MANAGER ADMIN
내 포트폴리오 ✅ ❌ ❌
SR 티켓 관리 ✅ ✅ ✅
업무 보고서 ✅ ✅ ✅
교육 현황 ✅ ✅ ✅
프로젝트 관리 ❌ ✅ ✅
장비 자산 관리 ❌ ✅ ✅
직원 관리 ❌ ❌ ✅
공통 코드 관리 ❌ ❌ ✅

2. SR 티켓 칸반 보드 (TicketBoardView.vue)

UI 구조

┌─────────────────────────────────────────────────────────┐
│ [필터 영역]                                             │
│ 카테고리: [BUG ▼]  우선순위: [HIGH ▼]  검색: [________] │
├─────────┬──────────┬──────────┬──────────┬──────────────┤
│  OPEN   │ ASSIGNED │ IN_PROG  │ RESOLVED │   CLOSED     │
│  (3)    │  (2)     │  (5)     │  (8)     │   (12)       │
├─────────┼──────────┼──────────┼──────────┼──────────────┤
│ ┌─────┐ │ ┌─────┐  │ ┌─────┐  │ ┌─────┐  │              │
│ │Bug  │ │ │High │  │ │Supp │  │ │Bug  │  │              │
│ │DB   │ │ │API  │  │ │배포  │  │ │튜닝  │  │              │
│ │튜닝  │ │ │에러  │  │ │지원  │  │ │완료  │  │              │
│ │🔴⚠️ │ │ │    │  │ │    │  │ │    │  │              │
│ └─────┘ │ └─────┘  │ └─────┘  │ └─────┘  │              │
│ ┌─────┐ │          │ ┌─────┐  │          │              │
│ │Feat │ │          │ │Bug  │  │          │              │
│ │화면  │ │          │ │SQL  │  │          │              │
│ │개발  │ │          │ │튜닝  │  │          │              │
│ └─────┘ │          │ └─────┘  │          │              │
└─────────┴──────────┴──────────┴──────────┴──────────────┘

핵심 로직

  • 칸반 컬럼: 상태별 4단 (상단에 컬럼별 카운트)
  • 기한 임박: dueDate - now < 24h → 카드 좌상단 🔴 경고 레이블 + 애니메이션
  • 드래그 앤 드롭: 상태 전환 시 PUT /api/v1/tickets/{id}/status?status=NEW_STATUS
  • 티켓 카드 클릭: 라우터 push → /tickets/{ticketId} (상세 페이지)

3. SR 티켓 상세/타임라인 (TicketDetailView.vue)

UI 구조

┌─────────────────────────────────────────────────────────┐
│ [← 뒤로]  [삭제]  [상태 변경: IN_PROGRESS ▼]           │
├─────────────────────────────────────────────────────────┤
│ 📋 티켓 정보                                            │
│ ┌──────────────────────────────────────────────────┐   │
│ │ 제목: 오라클 쿼리 튜닝 필요                       │   │
│ │ 상태: OPEN | 우선순위: HIGH | 카테고리: BUG      │   │
│ │ 요청자: 김개발 | 담당자: 미배정 | SLA: 2026-05-22 │   │
│ │ 설명: 실행 계획 상 Full Scan 발생 중...          │   │
│ └──────────────────────────────────────────────────┘   │
│                                                        │
│ 📎 첨부파일                                             │
│ ┌──────────────────────────────────────────────────┐   │
│ │ [execution_plan.png] [error_log.txt]             │   │
│ └──────────────────────────────────────────────────┘   │
│                                                        │
│ 💬 타임라인                                            │
│ ┌──────────────────────────────────────────────────┐   │
│ │ 2026-05-21 14:32 | 김개발                        │   │
│ │ 오라클 실행 계획 첨부합니다.                      │   │
│ │ 📎 [execution_plan.png]                          │   │
│ ├──────────────────────────────────────────────────┤   │
│ │ 2026-05-21 15:10 | 이튜너 (본사)                │   │
│ │ 인덱스 힌트 사용해보세요: /*+ INDEX() */         │   │
│ ├──────────────────────────────────────────────────┤   │
│ │ 2026-05-21 16:00 | 김개발                        │   │
│ │ 힌트 적용 후 3초→0.5초로 개선되었습니다! ✅      │   │
│ └──────────────────────────────────────────────────┘   │
│                                                        │
│ ┌──────────────────────────────────────────────────┐   │
│ │ 댓글 입력: [________________________________] 📎 │   │
│ │ [등록]                                            │   │
│ └──────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────┘

핵심 로직

  • 댓글 등록: POST /api/v1/tickets/{id}/comments → 타임라인 최하단 prepend
  • 파일 업로드: <input type="file"> → S3/서버 업로드 → URL 반환 → 댓글 첨부
  • 상태 전환 버튼: 현재 상태에 따라 다음 가능한 액션 버튼 노출 (OPEN→ASSIGNED→IN_PROGRESS→RESOLVED→CLOSED)
  • 종료된 티켓 봉인: status == CLOSED 시 입력폼 비활성화 + 뱃지 표시

4. 장비 인벤토리 (EquipmentInventoryView.vue)

UI 구조

┌─────────────────────────────────────────────────────────┐
│ 📊 장비 현황 요약                                        │
│ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐          │
│ │전체    │ │가용   │ │사용중  │ │수리중  │ │폐기   │          │
│ │45     │ │12    │ │28    │ │3     │ │2     │          │
│ └──────┘ └──────┘ └──────┘ └──────┘ └──────┘          │
│                                                        │
│ [필터: LAPTOP ▼] [제조사: Apple ▼] [검색: ____________] │
│                                                        │
│ ┌──────────────────────────────────────────────────┐   │
│ │ 자산코드 | 모델명    | 시리얼    | 상태    | 액션  │   │
│ ├──────────────────────────────────────────────────┤   │
│ │HQ-LP-001|MacBook   |F2G8...  |IN_USE  |[반납] │   │
│ │HQ-LP-002|MacBook   |H3J9...  |AVAILABLE|[지급] │   │
│ │HQ-MO-001|LG 27UN880|L7K2...  |IN_USE  |[반납] │   │
│ └──────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────┘

--- 지급 모달 ---
┌──────────────────────────────────────────┐
│  장비 지급: HQ-LP-002 MacBook Pro M3    │
│                                          │
│  대상자 검색: [김_______]               │
│  ┌──────────────────────────────────┐   │
│  │ 김코딩 (BACKEND, 파견중)          │   │
│  │ 김개발 (DBA, 파견중)              │   │
│  └──────────────────────────────────┘   │
│                                          │
│  지급 상태 코멘트: [미개봉 신품________] │
│  [취소]                     [지급 확정]  │
└──────────────────────────────────────────┘

핵심 로직

  • 상태 요약 카드: 각 상태별 장비 카운트 → GET /api/v1/equipment/summary
  • 조건부 액션 버튼: AVAILABLE → [지급], IN_USE → [반납], REPAIRING → [수리 완료]
  • 사원 검색 자동완성: GET /api/v1/employees/search?keyword= + 300ms 디바운싱
  • 낙관적 락 충돌: 지급 시 version 불일치 → 409 → 토스트 "다른 사용자가 먼저 처리했습니다"

5. 업무 보고서 (WorkReportView.vue)

UI 구조

┌─────────────────────────────────────────────────────────┐
│ 📝 업무 보고서 작성                                    │
│                                                        │
│ 보고 유형: [WEEKLY ▼]  기준일자: [2026-05-21]         │
│                                                        │
│ ✅ 완료 실적 (SR 자동 연동)                             │
│ ┌──────────────────────────────────────────────────┐   │
│ │ SR-2026-042: 오라클 인덱스 튜닝 (RESOLVED)       │   │
│ │ SR-2026-043: 배포 파이프라인 오류 수정 (CLOSED)  │   │
│ │ ※ 해당 주차 해결 완료한 SR 내역 자동 바인딩       │   │
│ └──────────────────────────────────────────────────┘   │
│                                                        │
│ 완료 실적: [________________________________________] │
│ 차기 계획: [________________________________________] │
│ 특이사항: [_________________________________________] │
│ 본사 지원 요청: [___________________________________] │
│                                                        │
│ ┌──────────────────────────────────────────────────┐   │
│ │ 관리자 피드백 (김매니저): 수고하셨습니다. ✅     │   │
│ └──────────────────────────────────────────────────┘   │
│                                                        │
│ [임시저장]                              [제출하기]     │
└─────────────────────────────────────────────────────────┘

결재 상태 흐름

DRAFT ── [제출] ──> SUBMITTED ── [승인] ──> APPROVED
                         │
                         └── [반려] ──> DRAFT (관리자 피드백 필요)

핵심 로직

  • SR 자동 연동: 페이지 진입 시 GET /api/v1/reports/sr-auto-complete?targetDate=... → 해당 주차 해결 SR 바인딩
  • 임시저장 vs 제출: DRAFT → SUBMITTED 전환 전 벨리데이션 (필수 항목 체크)
  • 결재 피드백: REJECTED 상태에서 관리자 피드백 박스 조건부 렌더링

6. 상태 천이 다이어그램

SR 티켓

OPEN ──[담당자 배정]──> ASSIGNED ──[처리시작]──> IN_PROGRESS ──[해결]──> RESOLVED ──[확인종료]──> CLOSED
  │                       │                       │
  └──[취소/삭제]──────────┴───────────────────────┴── (Soft Delete)

업무 보고서

DRAFT ──[제출]──> SUBMITTED ──[승인]──> APPROVED
                    │
                    └──[반려]──> DRAFT (+ 피드백)

장비

AVAILABLE ──[지급]──> IN_USE ──[반납]──> AVAILABLE
                │                      │
                └──[고장접수]──> REPAIRING ──[수리완료]──> AVAILABLE
                                                    │
                                                    └──[폐기]──> RETIRED