# 采集地址详情页面

> 最后更新：2026-04-25
> 状态：已设计

---

### 1. 基本信息

| 项 | 值 |
|----|-----|
| 路由 | /collect-address/:id |
| 权限 | admin |
| 入口 | 采集地址列表点击名称链接 / 仪表盘采集服务状态区点击地址名称 |
| 面包屑 | 首页 / 采集地址管理 / {地址名称} |

### 2. 界面布局

┌──────────────────────────────────────────────────────────┐
│ [面包屑] 首页 / 采集地址管理 / FANUC-A栋                    │
├──────────────────────────────────────────────────────────┤
│ [基本信息区]                                              │
│ < 返回    采集地址详情：FANUC-A栋                           │
│ 名称：FANUC-A栋         HTTP地址：http://10.1.1.1/          │
│ 品牌：FANUC             采集间隔：30秒                      │
│ 状态：启用               上次采集：3秒前                     │
│ 连续失败：0次            总机床数：32台                      │
├──────────────────────────────────────────────────────────┤
│ [关联机床区]                                              │
│ 机床名称    | device_code  | 车间 | 在线 | 当前程序 | 零件数 │
│ 西-1.8     | fanake_1.8  | A栋 | 在线 | 1566.NC | 580   │
│ 西-1.10    | fanake_1.10 | A栋 | 在线 | O123.NC | 120   │
│ ...                                                      │
├──────────────────────────────────────────────────────────┤
│ [最近采集记录]                        [查看原始JSON]        │
│ 采集时间     | 耗时  | 状态  | 机床数 | 失败数              │
│ 17:36:38    | 1.2s | 成功 | 32    | 0                   │
│ 17:36:08    | 1.1s | 成功 | 32    | 0                   │
│ 17:35:38    | 3.5s | 成功 | 31    | 1                   │
│ 17:35:08    | -    | 失败 | -     | -                   │
├──────────────────────────────────────────────────────────┤
│ [采集失败趋势（近7天折线图）]                                │
│ [============图表区域============]                         │
└──────────────────────────────────────────────────────────┘

### 3. 数据区块

| 区块 | 展示字段 | 控件类型 | 刷新策略 |
|------|---------|---------|---------|
| 基本信息 | 名称、URL、品牌、间隔、状态、上次采集、连续失败、机床数 | 文本展示 | 页面加载时请求一次 |
| 关联机床 | 机床名称、device_code、车间、在线、当前程序、零件数 | el-table | 页面加载时请求一次 |
| 最近采集记录 | 采集时间、耗时、状态、机床数、失败数 | el-table | 页面加载时请求一次 |
| 采集失败趋势 | 日期、失败次数 | 折线图 | 页面加载时请求一次 |

### 4. 操作按钮

| 名称 | 位置 | 显示条件 | 点击行为 |
|------|------|---------|---------|
| 返回 | 页头左侧 | 始终 | router.back() |
| 机床名称 | 行内链接 | 始终 | 跳转机床详情页(/machine/:id) |
| 查看原始JSON | 采集记录表头 | 始终 | 弹窗显示选中采集记录的原始JSON |

### 5. 弹窗规格

**原始JSON查看弹窗：**
- 宽度800px，标题=原始采集JSON
- 内容：代码高亮显示JSON，只读不可编辑
- 支持：复制到剪贴板

### 6. 交互流程

- 加载：请求地址详情API+关联机床API+最近采集记录API+失败趋势API->渲染
- 点击机床名称：router.push到机床详情页
- 查看原始JSON：点击"查看原始JSON"->弹窗显示最近一次成功采集的原始JSON（或选择某条记录的JSON）
- 返回：router.back()

### 7. 空状态

- 关联机床无数据：el-empty 该地址暂无关联机床
- 采集记录无数据：el-empty 暂无采集记录

### 8. 接口引用与数据结构

> Mock/正式API的URL、HTTP方法均定义在 `03-API接口设计.md` §3.5 端点清单，本节仅引用编号并定义返回数据结构。

#### 接口引用

| 接口名称 | 端点编号 | 界面用途 |
|---------|---------|---------|
| 地址详情 | §3.5 #2 | 基本信息卡片 |
| 关联机床 | §3.5 #7 | 机床列表表格 |
| 近期采集记录 | §3.5 #8 | 采集记录表格 |
| 最新原始JSON | §3.5 #9 | 原始JSON弹窗 |

#### 数据结构

**地址详情（§3.5 #2）：**

Response：
```json
{ "code": 0, "data": {
  "id": 1, "name": "FANUC-A栋", "url": "http://10.1.1.1/", "brandName": "FANUC",
  "collectInterval": 30, "isEnabled": 1, "lastCollectTime": "2026-04-25T17:36:38",
  "failCount": 0, "machineCount": 32
}}
```

**关联机床（§3.5 #7）：**

Response：
```json
{ "code": 0, "data": { "items": [
  { "machineId": 1, "machineName": "西-1.8", "deviceCode": "fanake_1.8", "workshopName": "A栋", "isOnline": 1, "programName": "1566.NC", "partCount": 580 },
  { "machineId": 2, "machineName": "西-1.10", "deviceCode": "fanake_1.10", "workshopName": "A栋", "isOnline": 1, "programName": "O123.NC", "partCount": 120 }
]}}
```

**近期采集记录（§3.5 #8）：**

Response：
```json
{ "code": 0, "data": { "items": [
  { "requestTime": "2026-04-25T17:36:38", "duration": 1200, "isSuccess": 1, "machineCount": 32, "failMachineCount": 0 },
  { "requestTime": "2026-04-25T17:36:08", "duration": 1100, "isSuccess": 1, "machineCount": 32, "failMachineCount": 0 },
  { "requestTime": "2026-04-25T17:35:38", "duration": 3500, "isSuccess": 1, "machineCount": 31, "failMachineCount": 1 },
  { "requestTime": "2026-04-25T17:35:08", "duration": null, "isSuccess": 0, "machineCount": null, "failMachineCount": null }
]}}
```

**最新原始JSON（§3.5 #9）：**

Response：
```json
{ "code": 0, "data": { "rawJson": "[{\"device\":\"fanake_1.8\",\"desc\":\"西-1.8\",\"tags\":[{\"id\":\"_io_status\",\"desc\":\"设备状态\",\"value\":\"1.00000\"},{\"id\":\"Tag5\",\"desc\":\"执行的NC主程序名\",\"value\":\"1566.NC\"},{\"id\":\"Tag8\",\"desc\":\"当前加工零件数\",\"value\":\"580.00000\"}]}]" }}
```

### 8. 数据需求

> 以下为本页面需要的数据，数据库设计定稿时需覆盖。参考 `01-数据库设计.md` 草案。

| 数据需求 | 草案对应 | 说明 |
|---------|---------|------|
| 采集地址基本信息 | cnc_collect_address | 主表 |
| 关联机床列表 | cnc_machine | 按collect_address_id查询 |
| 最近采集记录 | log_collect_raw (日志库) | 按collect_address_id+时间倒序，跨库查询 |
| 原始JSON查看 | log_collect_raw.raw_json | 弹窗展示，MEDIUMTEXT字段 |
| 采集失败趋势 | log_collect_raw聚合 | 按天统计is_success=0的次数 |
