# 代码规范文档
## 📋 文档信息
- **文档版本**: v1.0.0
- **创建日期**: 2024年
- **最后更新**: 2024年
- **文档状态**: 草稿
- **维护人员**: 开发团队
## 🎯 代码规范概述
本规范旨在统一团队代码风格,提高代码质量,确保代码的可读性和可维护性。
## 📝 命名规范
### 文件命名
- **Vue 组件**: 使用 PascalCase,如 `UserProfile.vue`
- **JavaScript 文件**: 使用 camelCase,如 `userService.js`
- **CSS/SCSS 文件**: 使用 kebab-case,如 `user-profile.scss`
- **常量文件**: 使用 UPPER_SNAKE_CASE,如 `API_ENDPOINTS.js`
### 变量命名
```javascript
// 使用 camelCase
const userName = 'John';
const isActive = true;
const userList = [];
// 常量使用 UPPER_SNAKE_CASE
const API_BASE_URL = 'https://api.example.com';
const MAX_RETRY_COUNT = 3;
```
### 函数命名
```javascript
// 使用 camelCase,动词开头
function getUserInfo() { }
function updateUserProfile() { }
function validateEmail() { }
// 布尔值函数使用 is/has/can 开头
function isValidUser() { }
function hasPermission() { }
function canEdit() { }
```
### 组件命名
```vue
```
## 🏗️ Vue 组件规范
### 组件结构
```vue
```
### Props 定义
```javascript
props: {
// 基础类型
title: {
type: String,
required: true,
default: ''
},
// 对象类型
user: {
type: Object,
required: true,
default: () => ({})
},
// 数组类型
items: {
type: Array,
default: () => []
}
}
```
### 事件命名
```javascript
// 使用 kebab-case
this.$emit('user-updated', userData);
this.$emit('form-submitted', formData);
// 在模板中使用
```
## 🎨 CSS/SCSS 规范
### 类名命名
```scss
// 使用 BEM 命名规范
.user-profile {
&__header {
// 元素
}
&--active {
// 修饰符
}
}
// 或者使用 kebab-case
.user-profile {
.profile-header {
// 嵌套元素
}
&.is-active {
// 状态类
}
}
```
### 样式组织
```scss
// 1. 布局相关
.layout-container {
// 布局样式
}
// 2. 组件样式
.component-name {
// 组件样式
}
// 3. 工具类
.text-center {
text-align: center;
}
```
## 📊 JavaScript 规范
### 变量声明
```javascript
// 优先使用 const,需要重新赋值时使用 let
const API_URL = 'https://api.example.com';
const userConfig = { theme: 'dark' };
let currentUser = null;
let isLoading = false;
// 避免使用 var
// var userName = 'John'; // ❌
```
### 函数定义
```javascript
// 使用箭头函数
const fetchUser = async (userId) => {
try {
const response = await api.getUser(userId);
return response.data;
} catch (error) {
console.error('Failed to fetch user:', error);
throw error;
}
};
// 对象方法简写
const userService = {
async getUser(id) {
// 方法实现
},
async updateUser(id, data) {
// 方法实现
}
};
```
### 异步处理
```javascript
// 使用 async/await
async function handleSubmit() {
try {
this.loading = true;
const result = await this.submitForm();
this.$message.success('提交成功');
this.$router.push('/success');
} catch (error) {
this.$message.error('提交失败:' + error.message);
} finally {
this.loading = false;
}
}
// 避免使用 .then() 链式调用
// ❌ 不推荐
this.submitForm()
.then(result => {
// 处理结果
})
.catch(error => {
// 处理错误
});
```
## 🔧 API 调用规范
### 接口定义
```javascript
// api/user.js
import request from '@/utils/request'
export function getUserList(params) {
return request({
url: '/api/users',
method: 'get',
params
})
}
export function createUser(data) {
return request({
url: '/api/users',
method: 'post',
data
})
}
```
### 错误处理
```javascript
// 统一的错误处理
try {
const result = await api.getUserList(params);
this.userList = result.data;
} catch (error) {
// 根据错误类型处理
if (error.response?.status === 401) {
this.$router.push('/login');
} else {
this.$message.error(error.message || '操作失败');
}
}
```
## 📁 文件组织规范
### 目录结构
```
src/
├── api/ # API 接口
│ ├── user.js # 用户相关接口
│ └── course.js # 课程相关接口
├── components/ # 公共组件
│ ├── common/ # 通用组件
│ └── business/ # 业务组件
├── utils/ # 工具函数
│ ├── request.js # 请求封装
│ └── validate.js # 验证工具
└── views/ # 页面组件
├── user/ # 用户相关页面
└── course/ # 课程相关页面
```
### 导入顺序
```javascript
// 1. 第三方库
import Vue from 'vue'
import ElementUI from 'element-ui'
// 2. 项目内部模块
import { mapState } from 'vuex'
import UserService from '@/api/user'
// 3. 相对路径导入
import UserProfile from './UserProfile.vue'
import './styles/user.scss'
```
## 🧪 测试规范
### 测试文件命名
```
tests/
├── unit/ # 单元测试
│ ├── components/ # 组件测试
│ └── utils/ # 工具函数测试
└── e2e/ # 端到端测试
└── specs/ # 测试规范
```
### 测试用例命名
```javascript
describe('UserService', () => {
describe('getUser', () => {
it('should return user data when valid id provided', async () => {
// 测试实现
});
it('should throw error when invalid id provided', async () => {
// 测试实现
});
});
});
```
## 🔍 代码质量
### ESLint 规则
项目使用 ESLint 进行代码质量检查,主要规则包括:
- 强制使用分号
- 强制使用单引号
- 强制使用 2 空格缩进
- 禁止未使用的变量
- 强制使用 === 比较
### Prettier 配置
项目使用 Prettier 进行代码格式化,确保代码风格一致。
## 📝 注释规范
### 函数注释
```javascript
/**
* 获取用户信息
* @param {string} userId - 用户ID
* @param {Object} options - 请求选项
* @returns {Promise