# 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` 图标库
