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:
sb
2026-07-11 07:50:47 +09:00
commit 3130ce3fb7
20 changed files with 4239 additions and 0 deletions
+53
View File
@@ -0,0 +1,53 @@
<template>
<q-layout view="hHh lpR fFf">
<q-header class="bg-primary text-white safe-top">
<q-toolbar>
<q-toolbar-title class="text-weight-bold">
<q-icon name="pets" class="q-mr-sm" />산책갈개
</q-toolbar-title>
<q-chip dense color="white" text-color="primary" icon="bolt">
{{ tierLabel }}
</q-chip>
</q-toolbar>
</q-header>
<q-page-container>
<router-view />
</q-page-container>
<!-- FREE 티어 하단 배너 광고 -->
<AdBanner />
<q-footer class="bg-white text-grey-8 safe-bottom">
<q-tabs
v-model="tab"
active-color="primary"
indicator-color="primary"
class="text-grey-6"
>
<q-route-tab name="home" :to="{ name: 'home' }" icon="map" label="산책 스팟" />
<q-route-tab name="profile" :to="{ name: 'profile' }" icon="pets" label="우리 개" />
</q-tabs>
</q-footer>
</q-layout>
</template>
<script setup lang="ts">
import { computed, ref } from 'vue'
import AdBanner from '@/components/AdBanner.vue'
import { useSubscriptionStore } from '@/stores/subscription'
const tab = ref('home')
const subscription = useSubscriptionStore()
const tierLabel = computed(() => {
switch (subscription.tier) {
case 'PREMIUM':
return 'PREMIUM'
case 'AD_FREE':
return '광고제거'
default:
return 'FREE'
}
})
</script>