西藏巴青项目

疫苗接种数据填报前端技术方案.md 4.7KB

疫苗接种数据填报 — 前端技术方案

依据:同目录功能需求、技术方案;交互对齐畜牧产品产量等村×年月填报;字段 小驼峰


1. 页面与路由

| 项 | 说明 |

| --- | --- |

| Vue 路径 | ruoyi-ui/src/views/dataModel/vaccinationData/index.vue |

| 组件名 | VaccinationData |

| 菜单配置 | 组件路径:dataModel/vaccinationData/index |

| 权限前缀 | dataModel:vaccinationData:list\|query\|add\|edit\|remove\|import\|export |


2. API 模块

| 项 | 说明 |

| --- | --- |

| 文件 | ruoyi-ui/src/api/dataModel/vaccinationData.js |

| Base | /dataModel/vaccinationData |

CRUD、yearOptions / monthOptions / townOptions / villageTree、导入 importData、模板 importTemplate、导出 export(可选 townDeptId)与同类村级填报模块同构;模板/导出均为 GET + blob

| 方法 | 路径 | 说明 |

| --- | --- | --- |

| listVaccinationData | GET /list | 分页;筛选年、月、乡镇、村 |

| getVaccinationData | GET /{id} | 详情(含免疫率) |

| addVaccinationData | POST / | 新增 |

| updateVaccinationData | PUT / | 修改 |

| delVaccinationData | DELETE /{ids} | 删除 |

| listVaccinationDataYearOptions | GET /yearOptions | 年份下拉 |

| listVaccinationDataMonthOptions | GET /monthOptions | 月份下拉 |

| listVaccinationDataTownOptions | GET /townOptions | 乡镇下拉 |

| listVaccinationDataVillageTree | GET /villageTree | 县→乡镇→村树 |

| importVaccinationData | POST /importData | FormData:file + statYear + statMonth |

| downloadVaccinationDataTemplate | GET /importTemplate | 模板 blob |

| exportVaccinationData | GET /export | 参数:statYearstatMonth、可选 townDeptId |


3. 页面结构

  1. 筛选:年、月、乡镇、村(村为可搜索下拉,选项来自村树扁平化)。

  2. 列表:年、月、乡镇、村、应免数、实免数、免疫率(xx.xx%)、操作。

  3. 新增/编辑:选村(可搜索,标签「乡镇 / 村」);新增默认本年本月;免疫率只读预览。

  4. 详情:与表单同分区;含乡镇与免疫率;数量用 formatWithUnit 带「头」。

  5. 导入:选年月 → upsert 摘要(insert/update/fail);免疫率列由后端跳过;软警告弹窗展示。

  6. 导出:选年月;所属乡镇与列表共用选项,打开时带入列表当前乡镇,清空=全部。

表单 / 查看分区

| 分区 | 内容 |

| --- | --- |

| 基本信息 | 年月、村(查看含乡镇) |

| 疫苗接种情况 | 应免数、实免数;只读免疫率;备注 |


4. 业务规则

| 规则 | 实现 |

| --- | --- |

| 唯一键 | 年 + 月 + 村(前端提交只传 villageDeptId;乡镇由后端反推) |

| 必填 | 年、月、村 |

| 数量 | 应免数、实免数:可选;非负整数;单位「头」;实免数 ≤ 应免数(前端) |

| 免疫率预览 | 应免数 > 0 且实免数非空时:(实免/应免)×100,保留 2 位小数,展示为 98.33%;否则「—」 |

| 实免 > 应免 | 新增/编辑表单拦截;导入仍由后端软警告(不阻断) |

| 不可未来月 | 表单 / 导入 / 导出校验 |

免疫率公式(与后端 VaccinationDataDerivedSupport 对齐)


immunityRate = round((actualVaccinateCount * 10000) / shouldVaccinateCount) / 100

前端仅作表单预览;落库与列表/详情以接口返回的 immunityRate 为准。


5. 国际化

dataModel.vaccinationDatalang/zh|bo/dataModel.js);页面 dmNs = 'vaccinationData',复用 dataModelLocaleMixindmT / dmCommon / formatWithUnit)。查看表单使用 dm-view-form 高亮。


6. 联调说明

  1. 执行 sql/biz_vaccination_data.sql

  2. 菜单组件 dataModel/vaccinationData/index,权限见 §1。

  3. 验证:新增默认年月、免疫率只读预览与保存后一致、列表筛选村、导出乡镇带入列表筛选、实免>应免拦截、导入 upsert。


7. 文件清单

| 类型 | 路径 |

| --- | --- |

| 页面 | ruoyi-ui/src/views/dataModel/vaccinationData/index.vue |

| API | ruoyi-ui/src/api/dataModel/vaccinationData.js |

| i18n | lang/zh/dataModel.jslang/bo/dataModel.jsvaccinationData |

| 前端技术方案 | 本文档 |


8. 修订记录

| 版本 | 说明 |

| --- | --- |

| 1.0 | 初版:村×年月;CRUD + upsert 导入 + 导出乡镇与列表联动;免疫率前端预览 | | 1.1 | 实免数须 ≤ 应免数(仅前端表单校验) |