# 药物禁配标准管理 — 前端技术方案

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

---

## 1. 技术架构

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

---

## 2. 源码与路由

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

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

---

## 3. 页面结构

### 3.1 查询区

| UI | 绑定/说明 |
| --- | --- |
| 主药名称 | `queryParams.keyword`，**仅** `main_drug_name` 模糊匹配（总方案 **§3.1**） |
| 新增 | 权限 `drugIncompatibility:standard:add` |

### 3.2 列表区

| 列 | 字段 | 备注 |
| --- | --- | --- |
| 主药名称 | `mainDrugName` | — |
| 配伍结果 | `compatResult` | 空显示「—」 |
| 配伍药物数 | `companionCount` | 列表聚合字段，非持久化 |
| 知识库同步 | `kbSyncStatus` | `kbSyncStatusText` |
| 创建时间 | `createTime` | `parseTime` |
| 操作 | — | 见 **§5** |

**分页**：默认 `pageNum=1`、`pageSize=20`。列表行**不含** `companions` 明细。

### 3.3 新增 / 编辑弹窗

| 字段 | 控件 | 校验 |
| --- | --- | --- |
| `mainDrugName` | 输入框，`maxlength=20` | 必填 1～20；提交前 **trim** |
| `compatResult` | 输入框 | 选填 ≤50（后端校验）；空串省略（后端存 `NULL`）；前端 `maxlength` 待与后端对齐时可仍为 20 |
| `companions` | 动态行列表 | 至少 1 条；每项 `companionDrugName` 1～20；trim 后互不相同且均不等于主药名 |

配伍校验器 `validateCompanionsField` 与后端 `DrugIncompatibilityStandardValidation` 规则一致。编辑时由详情接口拉取有序 `companions`；**不**向前端暴露或提交 `kbSyncStatus`、`kbDocId`。

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

### 3.4 查看弹窗

展示主药、配伍药物有序列表、配伍结果 + `kbSyncStatus`、`kbDocId`（便于验收占位 ID）、`createTime`、`updateTime`。

---

## 4. 配伍子表编辑（本模块特有）

- 动态 **增加 / 减少** 配伍药物行；至少保留 1 行。
- 保存时按请求数组顺序提交 `companions`（仅 `companionDrugName`），对应后端子表全量替换（总方案 **§1**、**§3.4**）。
- 主药 `blur` 或配伍名 `input` 时触发 `companions` 字段重校验（主药与配伍互斥规则）。

---

## 5. 操作按钮与权限

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

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

`canEdit` / `canDelete` / `canSyncKb` / `canRemoveKb` 使用 `Number(kbSyncStatus)` 比较。已同步记录点编辑/删除时前端提示 `ruleSyncedNoEdit` / `ruleDeleteNeedRemoveKb`（双重守卫，与按钮 `v-if` 一致）。

---

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

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

| 方法 | HTTP | URI |
| --- | --- | --- |
| `listDrugIncompatibilityStandard` | GET | `/list` |
| `getDrugIncompatibilityStandard` | GET | `/{id}` |
| `addDrugIncompatibilityStandard` | POST | `/` |
| `updateDrugIncompatibilityStandard` | PUT | `/` |
| `delDrugIncompatibilityStandard` | DELETE | `/{ids}` |
| `syncKbDrugIncompatibilityStandard` | POST | `/syncKb/{id}` |
| `removeKbDrugIncompatibilityStandard` | POST | `/removeKb/{id}` |

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

**请求体（新增/修改）**：`mainDrugName`、`compatResult`（可空）、`companions`（≥1 条，每项 `companionDrugName`）；修改时含 `id`。

---

## 7. 错误与交互约定

| 场景 | 前端行为 |
| --- | --- |
| 配伍校验失败 | 表单字段错误（重名、与主药相同、条数不足等） |
| 已同步点编辑 | `msgWarning(ruleSyncedNoEdit)` |
| 已同步点删除 | `msgWarning(ruleDeleteNeedRemoveKb)` |
| 同步 / 移出 / 删除 | `this.$modal.confirm` 二次确认 |

---

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

| 项 | 养殖标准 | 药物禁配标准 |
| --- | --- | --- |
| 正文/封面上传 | 有 | **无** |
| 发布/下架 | 有 | **无** |
| 状态机 | 上架 × 知识库 | **仅知识库** |
| 数据结构 | 单表 + 附件 | **主表 + 配伍子表** 一对多 |
| 列表筛选 | 关键词 + `standardType`（资讯类别编码） | **仅**主药名称 `keyword` |

---

## 9. 交付与联调清单

- [x] 菜单路由指向 `breedingStandards/diseaseTreatment/drugIncompatibility/index`
- [x] 无 `publish` / `offline` 按钮与权限
- [x] 配伍动态行与 `companions` 校验
- [ ] 后端 `/drugIncompatibility/standard/**` 与总方案 **§3** 对齐
- [ ] 联调：新增 → 同步 → 移出 → 编辑配伍列表 → 再同步 → 删除
- [ ] 联调：已同步编辑/删除被前端拦截

---

## 10. 文档修订记录

| 版本 | 日期 | 说明 |
| --- | --- | --- |
| v1.0 | 2026-05-13 | 初稿：双卡片 CRUD、主表+配伍子表、知识库同步/移出 |
| **v1.1** | **2026-06-01** | 对齐总方案/功能需求：**无发布下架**单维知识库状态机；`keyword` 仅主药名称；`Number(kbSyncStatus)` 判断；已同步编辑/删除提示；提交字段 trim；查看弹窗展示 `kbDocId` |
