Files
zyt/APPOINTMENT_REFRESH_FEATURE.md
T
2026-03-06 14:27:24 +08:00

235 lines
5.2 KiB
Markdown

# 挂号时间段刷新功能说明
## 功能概述
为预约挂号功能添加了时间段刷新按钮,防止在挂号过程中时间段被其他用户占用的情况。
## 实现的功能
### 1. 刷新按钮
**位置**: 时间段选择区域的右上角
**样式**:
- 主题色按钮
- 带刷新图标
- 显示加载状态
**触发条件**:
- 已选择医生
- 已选择日期
- 有可用时间段
### 2. 刷新逻辑
**功能流程**:
1. 用户点击"刷新"按钮
2. 显示加载状态
3. 清空当前选择的时间(临时)
4. 重新从后端获取最新的时间段数据
5. 更新时间段列表
6. 如果之前选择的时间段仍然可用,自动恢复选择
7. 显示刷新成功提示
**代码实现**:
```typescript
const handleRefreshSlots = async () => {
if (!selectedDoctorId.value || !form.date) {
return
}
try {
refreshing.value = true
// 清空当前选择的时间
const previousSelection = form.appointmentTime
form.appointmentTime = ''
// 重新加载时间段
await loadTimeSlots()
// 如果之前选择的时间段仍然可用,保持选择
if (previousSelection) {
const slot = timeSlots.value.find(s => s.time === previousSelection)
if (slot && slot.available) {
form.appointmentTime = previousSelection
}
}
feedback.msgSuccess('刷新成功')
} catch (error) {
console.error('刷新失败:', error)
feedback.msgError('刷新失败,请重试')
} finally {
refreshing.value = false
}
}
```
### 3. 智能选择保持
**特性**:
- 刷新前记录用户选择的时间段
- 刷新后检查该时间段是否仍然可用
- 如果可用,自动恢复选择
- 如果不可用(已被占用),清空选择
**用户体验**:
- 如果时间段仍可用:用户无需重新选择
- 如果时间段已被占用:自动清空,提示用户重新选择
## 使用场景
### 场景1: 正常刷新
```
用户选择时间段 → 点击刷新 → 时间段仍可用 → 保持选择 ✓
```
### 场景2: 时间段被占用
```
用户选择时间段 → 点击刷新 → 时间段已被占用 → 清空选择 → 提示重新选择
```
### 场景3: 长时间停留
```
用户打开挂号页面 → 浏览其他内容 → 返回挂号 → 点击刷新 → 获取最新状态
```
## 界面展示
### 时间段标题栏
```
┌─────────────────────────────────────┐
│ 可预约时段 [刷新] 按钮 │
└─────────────────────────────────────┘
```
### 刷新状态
```
加载中: [刷新中...] (按钮禁用,显示loading)
成功: 提示"刷新成功"
失败: 提示"刷新失败,请重试"
```
## 技术实现
### 1. 状态管理
```typescript
const refreshing = ref(false) // 刷新状态
```
### 2. 图标导入
```typescript
import { Refresh as RefreshIcon } from '@element-plus/icons-vue'
```
### 3. 样式设计
```scss
.time-slots-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 12px;
padding: 8px 0;
.header-title {
font-size: 14px;
font-weight: 500;
color: #606266;
}
}
```
## 优势
### 1. 防止冲突
- 实时获取最新数据
- 避免预约已被占用的时间段
- 减少预约失败率
### 2. 用户体验
- 一键刷新,操作简单
- 智能保持选择
- 清晰的状态反馈
### 3. 系统稳定性
- 错误处理完善
- 加载状态明确
- 不影响其他功能
## 注意事项
### 1. 刷新频率
- 建议用户在提交前刷新一次
- 避免频繁刷新增加服务器负担
- 可考虑添加刷新间隔限制
### 2. 网络异常
- 刷新失败时显示错误提示
- 保持原有数据不变
- 用户可以重试
### 3. 并发处理
- 刷新时禁用按钮
- 防止重复请求
- 确保数据一致性
## 测试建议
### 测试1: 正常刷新
1. 选择医生和日期
2. 选择一个时间段
3. 点击刷新按钮
4. 验证时间段列表更新
5. 验证选择保持
### 测试2: 时间段被占用
1. 选择一个时间段
2. 在另一个浏览器/账号中预约该时间段
3. 点击刷新按钮
4. 验证该时间段变为"已约"
5. 验证选择被清空
### 测试3: 网络异常
1. 断开网络
2. 点击刷新按钮
3. 验证显示错误提示
4. 验证原有数据保持不变
### 测试4: 快速点击
1. 快速连续点击刷新按钮
2. 验证只发送一次请求
3. 验证按钮在加载时禁用
## 未来优化
### 1. 自动刷新
- 可以添加定时自动刷新
- 例如每30秒自动刷新一次
- 用户可以关闭自动刷新
### 2. 刷新提示
- 显示上次刷新时间
- 提示"数据可能已过期,建议刷新"
- 智能判断是否需要刷新
### 3. 实时更新
- 使用WebSocket实现实时更新
- 时间段被占用时自动更新
- 无需手动刷新
## 相关文档
- `APPOINTMENT_SYSTEM.md` - 预约系统完整文档
- `APPOINTMENT_QUICK_START.md` - 快速开始指南
## 版本信息
- 实现时间: 2024-03-06
- 版本: v1.0
- 状态: ✅ 已完成
---
**重要提示**: 建议用户在提交预约前点击刷新按钮,确保获取最新的时间段状态,避免预约失败!