|
|
||
|---|---|---|
| .. | ||
| __tests__ | ||
| app | ||
| components | ||
| e2e | ||
| hooks | ||
| lib | ||
| playwright-report | ||
| test-results | ||
| types | ||
| .dockerignore | ||
| .eslintrc.json | ||
| .gitignore | ||
| Dockerfile | ||
| README.md | ||
| cookies.txt | ||
| next.config.mjs | ||
| package-lock.json | ||
| package.json | ||
| playwright.config.ts | ||
| postcss.config.mjs | ||
| sentry.client.config.ts | ||
| sentry.server.config.ts | ||
| tailwind.config.ts | ||
| tsconfig.json | ||
| vitest.config.ts | ||
| vitest.setup.ts | ||
README.md
GEO 平台 - 前端应用
基于 Next.js 14 + React 18 构建的现代化前端应用,使用 App Router 架构。
环境要求
- Node.js 18+
- npm 9+(或 yarn、pnpm)
- 后端服务已启动(默认 http://localhost:8000)
安装步骤
cd frontend
npm install
运行命令
# 开发模式(带热重载)
npm run dev
# 生产构建
npm run build
# 启动生产服务
npm run start
# 代码检查
npm run lint
开发服务器启动后,访问 http://localhost:3000。
页面路由说明
本应用使用 Next.js App Router(app/ 目录),路由基于文件系统自动生成。
认证页面((auth) 路由组)
| 路径 | 功能 | 说明 |
|---|---|---|
/ |
首页/欢迎页 | 应用入口,未登录用户展示介绍 |
/login |
用户登录 | 邮箱+密码登录,支持记住我 |
/register |
用户注册 | 新用户注册,含邮箱验证流程 |
/forgot-password |
忘记密码 | 发送密码重置链接到邮箱 |
/reset-password |
重置密码 | 通过令牌设置新密码 |
仪表盘页面((dashboard) 路由组)
所有仪表盘页面均需登录后才能访问,受 NextAuth 会话保护。
| 路径 | 功能 | 说明 |
|---|---|---|
/dashboard |
仪表盘首页 | 数据概览、关键指标、引用趋势图 |
/dashboard/queries |
查询词管理 | 查询词 CRUD、即时执行、分页列表 |
/dashboard/citations |
引用数据 | 引用记录列表、按平台/日期筛选 |
/dashboard/reports |
报告导出 | CSV 报告生成与下载 |
/dashboard/settings |
个人设置 | 用户资料修改、密码修改 |
API 路由
| 路径 | 功能 |
|---|---|
/api/auth/[...nextauth] |
NextAuth.js 认证 API 端点 |
组件结构说明
components/
├── ui/ # shadcn/ui 基础组件
│ ├── button.tsx # 按钮
│ ├── card.tsx # 卡片
│ ├── dialog.tsx # 对话框
│ ├── dropdown-menu.tsx # 下拉菜单
│ ├── input.tsx # 输入框
│ ├── label.tsx # 标签
│ ├── select.tsx # 下拉选择
│ ├── table.tsx # 表格
│ ├── tabs.tsx # 标签页
│ ├── badge.tsx # 徽标
│ └── skeleton.tsx # 骨架屏
├── charts/ # 数据可视化图表组件
│ ├── trend-chart.tsx # 引用趋势折线图
│ └── platform-chart.tsx # 平台对比柱状图/饼图
├── layout/ # 布局组件
│ ├── header.tsx # 顶部导航栏
│ └── sidebar.tsx # 侧边栏导航
└── providers.tsx # 全局 Provider 包装(NextAuth SessionProvider 等)
lib 工具库
lib/
├── api.ts # 后端 API 客户端封装(fetch 封装)
├── auth.ts # NextAuth 配置与工具函数
├── platforms.ts # 平台名称/图标映射配置
└── utils.ts # 通用工具函数(cn 合并类等)
技术栈详情
| 类别 | 技术 |
|---|---|
| 框架 | Next.js 14 (App Router) |
| UI 库 | React 18 |
| 样式 | TailwindCSS 3.4 |
| 组件库 | shadcn/ui(基于 Radix UI) |
| 图表 | Recharts |
| 认证 | NextAuth.js 4 (Credentials Provider) |
| 字体 | Geist(本地字体) |
| 语言 | TypeScript 5 |
环境变量配置
前端环境变量分为两类:
公开环境变量(NEXT_PUBLIC_ 前缀,客户端可用)
在 .env.local 中配置:
# 后端 API 地址
NEXT_PUBLIC_API_URL=http://localhost:8000
服务端环境变量(仅服务端可用)
# NextAuth 配置
NEXTAUTH_URL=http://localhost:3000
NEXTAUTH_SECRET=geo-platform-nextauth-secret-key-2026
注意:
.env.local文件不会被提交到 Git 仓库。新成员需要手动创建该文件。
环境变量文件优先级
Next.js 按以下优先级加载环境变量(高优先级覆盖低优先级):
.env.local(本地开发,不提交 Git).env.development/.env.production(按环境).env(全局默认)
Docker 开发
项目根目录已提供 docker-compose.yml,前端服务会自动挂载代码并启动开发服务器:
# 在项目根目录执行
docker-compose up -d frontend
前端容器配置:
- 端口映射:
3000:3000 - 代码热重载:通过 volume 挂载
./frontend:/app - node_modules 持久化:独立 volume 避免覆盖
开发注意事项
- API 调用:统一使用
lib/api.ts中封装的方法,自动携带 JWT Token - 认证状态:通过
next-auth/react的useSessionHook 获取当前登录状态 - 服务端组件 vs 客户端组件:
- 数据获取页面优先使用 Server Component
- 交互逻辑(表单、图表)使用
"use client"Client Component
- 样式规范:统一使用 TailwindCSS 工具类,复杂组合通过
cn()工具函数处理 - 图标:统一使用
lucide-react图标库