# 养殖大户数据填报 — 前端技术方案

> 依据：同目录功能需求、技术方案；交互对齐家庭牧场村级填报；字段 **小驼峰**。

---

## 1. 页面与路由

| 项 | 说明 |
| --- | --- |
| **Vue 路径** | `ruoyi-ui/src/views/dataModel/largeLivestockFarmer/index.vue` |
| **组件名** | `LargeLivestockFarmer` |
| **菜单配置** | 组件路径：`dataModel/largeLivestockFarmer/index` |
| **权限前缀** | `dataModel:largeLivestockFarmer:list\|query\|add\|edit\|remove\|import\|export` |

---

## 2. API 模块

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

CRUD、`yearOptions` / `monthOptions` / `townOptions` / `villageTree`、导入 `importData`、模板 `importTemplate`、导出 `export`（可选 `townDeptId`）与家庭牧场模块同构；模板/导出均为 **GET + blob**。

| 方法 | 路径 | 说明 |
| --- | --- | --- |
| `listLargeLivestockFarmer` | GET `/list` | 分页；筛选年、月、乡镇、企业名称 |
| `getLargeLivestockFarmer` | GET `/{id}` | 详情 |
| `addLargeLivestockFarmer` | POST `/` | 新增 |
| `updateLargeLivestockFarmer` | PUT `/` | 修改 |
| `delLargeLivestockFarmer` | DELETE `/{ids}` | 删除 |
| `listLargeLivestockFarmerYearOptions` | GET `/yearOptions` | 年份下拉 |
| `listLargeLivestockFarmerMonthOptions` | GET `/monthOptions` | 月份下拉 |
| `listLargeLivestockFarmerTownOptions` | GET `/townOptions` | 乡镇下拉 |
| `listLargeLivestockFarmerVillageTree` | GET `/villageTree` | 县→乡镇→村树 |
| `importLargeLivestockFarmer` | POST `/importData` | FormData：`file` + `statYear` + `statMonth` |
| `downloadLargeLivestockFarmerTemplate` | GET `/importTemplate` | 模板 blob |
| `exportLargeLivestockFarmer` | GET `/export` | 参数：`statYear`、`statMonth`、可选 `townDeptId` |

---

## 3. 页面结构

1. **筛选**：年、月、乡镇、企业名称（无村筛选，与需求一致）。  
2. **列表**：年、月、乡镇、村、企业、法人、类型、注册资本、成立时间、牛存栏、牛出栏、草场面积（`grasslandAreaSubtotal`）、操作。  
3. **新增/编辑**：选村（可搜索，标签「乡镇 / 村」）；企业类型默认「个体工商户」、销售渠道默认「其他」；成立时间 `el-date-picker`（`yyyy-MM-dd`）；补助资金年份 `type="year"`（`yyyy`）；派生字段只读展示。  
4. **详情**：全部字段含派生 + 乡镇只读；数值用 `formatWithUnit` 带单位。  
5. **导入**：选年月 → upsert 摘要（insert/update/fail）。  
6. **导出**：选年月；所属乡镇与列表共用选项与文案，打开时带入列表当前乡镇，清空=全部。

### 表单分区

| 分区 | 内容 |
| --- | --- |
| 基本信息 | 年月、村、企业名称、法人、类型、注册资本、成立时间、劳力人数 |
| 存栏与出栏 | 牛/羊存栏与能繁、牛/羊出栏；只读存栏小计 |
| 草场与草畜平衡 | 草畜平衡面积、流转面积、核定载畜量、存栏绵羊单位；只读草场面积小计、是否草畜平衡户 |
| 经营与补助 | 收入、支出、只读利润；补助年份/是否/金额 |
| 其他 | 商标、质量认证、销售渠道、带动人数、工资、备注 |

---

## 4. 业务规则

| 规则 | 实现 |
| --- | --- |
| 必填 | 年、月、村、企业名称 |
| 提交 | 只传 `villageDeptId` 与录入项；乡镇与派生由后端计算 |
| 前端只读派生 | 存栏小计、草场面积小计、利润、是否草畜平衡户（与后端公式一致，便于预览） |
| 是/否 | `hasSubsidy` / `hasTrademark` / `hasQualityCert` 单选「是」「否」 |
| 枚举 | 企业类型、销售渠道与后端 `LargeLivestockFarmerValidation` 一致 |
| 不可未来月 | 表单 / 导入 / 导出校验 |
| 草畜失衡预警 | 由后端写入 `biz_yak_disease_warning`；前端不单独处理 |

### 枚举取值

- **企业类型**：个体工商户 / 个人独资企业 / 有限责任公司 / 合伙企业 / 其他（默认个体工商户）  
- **销售渠道**：其他 / 线上销售 / 线下集市 / 企事业单位 / 商超门店（默认其他）

### 派生预览公式（与后端一致）

- 存栏小计 = 牛年底存栏 + 羊年底存栏  
- 草场面积小计 = 草畜平衡面积 + 流转经营草地面积  
- 利润 = 收入 − 支出（任一侧为空则不展示）  
- 是否草畜平衡户：核定载畜量 ≥ 年底存栏绵羊单位 →「是」，否则「否」（缺一侧则「—」）

---

## 5. 国际化

`dataModel.largeLivestockFarmer`（`lang/zh|bo/dataModel.js`）；页面 `dmNs = 'largeLivestockFarmer'`，复用 `dataModelLocaleMixin`（`dmT` / `dmCommon` / `formatWithUnit`）。

---

## 6. 联调说明

1. 执行 `sql/biz_large_livestock_farmer.sql`。  
2. 菜单组件 `dataModel/largeLivestockFarmer/index`，权限见 §1。  
3. 验证：默认类型/渠道、派生只读、导出乡镇带入列表筛选、草畜失衡写入疾病预警（后端）。

---

## 7. 文件清单

| 类型 | 路径 |
| --- | --- |
| 页面 | `ruoyi-ui/src/views/dataModel/largeLivestockFarmer/index.vue` |
| API | `ruoyi-ui/src/api/dataModel/largeLivestockFarmer.js` |
| i18n | `lang/zh/dataModel.js`、`lang/bo/dataModel.js` → `largeLivestockFarmer` |
| 前端技术方案 | 本文档 |

---

## 8. 修订记录

| 版本 | 说明 |
| --- | --- |
| 1.0 | 初版：村×年月×企业；CRUD + 导入 upsert + 导出乡镇与列表联动；对齐家庭牧场前端交互 |
| 1.1 | 与需求 1.1 一致：导出所属乡镇打开带入列表筛选、可清空表示全部 |
