diff --git a/src/admin/achievement/components/AchievementModal.vue b/src/admin/achievement/components/AchievementModal.vue
index bab15b1..6db9ae1 100644
--- a/src/admin/achievement/components/AchievementModal.vue
+++ b/src/admin/achievement/components/AchievementModal.vue
@@ -6,6 +6,7 @@ import {
type AdminAchievement,
type MetricOption,
} from "admin/api"
+import AchievementIcon from "shared/components/AchievementIcon.vue"
const props = defineProps<{
show: boolean
@@ -21,7 +22,7 @@ function emptyForm() {
return {
name: "",
description: "",
- icon: "🏆",
+ icon: "noto:trophy",
rarity: "bronze",
hidden: false,
metric: "",
@@ -99,7 +100,22 @@ async function save() {
/>
-
+
+
+
+
+
+
+ 填 iconify 图标名(推荐 noto: 开头的彩色 emoji 图标),右侧是实时
+ 预览;预览不出来说明名字写错了。图标名可在 icon-sets.iconify.design
+ 搜索。
+
+
+
+
diff --git a/src/admin/achievement/list.vue b/src/admin/achievement/list.vue
index 6c1f2f7..ffccbf4 100644
--- a/src/admin/achievement/list.vue
+++ b/src/admin/achievement/list.vue
@@ -5,6 +5,7 @@ import {
getAdminAchievements,
type AdminAchievement,
} from "admin/api"
+import AchievementIcon from "shared/components/AchievementIcon.vue"
import AchievementModal from "./components/AchievementModal.vue"
const message = useMessage()
@@ -57,7 +58,12 @@ function remove(row: AdminAchievement) {
}
const columns: DataTableColumn[] = [
- { title: "图标", key: "icon", width: 60 },
+ {
+ title: "图标",
+ key: "icon",
+ width: 60,
+ render: (row) => h(AchievementIcon, { icon: row.icon, size: 24 }),
+ },
{ title: "名称", key: "name" },
{
title: "稀有度",
diff --git a/src/oj/achievement/components/AchievementCard.vue b/src/oj/achievement/components/AchievementCard.vue
index bc4a7f6..946fc61 100644
--- a/src/oj/achievement/components/AchievementCard.vue
+++ b/src/oj/achievement/components/AchievementCard.vue
@@ -1,4 +1,5 @@
+
+
+
+
+
+ {{ icon }}
+
+
+
+
diff --git a/src/shared/components/AchievementToast.vue b/src/shared/components/AchievementToast.vue
index 2e7c7e5..c3bff66 100644
--- a/src/shared/components/AchievementToast.vue
+++ b/src/shared/components/AchievementToast.vue
@@ -1,4 +1,5 @@