# 代码风格和约定规范 ## 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 - **变更记录**: 每次变更必须更新变更日志