# 忘记密码弹窗功能实现说明
## 📋 **功能概述**
将原来的忘记密码页面跳转改为弹窗形式,按照设计图实现两步式密码重置流程。
## 🎨 **设计特点**
### 1. **两步式流程**
- **步骤1**:验证手机号码
- 输入手机号
- 输入短信验证码(带倒计时)
- 选择用户类型(员工/学员)
- **步骤2**:设置新密码
- 输入新密码
- 确认新密码
- 密码可见性切换
### 2. **视觉设计**
- **步骤指示器**:圆形数字 + 连接线,激活状态为绿色
- **输入框**:灰色背景,圆角设计
- **验证码按钮**:绿色背景,带倒计时功能
- **用户类型选择**:点击弹出选择器
- **操作按钮**:全宽绿色按钮
## 🔧 **技术实现**
### 1. **前端组件结构**
```vue
1
验证手机号码
2
设置新密码
下一步
```
### 2. **数据结构**
```javascript
data() {
return {
// 弹窗控制
showForgotModal: false,
currentStep: 1,
showUserTypeModal: false,
// 验证码倒计时
codeCountdown: 0,
// 密码可见性
showNewPassword: false,
showConfirmPassword: false,
// 表单数据
forgotForm: {
mobile: '',
code: '',
userType: '',
newPassword: '',
confirmPassword: ''
},
// 用户类型选项
selectedUserType: {},
userTypeOptions: [
{ value: 'staff', text: '员工' },
{ value: 'member', text: '学员' }
]
}
}
```
### 3. **核心方法**
```javascript
// 打开弹窗
forgot() {
this.showForgotModal = true;
this.currentStep = 1;
this.resetForgotForm();
}
// 发送验证码
async sendVerificationCode() {
// 表单验证
// 调用API发送验证码
// 开始倒计时
}
// 下一步
nextStep() {
// 验证当前步骤数据
// 调用验证码验证API
// 切换到步骤2
}
// 重置密码
async resetPassword() {
// 密码验证
// 调用重置密码API
// 显示成功提示
}
```
## 🌐 **API接口**
### 1. **发送验证码**
```javascript
// POST /common/sendVerificationCode
{
mobile: "13800138000",
type: "reset_password",
user_type: "staff" // 或 "member"
}
```
### 2. **验证验证码**
```javascript
// POST /common/verifyCode
{
mobile: "13800138000",
code: "123456",
type: "reset_password",
user_type: "staff"
}
```
### 3. **重置密码**
```javascript
// POST /common/resetPassword
{
mobile: "13800138000",
code: "123456",
new_password: "newpassword123",
user_type: "staff"
}
```
## 🎯 **用户体验优化**
### 1. **表单验证**
- 手机号格式验证
- 验证码长度验证
- 密码强度验证
- 确认密码一致性验证
### 2. **交互反馈**
- 发送验证码倒计时(60秒)
- 加载状态提示
- 成功/失败消息提示
- 密码可见性切换
### 3. **错误处理**
- 网络异常处理
- 接口错误提示
- 表单验证错误提示
## 📱 **响应式设计**
### 1. **弹窗尺寸**
- 宽度:90%,最大600rpx
- 高度:自适应内容
- 圆角:20rpx
- 居中显示
### 2. **输入框设计**
- 高度:100rpx
- 背景:#f5f5f5
- 圆角:10rpx
- 内边距:0 30rpx
### 3. **按钮设计**
- 主色调:#00be8c(绿色)
- 高度:100rpx
- 圆角:10rpx
- 全宽布局
## 🔄 **状态管理**
### 1. **步骤控制**
```javascript
currentStep: 1 // 1=验证手机号, 2=设置密码
```
### 2. **表单重置**
```javascript
resetForgotForm() {
this.forgotForm = {
mobile: '',
code: '',
userType: '',
newPassword: '',
confirmPassword: ''
};
this.selectedUserType = {};
this.codeCountdown = 0;
}
```
### 3. **弹窗关闭**
```javascript
closeForgotModal() {
this.showForgotModal = false;
this.currentStep = 1;
this.resetForgotForm();
}
```
## 🧪 **测试要点**
### 1. **功能测试**
- [ ] 弹窗正常打开/关闭
- [ ] 步骤切换正常
- [ ] 验证码发送和倒计时
- [ ] 用户类型选择
- [ ] 密码重置流程
### 2. **UI测试**
- [ ] 步骤指示器状态变化
- [ ] 输入框样式正确
- [ ] 按钮状态和颜色
- [ ] 弹窗居中显示
- [ ] 响应式布局
### 3. **交互测试**
- [ ] 表单验证提示
- [ ] 网络请求状态
- [ ] 错误处理机制
- [ ] 成功反馈
## 📝 **使用说明**
### 1. **触发方式**
点击登录页面的"忘记登录密码"按钮
### 2. **操作流程**
1. 输入手机号
2. 选择用户类型
3. 点击"发送验证码"
4. 输入收到的验证码
5. 点击"下一步"
6. 输入新密码和确认密码
7. 点击"确认修改"
### 3. **注意事项**
- 验证码有效期通常为5-10分钟
- 密码长度不少于6位
- 两次密码输入必须一致
- 需要选择正确的用户类型
---
**实现完成时间**:2025-07-31
**状态**:✅ 前端UI和交互逻辑已完成
**待完成**:后端API接口实现