This commit introduces a new section to showcase team members, starting with the founder's profile. - Adds a dynamic page route `/about/` to display individual member profiles. - Creates a new `about` content collection to source profile information from Markdown files. - Adds the first profile for 'Xiaomai', including a detailed resume and background image. - Integrates a 'Teams' dropdown into the main navigation header. - Implements a `copyToClipboard` utility with a toast notification for sharing profile links.
90 lines
2.2 KiB
TypeScript
90 lines
2.2 KiB
TypeScript
import { defineContentConfig, defineCollection, z } from "@nuxt/content";
|
||
import { PricingPlanPropsSchema } from "./app/schemas/pricingPlanSchema";
|
||
|
||
const defineIndexSchema = () =>
|
||
z.object({
|
||
capabilities: z.object({
|
||
title: z.string(),
|
||
features: z.array(
|
||
z.object({
|
||
title: z.string(),
|
||
description: z.string(),
|
||
icon: z.string(),
|
||
})
|
||
),
|
||
}),
|
||
featuredProjects: z.object({
|
||
title: z.string(),
|
||
projects: z.array(
|
||
z.object({
|
||
title: z.string(),
|
||
description: z.string(),
|
||
image: z.string(),
|
||
demoLink: z.string(),
|
||
highlight: z.boolean(),
|
||
spotlight: z.boolean(),
|
||
})
|
||
),
|
||
}),
|
||
techStack: z.object({
|
||
title: z.string(),
|
||
}),
|
||
whyChooseUs: z.object({
|
||
title: z.string(),
|
||
features: z.array(
|
||
z.object({
|
||
title: z.string(),
|
||
description: z.string(),
|
||
icon: z.string(),
|
||
})
|
||
),
|
||
}),
|
||
});
|
||
|
||
const defineWebDevSchema = () =>
|
||
z.object({
|
||
remarks: z.string(),
|
||
services: z.array(
|
||
z.object({
|
||
id: z.string().min(1),
|
||
label: z.string().min(1),
|
||
icon: z.string().optional(), // 比如 "lucide:mouse-pointer-click"
|
||
// 你原结构里通过 createService 包装,但最终是一个对象
|
||
plans: z.array(PricingPlanPropsSchema).min(1),
|
||
// 预留扩展字段(例如:category、tags、hidden 等)
|
||
category: z.string().optional(),
|
||
tags: z.array(z.string()).optional(),
|
||
})
|
||
),
|
||
});
|
||
|
||
export default defineContentConfig({
|
||
collections: {
|
||
index_en: defineCollection({
|
||
type: "page",
|
||
source: "en-US/index.yml",
|
||
schema: defineIndexSchema(),
|
||
}),
|
||
index_zh: defineCollection({
|
||
type: "page",
|
||
source: "zh-CN/index.yml",
|
||
schema: defineIndexSchema(),
|
||
}),
|
||
webDev_en: defineCollection({
|
||
type: "page",
|
||
source: "en-US/webDev.yml",
|
||
schema: defineWebDevSchema(),
|
||
}),
|
||
webDev_zh: defineCollection({
|
||
type: "page",
|
||
source: "zh-CN/webDev.yml",
|
||
schema: defineWebDevSchema(),
|
||
}),
|
||
about: defineCollection({
|
||
type: "page",
|
||
source: "about/*.md",
|
||
schema: z.object({}),
|
||
}),
|
||
},
|
||
});
|