geo/frontend/README.md

170 lines
5.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# GEO 平台 - 前端应用
基于 Next.js 14 + React 18 构建的现代化前端应用,使用 App Router 架构。
## 环境要求
- Node.js 18+
- npm 9+(或 yarn、pnpm
- 后端服务已启动(默认 http://localhost:8000
## 安装步骤
```bash
cd frontend
npm install
```
## 运行命令
```bash
# 开发模式(带热重载)
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` 中配置:
```bash
# 后端 API 地址
NEXT_PUBLIC_API_URL=http://localhost:8000
```
### 服务端环境变量(仅服务端可用)
```bash
# NextAuth 配置
NEXTAUTH_URL=http://localhost:3000
NEXTAUTH_SECRET=geo-platform-nextauth-secret-key-2026
```
> **注意**`.env.local` 文件不会被提交到 Git 仓库。新成员需要手动创建该文件。
### 环境变量文件优先级
Next.js 按以下优先级加载环境变量(高优先级覆盖低优先级):
1. `.env.local`(本地开发,不提交 Git
2. `.env.development` / `.env.production`(按环境)
3. `.env`(全局默认)
## Docker 开发
项目根目录已提供 `docker-compose.yml`,前端服务会自动挂载代码并启动开发服务器:
```bash
# 在项目根目录执行
docker-compose up -d frontend
```
前端容器配置:
- 端口映射:`3000:3000`
- 代码热重载:通过 volume 挂载 `./frontend:/app`
- node_modules 持久化:独立 volume 避免覆盖
## 开发注意事项
1. **API 调用**:统一使用 `lib/api.ts` 中封装的方法,自动携带 JWT Token
2. **认证状态**:通过 `next-auth/react``useSession` Hook 获取当前登录状态
3. **服务端组件 vs 客户端组件**
- 数据获取页面优先使用 Server Component
- 交互逻辑(表单、图表)使用 `"use client"` Client Component
4. **样式规范**:统一使用 TailwindCSS 工具类,复杂组合通过 `cn()` 工具函数处理
5. **图标**:统一使用 `lucide-react` 图标库