feat(pages): add web development services page
This commit introduces a new page at `/webDev` to display web development services and pricing plans. To support this, a new reusable composable `useLocalizedCollection` has been created to simplify fetching localized content from Nuxt Content. The index page has been refactored to use this new composable. - Adds `webDev.vue` page and corresponding `webDev.yml` content files for EN and ZH. - Defines a Zod schema in `content.config.ts` for the new content type. - Updates the navigation link to point to the new page.
This commit is contained in:
@@ -71,47 +71,7 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import type { Collections } from "@nuxt/content";
|
||||
|
||||
const { locale } = useI18n();
|
||||
|
||||
const { data: page } = await useAsyncData(
|
||||
"index-" + locale.value,
|
||||
async () => {
|
||||
// Build collection name based on current locale
|
||||
let localeSuffix = "";
|
||||
switch (locale.value) {
|
||||
case "en":
|
||||
localeSuffix = "en";
|
||||
break;
|
||||
case "zh-CN":
|
||||
localeSuffix = "zh";
|
||||
break;
|
||||
default:
|
||||
localeSuffix = "en";
|
||||
break;
|
||||
}
|
||||
const collection = ("index_" + localeSuffix) as keyof Collections;
|
||||
const content = await queryCollection(collection).first();
|
||||
|
||||
// Optional: fallback to default locale if content is missing
|
||||
if (!content && locale.value !== "en") {
|
||||
return await queryCollection("index_en").first();
|
||||
}
|
||||
|
||||
return content;
|
||||
},
|
||||
{
|
||||
watch: [locale], // Refetch when locale changes
|
||||
}
|
||||
);
|
||||
if (!page.value) {
|
||||
throw createError({
|
||||
statusCode: 404,
|
||||
statusMessage: `Page not found, the index_${locale.value} couldn't be found.`,
|
||||
fatal: true,
|
||||
});
|
||||
}
|
||||
const { data: page } = await useLocalizedCollection("index");
|
||||
|
||||
useSeoMeta({
|
||||
title: page.value?.seo.title,
|
||||
|
||||
Reference in New Issue
Block a user