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" />
- +