# 畜牧医疗资源管理 — 前端技术方案

> 依据：`畜牧医疗资源管理功能需求.md`、`畜牧医疗资源管理技术方案.md`；布局对齐 `commonProsperity/project/index.vue`（双 `el-card`、发布/下架）；Tab 组织对齐 `policy/projectSubsidy/index.vue`；字段 **小驼峰**。

---

## 1. 页面与路由

| 项 | 说明 |
| --- | --- |
| **Vue 路径** | `ruoyi-ui/src/views/diseaseTreatment/medicalResource/index.vue` |
| **组件名** | `DiseaseTreatmentMedicalResource` |
| **菜单配置** | 组件路径：`diseaseTreatment/medicalResource/index`（「牧业疫病诊疗服务」目录下，手工配置） |
| **权限前缀** | `diseaseTreatment:medicalResource:list\|query\|add\|edit\|remove\|publish\|offline\|assignAccount` |

---

## 2. API 模块

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

| 方法 | HTTP | 说明 |
| --- | --- | --- |
| `listMedicalResource` | GET | `/list`，Query：`pageNum`、`pageSize`（默认 20）、`resourceType`（必填）、`resourceName`、`publishStatus`（0/1/2） |
| `getMedicalResource` | GET | `/{id}` |
| `addMedicalResource` | POST | `/` |
| `updateMedicalResource` | PUT | `/` |
| `delMedicalResource` | DELETE | `/{ids}` |
| `publishMedicalResource` | POST | `/publish/{id}` |
| `offlineMedicalResource` | POST | `/offline/{id}` |
| `assignAccountMedicalResource` | POST | `/assignAccount/{id}` |
| `listMedicalResourceTownOptions` | GET | `/townOptions`，兽医「所属乡镇」下拉 |

---

## 3. 页面结构

1. **Tab 区**：`el-tabs type="border-card"` 四个 Tab（兽医 / 团队 / 机构 / 设备），切换即改 `resourceType` 并刷新列表。  
2. **筛选区**：资源类型下拉（与 Tab 联动）、资源名称模糊、发布状态三态；搜索、重置、新增。  
3. **列表区**：按当前 Tab 展示差异化列；发布状态用 `displayPublishStatus`；操作列按钮显隐用后端 `canEdit` / `canPublish` / `canOffline` / `canDelete` / `canAssignAccount`。  
4. **新增/编辑弹窗**：先选资源类型（编辑时禁用）；按类型 `v-if` 动态字段；单图上传 `/common/upload` → `photoFileUrl`、`photoFilePath`。  
5. **查看弹窗**：只读全字段；未发布/已下架且 `canEdit` 时可从查看进入编辑。

---

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

| 规则 | 实现 |
| --- | --- |
| Tab ↔ 类型 | `vet→004001`、`team→004002`、`org→004003`、`equipment→004004`；下拉选项来自 `listInformationCategoryChildren(parentCode=004, categoryType=6)` |
| 列表筛选 `publishStatus` | `0` 未发布 / `1` 已发布 / `2` 已下架（与后端 Query 一致） |
| 多选提交 | `consultModesList`、`serviceWeekdaysList` 数组提交，后端编码入库 |
| 服务时段 | 两个 `el-time-select`，校验结束 ≥ 开始 |
| 手机号 | `PHONE_REG = /^1[3-9]\d{9}$/`；兽医/团队/机构均为**选填**，有值才校验 |
| 照片 | jpg/jpeg/png，≤10MB，**选填** |
| 兽医所属乡镇 | 选填；`townDeptId` 下拉来自 `/townOptions`；详情展示 `townName` |
| 接诊方式 | 兽医**必填**至少一项 |
| 单日最大接诊人数 | 仅机构；**选填**（新增默认空，不预填 30） |
| 分配账号 | 仅兽医/机构 Tab 列表展示「账号分配」列；按钮 `canAssignAccount` |
| 资源类型 | 新增默认当前 Tab 类型；编辑不可改 |

**资源类型接口**

| 方法 | 说明 |
| --- | --- |
| `listInformationCategoryChildren` | GET `/category/informationCategory/children?parentCode=004&categoryType=6`；`data[]` 项 `code`、`name` |

**其它枚举（页面内）**

| 常量 | 值 |
| --- | --- |
| 定点/上门/在线接诊 | `consultMode = 1/2/3` |
| 诊所/医院 | `orgLevel = 1/2` |
| 周一至周日 | `weekday = 1～7` |

存量 `tinyint` 资源类型（1～4）在 `normalizeResourceType` 中映射为 `004001`～`004004`。

---

## 5. 国际化

| 项 | 说明 |
| --- | --- |
| **语言包** | `diseaseTreatment.medicalResource`（`lang/zh/diseaseTreatment.js`、`lang/bo/diseaseTreatment.js`） |
| **Mixin** | `diseaseTreatmentLocaleMixin`，`dtNs = 'medicalResource'`，方法 `dtT` / `dtCommon` |
| **注册** | `lang/zh-CN.js`、`lang/bo.js` 引入 `diseaseTreatment` |

---

## 6. 联调说明

1. 部署 `BizMedicalResourceController` 及 `biz_medical_resource` 表。  
2. 菜单组件 `diseaseTreatment/medicalResource/index`，权限与后端 §6 一致。  
3. 验证：四 Tab 列表、三态筛选、四类动态表单新增/编辑、发布/下架、兽医/机构分配账号、已发布不可编辑、双语切换。

---

## 7. 文件清单

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

---

## 8. 修订记录

| 版本 | 说明 |
| --- | --- |
| 1.0 | 初版：四 Tab 分库列表、动态表单、发布/下架/分配账号、汉藏 i18n |
| 1.1 | 对齐需求：兽医「所属乡镇」；照片/联系方式选填；接诊方式必填；机构单日接诊人数选填不预填 |
