diff --git a/HANDOFF.md b/HANDOFF.md index 368faab..827d146 100644 --- a/HANDOFF.md +++ b/HANDOFF.md @@ -4,7 +4,7 @@ - 프로젝트명: 10 Minute Planner 웹 UI - 기술 스택: Vue 3 + Vite + TailwindCSS + JavaScript -- 현재 기준 버전: `v0.1.30` 준비 중 +- 현재 기준 버전: `v0.1.31` 준비 중 - Git 원격 저장소: `https://git.sori.studio/zenn/planner.sori.studio.git` ## 기준 디자인 @@ -175,6 +175,7 @@ - `2 PAGE SPREAD`는 화면 폭을 기준으로 배율을 자동 계산해서 오른쪽 페이지가 잘리는 현상을 줄이는 방향으로 조정했다. - `1280px` 미만에서는 왼쪽 내비게이션도 본문 위에 쌓이지 않고 `MENU` 버튼으로 여는 드로어형 패널로 전환된다. - 태블릿/모바일 구간에서는 `왼쪽 내비게이션 드로어 + 오른쪽 정보 패널 오버레이 + 본문 단일 컬럼` 조합으로 보는 흐름을 기본값으로 삼는다. +- 통계 화면과 우측 `FOCUSED TIME` 요약처럼 사용자에게 보여주는 집중 시간 표기는 `00H 00M` 대신 `00시간 00분` 한글 형식으로 바꿨다. - 비로그인 랜딩 카드는 상단 고정이 아니라 화면 중앙에 오도록 정렬을 수정했다. - 현재 환경에서는 Docker 데몬이 꺼져 있어서 `docker compose build` 실검증은 하지 못했고, 데몬 시작 후 다시 확인이 필요하다. - 이미지 저장 기능은 추후 `print-only` 또는 별도 export 전용 레이아웃을 기준으로 구현하면 화면/인쇄/공유 결과를 맞추기 쉽다. diff --git a/package-lock.json b/package-lock.json index f272abb..bcb3346 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ten-minute-planner", - "version": "0.1.30", + "version": "0.1.31", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ten-minute-planner", - "version": "0.1.30", + "version": "0.1.31", "dependencies": { "vue": "^3.5.13" }, diff --git a/package.json b/package.json index 8c0e4f2..9cbbdea 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "ten-minute-planner", "private": true, - "version": "0.1.30", + "version": "0.1.31", "type": "module", "scripts": { "dev": "vite", diff --git a/src/App.vue b/src/App.vue index 87a0f5e..da4d824 100644 --- a/src/App.vue +++ b/src/App.vue @@ -404,6 +404,16 @@ function formatTotalTime(record) { return `${hoursPart}H ${minutesPart}M` } +function formatMinutesKorean(totalMinutes) { + const hoursPart = `${Math.floor(totalMinutes / 60)}`.padStart(2, '0') + const minutesPart = `${totalMinutes % 60}`.padStart(2, '0') + return `${hoursPart}시간 ${minutesPart}분` +} + +function formatTotalTimeKorean(record) { + return formatMinutesKorean(record.timetable.filter(Boolean).length * 10) +} + function getFocusedMinutes(record) { return record.timetable.filter(Boolean).length * 10 } @@ -549,7 +559,7 @@ const aggregateCompletionRate = computed(() => { const overviewCards = computed(() => [ { label: 'TOTAL FOCUSED', - value: formatMinutes(totalFocusedMinutes.value), + value: formatMinutesKorean(totalFocusedMinutes.value), caption: '지금까지 기록된 전체 집중 시간', }, { @@ -591,7 +601,7 @@ const weeklyRecords = computed(() => { key, weekday: weekdayShort, focusedMinutes, - focusedTime: formatMinutes(focusedMinutes), + focusedTime: formatMinutesKorean(focusedMinutes), } }) @@ -615,7 +625,7 @@ const recentRecords = computed(() => key, dateLabel: createDateLabel(key), comment: record.comment.trim(), - focusedTime: formatTotalTime(record), + focusedTime: formatTotalTimeKorean(record), completionRate: getCompletionRate(record), })), ) @@ -634,7 +644,7 @@ const bestDay = computed(() => { return { dateLabel: createDateLabel(bestKey), - summary: `${formatTotalTime(bestRecord)} 집중, 완료율 ${getCompletionRate(bestRecord)}%, 코멘트 "${ + summary: `${formatTotalTimeKorean(bestRecord)} 집중, 완료율 ${getCompletionRate(bestRecord)}%, 코멘트 "${ bestRecord.comment.trim() || '없음' }"`, } @@ -664,7 +674,7 @@ const prevSnapshotItems = computed(() => { return [ `${createDateLabel(entryKey)} 기록`, - `${formatTotalTime(entryRecord)} 집중 / 완료 ${completedCount}개`, + `${formatTotalTimeKorean(entryRecord)} 집중 / 완료 ${completedCount}개`, previousComment || (previousTopTask ? `주요 작업: ${previousTopTask.title}` : '남겨진 코멘트 없음'), ] }) @@ -1814,7 +1824,7 @@ onBeforeUnmount(() => {
TASK COMPLETION
{{ formatTotalTime(planner) }}
+{{ formatTotalTimeKorean(planner) }}
FOCUSED TIME