fix(achievement): 弹窗队列区分成就与题单奖章的 id 空间

两者的 id 来自不同的表、数值会重叠,却共用同一个队列:
- 去重只按 id,队列里有奖章 5 时成就 5 会被当成重复项丢掉
- 弹完奖章后调 markAchievementsRead(奖章id),后端按成就 id 解释,
  把同号且未弹过的成就静默标记为已弹,那个奖杯再也不会出现

载荷里本来就有 kind 字段,前端此前完全忽略。现在去重按 kind:id,
标记已读跳过奖章,弹窗标题也按类型区分。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-04 07:22:42 -06:00
parent a9278589c9
commit 7e498a1c1c
3 changed files with 22 additions and 7 deletions

View File

@@ -22,7 +22,7 @@ function playNext() {
visible.value = true
timer = setTimeout(async () => {
visible.value = false
await store.markRead(item.id)
await store.markRead(item)
gapTimer = setTimeout(playNext, 400)
}, 3000)
}
@@ -49,7 +49,9 @@ onUnmounted(() => {
>
<div class="icon">{{ current.icon }}</div>
<div class="body">
<div class="label">成就解锁</div>
<div class="label">
{{ current.kind === "badge" ? "获得奖章" : "成就解锁" }}
</div>
<div class="name">{{ current.name }}</div>
<div class="desc">{{ current.description }}</div>
</div>