diff --git a/apps/app-frontend/src/components/ui/skin-site/SkinSiteHome.vue b/apps/app-frontend/src/components/ui/skin-site/SkinSiteHome.vue index 6b5bd37..3096537 100644 --- a/apps/app-frontend/src/components/ui/skin-site/SkinSiteHome.vue +++ b/apps/app-frontend/src/components/ui/skin-site/SkinSiteHome.vue @@ -101,7 +101,7 @@ function onBugCreated(id: number) { @open="openBug" /> - + ([]) +const uploaderNames = ref>({}) const loading = ref(true) const failed = ref(false) const saving = ref(false) @@ -154,11 +157,28 @@ const canSave = computed( () => form.value.title.trim().length > 0 && form.value.content.length > 0 && !saving.value, ) +function uploaderName(uuid: string): string { + return uploaderNames.value[uuid] ?? uuid +} + +async function loadUploaderNames() { + try { + const res = await skinSiteAdminUserList({ limit: 200, offset: 0 }) + if (!res.success) return + const users: SkinSiteAdminUser[] = res.payload ?? [] + const map: Record = {} + for (const u of users) map[u.uuid] = u.username + uploaderNames.value = map + } catch { + // 名称映射失败不影响公告列表展示 + } +} + async function load() { loading.value = true failed.value = false try { - const result = await skinSiteBroadcasts() + const [result] = await Promise.all([skinSiteBroadcasts(), loadUploaderNames()]) if (!result.success) throw new Error(result.errorMessage) items.value = result.payload ?? [] } catch (error) { @@ -248,7 +268,7 @@ onMounted(() => void load()) {{ formatDate(item.updateAt) }} - {{ formatMessage(messages.uploader, { name: item.uploader }) }} + {{ formatMessage(messages.uploader, { name: uploaderName(item.uploader) }) }} q.id === questionId) } -function answerText(answer: SkinSiteReviewAnswer): string { +function answerText( + submission: SkinSiteReviewSubmission, + answer: SkinSiteReviewAnswer, +): string { if (answer.text) return answer.text - if (Array.isArray(answer.values) && answer.values.length) return answer.values.join(', ') + if (Array.isArray(answer.values) && answer.values.length) { + const question = answer.questionId ? questionFor(submission, answer.questionId) : undefined + const options = question?.options ?? [] + return answer.values + .map((value) => options.find((o) => o.id === value)?.description ?? value) + .join(', ') + } return '—' } @@ -1046,7 +1055,7 @@ onMounted(() => void load()) - {{ answerText(answer) }} + {{ answerText(detailSubmission, answer) }} = { + GUEST: { label: '游客', color: 'bg-button-bg text-secondary' }, + EXTERNAL_MEMBER: { label: 'Mod服玩家', color: 'bg-blue text-contrast' }, + INTERNAL_MEMBER: { label: '原版服玩家', color: 'bg-orange text-contrast' }, + SENIOR_MEMBER: { label: '老资历', color: 'bg-purple text-contrast' }, + SPONSOR: { label: '捐赠者', color: 'bg-yellow text-contrast' }, + SERVER_ADMIN: { label: '服务器管理', color: 'bg-green text-contrast' }, + WEB_ADMIN: { label: 'Web 管理', color: 'bg-brand text-contrast' }, + DEVELOPER: { label: '开发者', color: 'bg-red text-contrast' }, +} + +function permissionMeta(perm: string) { + return PERMISSION_META[perm] ?? { label: perm, color: 'bg-button-bg text-secondary' } +} + function startEdit(user: SkinSiteAdminUser) { editingUuid.value = user.uuid editForm.value = { @@ -676,6 +695,9 @@ onMounted(() => void load()) {{ formatMessage(messages.email) }} {{ formatMessage(messages.qq) }} {{ formatMessage(messages.status) }} + + {{ formatMessage(messages.permissionGroups) }} + {{ formatMessage(messages.registeredAt) }} {{ formatMessage(messages.actions) }} @@ -704,6 +726,24 @@ onMounted(() => void load()) }} + + + + {{ permissionMeta(perm).label }} + + + — + + + {{ formatDateTime(user.registerTime) }} diff --git a/apps/app-frontend/src/components/ui/skin-site/wiki/WikiNodeRenderer.vue b/apps/app-frontend/src/components/ui/skin-site/wiki/WikiNodeRenderer.vue index 0c5288f..aa4daf1 100644 --- a/apps/app-frontend/src/components/ui/skin-site/wiki/WikiNodeRenderer.vue +++ b/apps/app-frontend/src/components/ui/skin-site/wiki/WikiNodeRenderer.vue @@ -13,7 +13,7 @@ function headingTag(level?: number | null): string { } function navigate(title?: string | null) { - emit('navigate', (title ?? '').replaceAll('_', ' ')) + emit('navigate', title ?? '') } diff --git a/apps/app-frontend/src/locales/en-US/index.json b/apps/app-frontend/src/locales/en-US/index.json index ca70e77..75a86f6 100644 --- a/apps/app-frontend/src/locales/en-US/index.json +++ b/apps/app-frontend/src/locales/en-US/index.json @@ -12724,6 +12724,7 @@ "app.skin-site.admin.users.status": { "message": "Status" }, "app.skin-site.admin.users.status-banned": { "message": "Banned" }, "app.skin-site.admin.users.status-normal": { "message": "Normal" }, + "app.skin-site.admin.users.permission-groups": { "message": "Groups" }, "app.skin-site.admin.mods.upload": { "message": "Upload" }, "app.skin-site.admin.mods.select-mode": { "message": "Select multiple" }, "app.skin-site.admin.mods.exit-select": { "message": "Done selecting" }, diff --git a/apps/app-frontend/src/locales/zh-CN/index.json b/apps/app-frontend/src/locales/zh-CN/index.json index 6192326..c735e86 100644 --- a/apps/app-frontend/src/locales/zh-CN/index.json +++ b/apps/app-frontend/src/locales/zh-CN/index.json @@ -13045,6 +13045,7 @@ "app.skin-site.admin.users.status": { "message": "状态" }, "app.skin-site.admin.users.status-banned": { "message": "已封禁" }, "app.skin-site.admin.users.status-normal": { "message": "正常" }, + "app.skin-site.admin.users.permission-groups": { "message": "权限组" }, "app.skin-site.admin.mods.upload": { "message": "上传" }, "app.skin-site.admin.mods.select-mode": { "message": "选择多个" }, "app.skin-site.admin.mods.exit-select": { "message": "完成选择" },