# 品牌列表页面

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

---

### 1. 基本信息

| 项 | 值 |
|----|-----|
| 路由 | /brand |
| 权限 | admin |
| 入口 | 侧边栏品牌模板 |
| 面包屑 | 首页 / 品牌模板管理 |

### 2. 界面布局

┌──────────────────────────────────────────────────────────┐
│ [面包屑] 首页 / 品牌模板管理                               │
├──────────────────────────────────────────────────────────┤
│ [操作栏]  [+ 新增品牌]                                    │
├──────────────────────────────────────────────────────────┤
│ [列表区]                                                  │
│ 品牌名称     | 状态 | 映射字段数 | 操作                    │
│ FANUC       | 启用 | 16       | [编辑][禁用][复制]        │
│ SIEMENS     | 启用 | 12       | [编辑][禁用][复制]        │
│ MITSUBISHI  | 停用 | 8        | [编辑][启用][复制]        │
└──────────────────────────────────────────────────────────┘

### 3. 查询条件

无（品牌数量少，无需筛选）。

### 4. 列表字段

| 字段名 | 列宽 | 排序 | 超长处理 | 对齐 |
|--------|------|------|---------|------|
| 品牌名称 | - | y | tooltip | center |
| 状态 | - | - | - | center |
| 映射字段数 | - | - | - | center |
| 操作 | 180 | - | - | center |

> 列宽规则见 `02-前端全局规范.md` el-table列宽均分规则：数据列不设width自动均分，操作列固定180。

### 5. 操作按钮

| 名称 | 权限编码 | 位置 | 显示条件 | 点击行为 |
|------|---------|------|---------|---------|
| 新增品牌 | brand:create | 页头 | 始终 | 打开新增页 |
| 编辑 | brand:update | 行操作 | 始终 | 跳转编辑页 |
| 启用/禁用 | brand:toggle | 行操作 | 始终 | 确认->切换状态 |
| 复制 | brand:copy | 行操作 | 始终 | 复制模板到新增页 |

### 6. 弹窗规格

无弹窗，使用独立编辑页。

### 7. 状态机

品牌is_enabled：
- 1(启用): el-tag success -> 可编辑/禁用/复制
- 0(停用): el-tag danger -> 可编辑/启用/复制

### 8. 交互流程

- 加载：请求品牌列表->渲染表格
- 新增：跳转新增编辑页(/brand/create)
- 编辑：跳转编辑页(/brand/:id/edit)
- 启用/禁用：确认框->调API->刷新列表
- 复制：复制品牌模板数据到新增页

### 9. 空状态

列表无数据：el-empty 暂无品牌数据，点击新增品牌添加

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

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

#### 接口引用

| 接口名称 | 端点编号 | 界面用途 |
|---------|---------|---------|
| 品牌列表 | §3.4 #1 | 品牌表格渲染 |
| 新增品牌 | §3.4 #3 | 新增弹窗保存 |
| 删除品牌 | §3.4 #5 | 删除操作 |
| 复制品牌 | §3.4 #6 | 复制操作 |
| 启停品牌 | §3.4 #7 | 启停切换 |

#### 数据结构

**品牌列表（§3.4 #1）：**

Response：
```json
{ "code": 0, "data": { "items": [
  { "id": 1, "brandName": "FANUC", "deviceField": "device", "tagsPath": "tags", "isEnabled": 1, "fieldCount": 16 },
  { "id": 2, "brandName": "SIEMENS", "deviceField": "device", "tagsPath": "tags", "isEnabled": 1, "fieldCount": 12 },
  { "id": 3, "brandName": "MITSUBISHI", "deviceField": "device", "tagsPath": "tags", "isEnabled": 0, "fieldCount": 8 }
]}}
```

**新增品牌（§3.4 #3）/ 删除品牌（§3.4 #5）/ 复制品牌（§3.4 #6）/ 启停品牌（§3.4 #7）：**

Response：
```json
{ "code": 0, "message": "success", "data": null }
```

### 10. 数据需求

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

| 数据需求 | 草案对应 | 说明 |
|---------|---------|------|
| 品牌列表 | cnc_brand | 主表 |
| 映射字段数 | cnc_brand_field_mapping | 按brand_id计数 |
