# 二维码登录功能
## 概述
基于Vue 3 + TypeScript开发的二维码登录功能,支持APP端和小程序端扫码登录到Web管理后台。
## 功能特点
- ✅ **便捷登录**:扫码即可登录,无需输入账号密码
- ✅ **实时状态**:支持实时状态更新和用户反馈
- ✅ **安全可靠**:二维码具有时效性,支持一次性使用
- ✅ **跨平台支持**:兼容APP和小程序扫码
- ✅ **响应式设计**:适配各种屏幕尺寸
- ✅ **TypeScript支持**:完整的类型定义
## 文件结构
```
src/
├── components/QrLogin/
│ ├── index.vue # 二维码登录主组件
│ └── demo.vue # 演示组件
├── views/passport/
│ ├── login/index.vue # 登录页面(已集成二维码登录)
│ └── qrConfirm/index.vue # 移动端确认页面
├── api/passport/
│ └── qrLogin/index.ts # 二维码登录API
└── router/routes.ts # 路由配置
docs/
├── qr-login-api.md # API接口文档
└── qr-login-usage.md # 使用说明文档
```
## 快速开始
### 1. 查看演示
访问演示页面查看功能效果:
```
http://localhost:3000/qr-demo
```
### 2. 在登录页面使用
登录页面已经集成了二维码登录功能:
```
http://localhost:3000/login
```
点击右上角的二维码图标即可切换到扫码登录模式。
### 3. 移动端确认页面
扫码后会跳转到确认页面:
```
http://localhost:3000/qr-confirm?qrCodeKey=xxx
```
## 组件使用
### 基本用法
```vue
```
### 事件说明
| 事件名 | 参数 | 说明 |
|--------|------|------|
| loginSuccess | token: string | 登录成功时触发,返回登录token |
| loginError | error: string | 登录失败时触发,返回错误信息 |
## API接口
### 需要实现的后端接口
1. **生成二维码**: `POST /api/qr-login/generate`
2. **检查状态**: `GET /api/qr-login/status`
3. **扫码标记**: `POST /api/qr-login/scan`
4. **确认登录**: `POST /api/qr-login/confirm`
5. **取消登录**: `POST /api/qr-login/cancel`
详细的API文档请查看:[docs/qr-login-api.md](docs/qr-login-api.md)
## 状态流转
```
loading → active → scanned → confirmed ✅
↓ ↓ ↓
error expired cancelled
```
- **loading**: 正在生成二维码
- **active**: 二维码有效,等待扫码
- **scanned**: 已扫码,等待用户确认
- **confirmed**: 用户确认,登录成功
- **expired**: 二维码过期
- **error**: 生成失败
- **cancelled**: 用户取消登录
## 安全机制
1. **时效控制**:二维码默认5分钟过期
2. **一次性使用**:每个二维码只能使用一次
3. **状态验证**:严格的状态流转控制
4. **用户验证**:移动端需要用户登录状态
5. **HTTPS传输**:敏感数据加密传输
## 自定义配置
### 样式自定义
```less
.qr-login-container {
// 自定义容器样式
padding: 20px;
.qr-code-wrapper {
// 自定义二维码区域样式
min-height: 250px;
}
}
```
### 参数配置
```typescript
// 二维码大小
const QR_CODE_SIZE = 200;
// 过期时间(秒)
const EXPIRE_TIME = 300;
// 状态检查间隔(毫秒)
const CHECK_INTERVAL = 2000;
```
## 开发调试
### 启用调试模式
```javascript
// 在浏览器控制台执行
localStorage.setItem('debug', 'qr-login');
```
### 查看网络请求
使用浏览器开发者工具的Network面板监控API请求。
### 模拟测试
访问演示页面 `/qr-demo` 可以模拟各种状态和场景。
## 部署注意事项
1. **HTTPS要求**:生产环境必须使用HTTPS
2. **跨域配置**:确保API接口支持跨域请求
3. **移动端适配**:确保移动端页面正常显示
4. **性能优化**:合理设置轮询间隔和缓存策略
## 故障排除
### 常见问题
1. **二维码不显示**
- 检查网络连接
- 确认API接口正常
- 查看控制台错误信息
2. **扫码无响应**
- 检查二维码是否过期
- 确认移动端网络正常
- 验证用户登录状态
3. **登录失败**
- 检查token有效性
- 确认用户权限
- 查看后端日志
### 调试步骤
1. 打开浏览器开发者工具
2. 查看Console面板的错误信息
3. 监控Network面板的API请求
4. 检查Application面板的本地存储
## 更新日志
### v1.0.0 (2024-01-XX)
- ✅ 完成基础二维码登录功能
- ✅ 支持实时状态更新
- ✅ 集成到登录页面
- ✅ 创建移动端确认页面
- ✅ 完善文档和演示
## 技术栈
- **前端框架**: Vue 3 + TypeScript
- **UI组件库**: Ant Design Vue
- **二维码生成**: qrcode + ele-admin-pro
- **状态管理**: Pinia
- **路由管理**: Vue Router
- **HTTP客户端**: Axios
## 贡献指南
1. Fork 项目
2. 创建功能分支
3. 提交代码变更
4. 推送到分支
5. 创建 Pull Request
## 许可证
MIT License