Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| f11c0d3cef |
@@ -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 전용 레이아웃을 기준으로 구현하면 화면/인쇄/공유 결과를 맞추기 쉽다.
|
||||
|
||||
4
package-lock.json
generated
4
package-lock.json
generated
@@ -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"
|
||||
},
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "ten-minute-planner",
|
||||
"private": true,
|
||||
"version": "0.1.30",
|
||||
"version": "0.1.31",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
|
||||
22
src/App.vue
22
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(() => {
|
||||
<p class="text-[11px] font-semibold tracking-[0.08em] text-stone-500">TASK COMPLETION</p>
|
||||
</div>
|
||||
<div>
|
||||
<p class="text-[22px] font-semibold tracking-[-0.04em] text-stone-900">{{ formatTotalTime(planner) }}</p>
|
||||
<p class="text-[22px] font-semibold tracking-[-0.04em] text-stone-900">{{ formatTotalTimeKorean(planner) }}</p>
|
||||
<p class="text-[11px] font-semibold tracking-[0.08em] text-stone-500">FOCUSED TIME</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user