fix(题单): 奖章阶梯下一个奖章的金圈上沿被切掉;「总分」换成「做对几道」后漏发的奖章补上
Deploy / deploy (push) Canceled after 0s

- 阶梯外层为了窄屏横向滚动设了 overflow-x,纵向也跟着被裁,画在图标外的金圈上沿没了
- 0026 只改了奖章条件没按新条件补发:玩家国度每题 5 / 10 分,题数够了、总分不够的人
  没拿到「成分复杂」,页面还显示「再做对 1 道」。0029 按现在的条件只补不收(按 9-29 备份
  只有 1 人;其余两枚换算前后等价,也没有人会因新条件被收回)。排在删列 0028 之后,
  因为 0028 可能已经在线上执行过

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
xuyueandClaude Opus 5.5 committed 2026-10-09 22:24:18 +08:00
1 parent d6c94fe4c4
commit 0e68c434fc
4 files changed
+3932

No files matched your search

@@ -0,0 +1,20 @@
-- 排在删列(0028)之后、而不是之前:0028 可能已经在线上执行过,created_at 比它小的迁移
-- 会被执行器当成「已经跑过」永远跳过。这条只碰进度和奖章表,和删列互不影响。
--
-- 0026 把「总分达到 N」的奖章换成了「做对 N 道」,但只改了条件、没按新条件补发:
-- 每题不到 10 分的题单里,做对的题数早就够了、原来的总分却不够的人没拿到(快照里玩家国度
-- 做对 7 道的人没有「成分复杂」),页面上还显示「再做对 1 道」。这里按现在的条件只补不收:
-- 拿到过的不收回(把学生已经拿到的奖章收走不合适),漏发的补上。
INSERT INTO "user_badge" ("user_id", "badge_id", "earned_time")
SELECT g."user_id", b."id", now()
FROM "problemset_progress" g
JOIN "problemset_badge" b ON b."problemset_id" = g."problemset_id"
WHERE (
b."condition_type" = 'problem_count'
AND (SELECT count(*) FROM jsonb_object_keys(g."progress_detail")) >= b."condition_value"
) OR (
b."condition_type" = 'all_problems'
AND g."total_problems_count" > 0
AND g."completed_problems_count" = g."total_problems_count"
)
ON CONFLICT ("badge_id", "user_id") DO NOTHING;
File diff suppressed because it is too large. Load diff
+7
View File
@@ -204,6 +204,13 @@
"when": 1791555181872,
"tag": "0028_drop_problemset_leftovers",
"breakpoints": true
},
{
"idx": 29,
"version": "7",
"when": 1791555848163,
"tag": "0029_regrant_problemset_badges",
"breakpoints": true
}
]
}
+3
View File
@@ -391,9 +391,12 @@ const purple = { color: "#5b3fa8", background: "rgba(122, 95, 208, 0.12)" }
background: v-bind("theme.dividerColor");
}
/* 窄屏时阶梯要能横向滚,可 overflow-x 一设,纵向也跟着被裁:下一个奖章的金圈画在图标外 2px,
上沿会被切掉一条。上下留出几像素给它 */
.ladder-box {
max-width: 100%;
overflow-x: auto;
padding: 4px 2px;
}
.join {