[根目录](../CLAUDE.md) > **web**

# web - Vue3 前端模块

## 模块职责

基于 Vue 3 + Naive UI 构建的管理后台，提供：用户/角色/权限/菜单/部门的系统管理，三平台招聘数据的浏览与搜索，数据采集趋势与来源分布的统计看板（ECharts），定向数据清洗操作，关键词与代理 IP 管理。

---

## 入口与启动

| 文件 | 说明 |
|------|------|
| `web/src/main.js` | Vue 应用入口，依次初始化 Store、Router、指令、i18n，挂载到 `#app` |
| `web/src/App.vue` | 根组件 |
| `web/src/router/index.js` | Vue Router 配置，含路由守卫（认证、页面 Loading、标题） |
| `web/src/store/index.js` | Pinia Store 入口 |

### 本地开发

```bash
cd web
pnpm install
pnpm dev      # Vite dev server，默认 http://localhost:5173
pnpm build    # 构建到 web/dist/
pnpm lint     # ESLint 检查
```

---

## 页面路由结构

| 路由路径 | 视图文件 | 说明 |
|----------|----------|------|
| `/login` | `views/login/index.vue` | 登录页 |
| `/analytics` | `views/analytics/index.vue` | 数据分析看板（ECharts 趋势 + 来源饼图） |
| `/recruitment/qcwy` | `views/recruitment/qcwy/index.vue` | 前程无忧数据浏览 |
| `/recruitment/zhilian` | `views/recruitment/zhilian/index.vue` | 智联招聘数据浏览 |
| `/recruitment/boss` | `views/recruitment/boss/index.vue` | Boss 直聘数据浏览 |
| `/cleaning/targeted` | `views/cleaning/index.vue` | 定向数据清洗 |
| `/cleaning/monitor` | `views/cleaning/monitor.vue` | 清洗任务监控 |
| `/keyword` | `views/keyword/index.vue` | 关键词管理 |
| `/profile` | `views/profile/index.vue` | 个人中心 |
| `/system/user` | `views/system/user/index.vue` | 用户管理 |
| `/system/role` | `views/system/role/index.vue` | 角色管理 |
| `/system/menu` | `views/system/menu/index.vue` | 菜单管理 |
| `/system/api` | `views/system/api/index.vue` | API 权限管理 |
| `/system/dept` | `views/system/dept/index.vue` | 部门管理 |
| `/system/auditlog` | `views/system/auditlog/index.vue` | 审计日志 |
| `/system/proxy` | `views/system/proxy/index.vue` | 代理 IP 管理 |
| `/system/token` | `views/system/token/index.vue` | Boss Token 管理 |

---

## 对外接口（API 调用层）

前端 API 模块位于 `web/src/api/`，通过 axios 封装：

| 文件 | 接口对象 | 说明 |
|------|----------|------|
| `api/index.js` | 所有系统接口 | 用户、角色、菜单、部门、API 管理等 |
| `api/analytics.js` | `getOverview` / `getVolumeTrend` / `getSourceDistribution` | 数据分析统计接口 |
| `api/keyword.js` | keyword CRUD | 关键词管理 |
| `api/proxy.js` | proxy CRUD | 代理 IP 管理 |
| `api/token.js` | token CRUD | Boss Token 管理 |

HTTP 工具层：`web/src/utils/http/`（基于 axios，含拦截器）

认证：JWT Token 存储于 localStorage，通过请求拦截器自动注入 `Authorization` 头。

---

## 关键依赖与配置

```json
{
  "主框架": "vue@^3.3.4",
  "UI 库": "naive-ui@^2.34.4",
  "状态管理": "pinia@^2.1.6",
  "路由": "vue-router@^4.2.4",
  "图表": "echarts@^6.0.0",
  "HTTP": "axios@^1.4.0",
  "图标": "@iconify/vue + @iconify/json",
  "工具": "@vueuse/core, lodash-es, dayjs",
  "构建": "vite@^4.4.6",
  "原子 CSS": "unocss@^66.5.10"
}
```

Vite 配置：`web/vite.config.js`（含 `@vitejs/plugin-vue`, `unocss`, `unplugin-icons`）。

---

## 数据模型（前端状态）

Pinia Store 模块（`web/src/store/modules/`）：

| Store 模块 | 说明 |
|------------|------|
| `user` | 当前登录用户信息、Token |
| `permission` | 动态路由权限（菜单权限列表） |
| `app` | 全局 UI 状态（侧边栏折叠、主题等） |
| `tags` | 多页签（Keep-Alive 页签管理） |

---

## 数据分析看板关键实现

`web/src/views/analytics/index.vue` 使用 ECharts 渲染：
- **趋势折线图**：按 hour/day/week/month 粒度，分 boss/qcwy/zhilian 三条折线，支持 dataZoom 交互
- **来源饼图**：环形饼图展示各平台数据占比
- **时间预设**：近 24h / 7d / 30d / 90d / 6m / 12m / 全部 / 自定义

---

## 测试与质量

- 当前无自动化测试文件（缺口）。
- 代码规范：ESLint (`@zclzone` + `@unocss` 配置) + `prettier`。
- 建议补充：Vitest 单元测试（工具函数）和 Playwright E2E 测试（登录、数据查看流程）。

---

## 常见问题 (FAQ)

**Q: 前端无法连接后端 API？**
A: 检查 `web/src/utils/http/index.js` 中的 `baseURL` 配置，或在 Vite 配置中设置代理（`vite.config.js` 的 `server.proxy`）。

**Q: 动态路由/菜单不更新？**
A: 登出后重新登录会重新拉取后端菜单树。如果菜单在后端已新增，前端 permission store 会在下次路由守卫拦截时重新请求。

**Q: 图表不显示？**
A: 检查 ClickHouse 是否可达（后端 `/api/v1/analytics/overview` 是否返回数据），以及图表容器 `div` 的高度是否为 0。

---

## 相关文件清单

```
web/src/
├── main.js                    # 应用入口
├── App.vue                    # 根组件
├── api/                       # API 调用层
│   ├── analytics.js
│   ├── keyword.js
│   ├── proxy.js
│   └── token.js
├── components/                # 公共组件（CrudTable, CrudModal, QueryBar 等）
├── layout/                    # 布局（侧边栏、顶栏、标签页）
├── router/                    # 路由配置与守卫
├── store/                     # Pinia Store
├── utils/
│   ├── auth/                  # JWT Token 工具
│   ├── http/                  # axios 封装
│   └── storage/               # localStorage 封装
└── views/
    ├── analytics/             # 数据分析看板
    ├── cleaning/              # 数据清理页面
    ├── keyword/               # 关键词管理
    ├── recruitment/           # 三平台数据浏览
    │   ├── boss/
    │   ├── qcwy/
    │   └── zhilian/
    └── system/                # 系统管理（用户/角色/菜单/部门/代理/Token/审计）
```

---

## 变更记录 (Changelog)

| 日期 | 说明 |
|------|------|
| 2026-03-20 | 初始化模块文档 |
