From cbd43e16c21ada7b3154d45d62b0946a14d87634 Mon Sep 17 00:00:00 2001
From: zenn
Date: Fri, 14 Aug 2026 13:27:57 +0900
Subject: [PATCH] Polish empty states
---
components/EmptyState.vue | 25 +++++++++++++++++++++++++
docs/changelog.md | 1 +
docs/project-guidelines.md | 1 +
pages/assets.vue | 19 +++++++++++++------
pages/index.vue | 9 ++++++---
pages/settings.vue | 27 ++++++++++++++++++---------
pages/share/[token].vue | 19 ++++++++++++-------
pages/stats.vue | 9 ++++++---
todo.md | 1 -
9 files changed, 82 insertions(+), 29 deletions(-)
create mode 100644 components/EmptyState.vue
diff --git a/components/EmptyState.vue b/components/EmptyState.vue
new file mode 100644
index 0000000..b23096b
--- /dev/null
+++ b/components/EmptyState.vue
@@ -0,0 +1,25 @@
+
+
+
+ {{ title }}
+
+ {{ description }}
+
+
+
+
+
+
+
+
diff --git a/docs/changelog.md b/docs/changelog.md
index d995ca9..b03f043 100644
--- a/docs/changelog.md
+++ b/docs/changelog.md
@@ -85,3 +85,4 @@
- PC 중간 폭 화면에서 콘텐츠 오른쪽이 잘리지 않도록 전역 레이아웃을 margin 기반에서 padding 기반으로 변경했다.
- 내역 헤더의 검색과 필터 버튼을 `assets/icons/search.svg`, `assets/icons/tune.svg` 인라인 SVG로 교체했다.
- CSV 내보내기 컬럼을 한글 컬럼명과 앱의 거래 흐름에 맞는 순서로 정리하고 Excel 호환 BOM을 추가했다.
+- 빈 데이터 상태 화면을 공통 컴포넌트로 분리하고 내역, 통계, 자산, 설정, 공유 화면에 적용했다.
diff --git a/docs/project-guidelines.md b/docs/project-guidelines.md
index 39ae881..c5bc43f 100644
--- a/docs/project-guidelines.md
+++ b/docs/project-guidelines.md
@@ -30,6 +30,7 @@
- 검색과 필터 같은 헤더 액션도 텍스트 기호 대신 `assets/icons`의 SVG 아이콘을 사용한다.
- 거래 목록의 카테고리 표시는 하위 카테고리가 있으면 하위 이름만, 없으면 상위 이름만 보여준다.
- 카테고리 아이콘과 색상은 카테고리 관리 상세 화면에서 수정하고 거래 목록 아이콘에 즉시 반영한다.
+- 빈 데이터 화면은 단순 텍스트만 노출하지 않고 공통 EmptyState 형태로 제목, 짧은 설명, 다음 행동의 힌트를 제공한다.
## 데이터 기준
diff --git a/pages/assets.vue b/pages/assets.vue
index 6366836..7394327 100644
--- a/pages/assets.vue
+++ b/pages/assets.vue
@@ -73,9 +73,13 @@
{{ formatWon(asset.balance || 0) }}
-
- 등록된 자산이 없습니다.
-
+
@@ -120,9 +124,12 @@
/>
-
- 이 자산의 {{ displayMonth }} 거래가 없습니다.
-
+
diff --git a/pages/index.vue b/pages/index.vue
index 9b50cc2..f6a7c40 100644
--- a/pages/index.vue
+++ b/pages/index.vue
@@ -106,9 +106,12 @@
-
- 아직 거래가 없습니다.
-
+
diff --git a/pages/settings.vue b/pages/settings.vue
index 2caafce..53c50cf 100644
--- a/pages/settings.vue
+++ b/pages/settings.vue
@@ -155,9 +155,12 @@
-
- 만든 공유 링크가 없습니다.
-
+
@@ -269,9 +272,12 @@
-
- 등록된 자산이 없습니다.
-
+
@@ -398,9 +404,12 @@
-
- {{ selectedParentCategory ? '하위 카테고리가 없습니다.' : `${categoryTypeLabel} 상위 카테고리가 없습니다.` }}
-
+
diff --git a/pages/share/[token].vue b/pages/share/[token].vue
index 79db624..afe4e3c 100644
--- a/pages/share/[token].vue
+++ b/pages/share/[token].vue
@@ -8,10 +8,12 @@
-
-
공유 링크를 볼 수 없습니다.
-
링크가 만료되었거나 삭제되었을 수 있습니다.
-
+
-
- 공유된 {{ displayMonth }} 거래가 없습니다.
-
+
diff --git a/pages/stats.vue b/pages/stats.vue
index c04cf3b..dd89acb 100644
--- a/pages/stats.vue
+++ b/pages/stats.vue
@@ -61,9 +61,12 @@
{{ formatWon(item.total) }}
-
- {{ selectedType === 'income' ? '집계할 수입이 없습니다.' : '집계할 지출이 없습니다.' }}
-
+
diff --git a/todo.md b/todo.md
index 35c572a..71e2aba 100644
--- a/todo.md
+++ b/todo.md
@@ -36,7 +36,6 @@
- 회원 탈퇴 또는 데이터 삭제 정책을 정한다.
- 로그인 실패, 세션 만료, 네트워크 오류 상태를 화면에서 더 명확히 보여준다.
-- 빈 데이터 상태 화면을 페이지별로 다듬는다.
## 8. 공유