From 8599a014ad85339a587346619fce0e5c8e7034b4 Mon Sep 17 00:00:00 2001 From: Ap_Tx <3045929398@qq.com> Date: Sat, 17 Oct 2026 19:11:04 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=B8=BB=E9=A1=B5=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E5=8E=9F=E7=94=9F=E7=9A=AE=E8=82=A4=E7=AB=99=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 主页原先内嵌整个皮肤站网页,现在换成启动器自己的界面,数据全部走 接口: - SkinSiteAccountCard:登录状态、玩家列表(头像由皮肤裁剪生成)、 每日运势。 - SkinSiteNavCards:资源下载、玩家审核、Wiki、漏洞追踪、地图、个人 资料的入口,点击后用系统浏览器打开。 - SkinSiteAnnouncements:拉取公告并按重要度与时间排序。 - SkinSiteDonationCard:捐款累计金额与人数。 - SkinSiteHome:把以上拼装成主页,并显示可复制的接入地址。 - API 层补充捐款与公告接口。 Index.vue 的 iframe 换成 SkinSiteHome。 --- .../ui/skin-site/SkinSiteAccountCard.vue | 146 ++++++++++++++++++ .../ui/skin-site/SkinSiteAnnouncements.vue | 90 +++++++++++ .../ui/skin-site/SkinSiteDonationCard.vue | 58 +++++++ .../components/ui/skin-site/SkinSiteHome.vue | 75 +++++++++ .../ui/skin-site/SkinSiteNavCards.vue | 126 +++++++++++++++ .../app-frontend/src/helpers/skin-site-api.ts | 49 ++++++ apps/app-frontend/src/pages/Index.vue | 4 +- 7 files changed, 546 insertions(+), 2 deletions(-) create mode 100644 apps/app-frontend/src/components/ui/skin-site/SkinSiteAccountCard.vue create mode 100644 apps/app-frontend/src/components/ui/skin-site/SkinSiteAnnouncements.vue create mode 100644 apps/app-frontend/src/components/ui/skin-site/SkinSiteDonationCard.vue create mode 100644 apps/app-frontend/src/components/ui/skin-site/SkinSiteHome.vue create mode 100644 apps/app-frontend/src/components/ui/skin-site/SkinSiteNavCards.vue diff --git a/apps/app-frontend/src/components/ui/skin-site/SkinSiteAccountCard.vue b/apps/app-frontend/src/components/ui/skin-site/SkinSiteAccountCard.vue new file mode 100644 index 0000000..a935c24 --- /dev/null +++ b/apps/app-frontend/src/components/ui/skin-site/SkinSiteAccountCard.vue @@ -0,0 +1,146 @@ + + + diff --git a/apps/app-frontend/src/components/ui/skin-site/SkinSiteAnnouncements.vue b/apps/app-frontend/src/components/ui/skin-site/SkinSiteAnnouncements.vue new file mode 100644 index 0000000..93ac47b --- /dev/null +++ b/apps/app-frontend/src/components/ui/skin-site/SkinSiteAnnouncements.vue @@ -0,0 +1,90 @@ + + + diff --git a/apps/app-frontend/src/components/ui/skin-site/SkinSiteDonationCard.vue b/apps/app-frontend/src/components/ui/skin-site/SkinSiteDonationCard.vue new file mode 100644 index 0000000..95a4460 --- /dev/null +++ b/apps/app-frontend/src/components/ui/skin-site/SkinSiteDonationCard.vue @@ -0,0 +1,58 @@ + + + diff --git a/apps/app-frontend/src/components/ui/skin-site/SkinSiteHome.vue b/apps/app-frontend/src/components/ui/skin-site/SkinSiteHome.vue new file mode 100644 index 0000000..cc61b60 --- /dev/null +++ b/apps/app-frontend/src/components/ui/skin-site/SkinSiteHome.vue @@ -0,0 +1,75 @@ + + + diff --git a/apps/app-frontend/src/components/ui/skin-site/SkinSiteNavCards.vue b/apps/app-frontend/src/components/ui/skin-site/SkinSiteNavCards.vue new file mode 100644 index 0000000..2f63a2c --- /dev/null +++ b/apps/app-frontend/src/components/ui/skin-site/SkinSiteNavCards.vue @@ -0,0 +1,126 @@ + + + diff --git a/apps/app-frontend/src/helpers/skin-site-api.ts b/apps/app-frontend/src/helpers/skin-site-api.ts index 78b029e..90e3017 100644 --- a/apps/app-frontend/src/helpers/skin-site-api.ts +++ b/apps/app-frontend/src/helpers/skin-site-api.ts @@ -382,3 +382,52 @@ export function skinSitePasswordReset(payload: { auth: false, }) } +// --------------------------------------------------------------------------- +// Donations & announcements +// --------------------------------------------------------------------------- + +export interface SkinSiteDonationSummary { + totalAmount: string + donorCount: number +} + +export interface SkinSiteDonationEntry { + id: number + rank: number + username: string + avatar: string | null + amount: string +} + +export interface SkinSiteDonationPage { + items: SkinSiteDonationEntry[] + summary: SkinSiteDonationSummary + hasMore: boolean +} + +export function skinSiteDonationSummary(): Promise> { + return skinSiteRequest('donation/summary', { auth: false }) +} + +export function skinSiteDonationList(offset = 0): Promise> { + return skinSiteRequest(`donation/list?limit=20&offset=${offset}`, { + auth: false, + }) +} + +export interface SkinSiteAnnouncement { + id: number + title: string + subtitle: string + imageName?: string + content: string + updateAt: number + star: boolean + importantLevel: number + source: string +} + +/** Public announcements shown on the skin site. Requires the JWT when signed in. */ +export function skinSiteAnnouncements(): Promise> { + return skinSiteRequest('broadcast/all', { type: 'skin' }) +} diff --git a/apps/app-frontend/src/pages/Index.vue b/apps/app-frontend/src/pages/Index.vue index 1e8dc91..84478de 100644 --- a/apps/app-frontend/src/pages/Index.vue +++ b/apps/app-frontend/src/pages/Index.vue @@ -16,7 +16,7 @@ import HomeLaunchProgress from '@/components/home/HomeLaunchProgress.vue' import HomeMinecraftNews from '@/components/home/HomeMinecraftNews.vue' import HomeMinimal from '@/components/home/HomeMinimal.vue' import HomePlayInsights from '@/components/home/HomePlayInsights.vue' -import SkinSiteFrame from '@/components/ui/SkinSiteFrame.vue' +import SkinSiteHome from '@/components/ui/skin-site/SkinSiteHome.vue' import { useNetworkStatus } from '@/composables/useNetworkStatus' import { get_default_user, users } from '@/helpers/auth' import { DIRECT_LINKS_SYNCED_EVENT } from '@/helpers/direct-link-sync' @@ -162,7 +162,7 @@ onUnmounted(() => { @select="selectMinimalInstance" />
- +