# 合作社发展数据填报 — 前端技术方案

> 依据：同目录 `合作社发展数据填报功能需求.md`、`合作社发展数据填报技术方案.md`；交互对齐存栏/出栏填报（双 `el-card` + 分页表格）；字段 **小驼峰**。

---

## 1. 页面与路由

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

---

## 2. API 模块

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

| 方法 | HTTP | 说明 |
| --- | --- | --- |
| `listCooperativeDevelopment` | GET | `/list` 分页列表 |
| `getCooperativeDevelopment` | GET | `/{id}` 详情 |
| `addCooperativeDevelopment` | POST | `/` 新增 |
| `updateCooperativeDevelopment` | PUT | `/` 修改 |
| `delCooperativeDevelopment` | DELETE | `/{ids}` 删除（支持批量，`ids` 逗号分隔） |
| `listCooperativeDevelopmentYearOptions` | GET | `/yearOptions` |
| `listCooperativeDevelopmentMonthOptions` | GET | `/monthOptions` |
| `listCooperativeDevelopmentTownOptions` | GET | `/townOptions` |
| `listCooperativeDevelopmentVillageTree` | GET | `/villageTree` 县→乡镇→村 |
| `importCooperativeDevelopment` | POST | `/importData`（`file` + `statYear` + `statMonth`） |
| `exportCooperativeDevelopment` | GET | `/export`（`statYear` + `statMonth`，可选 `townDeptId`，`blob`） |
| `downloadCooperativeDevelopmentTemplate` | GET | `/importTemplate`（`blob`） |

模板下载与导出均用 **GET + `blob`**，勿用若依全局 `this.download()`（固定 POST）。

---

## 3. 页面结构

1. **筛选区**：所属年份、所属月份、所属乡镇、所属村（可搜索）、合作社名称；搜索、重置、新增、导入、导出、批量删除。  
2. **列表区**（列顺序）：多选、所属年份、所属月份、所属村、所属乡镇、合作社名称、法定代表人、成立时间、注册资本、截止年底总资产、总收入、亏损、牛存栏、牛出栏、操作；空值展示 `—`。  
3. **操作列**：查看、修改、删除。  
4. **新增/编辑弹窗**：年份、月份、所属村、合作社名称（必填）；分区录入见 §4；**牲畜入股小计**只读（牛入股+羊入股）；新增默认当前年月。  
5. **查看弹窗**：全部明细只读（含乡镇反推结果、牲畜入股小计、经营范围/模式/运营情况）。  
6. **导入弹窗**：选填报年月（默认当前）→ 上传 `.xlsx` → `$alert` 展示 insert/update/fail/warn。  
7. **导出弹窗**：选所属年月（默认当前）、可选所属乡镇（可清空；不选则全部）→ 下载 `{年}年{月}月合作社发展数据.xlsx`。

---

## 4. 业务规则（前端）

| 规则 | 实现 |
| --- | --- |
| 年份 / 月份 | `/yearOptions`、`/monthOptions`；展示 `{month}月`；不可选未来月 |
| 村选项 | `/villageTree` 拍平为「乡镇 / 村」下拉；`el-select` + `filterable` 支持搜索 |
| 列表筛选 | `statYear`、`statMonth`、`townDeptId`、`villageDeptId`、`cooperativeName`；进入页不默认年月 |
| 提交体 | 传 `villageDeptId`、合作社名称及明细；**不传**乡镇（后端反推） |
| 唯一性 | 同年同月同村同合作社名称重复由后端拦截 |
| 牲畜入股小计 | 前端只读展示 `cattleShareCount + sheepShareCount`；保存时以后端重算为准 |
| 经营范围 | `el-checkbox-group` → 提交逗号分隔字符串（与后端枚举一致） |
| 经营模式 / 运营情况 | `el-radio-group` 单选，取值与后端标签一致 |
| 导入 | `FormData` 含年月；按唯一键 upsert，摘要含新增/更新条数 |
| 导出 | 可选 `townDeptId`；导出文件不含合计行（后端保证） |
| 删除 | `$modal.confirm` 后物理删除；列表多选后批量删除（`ids.join(',')`） |

