依据:同目录功能需求、技术方案;交互对齐畜牧产品产量等村×年月填报;字段 小驼峰。
| 项 | 说明 |
| --- | --- |
| Vue 路径 | ruoyi-ui/src/views/dataModel/vaccinationData/index.vue |
| 组件名 | VaccinationData |
| 菜单配置 | 组件路径:dataModel/vaccinationData/index |
| 权限前缀 | dataModel:vaccinationData:list\|query\|add\|edit\|remove\|import\|export |
| 项 | 说明 |
| --- | --- |
| 文件 | 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 | 参数:statYear、statMonth、可选 townDeptId |
筛选:年、月、乡镇、村(村为可搜索下拉,选项来自村树扁平化)。
列表:年、月、乡镇、村、应免数、实免数、免疫率(xx.xx%)、操作。
新增/编辑:选村(可搜索,标签「乡镇 / 村」);新增默认本年本月;免疫率只读预览。
详情:与表单同分区;含乡镇与免疫率;数量用 formatWithUnit 带「头」。
导入:选年月 → upsert 摘要(insert/update/fail);免疫率列由后端跳过;软警告弹窗展示。
导出:选年月;所属乡镇与列表共用选项,打开时带入列表当前乡镇,清空=全部。
| 分区 | 内容 |
| --- | --- |
| 基本信息 | 年月、村(查看含乡镇) |
| 疫苗接种情况 | 应免数、实免数;只读免疫率;备注 |
| 规则 | 实现 |
| --- | --- |
| 唯一键 | 年 + 月 + 村(前端提交只传 villageDeptId;乡镇由后端反推) |
| 必填 | 年、月、村 |
| 数量 | 应免数、实免数:可选;非负整数;单位「头」;实免数 ≤ 应免数(前端) |
| 免疫率预览 | 应免数 > 0 且实免数非空时:(实免/应免)×100,保留 2 位小数,展示为 98.33%;否则「—」 |
| 实免 > 应免 | 新增/编辑表单拦截;导入仍由后端软警告(不阻断) |
| 不可未来月 | 表单 / 导入 / 导出校验 |
VaccinationDataDerivedSupport 对齐)
immunityRate = round((actualVaccinateCount * 10000) / shouldVaccinateCount) / 100
前端仅作表单预览;落库与列表/详情以接口返回的 immunityRate 为准。
dataModel.vaccinationData(lang/zh|bo/dataModel.js);页面 dmNs = 'vaccinationData',复用 dataModelLocaleMixin(dmT / dmCommon / formatWithUnit)。查看表单使用 dm-view-form 高亮。
执行 sql/biz_vaccination_data.sql。
菜单组件 dataModel/vaccinationData/index,权限见 §1。
验证:新增默认年月、免疫率只读预览与保存后一致、列表筛选村、导出乡镇带入列表筛选、实免>应免拦截、导入 upsert。
| 类型 | 路径 |
| --- | --- |
| 页面 | ruoyi-ui/src/views/dataModel/vaccinationData/index.vue |
| API | ruoyi-ui/src/api/dataModel/vaccinationData.js |
| i18n | lang/zh/dataModel.js、lang/bo/dataModel.js → vaccinationData |
| 前端技术方案 | 本文档 |
| 版本 | 说明 |
| --- | --- |
| 1.0 | 初版:村×年月;CRUD + upsert 导入 + 导出乡镇与列表联动;免疫率前端预览 | | 1.1 | 实免数须 ≤ 应免数(仅前端表单校验) |