feat: 프론트엔드 초기 스캐폴딩 (Vue3+TS+Quasar+Capacitor)
- 하늘색 파스텔 브랜드 테마(quasar-variables) - 스팟 지도/체크인/한줄평/메이트 홈 화면 - 강아지 프로필 + 댕비티아이 성향 태그 화면 - 구독 티어 스토어(Pinia) 및 FREE 티어 배너 광고(v-if 제어) - Capacitor(iOS/AOS) 설정, 빌드/타입체크 통과 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
import { defineStore } from 'pinia'
|
||||
import { computed, ref } from 'vue'
|
||||
|
||||
export type SubscriptionTier = 'FREE' | 'AD_FREE' | 'PREMIUM'
|
||||
|
||||
/**
|
||||
* 구독 상태 스토어.
|
||||
* - 광고 노출 여부(hideAds) 와 매칭 무제한 여부(unlimitedMatching)를 파생.
|
||||
* - AdBanner 등 광고 컴포넌트는 hideAds 로 v-if 제어.
|
||||
*/
|
||||
export const useSubscriptionStore = defineStore('subscription', () => {
|
||||
const tier = ref<SubscriptionTier>('FREE')
|
||||
|
||||
// FREE 만 광고 노출, AD_FREE·PREMIUM 은 광고 제거
|
||||
const hideAds = computed(() => tier.value !== 'FREE')
|
||||
|
||||
// PREMIUM 만 매칭 무제한
|
||||
const unlimitedMatching = computed(() => tier.value === 'PREMIUM')
|
||||
|
||||
// 하루 무료 매칭 잔여(무제한이면 null)
|
||||
const remainingMatches = ref<number | null>(3)
|
||||
|
||||
function setTier(next: SubscriptionTier) {
|
||||
tier.value = next
|
||||
}
|
||||
|
||||
return { tier, hideAds, unlimitedMatching, remainingMatches, setTier }
|
||||
})
|
||||
Reference in New Issue
Block a user