### 4.1 表单分区与字段

| 分区 | 字段（小驼峰） |
| --- | --- |
| 基本信息 | `statYear`、`statMonth`、`villageDeptId`、`cooperativeName`、`legalRepresentative`、`establishDate`（`el-date-picker`，`yyyy-MM-dd`）、`registeredCapital`、`yearEndTotalAssets` |
| 入社与入股 | `memberHouseholdCount`、`memberPopulationCount`、`povertyMonitorCount`、`cattleShareCount`、`sheepShareCount`、**`livestockShareTotal`（只读）**、`grasslandShareArea`、`laborShareCount`、`cashShareAmount`、`otherShareAmount` |
| 效益情况 | `totalIncome`、`netIncome`、`cashDividend`、`inKindDividend`、`revolvingFund`、`lossAmount` |
| 就业与存出栏 | `collegeGraduateCount`、`collegeGraduateWage`、`farmerTransferEmploymentCount`、`farmerTransferWage`、`cattleInventoryCount`、`cattleOutboundCount`、`sheepInventoryCount`、`sheepOutboundCount` |
| 产品认证与培训 | `trademarkProductCount`、`qualityCertProductCount`、`trainingManageCount`、`trainingSkillCount`、`trainingOtherCount` |
| 经营情况 | `businessScope`（多选）、`businessModel`（单选）、`operationStatus`（单选）、`remark` |

### 4.2 枚举取值（与 Excel / 后端一致）

| 类型 | 取值 |
| --- | --- |
| 主要经营范围 | 养殖业、种养结合、农产品加工、农机服务、劳务输出、建筑工程、旅游服务、运输、特色产品制作及销售、其他 |
| 经营模式分类 | 整村合作社、股份合作社、联合合作社、多种经营合作社、公司型合作社、其它 |
| 运营情况 | 规范、一般、差 |

---

## 5. 国际化

| 项 | 说明 |
| --- | --- |
| **语言包** | `dataModel.cooperativeDevelopment`、`dataModel.common` |
| **文件** | `lang/zh/dataModel.js`、`lang/bo/dataModel.js` |
| **Mixin** | `dataModelLocaleMixin`，`dmNs = 'cooperativeDevelopment'` |

文案键覆盖筛选/列表/表单分区/导入导出/校验提示；单位含户、人、头、个、万元、万亩。

---

## 6. 联调说明

1. 部署后端并执行 `sql/biz_cooperative_development.sql`。  
2. 菜单组件配置为 `dataModel/cooperativeDevelopment/index`，权限见 §1。  
3. 验证：村下拉可搜索；新增只选村且乡镇回填；同年同月同村同名拦截；导入 upsert 摘要；导出可选乡镇且无合计行；详情含全部明细；汉藏切换。

---

## 7. 文件清单

| 类型 | 路径 |
| --- | --- |
| 页面 | `ruoyi-ui/src/views/dataModel/cooperativeDevelopment/index.vue` |
| API | `ruoyi-ui/src/api/dataModel/cooperativeDevelopment.js` |
| Mixin | `ruoyi-ui/src/mixins/dataModelLocaleMixin.js` |
| i18n | `ruoyi-ui/src/lang/zh/dataModel.js`、`lang/bo/dataModel.js` |

---

## 8. 修订记录

| 版本 | 说明 |
| --- | --- |
| 1.0 | 初版：村×合作社×年月；列表/CRUD/详情/导入 upsert/导出可选乡镇；经营范围多选与模式/运营单选；汉藏 i18n |
| 1.1 | 与实现对齐：村选项为拍平可搜索 `el-select`（非 Treeselect）；牲畜入股小计表单只读展示 |
