# 农牧户数据填报 — 前端技术方案 > 依据:同目录功能需求、技术方案;交互对齐畜牧产品产量等村×年月填报;字段 **小驼峰**。 --- ## 1. 页面与路由 | 项 | 说明 | | --- | --- | | **Vue 路径** | `ruoyi-ui/src/views/dataModel/farmerHousehold/index.vue` | | **组件名** | `FarmerHousehold` | | **菜单配置** | 组件路径:`dataModel/farmerHousehold/index` | | **权限前缀** | `dataModel:farmerHousehold:list\|query\|add\|edit\|remove\|import\|export` | --- ## 2. API 模块 | 项 | 说明 | | --- | --- | | **文件** | `ruoyi-ui/src/api/dataModel/farmerHousehold.js` | | **Base** | `/dataModel/farmerHousehold` | CRUD、`yearOptions` / `monthOptions` / `townOptions` / `villageTree`、导入 `importData`、模板 `importTemplate`、导出 `export`(可选 `townDeptId`)与同类村级填报模块同构;模板/导出均为 **GET + blob**。 | 方法 | 路径 | 说明 | | --- | --- | --- | | `listFarmerHousehold` | GET `/list` | 分页;筛选年、月、乡镇 | | `getFarmerHousehold` | GET `/{id}` | 详情(含派生) | | `addFarmerHousehold` | POST `/` | 新增 | | `updateFarmerHousehold` | PUT `/` | 修改 | | `delFarmerHousehold` | DELETE `/{ids}` | 删除 | | `listFarmerHouseholdYearOptions` | GET `/yearOptions` | 年份下拉 | | `listFarmerHouseholdMonthOptions` | GET `/monthOptions` | 月份下拉 | | `listFarmerHouseholdTownOptions` | GET `/townOptions` | 乡镇下拉 | | `listFarmerHouseholdVillageTree` | GET `/villageTree` | 县→乡镇→村树 | | `importFarmerHousehold` | POST `/importData` | FormData:`file` + `statYear` + `statMonth` | | `downloadFarmerHouseholdTemplate` | GET `/importTemplate` | 模板 blob | | `exportFarmerHousehold` | GET `/export` | 参数:`statYear`、`statMonth`、可选 `townDeptId` | --- ## 3. 页面结构 1. **筛选**:年、月、乡镇(与需求一致,无村筛选)。 2. **列表**:年、月、乡镇、村、农牧户数、农牧人数、草场承包总面积(`pastureContractArea`)、操作。 3. **新增/编辑**:选村(可搜索,标签「乡镇 / 村」);新增默认本年本月;派生字段只读展示。 4. **详情**:与表单同分区标题;含派生只读值 + 乡镇;数值用 `formatWithUnit` 带单位。 5. **导入**:选年月 → upsert 摘要(insert/update/fail);任一行失败整批不写(后端)。 6. **导出**:选年月;所属乡镇与列表共用选项,打开时带入列表当前乡镇,清空=全部。 ### 表单 / 查看分区 | 分区 | 内容 | | --- | --- | | 基本信息 | 年月、村(查看含乡镇);农牧户数、农牧人数 | | 草畜平衡情况 | 禁牧面积、草畜平衡面积;只读草场承包总面积(=禁牧+草畜平衡);核定载畜量、年底存栏绵羊单位 | | 封顶保底情况 | 纯牧户 / 无畜户 / 绝户 / 超载 / 需封顶 / 需保底(是/否) | | 本年受助情况 | 禁牧补助、草畜平衡奖励;只读补助奖励总资金(=二者之和);封顶保底后补助、村级监督员补助;只读补助合计金额(=封顶保底后+村级监督员);备注 | --- ## 4. 业务规则 | 规则 | 实现 | | --- | --- | | 唯一键 | 年 + 月 + 村(前端提交只传 `villageDeptId`;乡镇由后端反推) | | 必填 | 年、月、村 | | 前端只读派生 | 草场承包总面积、补助奖励总资金、补助合计金额(表单禁用预览;详情同公式) | | 是/否 | 六项封顶保底字段单选「是」「否」 | | 不可未来月 | 表单 / 导入 / 导出校验 | | 草畜失衡预警 | 后端写入 `biz_yak_disease_warning`(type=6);前端不单独处理 | ### 派生预览公式 - 草场承包总面积 = 禁牧面积 + 草畜平衡面积 - 补助奖励总资金 = 禁牧补助 + 草畜平衡奖励 - 补助合计金额(前端展示)= 封顶保底后享受补助奖励总资金 + 村级草原监督员补助 > 说明:后端落库的 `subsidyTotal` 另含「补助奖励总资金」三项合计;前端「补助合计金额」按本次产品口径仅展示后两项之和。 --- ## 5. 国际化 `dataModel.farmerHousehold`(`lang/zh|bo/dataModel.js`);页面 `dmNs = 'farmerHousehold'`,复用 `dataModelLocaleMixin`(`dmT` / `dmCommon` / `formatWithUnit`)。查看表单使用 `dm-view-form` 高亮。 --- ## 6. 联调说明 1. 执行 `sql/biz_farmer_household.sql`。 2. 菜单组件 `dataModel/farmerHousehold/index`,权限见 §1。 3. 验证:新增默认年月、表单无派生列、详情有派生、导出乡镇带入列表筛选、草畜失衡写入疾病预警(后端)。 --- ## 7. 文件清单 | 类型 | 路径 | | --- | --- | | 页面 | `ruoyi-ui/src/views/dataModel/farmerHousehold/index.vue` | | API | `ruoyi-ui/src/api/dataModel/farmerHousehold.js` | | i18n | `lang/zh/dataModel.js`、`lang/bo/dataModel.js` → `farmerHousehold` | | 前端技术方案 | 本文档 | --- ## 8. 修订记录 | 版本 | 说明 | | --- | --- | | 1.0 | 初版:村×年月;CRUD + upsert 导入 + 导出乡镇与列表联动;表单不展示派生、详情展示;分区对齐其它产业填报页 |