# 宁夏智慧养殖监管平台代码规范
## 版本历史
| 版本 | 日期 | 修改内容 | 修改人 |
|------|------|----------|--------|
| v1.0 | 2024-01-20 | 初始版本,制定基础代码规范 | 开发团队 |
## 1. 概述
本文档规定了宁夏智慧养殖监管平台项目的代码编写规范,旨在提高代码质量、可读性和可维护性。
## 2. 通用规范
### 2.1 文件命名
- **文件名**: 使用小写字母和连字符,如 `user-service.js`
- **目录名**: 使用小写字母和连字符,如 `user-management`
- **组件文件**: 使用 PascalCase,如 `UserProfile.vue`
### 2.2 编码格式
- **字符编码**: UTF-8
- **换行符**: LF (Unix)
- **缩进**: 2个空格
- **行尾**: 不允许有多余空格
### 2.3 注释规范
```javascript
/**
* 函数功能描述
* @param {string} param1 - 参数1描述
* @param {number} param2 - 参数2描述
* @returns {boolean} 返回值描述
* @author 作者名
* @since 版本号
*/
function exampleFunction(param1, param2) {
// 单行注释说明
return true;
}
```
## 3. JavaScript/Node.js 规范
### 3.1 变量命名
```javascript
// 使用 camelCase
const userName = 'admin';
const userAge = 25;
// 常量使用 UPPER_SNAKE_CASE
const MAX_RETRY_COUNT = 3;
const API_BASE_URL = 'https://api.example.com';
// 私有变量使用下划线前缀
const _privateVariable = 'private';
```
### 3.2 函数定义
```javascript
// 优先使用箭头函数
const getUserInfo = (userId) => {
return userService.findById(userId);
};
// 异步函数
const fetchUserData = async (userId) => {
try {
const user = await userService.findById(userId);
return user;
} catch (error) {
logger.error('获取用户数据失败', error);
throw error;
}
};
```
### 3.3 对象和数组
```javascript
// 对象属性换行
const userConfig = {
name: 'admin',
role: 'administrator',
permissions: ['read', 'write', 'delete'],
settings: {
theme: 'dark',
language: 'zh-CN'
}
};
// 数组解构
const [first, second, ...rest] = items;
// 对象解构
const { name, age, ...otherProps } = user;
```
### 3.4 错误处理
```javascript
// 统一错误处理
const handleApiError = (error) => {
if (error.response) {
// 服务器响应错误
logger.error('API响应错误', {
status: error.response.status,
data: error.response.data
});
} else if (error.request) {
// 请求发送失败
logger.error('请求发送失败', error.request);
} else {
// 其他错误
logger.error('未知错误', error.message);
}
throw error;
};
```
## 4. Vue.js 规范
### 4.1 组件命名
```javascript
// 组件名使用 PascalCase
export default {
name: 'UserProfile',
// ...
}
// 文件名: UserProfile.vue
```
### 4.2 组件结构
```vue
```
### 4.3 Props 定义
```javascript
props: {
// 基础类型检查
title: String,
count: Number,
isActive: Boolean,
// 复杂类型检查
user: {
type: Object,
required: true,
validator: (value) => {
return value && typeof value.id === 'string'
}
},
// 带默认值
size: {
type: String,
default: 'medium',
validator: (value) => {
return ['small', 'medium', 'large'].includes(value)
}
}
}
```
### 4.4 事件命名
```javascript
// 使用 kebab-case
this.$emit('user-updated', userData)
this.$emit('form-submitted', formData)
// 在模板中
```
## 5. CSS/SCSS 规范
### 5.1 类名命名
```css
/* 使用 BEM 命名法 */
.user-profile {
/* 块 */
}
.user-profile__header {
/* 元素 */
}
.user-profile__header--large {
/* 修饰符 */
}
.user-profile__avatar {
/* 元素 */
}
.user-profile__avatar--round {
/* 修饰符 */
}
```
### 5.2 样式组织
```scss
// 变量定义
$primary-color: #1890ff;
$success-color: #52c41a;
$warning-color: #faad14;
$error-color: #f5222d;
// 混入定义
@mixin flex-center {
display: flex;
justify-content: center;
align-items: center;
}
// 组件样式
.user-profile {
padding: 16px;
border-radius: 4px;
background-color: #fff;
&__header {
@include flex-center;
margin-bottom: 16px;
font-size: 18px;
font-weight: 600;
}
&__content {
line-height: 1.6;
}
}
```
## 6. API 接口规范
### 6.1 接口命名
```javascript
// RESTful API 命名
GET /api/users // 获取用户列表
GET /api/users/:id // 获取单个用户
POST /api/users // 创建用户
PUT /api/users/:id // 更新用户
DELETE /api/users/:id // 删除用户
// 复杂操作使用动词
POST /api/users/:id/reset-password // 重置密码
POST /api/users/:id/change-status // 更改状态
```
### 6.2 请求响应格式
```javascript
// 统一响应格式
{
"code": 200,
"message": "操作成功",
"data": {
// 具体数据
},
"timestamp": "2024-01-20T10:30:00Z"
}
// 分页响应格式
{
"code": 200,
"message": "获取成功",
"data": {
"list": [...],
"pagination": {
"current": 1,
"pageSize": 10,
"total": 100,
"totalPages": 10
}
}
}
// 错误响应格式
{
"code": 400,
"message": "参数错误",
"error": {
"field": "email",
"reason": "邮箱格式不正确"
},
"timestamp": "2024-01-20T10:30:00Z"
}
```
## 7. 数据库规范
### 7.1 表命名
```sql
-- 表名使用复数形式,下划线分隔
users
farm_devices
alert_records
user_roles
-- 关联表使用两个表名组合
user_farm_bindings
device_alert_configs
```
### 7.2 字段命名
```sql
-- 字段名使用下划线分隔
CREATE TABLE users (
id VARCHAR(36) PRIMARY KEY,
user_name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
phone_number VARCHAR(20),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
is_active BOOLEAN DEFAULT TRUE
);
```
## 8. Git 提交规范
### 8.1 提交信息格式
```
():