From e70e685a065ac0503a28d64926da1548e9e58092 Mon Sep 17 00:00:00 2001 From: zenn Date: Wed, 1 Apr 2026 14:04:15 +0900 Subject: [PATCH] =?UTF-8?q?=EB=A6=B4=EB=A6=AC=EC=8A=A4:=20v1.3.22=20?= =?UTF-8?q?=EB=82=B4=20=ED=8B=B0=EC=96=B4=ED=91=9C=20=EC=B9=B4=EB=93=9C=20?= =?UTF-8?q?=ED=8F=AD=EA=B3=BC=20=EA=B4=91=EA=B3=A0=20=ED=94=84=EB=A0=88?= =?UTF-8?q?=EC=9E=84=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/update.md | 4 + frontend/src/components/RightRailAd.vue | 6 +- frontend/src/views/MyTierListsView.vue | 116 ++++++++++++++++-------- 3 files changed, 84 insertions(+), 42 deletions(-) diff --git a/docs/update.md b/docs/update.md index f4f4d87..d01a813 100644 --- a/docs/update.md +++ b/docs/update.md @@ -1,5 +1,9 @@ # 업데이트 로그 +## 2026-04-01 v1.3.22 +- 내 티어표 카드는 게임 목록과 같은 상단 히어로/패널 문법으로 다시 맞추고, 깨진 썸네일은 alt 텍스트가 카드 폭을 밀지 않도록 플레이스홀더로 즉시 대체해 카드 수와 헤더 폭이 흔들리지 않게 보정함. +- 오른쪽 사이드 광고 프레임은 별도 보더·패딩·배경을 제거해, 광고 자체가 가진 각진 형태와 색이 그대로 보이도록 더 담백하게 정리함. + ## 2026-04-01 v1.3.21 - 내 티어표 카드는 게임 목록 화면과 같은 카드 폭/헤더/메타 배치 문법으로 맞춰, 화면 간 카드 크기와 정보 정렬이 더 통일된 인상으로 보이도록 정리함. diff --git a/frontend/src/components/RightRailAd.vue b/frontend/src/components/RightRailAd.vue index b951a0b..ad88183 100644 --- a/frontend/src/components/RightRailAd.vue +++ b/frontend/src/components/RightRailAd.vue @@ -78,14 +78,10 @@ onMounted(async () => { .rightRailAd__frame { min-height: 520px; - padding: 14px; - border-radius: 20px; - border: 1px solid rgba(255, 255, 255, 0.08); - background: rgba(255, 255, 255, 0.02); } .rightRailAd__slot { width: 100%; - min-height: 490px; + min-height: 520px; } diff --git a/frontend/src/views/MyTierListsView.vue b/frontend/src/views/MyTierListsView.vue index 02673e8..28a441b 100644 --- a/frontend/src/views/MyTierListsView.vue +++ b/frontend/src/views/MyTierListsView.vue @@ -9,6 +9,7 @@ const router = useRouter() const toast = useToast() const myLists = ref([]) const error = ref('') +const brokenThumbnailIds = ref({}) watch(error, (message) => { if (!message) return @@ -37,12 +38,19 @@ function avatarFallbackOf(tierList) { } function tierListThumbnailUrl(tierList) { + if (!tierList?.id || brokenThumbnailIds.value[tierList.id]) return '' return tierList.thumbnailSrc ? toApiUrl(tierList.thumbnailSrc) : '' } +function handleThumbnailError(tierListId) { + if (!tierListId || brokenThumbnailIds.value[tierListId]) return + brokenThumbnailIds.value = { ...brokenThumbnailIds.value, [tierListId]: true } +} + onMounted(async () => { try { const data = await api.listMyTierLists() + brokenThumbnailIds.value = {} myLists.value = data.tierLists || [] } catch (e) { toast.error('로그인이 필요해요.') @@ -51,53 +59,87 @@ onMounted(async () => { }) function openList(t) { - router.push(`/editor/${t.gameId}/${t.id}`) + router.push( + "/editor/" + t.gameId + "/" + t.id, + ) } -