# 药物禁配标准管理 — 前端技术方案 > 依据:`药物禁配标准管理技术方案.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` |