# 休药期标准管理 — 前端技术方案

> 依据：`休药期标准管理技术方案.md`（同目录，下称**总方案**）。本模块**无发布/下架**、无附件上传；仅 **知识库同步** 单维状态机。请求与表单字段统一 **小驼峰**，与后端 `BizWithdrawalPeriodStandard` 及 Jackson 序列化一致。

---

## 1. 技术架构

| 项 | 说明 |
| --- | --- |
| **工程** | 若依 **RuoYi-Vue** 前端（Vue **2.x** + **Element UI**） |
| **页面路径** | `ruoyi-ui/src/views/breedingStandards/diseaseTreatment/withdrawalPeriod/index.vue` |
| **组件名** | `WithdrawalPeriodStandard` |
| **布局参考** | 双 `el-card`（查询区 + 表格区）；新增/编辑弹窗 + 查看弹窗 |
| **国际化** | `breedingStdLocaleMixin`，命名空间 `breedingStd.wp` |

---

## 2. 源码与路由

| 类型 | 路径 |
| --- | --- |
| 页面 | `ruoyi-ui/src/views/breedingStandards/diseaseTreatment/withdrawalPeriod/index.vue` |
| API 模块 | `ruoyi-ui/src/api/breedingStandards/withdrawalPeriod.js` |

**菜单配置**：组件路径 `breedingStandards/diseaseTreatment/withdrawalPeriod/index`；权限前缀 `withdrawalPeriod:standard:`（**无** `publish`、`offline`）。

---

## 3. 页面结构

### 3.1 查询区

| UI | 绑定/说明 |
| --- | --- |
| 药物名称 | `queryParams.keyword`，**仅** `drug_name` 模糊匹配（总方案 **§3.1**） |
| 药物类型 | `queryParams.drugType`，`1`～`4` 精确筛选，可清空 |
| 新增 | 权限 `withdrawalPeriod:standard:add` |

### 3.2 列表区

| 列 | 字段 | 备注 |
| --- | --- | --- |
| 药物名称 | `drugName` | — |
| 药物类型 | `drugType` | `drugTypeLabel` |
| 休药期（天） | `withdrawalDays` | — |
| 使用指南 | `usageGuide` | 溢出省略 |
| 药物作用 | `drugEffect` | 溢出省略 |
| 知识库同步 | `kbSyncStatus` | `kbSyncStatusText` |
| 创建时间 | `createTime` | `parseTime` |
| 操作 | — | 见 **§5** |

**分页**：默认 `pageNum=1`、`pageSize=20`。

### 3.3 新增 / 编辑弹窗

| 字段 | 控件 | 校验 |
| --- | --- | --- |
| `drugName` | 输入框，`maxlength=20` | 必填 1～20；提交前 **trim**；全表唯一由后端校验 |
| `drugType` | 下拉 | 必填，`1`～`4` |
| `withdrawalDays` | `el-input-number` | 必填整数 **1～999** |
| `usageGuide` | 多行文本 | 必填 1～200 字 |
| `drugEffect` | 多行文本 | 必填 1～200 字 |

**编辑条件**：仅 `kbSyncStatus === 0`（总方案 **§3.4**）。已同步点编辑提示 `ruleSyncedNoEdit`，不打开弹窗。

### 3.4 查看弹窗

展示 **§3.3** 全部字段 + `kbSyncStatus`、`kbDocId`（便于验收占位 ID）、`createTime`、`updateTime`。

---

## 4. 药物类型枚举（总方案 §2.2）

页面 `drugTypeOptions` 由 `1`～`4` 映射国际化文案，**非**资讯类别接口：

| 值 | 文案（示例） |
| --- | --- |
| `1` | 抗生素 |
| `2` | 抗原虫 |
| `3` | 抗病毒 |
| `4` | 激素 |

---

## 5. 操作按钮与权限

本模块**仅有**知识库同步维度（功能需求 **§5** 操作矩阵）。

| 按钮 | 权限标识 | 显示条件 |
| --- | --- | --- |
| 查看 | `withdrawalPeriod:standard:query` | 有权限即显 |
| 同步知识库 | `withdrawalPeriod:standard:syncKb` | `kbSyncStatus === 0` |
| 移出知识库 | `withdrawalPeriod:standard:removeKb` | `kbSyncStatus === 1` |
| 编辑 | `withdrawalPeriod:standard:edit` | `kbSyncStatus === 0` |
| 删除 | `withdrawalPeriod:standard:remove` | `kbSyncStatus === 0` |

已同步记录点编辑/删除时前端提示 `ruleSyncedNoEdit` / `ruleDeleteNeedRemoveKb`（双重守卫，与按钮 `v-if` 一致）。

---

## 6. API 模块（总方案 §3）

文件：`ruoyi-ui/src/api/breedingStandards/withdrawalPeriod.js`，Base Path `/withdrawalPeriod/standard`。

| 方法 | HTTP | URI |
| --- | --- | --- |
| `listWithdrawalPeriodStandard` | GET | `/list` |
| `getWithdrawalPeriodStandard` | GET | `/{id}` |
| `addWithdrawalPeriodStandard` | POST | `/` |
| `updateWithdrawalPeriodStandard` | PUT | `/` |
| `delWithdrawalPeriodStandard` | DELETE | `/{ids}` |
| `syncKbWithdrawalPeriodStandard` | POST | `/syncKb/{id}` |
| `removeKbWithdrawalPeriodStandard` | POST | `/removeKb/{id}` |

**列表查询参数**：`pageNum`、`pageSize`、`keyword`、`drugType`。

---

## 7. 错误与交互约定

| 场景 | 前端行为 |
| --- | --- |
| 药物名称重复 | 展示后端 `msg`（如「药物名称已存在」） |
| 已同步点编辑 | `msgWarning(ruleSyncedNoEdit)` |
| 已同步点删除 | `msgWarning(ruleDeleteNeedRemoveKb)` |
| 同步 / 移出 / 删除 | `this.$modal.confirm` 二次确认 |

---

## 8. 与养殖标准页的差异

| 项 | 养殖标准 | 休药期标准 |
| --- | --- | --- |
| 正文/封面上传 | 有 | **无** |
| 发布/下架 | 有 | **无** |
| 状态机 | 上架 × 知识库 | **仅知识库** |
| 列表筛选 | 关键词 + `standardType`（资讯类别编码） | 药物名称 + `drugType`（`1`～`4`） |

---

## 9. 交付与联调清单

- [x] 菜单路由指向 `breedingStandards/diseaseTreatment/withdrawalPeriod/index`  
- [x] 无 `publish` / `offline` 按钮与权限  
- [ ] 后端 `/withdrawalPeriod/standard/**` 与总方案 **§3** 对齐  
- [ ] 联调：新增 → 同步 → 移出 → 编辑 → 再同步 → 删除  
- [ ] 联调：已同步编辑/删除被前端拦截；药物名称唯一性后端校验  

---

## 10. 文档修订记录

| 版本 | 日期 | 说明 |
| --- | --- | --- |
| v1.0 | 2026-05-13 | 初稿：页面、API、权限与后端 Controller 对齐 |
| **v1.1** | **2026-06-01** | 对齐总方案/功能需求：**无发布下架**单维知识库状态机；`keyword` 仅药物名称；提交 `drugName` trim；已同步编辑/删除提示；查看弹窗展示 `kbDocId` |
