From 4d8881342afad076b63fdc4afaf2fdcdda23bcf9 Mon Sep 17 00:00:00 2001 From: sb Date: Tue, 7 Jul 2026 21:22:45 +0900 Subject: [PATCH] =?UTF-8?q?feat(recurring):=20=EA=B3=A0=EC=A0=95=EC=A7=80?= =?UTF-8?q?=EC=B6=9C=20=EB=AC=B4=EB=A3=8C=202=EA=B1=B4=20UI=20=E2=80=94=20?= =?UTF-8?q?=EC=9C=A0=EB=A3=8C=20=EC=9E=A0=EA=B8=88=20=ED=95=B4=EC=A0=9C?= =?UTF-8?q?=C2=B7=ED=95=9C=EB=8F=84=20=EC=95=88=EB=82=B4=C2=B7=EC=97=85?= =?UTF-8?q?=EC=85=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 라우터 requiresPremium 제거, 사이드바 🔒 제거, 자동실행을 전 사용자로, RecurringView 한도 도달 시 추가 버튼 업셀 다이얼로그+힌트(→/upgrade). Co-Authored-By: Claude Opus 4.8 --- src/components/layout/AppSidebar.vue | 2 +- src/router/index.js | 3 ++- src/views/account/AccountView.vue | 12 +++++------- src/views/account/RecurringView.vue | 26 +++++++++++++++++++++++++- 4 files changed, 33 insertions(+), 10 deletions(-) diff --git a/src/components/layout/AppSidebar.vue b/src/components/layout/AppSidebar.vue index c1bbaa2..47fe3fe 100644 --- a/src/components/layout/AppSidebar.vue +++ b/src/components/layout/AppSidebar.vue @@ -53,7 +53,7 @@ const icons = { 고정 지출 - 🔒 + diff --git a/src/router/index.js b/src/router/index.js index e665040..35b655d 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -155,7 +155,8 @@ const router = createRouter({ path: '/account/recurrings', name: 'account-recurrings', component: () => import('../views/account/RecurringView.vue'), - meta: { requiresAuth: true, requiresPremium: true }, + // 고정지출은 무료도 2건까지 체험(초과 시 업셀) — 유료 게이트 해제 + meta: { requiresAuth: true }, }, // 설정 (앱 하단 내비게이션 → 설정) { diff --git a/src/views/account/AccountView.vue b/src/views/account/AccountView.vue index f342ccf..79adfd4 100644 --- a/src/views/account/AccountView.vue +++ b/src/views/account/AccountView.vue @@ -941,13 +941,11 @@ async function analyzePasted() { onMounted(async () => { // 진입 시 밀린 정기 거래를 먼저 반영한 뒤 목록을 불러온다 (중복 없이) - // 고정지출은 유료 전용 — 무료 회원은 호출 자체를 건너뛴다(403/업그레이드 리다이렉트 방지) - if (isPremium.value) { - try { - await accountApi.runRecurrings() - } catch { - // 정기 거래 반영 실패는 가계부 조회를 막지 않는다 - } + // 고정지출은 무료도 2건까지 사용 가능 → 모든 로그인 사용자에 대해 실행 + try { + await accountApi.runRecurrings() + } catch { + // 정기 거래 반영 실패는 가계부 조회를 막지 않는다 } load() loadTagOptions() diff --git a/src/views/account/RecurringView.vue b/src/views/account/RecurringView.vue index 8226c32..0102b98 100644 --- a/src/views/account/RecurringView.vue +++ b/src/views/account/RecurringView.vue @@ -1,16 +1,26 @@