# si-educational 在线教育平台着陆页模板,适用于教育机构、在线课程平台、培训中心展示课程和服务。 ## 技术栈 - Next.js 15.5.9 (已锁定版本,App Router) - React 19.2.3 (已锁定版本,修复 CVE-2025-55182 漏洞) - TypeScript 5 - Tailwind CSS 4 - next-auth (身份认证) - next-themes (深色/浅色主题切换) - Framer Motion (高级动画) - AOS (滚动动画) - react-slick (轮播组件) - @headlessui/react (无头 UI 组件) - @iconify/react (图标库) ## 快速开始 ```bash pnpm install pnpm run dev ``` ## 目录结构 ```text src/ ├── app/ # Next.js App Router 入口 │ ├── layout.tsx # 根布局 (Header + Footer + 主题Provider) │ ├── page.tsx # 首页 (Hero + 课程 + 导师 + 评价) │ ├── not-found.tsx # 404 页面 │ ├── globals.css # 全局样式 + Tailwind 主题变量 │ ├── (site)/ # 路由分组 (共享布局) │ │ ├── (auth)/ # 认证路由组 │ │ │ ├── signin/page.tsx # 登录页面 │ │ │ └── signup/page.tsx # 注册页面 │ │ └── documentation/page.tsx # 文档页面 │ ├── api/ # API 路由 │ │ ├── auth/[...nextauth]/route.ts # NextAuth 认证 API │ │ └── data/route.ts # 静态数据 API (菜单、课程、导师) │ ├── components/ # 可复用组件 │ │ ├── Layout/ # 布局组件 │ │ │ ├── Header/index.tsx # 导航栏 (Logo + 菜单 + 主题切换) │ │ │ │ ├── Logo/index.tsx # Logo 组件 │ │ │ │ ├── ThemeToggler.tsx # 主题切换按钮 │ │ │ │ └── Navigation/ # 导航链接 │ │ │ │ ├── HeaderLink.tsx # 桌面导航 │ │ │ │ └── MobileHeaderLink.tsx # 移动导航 │ │ │ └── Footer/index.tsx # 页脚 │ │ ├── Home/ # 首页专用组件 │ │ │ ├── Hero/index.tsx # Hero 区域 (主标题 + 下拉选择器) │ │ │ │ ├── Dropdownone.tsx # 课程类型选择 │ │ │ │ └── Dropdowntwo.tsx # 学习时长选择 │ │ │ ├── Companies/index.tsx # 公司 Logo 轮播 │ │ │ ├── Courses/index.tsx # 课程列表 (分类过滤) │ │ │ ├── Mentor/index.tsx # 导师卡片网格 │ │ │ ├── Testimonial/index.tsx # 学生评价轮播 │ │ │ └── Newsletter/index.tsx # 邮件订阅区 │ │ ├── Auth/ # 认证相关组件 │ │ │ ├── SignIn/index.tsx # 登录表单 │ │ │ ├── SignUp/index.tsx # 注册表单 │ │ │ ├── ForgotPassword/index.tsx # 忘记密码 │ │ │ ├── MagicLink/index.tsx # 魔法链接登录 │ │ │ ├── ResetPassword/index.tsx # 重置密码 │ │ │ ├── SocialSignIn.tsx # 社交登录按钮 │ │ │ └── SocialSignUp.tsx # 社交注册按钮 │ │ ├── Contact/ # 联系表单 │ │ │ └── Form/index.tsx │ │ ├── Documentation/ # 文档相关组件 │ │ │ ├── Documentation.tsx # 主文档组件 │ │ │ ├── Introduction.tsx # 介绍 │ │ │ ├── QuickStart.tsx # 快速开始 │ │ │ ├── Configuration.tsx # 配置说明 │ │ │ ├── ColorConfiguraion.tsx # 颜色配置 │ │ │ ├── TypographyConfiguration.tsx # 字体配置 │ │ │ ├── LogoConfiguration.tsx # Logo 配置 │ │ │ ├── PackageStructure.tsx # 包结构说明 │ │ │ └── DocNavigation.tsx # 文档侧边导航 │ │ ├── Common/ # 通用组件 │ │ │ ├── Breadcrumb.tsx # 面包屑 │ │ │ ├── Loader.tsx # 加载动画 │ │ │ ├── PreLoader.tsx # 页面预加载 │ │ │ └── ScrollUp.tsx # 回到顶部按钮 │ │ ├── Skeleton/ # 骨架屏组件 │ │ │ ├── CourseDetail/index.tsx # 课程加载骨架 │ │ │ ├── Mentor/index.tsx # 导师加载骨架 │ │ │ └── Testimonial/index.tsx # 评价加载骨架 │ │ ├── SharedComponent/ # 共享组件 │ │ │ ├── HeroSub/index.tsx # 子页面 Hero │ │ │ └── Volunteer/index.tsx # 志愿者组件 │ │ ├── Breadcrumb/index.tsx # 面包屑导航 │ │ ├── NotFound/index.tsx # 404 组件 │ │ └── ScrollToTop/index.tsx # 滚动到顶部 │ └── types/ # TypeScript 类型定义 │ ├── blog.ts # 博客类型 │ ├── breadcrumb.ts # 面包屑类型 │ ├── course.ts # 课程分类类型 │ ├── coursedetail.ts # 课程详情类型 │ ├── footerlinks.ts # 页脚链接类型 │ ├── hour.ts # 学习时长类型 │ ├── menu.ts # 菜单类型 │ ├── mentor.ts # 导师类型 │ └── testimonial.ts # 评价类型 ├── utils/ # 工具函数 │ ├── aos.tsx # AOS 动画初始化 │ └── validateEmail.ts # 邮箱验证 public/ # 静态资源 └── images/ ├── logo/ # Logo 图片 ├── banner/ # Hero 区域背景 ├── courses/ # 课程卡片图片 ├── mentor/ # 导师头像 ├── testimonial/ # 评价用户头像 ├── slickCompany/ # 公司 Logo 轮播 ├── newsletter/ # 新闻订阅图片 ├── documentation/ # 文档图片 └── 404-*.svg # 404 页面图片 ``` ## 路由配置 | 路径 | 页面 | 说明 | |------|------|------| | `/` | Home | 首页 (Hero + 公司轮播 + 课程 + 导师 + 评价 + 订阅) | | `/signin` | SignIn | 登录页面 | | `/signup` | SignUp | 注册页面 | | `/documentation` | Documentation | 模板文档 | ## API 路由 | 端点 | 方法 | 说明 | |------|------|------| | `/api/data` | GET | 获取所有前端数据 (导航、课程、导师、评价) | | `/api/auth/*` | - | NextAuth 认证端点 | | `/api/register` | POST | 用户注册 | ## 数据结构 ### 导航菜单数据 (src/app/api/data/route.ts) ```typescript const HeaderData = [ { label: 'Home', href: '/', }, { label: 'Pages', href: '#', submenu: [ { label: 'Sign In', href: '/signin' }, { label: 'Sign Up', href: '/signup' }, ] }, // ... ]; ``` ### 课程数据 (src/app/api/data/route.ts) ```typescript const CourseDetailData = [ { course: 'HTML, CSS & Javascript Course for Web Developers', imageSrc: '/images/courses/courses1.svg', profession: 'Web Development', price: '$70.00', category: 'webdevelopment' // 用于分类过滤 }, // ... ]; // 课程分类 const CourseData = [ { name: 'Web Development' }, { name: 'Mobile Development' }, { name: 'Data Science' }, { name: 'Cloud Computing' }, ]; ``` ### 导师数据 (src/app/api/data/route.ts) ```typescript const MentorData = [ { name: 'Brooklyn Simmons', href: '#', imageSrc: '/images/mentor/mentor1.svg', imageAlt: 'Brooklyn Simmons', color: 'bg-success' // 颜色标签 }, // ... ]; ``` ### 评价数据 (src/app/api/data/route.ts) ```typescript const TestimonialData = [ { profession: 'UI/UX Designer', name: 'Robert Fox', imgSrc: '/images/testimonial/testimonial1.svg', starimg: '/images/testimonial/stars.svg', detail: '评价内容...' }, // ... ]; ``` ### 类型定义 ```typescript // src/app/types/coursedetail.ts type CourseDetailType = { course: string; imageSrc: string; profession: string; price: string; category: 'mobiledevelopment' | 'webdevelopment' | 'datascience' | 'cloudcomputing'; }; // src/app/types/mentor.ts type MentorType = { name: string; href: string; imageSrc: string; imageAlt: string; color: string; }; // src/app/types/testimonial.ts type TestimonialType = { profession: string; name: string; imgSrc: string; starimg: string; detail: string; }; // src/app/types/menu.ts type HeaderItem = { label: string; href: string; submenu?: SubmenuItem[]; }; ``` ## 核心组件说明 ### 布局系统 - `RootLayout` (src/app/layout.tsx): 根布局,包含主题Provider、认证Provider、Header和Footer - 使用 `next-themes` 实现深色/浅色模式切换 - 使用 `next-auth` 实现用户认证 ### 主题切换 主题通过 `next-themes` 的 `ThemeProvider` 管理,支持: - `light` - 浅色主题 - `dark` - 深色主题 - `system` - 跟随系统 ### 主题颜色 (src/app/globals.css) ```css --color-primary: #611f69; /* 紫色 - 主色 */ --color-cream: #fcf5ef; /* 奶油色 - 背景 */ --color-success: #6b9f36; /* 绿色 - 成功状态 */ --color-orange: #f9cd92; /* 橙色 - 强调 */ ``` ### 动画效果 - **AOS (Animate On Scroll)**: 在 `src/utils/aos.tsx` 初始化,页面滚动时的进入动画 - **Framer Motion**: 高级动画库,支持复杂过渡效果 - **react-slick**: 轮播组件动画 ### 认证系统 使用 `next-auth` v4,配置文件位于 `src/app/api/auth/[...nextauth]/route.ts`。 启用社交登录需要: 1. 在 `.env.local` 中配置环境变量: ```bash NEXTAUTH_SECRET=your-secret-key NEXTAUTH_URL=http://localhost:3000 # Google 登录 GOOGLE_CLIENT_ID=your-google-client-id GOOGLE_CLIENT_SECRET=your-google-client-secret # GitHub 登录 GITHUB_ID=your-github-id GITHUB_SECRET=your-github-secret ``` 2. 在 `route.ts` 中取消对应 provider 的注释 ### 数据获取模式 所有页面数据从 `/api/data` 集中获取: ```typescript // 组件中的数据获取示例 useEffect(() => { const fetchData = async () => { const res = await fetch('/api/data'); const data = await res.json(); setCourses(data.CourseDetailData); }; fetchData(); }, []); ``` ## 常见修改任务 ### 修改网站信息 1. 修改 `src/app/components/Layout/Header/Logo/index.tsx` 中的 Logo 2. 修改 `src/app/components/Layout/Footer/index.tsx` 中的版权信息 3. 修改 `src/app/layout.tsx` 中的 metadata ### 修改导航菜单 编辑 `src/app/api/data/route.ts` 中的 `HeaderData` 数组 ### 添加新页面 1. 在 `src/app/(site)/` 目录下创建新文件夹和 `page.tsx` 2. 在 `HeaderData` 中添加导航项 ### 修改样式主题 1. 编辑 `src/app/globals.css` 中的 CSS 变量 2. 主要颜色: `--color-primary`, `--color-cream`, `--color-success`, `--color-orange` ### 修改课程/导师/评价数据 编辑 `src/app/api/data/route.ts` 中对应的数据数组: - `CourseDetailData` - 课程列表 - `MentorData` - 导师列表 - `TestimonialData` - 评价列表 - `CourseData` - 课程分类 ### 添加新的课程分类 1. 在 `CourseData` 添加新分类 2. 在 `CourseDetailType` 类型中添加新的 category 值 3. 在课程数据中使用新分类 ## 组件使用示例 ### 课程列表组件 (Courses) ```tsx // 支持分类过滤 const categories = ['webdevelopment', 'mobiledevelopment', 'datascience', 'cloudcomputing']; // 过滤逻辑 const filteredCourses = courses.filter( course => selectedCategory === 'all' || course.category === selectedCategory ); ``` ### 轮播组件 (Companies/Testimonial) ```tsx // react-slick 配置 const settings = { dots: false, infinite: true, slidesToShow: 4, slidesToScroll: 1, autoplay: true, autoplaySpeed: 2000, responsive: [ { breakpoint: 1024, settings: { slidesToShow: 3 } }, { breakpoint: 768, settings: { slidesToShow: 2 } }, ] }; ``` ## 图片资源 - 存放在 `public/images/` 目录 - 引用路径:`/images/xxx.svg` - 课程图片:`/images/courses/` - 导师头像:`/images/mentor/` - 评价头像:`/images/testimonial/` ## 安全说明 以下依赖版本已锁定以修复安全漏洞: - **Next.js 15.5.9** - 锁定版本,修复漏洞编号为:CVE-2025-66478 - **React 19.2.3** - 修复 React Server Components 远程代码执行漏洞 (CVE-2025-55182) 请勿使用 `^` 或 `~` 前缀以避免自动升级到有漏洞的版本。