diff --git a/src/layouts/AdminLayout.vue b/src/layouts/AdminLayout.vue index 11090b5..723d97b 100644 --- a/src/layouts/AdminLayout.vue +++ b/src/layouts/AdminLayout.vue @@ -59,9 +59,10 @@ const drawer = ref(true) const menu = [ { name: 'dashboard', label: '대시보드', icon: 'dashboard' }, + { name: 'statistics', label: '통계', icon: 'insights' }, { name: 'members', label: '회원 관리', icon: 'group' }, { name: 'subscriptions', label: '구독 관리', icon: 'card_membership' }, - { name: 'reports', label: '피신고자 관리', icon: 'report' }, + { name: 'reports', label: '신고 관리', icon: 'report' }, { name: 'blacklist', label: '블랙리스트', icon: 'block' }, ] diff --git a/src/pages/DashboardPage.vue b/src/pages/DashboardPage.vue index b4e85f0..1c91a34 100644 --- a/src/pages/DashboardPage.vue +++ b/src/pages/DashboardPage.vue @@ -77,12 +77,16 @@
- -
지역별 매칭 (시군구)
-
체크인 지역 기준
+ +
+
지역별 매칭건수 (시군구)
+
체크인 지역 기준 · 상위 5개
+
+ +
-
+
{{ r.region }}
@@ -127,6 +131,7 @@ const tierRows = computed(() => { const order = ['FREE', 'AD_FREE', 'PREMIUM'] return [...(summary.value?.members.byTier ?? [])].sort((a, b) => order.indexOf(a.key) - order.indexOf(b.key)) }) +const topRegions = computed(() => regions.value.slice(0, 5)) const regionMax = computed(() => Math.max(1, ...regions.value.map((r) => r.checkIns))) const visitorMax = computed(() => Math.max(1, ...visitors.value.map((v) => v.count))) diff --git a/src/pages/StatisticsPage.vue b/src/pages/StatisticsPage.vue new file mode 100644 index 0000000..2685cd6 --- /dev/null +++ b/src/pages/StatisticsPage.vue @@ -0,0 +1,123 @@ + + + + + diff --git a/src/router/index.ts b/src/router/index.ts index c9f1a36..951d650 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -14,6 +14,7 @@ const routes: RouteRecordRaw[] = [ children: [ { path: '', redirect: { name: 'dashboard' } }, { path: 'dashboard', name: 'dashboard', component: () => import('@/pages/DashboardPage.vue') }, + { path: 'statistics', name: 'statistics', component: () => import('@/pages/StatisticsPage.vue') }, { path: 'members', name: 'members', component: () => import('@/pages/MembersPage.vue') }, { path: 'members/:id', name: 'member-detail', component: () => import('@/pages/MemberDetailPage.vue') }, { path: 'subscriptions', name: 'subscriptions', component: () => import('@/pages/SubscriptionsPage.vue') },