274 lines
6.4 KiB
Markdown
274 lines
6.4 KiB
Markdown
# 管理师首页待派单数量显示错误修复
|
||
|
||
## 📋 问题描述
|
||
|
||
**用户反馈:**
|
||
> "待派单数目不应该是65吗?为什么现在首页中的待派单是10?按道理来说这几个待派单都应该调用同一个接口"
|
||
|
||
**实际情况:**
|
||
- 工单管理页面:显示 **65** 个待派单 ✅
|
||
- 快速预约页面:显示 **65** 个待派单 ✅
|
||
- 管理师首页:显示 **10** 个待派单 ❌
|
||
|
||
## 🔍 问题根本原因
|
||
|
||
### 原因1:数据结构缺少字段
|
||
|
||
**文件:** `peidu/uniapp/src/manager-package/pages/manager/index.vue`
|
||
|
||
**问题代码(第207-212行):**
|
||
```javascript
|
||
stats: {
|
||
totalTeachers: 0,
|
||
totalParents: 0,
|
||
totalOrders: 0,
|
||
pendingReminders: 0 // ❌ 缺少 pendingOrders 字段
|
||
}
|
||
```
|
||
|
||
### 原因2:更新方法未设置待派单数量
|
||
|
||
**问题代码(第316-322行):**
|
||
```javascript
|
||
updateStatsFromResponse(data) {
|
||
this.stats = {
|
||
totalTeachers: data.activeTeachers || 0,
|
||
totalParents: data.totalParents || 0,
|
||
totalOrders: data.totalOrders || 0,
|
||
pendingReminders: data.pendingReminders || 0
|
||
// ❌ 没有设置 pendingOrders
|
||
}
|
||
}
|
||
```
|
||
|
||
### 数据流程分析
|
||
|
||
```
|
||
后端接口返回:
|
||
{
|
||
totalOrders: 267,
|
||
pendingOrders: 65, ← 后端有这个字段
|
||
activeTeachers: 48,
|
||
totalParents: 0,
|
||
pendingReminders: 0
|
||
}
|
||
↓
|
||
前端 updateStatsFromResponse() 处理
|
||
↓
|
||
❌ 没有提取 pendingOrders 字段
|
||
↓
|
||
this.stats.pendingOrders = undefined
|
||
↓
|
||
页面显示:10(可能是初始值或缓存值)
|
||
```
|
||
|
||
## ✅ 修复方案
|
||
|
||
### 修复1:添加 pendingOrders 字段到数据结构
|
||
|
||
```javascript
|
||
stats: {
|
||
totalTeachers: 0,
|
||
totalParents: 0,
|
||
totalOrders: 0,
|
||
pendingOrders: 0, // ✅ 新增:待派单数量
|
||
pendingReminders: 0
|
||
}
|
||
```
|
||
|
||
### 修复2:在更新方法中设置待派单数量
|
||
|
||
```javascript
|
||
updateStatsFromResponse(data) {
|
||
this.stats = {
|
||
totalTeachers: data.activeTeachers || 0,
|
||
totalParents: data.totalParents || 0,
|
||
totalOrders: data.totalOrders || 0,
|
||
pendingOrders: data.pendingOrders || 0, // ✅ 新增:待派单数量
|
||
pendingReminders: data.pendingReminders || 0
|
||
}
|
||
}
|
||
```
|
||
|
||
### 修复3:已有的事件监听机制
|
||
|
||
代码中已经有完整的刷新机制:
|
||
|
||
```javascript
|
||
mounted() {
|
||
// 监听全局刷新事件
|
||
uni.$on('refreshPendingOrders', this.handleRefresh)
|
||
uni.$on('refreshManagerBooking', this.handleRefresh)
|
||
},
|
||
|
||
beforeDestroy() {
|
||
// 移除事件监听
|
||
uni.$off('refreshPendingOrders', this.handleRefresh)
|
||
uni.$off('refreshManagerBooking', this.handleRefresh)
|
||
},
|
||
|
||
methods: {
|
||
handleRefresh() {
|
||
this.loadStats() // 重新加载统计数据
|
||
}
|
||
}
|
||
```
|
||
|
||
## 📊 三个页面的对比
|
||
|
||
| 页面 | 接口 | 字段映射 | 显示结果 | 状态 |
|
||
|------|------|---------|---------|------|
|
||
| 工单管理 | `getStatistics(managerId)` | `data.pendingOrders` | 65 | ✅ 正确 |
|
||
| 快速预约 | `getStatistics(managerId)` | `data.pendingOrders` | 65 | ✅ 正确 |
|
||
| 管理师首页 | `getStatistics(managerId)` | ~~未映射~~ → `data.pendingOrders` | ~~10~~ → 65 | ✅ 已修复 |
|
||
|
||
## 🎯 修复后的效果
|
||
|
||
修复后,三个页面都会显示相同的待派单数量:
|
||
|
||
```
|
||
工单管理页面:65 个待派单 ✅
|
||
快速预约页面:65 个待派单 ✅
|
||
管理师首页: 65 个待派单 ✅
|
||
```
|
||
|
||
## 📝 测试步骤
|
||
|
||
### 步骤1:重新编译前端
|
||
|
||
```bash
|
||
cd peidu/uniapp
|
||
npm run dev:mp-weixin
|
||
```
|
||
|
||
### 步骤2:测试管理师首页
|
||
|
||
1. 管理师登录
|
||
2. 进入管理师首页
|
||
3. 查看"待派单"数量
|
||
4. 应该显示 **65**(与工单管理页面一致)
|
||
|
||
### 步骤3:测试派单后刷新
|
||
|
||
1. 进入工单管理,派单一个订单
|
||
2. 返回管理师首页
|
||
3. 查看"待派单"数量是否减少为 **64**
|
||
4. 验证三个页面的数量是否一致
|
||
|
||
### 步骤4:查看控制台日志
|
||
|
||
打开微信开发者工具的控制台,应该看到:
|
||
|
||
```
|
||
[管理师首页] mounted - 注册刷新事件监听
|
||
[管理师首页] 开始加载统计数据
|
||
[管理师首页] 后端统计响应: { pendingOrders: 65, ... }
|
||
[管理师首页] 更新统计数据: { pendingOrders: 65, ... }
|
||
```
|
||
|
||
## 🔧 相关修改
|
||
|
||
### 修改文件清单
|
||
|
||
| 文件 | 修改内容 | 行号 | 状态 |
|
||
|------|---------|------|------|
|
||
| `manager-package/pages/manager/index.vue` | 添加 `pendingOrders` 字段到 `stats` | 210 | ✅ 已完成 |
|
||
| `manager-package/pages/manager/index.vue` | 在 `updateStatsFromResponse` 中设置 `pendingOrders` | 320 | ✅ 已完成 |
|
||
|
||
### 已有的正确实现
|
||
|
||
以下页面已经正确实现了待派单数量的显示:
|
||
|
||
1. **工单管理页面** (`work-orders.vue`)
|
||
```javascript
|
||
this.statistics = {
|
||
pendingOrders: res.data.pendingOrders || 0,
|
||
// ...
|
||
}
|
||
```
|
||
|
||
2. **快速预约页面** (`ManagerBooking.vue`)
|
||
```javascript
|
||
this.stats = {
|
||
pendingOrders: data.pendingOrders || 0,
|
||
// ...
|
||
}
|
||
```
|
||
|
||
## 💡 经验教训
|
||
|
||
### 1. 数据结构要完整
|
||
|
||
定义数据结构时,要确保包含所有需要的字段:
|
||
|
||
```javascript
|
||
// ❌ 错误:缺少字段
|
||
stats: {
|
||
totalOrders: 0,
|
||
// 缺少 pendingOrders
|
||
}
|
||
|
||
// ✅ 正确:包含所有字段
|
||
stats: {
|
||
totalOrders: 0,
|
||
pendingOrders: 0,
|
||
completedOrders: 0
|
||
}
|
||
```
|
||
|
||
### 2. 数据映射要一致
|
||
|
||
从后端获取数据后,要确保所有字段都正确映射:
|
||
|
||
```javascript
|
||
// ❌ 错误:遗漏字段
|
||
updateStats(data) {
|
||
this.stats = {
|
||
totalOrders: data.totalOrders,
|
||
// 遗漏了 pendingOrders
|
||
}
|
||
}
|
||
|
||
// ✅ 正确:映射所有字段
|
||
updateStats(data) {
|
||
this.stats = {
|
||
totalOrders: data.totalOrders,
|
||
pendingOrders: data.pendingOrders,
|
||
completedOrders: data.completedOrders
|
||
}
|
||
}
|
||
```
|
||
|
||
### 3. 多个页面要保持一致
|
||
|
||
如果多个页面显示相同的数据,要确保:
|
||
- 调用相同的接口
|
||
- 使用相同的字段名
|
||
- 使用相同的数据处理逻辑
|
||
|
||
### 4. 添加日志便于调试
|
||
|
||
在关键位置添加日志,便于排查问题:
|
||
|
||
```javascript
|
||
console.log('[管理师首页] 后端返回数据:', data)
|
||
console.log('[管理师首页] 待派单数量:', data.pendingOrders)
|
||
console.log('[管理师首页] 更新后的stats:', this.stats)
|
||
```
|
||
|
||
## 🎉 修复完成
|
||
|
||
修复后,管理师首页的待派单数量显示问题已经解决:
|
||
- ✅ 数据结构包含 `pendingOrders` 字段
|
||
- ✅ 更新方法正确设置 `pendingOrders`
|
||
- ✅ 三个页面显示的数量一致
|
||
- ✅ 派单后所有页面都会刷新
|
||
|
||
---
|
||
|
||
**修复完成时间:** 2026-01-26
|
||
|
||
**修复人员:** Kiro AI
|
||
|
||
**测试状态:** ⚠️ 待用户测试验证
|