feat: 찰떡지수 피드백 UI (우리/동네 궁합도)
CI / build (push) Successful in 27s

- FeedbackDialog: 잘 놀았어요/안 맞았어요 + BAD 사유 선택·추가입력
- 채팅 '산책 완료' 버튼 + 2시간 FEEDBACK_REQUEST 알림 → 피드백 팝업
- AffinityBadges: 동네 찰떡지수(전체), 우리 찰떡지수(매칭 쌍·유료 게이팅)
  스팟 메이트/AI 추천 카드 및 우리 강아지 프로필에 노출

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
sb
2026-07-11 23:55:16 +09:00
parent eb51201669
commit c8a8681a61
9 changed files with 344 additions and 3 deletions
+35 -1
View File
@@ -78,7 +78,20 @@
</q-footer>
<!-- 매칭 수락 1:1 채팅 -->
<MatchChatDialog v-if="matchChatId != null" v-model="matchChatOpen" :match-id="matchChatId" />
<MatchChatDialog
v-if="matchChatId != null"
v-model="matchChatOpen"
:match-id="matchChatId"
@checkout="openFeedback"
/>
<!-- 산책 찰떡지수 피드백 -->
<FeedbackDialog
v-if="feedbackMatchId != null && dogs.currentDogId != null"
v-model="feedbackOpen"
:match-id="feedbackMatchId"
:rater-dog-id="dogs.currentDogId"
/>
</q-layout>
</template>
@@ -88,6 +101,7 @@ import { useRouter } from 'vue-router'
import { useQuasar } from 'quasar'
import AdBanner from '@/components/AdBanner.vue'
import MatchChatDialog from '@/components/MatchChatDialog.vue'
import FeedbackDialog from '@/components/FeedbackDialog.vue'
import { useSubscriptionStore } from '@/stores/subscription'
import { useAuthStore } from '@/stores/auth'
import { useDogsStore } from '@/stores/dogs'
@@ -105,6 +119,15 @@ const $q = useQuasar()
const matchChatOpen = ref(false)
const matchChatId = ref<number | null>(null)
const feedbackOpen = ref(false)
const feedbackMatchId = ref<number | null>(null)
/** 채팅 '산책 완료' 버튼 또는 2시간 알림 → 피드백 팝업 열기. */
function openFeedback(id: number) {
feedbackMatchId.value = id
feedbackOpen.value = true
}
onMounted(async () => {
await dogs.loadMyDogs()
if (auth.member && dogs.currentDogId != null) {
@@ -125,6 +148,17 @@ watch(
},
)
// 2시간 후 피드백 요청 알림 → 찰떡지수 피드백 팝업
watch(
() => matching.feedbackMatchId,
(id) => {
if (id != null) {
openFeedback(id)
matching.feedbackMatchId = null
}
},
)
async function onAccept(id: number) {
try {
await matching.accept(id)