# 代码风格和约定规范
## Java后端代码规范
### 命名约定
- **类名**: 使用PascalCase,如 `PmRepairOrderController`
- **方法名**: 使用camelCase,如 `updateRepairOrder`
- **常量**: 使用UPPER_SNAKE_CASE,如 `DEFAULT_PAGE_SIZE`
- **包名**: 使用小写,如 `org.dromara.zhxy.hq.service`
### 项目结构模式
```
org.dromara.zhxy.hq/
├── controller/ # 控制器层
├── service/ # 服务层
│ └── impl/ # 服务实现
├── mapper/ # 数据访问层
├── domain/ # 实体类
│ ├── vo/ # 视图对象
│ └── bo/ # 业务对象
└── config/ # 配置类
```
### 注解使用
- **Controller**: `@RestController`, `@RequestMapping`
- **Service**: `@Service`, `@Transactional`
- **Mapper**: `@Mapper`
- **权限校验**: `@RequiresPermissions("hq:repair:list")`
- **日志记录**: `@Log(title = "报修管理", businessType = BusinessType.UPDATE)`
### 数据库设计规范
- **主键**: 使用雪花ID `@TableId(type = IdType.ASSIGN_ID)`
- **基础字段**: 继承 `BaseEntity` (id, create_time, create_by, update_time, update_by, tenant_id)
- **命名**: 使用下划线命名法,如 `repair_order`, `user_name`
- **多租户**: 所有业务表包含 `tenant_id` 字段
## Vue前端代码规范
### 命名约定
- **组件名**: 使用PascalCase,如 `RepairOrderList.vue`
- **文件名**: 使用kebab-case,如 `repair-order-list.vue`
- **变量名**: 使用camelCase,如 `repairOrderList`
- **常量**: 使用UPPER_SNAKE_CASE,如 `API_BASE_URL`
### 组件结构
```vue
```
### TypeScript类型定义
- **接口命名**: 使用PascalCase + Interface后缀,如 `RepairOrderInterface`
- **类型导出**: 统一在 `types/` 目录管理
- **API响应**: 使用泛型 `R`
### API调用规范
```typescript
// API定义
export const getRepairOrderList = (params: RepairOrderQuery) => {
return request({
url: '/hq/repair/list',
method: 'get',
params
})
}
// 组件中使用
const { data, loading, refresh } = useRequest(getRepairOrderList)
```
## 通用开发规范
### 注释规范
```java
/**
* 获取报修订单列表
*
* @param bo 查询条件
* @return 报修订单列表
* @author wuzilong
* @date 2025-07-01
*/
public List queryPageList(PmRepairOrderBo bo)
```
### 错误处理
- **后端**: 使用统一异常处理 `@ControllerAdvice`
- **前端**: 使用统一的错误提示组件
- **日志记录**: 使用 `@Log` 注解记录关键操作
### 权限控制
- **接口级**: `@RequiresPermissions("hq:repair:add")`
- **按钮级**: `v-hasPermi="['hq:repair:edit']"`
- **数据级**: 使用 `@DataPermission` 注解
### 多租户规范
- **数据隔离**: 自动注入 `tenant_id` 条件
- **缓存隔离**: 使用租户前缀
- **权限隔离**: 基于租户的权限控制
### 国际化支持
- **前端**: 使用 `$t('message.key')`
- **后端**: 使用 `MessageUtils.message("key")`
- **配置文件**: 统一在 `i18n/` 目录管理
### 测试规范
- **单元测试**: 使用JUnit 5 + Mockito
- **接口测试**: 使用 `@Test` 注解
- **覆盖率**: 要求 >80%
### 文档规范
- **API文档**: 使用Swagger/OpenAPI注解自动生成
- **代码文档**: 重要方法必须有JavaDoc
- **变更记录**: 每次变更必须更新变更日志