Files
yphsalumni.org/app/pages/index.vue
xiaomai 567c9ef9c9 feat(app): restructure to multi-page layout and add content pages
Converts the website from a single-page design with anchor links to a full multi-page application. This change improves site organization, navigation, and scalability.

- Adds new top-level pages: `/news`, `/events`, and `/about`.
- Introduces a new section for the 40th Anniversary at `/40th-anniversary`, including a proposal sub-page.
- Updates the default layout with a new navigation menu, a promotional banner, social links, and page transitions.
2025-10-26 22:18:29 +08:00

71 lines
1.9 KiB
Vue

<template>
<UPage>
<!-- Hero Banner -->
<UPageHero
class="bg-cover bg-center"
style="
background-image: url(&quot;/hero-image.jpg&quot;);
background-color: rgba(255, 255, 255, 0.5); /* Semi-transparent black */
background-blend-mode: lighten;
"
title="连接校友 · 传承精神"
description="马来西亚柔佛永平中学校友会官方网站"
:links="heroCta"
/>
<!-- News Blog Posts -->
<UPageSection title="新闻与公告">
<UBlogPosts :posts="newsPost" />
</UPageSection>
<IndexEvents />
<IndexHallOfFame />
<!-- 捐赠模块 -->
<UPageCTA
class="bg-secondary"
title="支持与捐赠(功能暂未开放)"
description="您的捐赠将用于奖学金、校园建设及校友活动发展。感谢您对母校的支持!"
:links="donationLinks"
/>
</UPage>
</template>
<script lang="ts" setup>
import type { BlogPostProps } from "@nuxt/ui";
const heroCta = ref([
{
label: "立即加入我们",
to: "/join-us",
icon: "mdi:account-plus",
},
]);
// ========================================================
// 新闻模块
// ========================================================
const { data: news } = await useAsyncData("news", () =>
queryCollection("news").order("date", "DESC").limit(3).all()
);
// 将 news 数据转换成 UBlogPosts 可用格式
const newsPost = computed<BlogPostProps[]>(() =>
(news.value || []).map((n: any) => ({
title: n.title,
description: n.description,
image: n.cover,
date: n.date,
to: n.path, // ✅ 建议加路由跳转
variant: "subtle",
}))
);
// ========================================================
// 捐赠模块
// ========================================================
const donationLinks = ref([{ label: "立即捐赠", icon: "mdi:cash" }]);
</script>
<style></style>