# 开发规范
**本文引用的文件**
- [fms-vue/.oxlintrc.json](file://fms-vue/.oxlintrc.json)
- [fms-vue/.oxfmtrc.json](file://fms-vue/.oxfmtrc.json)
- [fms-vue/package.json](file://fms-vue/package.json)
- [fms-vue/src/main.js](file://fms-vue/src/main.js)
- [fms-vue/src/App.vue](file://fms-vue/src/App.vue)
- [fms-api/pom.xml](file://fms-api/pom.xml)
- [fms-api/src/main/resources/application.yaml](file://fms-api/src/main/resources/application.yaml)
- [fms-api/src/main/java/cn/g3soft/fmsapi/FmsApiApplication.java](file://fms-api/src/main/java/cn/g3soft/fmsapi/FmsApiApplication.java)
- [fms-api/src/main/java/cn/g3soft/fmsapi/controller/AuthController.java](file://fms-api/src/main/java/cn/g3soft/fmsapi/controller/AuthController.java)
- [fms-api/src/main/java/cn/g3soft/fmsapi/controller/DataController.java](file://fms-api/src/main/java/cn/g3soft/fmsapi/controller/DataController.java)
- [fms-api/src/main/java/cn/g3soft/fmsapi/controller/FileController.java](file://fms-api/src/main/java/cn/g3soft/fmsapi/controller/FileController.java)
- [fms-api/src/main/java/cn/g3soft/fmsapi/service/AuthService.java](file://fms-api/src/main/java/cn/g3soft/fmsapi/service/AuthService.java)
- [fms-api/src/main/java/cn/g3soft/fmsapi/service/DataSaveService.java](file://fms-api/src/main/java/cn/g3soft/fmsapi/service/DataSaveService.java)
- [fms-api/src/main/java/cn/g3soft/fmsapi/exception/GlobalExceptionHandler.java](file://fms-api/src/main/java/cn/g3soft/fmsapi/exception/GlobalExceptionHandler.java)
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖分析](#依赖分析)
7. [性能考虑](#性能考虑)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
10. [附录](#附录)
## 简介
本规范面向FMS项目的开发与维护,统一前后端代码风格、模块组织与质量保障流程。内容覆盖:
- JavaScript/Vue 代码风格与命名约定、文件组织、注释标准
- Vue 组件开发最佳实践(结构设计、Props、事件、样式)
- 后端 Java 分层规范(Controller/Service/Repository)、异常处理、日志记录
- 代码质量工具配置与使用(Oxlint、OxFmt)
- 模块划分原则与目录结构规范
## 项目结构
仓库采用多模块组织:
- fms-vue:前端工程,基于 Vue 3 + Vite + Pinia,使用 Oxlint/OxFmt 进行代码检查与格式化
- fms-api:后端工程,基于 Spring Boot 4.x,提供认证、数据、文件等 API
- 其他辅助目录用于演示、测试与迁移脚本
```mermaid
graph TB
subgraph "前端 fms-vue"
A["src/main.js"]
B["src/App.vue"]
C[".oxlintrc.json"]
D[".oxfmtrc.json"]
E["package.json"]
end
subgraph "后端 fms-api"
F["application.yaml"]
G["pom.xml"]
H["FmsApiApplication.java"]
I["controller/*"]
J["service/*"]
K["exception/*"]
end
A --> B
C --> A
D --> A
E --> A
H --> I
I --> J
I --> K
F --> H
G --> H
```
**图表来源**
- [fms-vue/src/main.js:1-78](file://fms-vue/src/main.js#L1-L78)
- [fms-vue/src/App.vue:1-15](file://fms-vue/src/App.vue#L1-L15)
- [fms-vue/.oxlintrc.json:1-21](file://fms-vue/.oxlintrc.json#L1-L21)
- [fms-vue/.oxfmtrc.json:1-8](file://fms-vue/.oxfmtrc.json#L1-L8)
- [fms-vue/package.json:1-48](file://fms-vue/package.json#L1-L48)
- [fms-api/src/main/resources/application.yaml:1-34](file://fms-api/src/main/resources/application.yaml#L1-L34)
- [fms-api/pom.xml:1-108](file://fms-api/pom.xml#L1-L108)
- [fms-api/src/main/java/cn/g3soft/fmsapi/FmsApiApplication.java:1-22](file://fms-api/src/main/java/cn/g3soft/fmsapi/FmsApiApplication.java#L1-L22)
**章节来源**
- [fms-vue/package.json:6-19](file://fms-vue/package.json#L6-L19)
- [fms-api/pom.xml:5-31](file://fms-api/pom.xml#L5-L31)
## 核心组件
- 前端应用入口与启动流程:main.js 负责创建应用、注册插件、路由就绪后挂载;App.vue 作为根组件仅渲染当前路由
- 后端应用入口:FmsApiApplication 初始化雪花ID生成器并启动Spring容器
- 配置中心:application.yaml 定义服务端口、上下文路径、JWT、数据库连接池、文件存储策略等
**章节来源**
- [fms-vue/src/main.js:14-22](file://fms-vue/src/main.js#L14-L22)
- [fms-vue/src/main.js:41-77](file://fms-vue/src/main.js#L41-L77)
- [fms-vue/src/App.vue:1-15](file://fms-vue/src/App.vue#L1-L15)
- [fms-api/src/main/java/cn/g3soft/fmsapi/FmsApiApplication.java:9-18](file://fms-api/src/main/java/cn/g3soft/fmsapi/FmsApiApplication.java#L9-L18)
- [fms-api/src/main/resources/application.yaml:1-34](file://fms-api/src/main/resources/application.yaml#L1-L34)
## 架构总览
前后端通过HTTP交互,前端通过Pinia管理状态,后端以Spring MVC暴露REST接口,统一异常处理与鉴权。
```mermaid
sequenceDiagram
participant U as "用户浏览器"
participant FE as "Vue应用(main.js)"
participant BE as "Spring Boot(FmsApiApplication)"
participant CTRL as "Controller层"
participant SVC as "Service层"
participant DB as "数据库"
U->>FE : 访问页面
FE->>FE : 路由就绪、主题同步
FE-->>U : 挂载根组件(App.vue)
U->>BE : HTTP请求(/api/...)
BE->>CTRL : 分发到对应控制器
CTRL->>SVC : 调用业务服务
SVC->>DB : 读写数据
DB-->>SVC : 结果
SVC-->>CTRL : 返回业务对象
CTRL-->>U : JSON响应或错误
```
**图表来源**
- [fms-vue/src/main.js:41-77](file://fms-vue/src/main.js#L41-L77)
- [fms-vue/src/App.vue:11-14](file://fms-vue/src/App.vue#L11-L14)
- [fms-api/src/main/java/cn/g3soft/fmsapi/FmsApiApplication.java:9-18](file://fms-api/src/main/java/cn/g3soft/fmsapi/FmsApiApplication.java#L9-L18)
- [fms-api/src/main/resources/application.yaml:1-5](file://fms-api/src/main/resources/application.yaml#L1-L5)
## 详细组件分析
### 前端代码风格与质量工具
- 代码检查:使用 Oxlint,启用 vue、unicorn、oxc 插件;correctness 为 error,suspicious 为 warn;浏览器环境默认开启;vite.config.js 单独启用 node 环境
- 代码格式化:使用 OxFmt,行宽100,不加分号,单引号,尾随逗号全量
- 脚本命令:lint、lint:fix、fmt、fmt:check、build、test 等
```mermaid
flowchart TD
Start(["开发者提交代码"]) --> Lint["运行 oxlint
校验规则"]
Lint --> |通过| Fmt["运行 oxfmt --check
格式检查"]
Lint --> |失败| Fix["运行 oxlint --fix
自动修复"]
Fix --> Fmt
Fmt --> |通过| Build["构建与测试"]
Fmt --> |失败| ReFmt["运行 oxfmt --write
自动格式化"]
ReFmt --> Build
```
**图表来源**
- [fms-vue/.oxlintrc.json:1-21](file://fms-vue/.oxlintrc.json#L1-L21)
- [fms-vue/.oxfmtrc.json:1-8](file://fms-vue/.oxfmtrc.json#L1-L8)
- [fms-vue/package.json:6-19](file://fms-vue/package.json#L6-L19)
**章节来源**
- [fms-vue/.oxlintrc.json:1-21](file://fms-vue/.oxlintrc.json#L1-L21)
- [fms-vue/.oxfmtrc.json:1-8](file://fms-vue/.oxfmtrc.json#L1-L8)
- [fms-vue/package.json:6-19](file://fms-vue/package.json#L6-L19)
### Vue 组件开发规范
- 组件结构:推荐单文件组件 .vue,模板、脚本、样式分离;根组件 App.vue 仅负责路由渲染与可选的性能监控浮层
- Props 定义:在