Files
webs/power_leasing/CLAUDE.md

214 lines
6.3 KiB
Markdown
Raw Normal View History

2026-01-09 17:13:29 +08:00
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## 项目概述
这是一个算力租赁平台的前端项目,基于 Vue 2 + Element UI 构建。项目支持多环境部署,包含完整的商品展示、购物车、订单管理、店铺管理和钱包系统。
## 常用命令
```bash
# 开发环境运行
npm run serve
# 生产环境构建
npm run build
# 测试环境构建(输出到 test 目录)
npm run test
# 代码检查和修复
npm run lint
```
## 环境配置
项目使用三个环境配置文件:
- `.env.development` - 开发环境
- `.env.staging` - 测试环境
- `.env.production` - 生产环境
关键环境变量:
- `VUE_APP_BASE_API` - API 基础路径
- `VUE_APP_BASE_URL` - 应用基础 URL
- `VUE_APP_TITLE` - 应用标题
## 核心架构
### 1. 路由架构
路由配置采用模块化设计,分为两层结构:
**独立路由(无 Layout**
- 认证相关路由(`authRoutes`):登录、注册、重置密码
**嵌套路由(带 Layout**
- 商品路由(`productRoutes`):商品列表、商品详情
- 购物车路由(`cartRoutes`):购物车管理
- 结算路由(`checkoutRoutes`):订单结算
- 个人中心路由(`accountRoutes`):钱包、店铺、订单管理等
路由文件组织:
- `src/router/index.js` - 主路由文件,包含路由守卫和错误处理
- `src/router/routes.js` - 模块化路由配置,按业务功能分组
路由元信息meta字段
- `title` - 页面标题
- `description` - 页面描述
- `allAuthority` - 权限配置(当前都是 `['all']`
- `requiresAuth` - 是否需要登录
### 2. API 请求架构
**Axios 实例配置(`src/utils/request.js`**
- 基础 URL`process.env.VUE_APP_BASE_API`
- 超时时间10秒
- 自动重试机制:网络错误或超时最多重试 2 次,间隔 2 秒
- 请求防抖:使用 `CancelToken` 取消重复请求
**拦截器功能:**
- 请求拦截器:
- 自动注入 `Authorization` token`localStorage.leasToken` 读取)
- GET 请求参数编码处理
- 重复请求取消
- 响应拦截器:
- 统一错误码处理421 登录过期、500+ 服务器错误)
- Blob 文件下载特殊处理
- 网络断线重连队列管理
- 错误提示去重(`errorNotificationManager`
**断网重连机制:**
- 监听 `online/offline` 事件
- 断网时请求加入重试队列
- 网络恢复后自动重试失败请求
- 智能 loading 状态重置
**API 模块组织:**
```
src/api/
├── products.js # 商品相关接口
├── shops.js # 店铺相关接口
├── shoppingCart.js # 购物车接口
├── order.js # 订单接口
├── wallet.js # 钱包接口
├── machine.js # 机器配置接口
├── user.js # 用户接口
└── verification.js # 验证码接口
```
### 3. 全局工具
**关键工具模块:**
- `request.js` - Axios 封装,包含请求重试、断网重连、错误处理
- `errorCode.js` - 错误码映射表
- `errorNotificationManager.js` - 错误提示去重管理器
- `loadingManager.js` - Loading 状态管理器
- `loginInfo.js` - 登录信息处理
- `rsaEncrypt.js` - RSA 加密(使用 jsencrypt
- `amount.js` - 金额计算工具
- `noEmojiGuard.js` - 全局输入防表情守卫
- `navigation.js` - 导航配置工具
- `routeTest.js` - 路由测试工具
**全局 Vue 实例:**
- 所有组件通过 `window.vm` 访问根 Vue 实例
- `request.js` 通过 `window.vm` 显示错误提示和进行路由跳转
### 4. 状态管理
项目使用轻量级状态管理策略:
- Vuex`src/store`)用于少量全局状态
- localStorage 用于持久化数据token、购物车等
- 自定义事件CustomEvent用于跨组件通信
- `login-status-changed` - 登录状态变化
- `chart-data-updated` - 图表数据更新
- `network-retry-complete` - 网络重试完成
### 5. 关键业务流程
**登录过期处理流程:**
1. API 返回 421 错误码
2. 触发 `login-status-changed` 事件
3. 清除 `localStorage.leasToken`
4. 弹出确认框:登录 or 返回首页
5. 根据当前语言环境跳转对应路由
**网络断线重连流程:**
1. 检测到 `Network Error``timeout`
2. 检查 `navigator.onLine` 状态
3. 如果断网,将请求加入 `pendingRequests` 队列
4. 监听 `online` 事件
5. 网络恢复后批量重试队列中的请求
6. 触发 `network-retry-complete` 事件
7. 重置所有 loading 状态
## 编码规范
### 文件组织
- 路由配置按业务模块分组导出
- API 接口按业务领域分文件
- 工具函数按功能单一职责原则组织
### 命名约定
- 组件文件名:小驼峰(如 `index.vue`
- 路由 name小驼峰`productList`)或大驼峰(如 `Login`
- API 函数:小驼峰动词开头(如 `getList`, `createProduct`
### Vue 版本
- 当前项目使用 **Vue 2.6.14**
- 不要使用 Vue 3 的 Composition API
- 使用 Options APIdata, methods, computed, watch 等)
### 注释语言
- 代码注释统一使用**简体中文**
- JSDoc 注释可使用中文描述
## 特殊配置
### Vue CLI 配置(`vue.config.js`
```javascript
devServer: {
client: {
overlay: false // 关闭开发环境错误遮罩
}
}
```
### Babel 配置
使用 Vue CLI 默认 preset支持 ES6+ 语法转译。
### 全局禁用 console.log
生产环境通过 `console.log = () => {}` 全局禁用日志输出(在 `src/main.js`)。
## 重要注意事项
1. **Token 管理**
- Token 存储在 `localStorage.leasToken`
- 必须是 JSON 字符串格式
- 每次请求自动注入 `Authorization` header
2. **错误处理**
- 使用 `errorNotificationManager` 避免重复错误提示
- 网络错误会自动重试,不要手动重试
- 421 错误会自动触发登录跳转
3. **路由守卫**
- 页面标题格式:`{meta.title} - Power Leasing`
- 所有路由权限检查在 `router.beforeEach` 中统一处理
4. **请求取消**
- 重复请求会被自动取消
- 取消的请求不会显示错误提示
- 不要依赖被取消请求的响应数据
5. **环境变量**
- 开发环境默认使用 `https://test.m2pool.com/api/`
- 修改环境变量后需要重启开发服务器
6. **Element UI**
- 全局引入,无需在组件中单独导入
- 版本2.15.14
- 支持完整的组件库功能