# 风险因子权重 — 前端技术方案

> 依据：`doc/疾病检测与上报/风险因子设置/风险因子设置功能需求.md`、`风险因子设置技术方案.md`；页面为**单例配置**（非列表 CRUD）；请求/响应字段 **小驼峰**。

---

## 1. 页面与路由

| 项 | 说明 |
| --- | --- |
| **Vue 路径** | `ruoyi-ui/src/views/diseaseDetection/riskFactorWeight/index.vue` |
| **组件名** | `RiskFactorWeight` |
| **菜单配置** | 组件路径：`diseaseDetection/riskFactorWeight/index` |
| **权限标识** | `diseaseDetection:riskFactorWeight:query`（进入/查询）、`diseaseDetection:riskFactorWeight:edit`（保存） |

菜单 SQL：`sql/sys_menu_industry_and_disease.sql`（menu_id `2113`～`21132`）或 `sql/biz_risk_factor_weight.sql`。

---

## 2. API 模块

| 项 | 说明 |
| --- | --- |
| **文件** | `ruoyi-ui/src/api/diseaseDetection/riskFactorWeight.js` |
| **Base** | `/diseaseDetection/riskFactorWeight` |

| 方法 | HTTP | 路径 | 说明 |
| --- | --- | --- | --- |
| `getRiskFactorWeight` | GET | `/` | 获取当前五项权重及 `updateBy`、`updateTime` |
| `updateRiskFactorWeight` | PUT | `/` | 保存；Body 含五项权重字段 |

**Body 字段**：`breedingDensityWeight`、`trafficMobilityWeight`、`quarantineIntensityWeight`、`meteorologicalSuitabilityWeight`、`pastDiseaseLevelWeight`。

---

## 3. 页面结构

单张 `el-card`（无筛选区、无表格）：

1. 五项固定因子，每项 `el-input-number`（`min=0`，`precision=4`，`step=0.01`），右侧提示「正数」。  
2. **当前合计**实时汇总，提示「权重之和 = 1」；合计与 1 偏差超过 `0.0001` 时标红并禁用保存。  
3. 展示最后修改人、修改时间（有数据时）。  
4. **保存**按钮：`v-hasPermi` 绑定 `edit`；提交前表单校验每项为正数。

**不提供**：分页列表、新增、删除、导出。

---

## 4. 校验规则

| 规则 | 前端 | 后端（联调） |
| --- | --- | --- |
| 每项必填且 > 0 | `el-form` 规则 + `validatePositiveWeight` | 同左 |
| 五项之和 = 1 | 容差 `0.0001`，不合规禁用保存并 `msgError` | 同左 |

无记录时 GET 返回 `data: null`，前端默认每项 `0.2`。

---

## 5. 国际化

| 项 | 说明 |
| --- | --- |
| **语言包** | `diseaseDetection.riskFactorWeight`（`lang/zh`、`lang/bo` 的 `diseaseDetection.js`） |
| **Mixin** | `diseaseDetectionLocaleMixin`，`data.ddNs = 'riskFactorWeight'` |

---

## 6. 联调说明

1. 执行 `sql/biz_risk_factor_weight.sql` 建表及初始数据。  
2. 后端实现 `BizRiskFactorWeightController`（GET/PUT，见风险因子设置技术方案 §3）。  
3. 配置菜单 `2113` 并为角色勾选 `query`、`edit`。  
4. 验证：修改五项使合计≠1 时无法保存；保存后刷新合计为 1；`updateTime` 更新。

---

## 7. 文件清单

| 类型 | 路径 |
| --- | --- |
| 页面 | `ruoyi-ui/src/views/diseaseDetection/riskFactorWeight/index.vue` |
| API | `ruoyi-ui/src/api/diseaseDetection/riskFactorWeight.js` |
| i18n | `ruoyi-ui/src/lang/zh/diseaseDetection.js`、`lang/bo/diseaseDetection.js` |
| 菜单 | `sql/sys_menu_industry_and_disease.sql`、`sql/biz_risk_factor_weight.sql` |
