# 登录页面

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

---

### 1. 基本信息

| 项 | 值 |
|----|-----|
| 路由 | /login |
| 入口 | 未登录时自动跳转，或Token过期后跳转 |

### 2. 界面布局

┌──────────────────────────────────────────────────────────┐
│                                                          │
│              ┌────────────────────────┐                  │
│              │ CNC机床数据采集系统      │                  │
│              │                        │                  │
│              │ 用户名：[____________]  │                  │
│              │ 密  码：[____________]  │                  │
│              │                        │                  │
│              │ [√ 记住我]             │                  │
│              │                        │                  │
│              │       [登  录]         │                  │
│              └────────────────────────┘                  │
│                                                          │
└──────────────────────────────────────────────────────────┘

### 3. 表单字段

| 字段 | 控件 | 必填 | 默认值 | 校验 | 联动 |
|------|------|------|--------|------|------|
| 用户名 | el-input maxlength=50 | 是 | - | 必填 | - |
| 密码 | el-input type=password maxlength=50 show-password | 是 | - | 必填 | - |
| 记住我 | el-checkbox | 否 | 不勾选 | - | 勾选后Token有效期延长 |

### 4. 操作按钮

| 名称 | 位置 | 显示条件 | 点击行为 |
|------|------|---------|---------|
| 登录 | 表单底部 | 始终 | 校验→调登录API→成功存Token跳转仪表盘 |

### 5. 交互流程

- 进入：未登录访问管理后台→axios拦截40101→清除旧Token→router.push(/login)
- 登录：填写用户名+密码→点击登录→loading+disabled→调登录API→成功→存Token到localStorage→跳转/dashboard
- 登录失败：用户名或密码错误→el-message error显示错误信息→密码框清空+聚焦
- Token过期：访问任意管理后台页面→API返回40101→清除Token→跳转/login（带redirect参数，登录后跳回原页面）

### 6. 安全规范

| 项 | 规则 |
|----|------|
| Token存储 | localStorage，key=token |
| Token传递 | Authorization: Bearer {token} |
| Token有效期 | 默认8小时，勾选"记住我"延长至7天 |
| Token刷新 | 不做刷新机制，过期直接跳转登录页 |
| 密码传输 | HTTPS（生产环境），开发环境HTTP |
| 登录失败提示 | 统一提示"用户名或密码错误"，不区分是哪个错 |
| 防暴力破解 | 同一IP连续5次失败，锁定15分钟（后端实现） |
| 单角色 | 仅admin角色，无角色切换，无注册功能 |

### 7. 数据需求

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

| 数据需求 | 草案对应 | 说明 |
|---------|---------|------|
| 用户名/密码验证 | 后端硬编码或配置文件 | 单角色admin，无需用户表 |
| Token生成与验证 | cnc_sys_config (api_token) | Token值存配置表，但登录流程需后端生成JWT或类似Token |
| Token有效期 | cnc_sys_config | 记住我模式下延长有效期 |

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

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

#### 接口引用

| 接口名称 | 端点编号 | 界面用途 |
|---------|---------|---------|
| 管理员登录 | §3.1 #1 | 登录表单提交，获取Token |

#### 数据结构

**管理员登录（§3.1 #1）：**

Request body：
```json
{ "username": "admin", "password": "admin123", "rememberMe": true }
```

成功 Response（不记住我）：
```json
{ "code": 0, "message": "success", "data": { "token": "eyJhbGciOiJIUzI1NiJ9.admin.8h", "expiresIn": 28800 }}
```

成功 Response（记住我）：
```json
{ "code": 0, "message": "success", "data": { "token": "eyJhbGciOiJIUzI1NiJ9.admin.7d", "expiresIn": 604800 }}
```

失败 Response（用户名或密码错误）：
```json
{ "code": 40001, "message": "用户名或密码错误", "data": null }
```

失败 Response（IP锁定）：
```json
{ "code": 40003, "message": "登录失败次数过多，请15分钟后重试", "data": null }
```
