# 入场隔离登记 — 前端技术方案

> 依据：`入场隔离登记功能需求.md`、`入场隔离登记技术方案.md`；布局对齐 `tradeMarket/supplier/index.vue`（双 `el-card`）；字段 **小驼峰**。

---

## 1. 页面与路由

| 项 | 说明 |
| --- | --- |
| **Vue 路径** | `ruoyi-ui/src/views/tradeMarket/entryIsolation/index.vue` |
| **组件名** | `TradeMarketEntryIsolation` |
| **菜单配置** | 组件路径：`tradeMarket/entryIsolation/index`（「交易市场平台」目录下，手工配置） |
| **权限前缀** | `tradeMarket:entryIsolation:list\|query\|add\|edit\|remove` |

---

## 2. API 模块

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

| 方法 | HTTP | 说明 |
| --- | --- | --- |
| `listEntryIsolation` | GET | `/list` |
| `getEntryIsolation` | GET | `/{id}` |
| `addEntryIsolation` | POST | `/` |
| `updateEntryIsolation` | PUT | `/` |
| `delEntryIsolation` | DELETE | `/{ids}` |

**关联接口（下拉数据）**

| 方法 | 文件 | 说明 |
| --- | --- | --- |
| `listSupplier` | `supplier.js` | 供应商下拉/筛选 |
| `listIsolationPen` | `isolationPen.js` | 分圈圈位下拉 |
| `getIsolationSetting` | `isolationPen.js` | 新增默认隔离天数 |

---

## 3. 页面结构

1. **筛选区**：进场日期 `daterange` → `entryDateStart`/`entryDateEnd`；检疫证号模糊；供应商精确；搜索、重置、新增。  
2. **列表区**：进场时间、供应商、检疫证号、数量、圈位分配表链接、隔离天数、解除日期、操作。  
3. **新增/编辑弹窗**：主表字段 + 检疫证单文件上传 + 耳标文本（逗号分隔）+ 预计解除日期只读 + 分圈表格。  
4. **添加分圈子弹窗**：圈位单选、耳标多选（排除已占用）、数量=已选耳标数。  
5. **查看弹窗**：只读主表与分圈表；可进编辑。  
6. **圈位分配表弹窗**：列表行快捷查看分圈明细。

---

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

| 规则 | 实现 |
| --- | --- |
| 进场日期区间 | `queryDateRange` 绑定 `daterange`，查询拆为 `entryDateStart`、`entryDateEnd` |
| 耳标解析 | `parseEarTags`：英文/中文逗号分隔、trim、去重；单段 1～32 字 |
| R1 | 保存前 `quantity === earTagList.length`；失焦耳标时自动同步数量 |
| R2～R5 | `validateConsistencyBeforeSubmit`：分圈数量之和、耳标并集、跨圈重复、圈位不重复 |
| 预计解除日期 | `recalcExpectedReleaseDate`：`DATE(entryTime) + isolationDays`（自然日） |
| 默认隔离天数 | 新增时 `getIsolationSetting`，无配置兜底 **3** 天 |
| 检疫证文件 | `/common/upload`；后缀白名单；≤30MB；选填 |
| 分圈提交 | `penAllocList: [{ penId, earTagList }]`，不传子表 quantity |
| OCR | 界面提示「即将上线」，不调用识别接口 |

---

## 5. 国际化

| 项 | 说明 |
| --- | --- |
| **语言包** | `tradeMarket.entryIsolation`（`lang/zh/tradeMarket.js`、`lang/bo/tradeMarket.js`） |
| **Mixin** | `tradeMarketLocaleMixin`，`tmNs = 'entryIsolation'`，方法 `tmT` / `tmCommon` |

---

## 6. 联调说明

1. 部署 `BizEntryIsolationController` 及 `biz_entry_isolation`、`biz_entry_isolation_alloc` 表。  
2. 预置供应商、隔离圈位及默认隔离天数配置。  
3. 菜单组件 `tradeMarket/entryIsolation/index`，权限与后端一致。  
4. 验证：日期区间筛选、新增分圈、R1～R5 前后端双重校验、修改全量覆盖分圈、逻辑删除、双语切换。

---

## 7. 文件清单

| 类型 | 路径 |
| --- | --- |
| 页面 | `ruoyi-ui/src/views/tradeMarket/entryIsolation/index.vue` |
| API | `ruoyi-ui/src/api/tradeMarket/entryIsolation.js` |
| Mixin | `ruoyi-ui/src/mixins/tradeMarketLocaleMixin.js`（复用） |
| i18n | `ruoyi-ui/src/lang/zh/tradeMarket.js`、`lang/bo/tradeMarket.js`（`entryIsolation` 节点） |

---

## 8. 修订记录

| 版本 | 说明 |
| --- | --- |
| 1.0 | 初版：双卡片 CRUD、分圈子弹窗、R1～R5 前端校验、检疫证上传、汉藏 i18n |
