Files
webs/power_leasing/CLAUDE.md
2026-01-09 17:13:29 +08:00

214 lines
6.3 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.

# 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
- 支持完整的组件库功能