feat(achievement): 成就图标从 emoji 换成 iconify 图标名

机房的老浏览器缺 emoji 字体,成就图标会渲染成方块。改存 iconify
图标名(noto 集,Noto Color Emoji 的 SVG 版),前端渲染成 SVG,
和浏览器字体无关,视觉上与原 emoji 基本一致。

隐藏成就的遮罩图标一并改成 noto:red-question-mark。

迁移 0002 带 77 条 emoji → noto 映射,覆盖首批成就用到的全部图标;
表里没有的保持原值,前端按纯文本兜底,之后在后台手工补。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-04 19:20:02 -06:00
parent cf5c3c5d2f
commit b5702147b8
3 changed files with 128 additions and 1 deletions

View File

@@ -63,7 +63,9 @@ class AchievementSerializer(serializers.ModelSerializer):
return "达成条件保密" if self._masked(obj) else obj.description
def get_icon(self, obj):
return "" if self._masked(obj) else obj.icon
# icon 存的是 iconify 图标名,不是 emoji 字符:机房里的老浏览器缺 emoji
# 字体会渲染成方块,前端统一按 iconify 渲染成 SVG
return "noto:red-question-mark" if self._masked(obj) else obj.icon
def get_metric(self, obj):
return None if self._masked(obj) else obj.metric