5.6 KiB
5.6 KiB
✅ 管理师端前端过滤逻辑错误修复
修复时间: 2026-01-25
问题类型: 前端过滤逻辑错误
影响范围: 管理师首页、快速预约页面
🔍 问题分析
现象
- 家长支付成功后,订单状态变为
status=1, pay_status=1 - 后端API返回:
pendingOrders: 3(有3个待派单订单) - 但管理师端首页显示:
待派单: 0 - 管理师端看不到任何订单
日志分析
后端返回数据:
{
"id": 358,
"status": 1, // ✅ 已支付,待派单
"payStatus": 1, // ✅ 已支付
"orderNo": "PD202601251756244767"
}
前端过滤逻辑:
// ❌ 错误的过滤逻辑
const isPending = item.status === 0 // 错误!应该是 status === 1
// 日志输出:
🚫 过滤掉非待派单订单: 358 status: 1
✅ 过滤后的待派单订单数: 0
根本原因
前端过滤逻辑错误:
- 前端认为
status=0是待派单 - 但实际上
status=1才是待派单(方案A:先支付后派单)
状态定义混乱:
- 后端:
status=0是待支付,status=1是待派单 - 前端:错误地认为
status=0是待派单
✅ 解决方案
修复内容
1. 修复ManagerHome组件
文件: peidu/uniapp/src/pages/index/components/ManagerHome.vue
修改前(第447-453行):
// ❌ 错误:过滤 status=0
const pendingRecords = records.filter(item => {
const isPending = item.status === 0
if (!isPending) {
console.log('[管理师首页] 🚫 过滤掉非待派单订单:', item.id, 'status:', item.status)
}
return isPending
})
修改后:
// ✅ 正确:过滤 status=1 且 payStatus=1
const pendingRecords = records.filter(item => {
const isPending = item.status === 1 && item.payStatus === 1
if (!isPending) {
console.log('[管理师首页] 🚫 过滤掉非待派单订单:', item.id, 'status:', item.status, 'payStatus:', item.payStatus)
}
return isPending
})
2. 修复ManagerBooking组件
文件: peidu/uniapp/src/pages/booking/components/ManagerBooking.vue
修改前(第232-238行):
// ❌ 错误:过滤 status=0
const pendingRecords = records.filter(item => {
const isPending = item.status === 0
if (!isPending) {
console.log('[ManagerBooking] 🚫 过滤掉非待派单订单:', item.id, 'status:', item.status)
}
return isPending
})
修改后:
// ✅ 正确:过滤 status=1 且 payStatus=1
const pendingRecords = records.filter(item => {
const isPending = item.status === 1 && item.payStatus === 1
if (!isPending) {
console.log('[ManagerBooking] 🚫 过滤掉非待派单订单:', item.id, 'status:', item.status, 'payStatus:', item.payStatus)
}
return isPending
})
📊 状态定义(方案A)
订单状态流转
0. 待支付 (status=0, pay_status=0)
↓ 家长支付
1. 待派单 (status=1, pay_status=1) ← 管理师应该看到这个状态
↓ 管理师派单
2. 已派单 (status=2, pay_status=1)
↓ 陪伴员接单
3. 待服务 (status=3, pay_status=1)
↓ 陪伴员签到
4. 服务中 (status=4, pay_status=1)
↓ 陪伴员签退
5. 已完成 (status=5, pay_status=1)
管理师端过滤条件
正确的过滤条件:
item.status === 1 && item.payStatus === 1
说明:
status=1:订单已支付,等待管理师派单payStatus=1:确保订单已支付- 两个条件都满足,才显示在待派单列表
🧪 测试验证
测试步骤
-
家长端支付:
- 创建订单(status=0)
- 完成支付(status=1, payStatus=1)
-
管理师端验证:
- 刷新管理师首页
- 查看"待派单"数量
- ✅ 应该显示 > 0
- 点击"查看全部"
- ✅ 应该看到刚才支付的订单
-
日志验证:
// 应该看到:
✅ 过滤后的待派单订单数: 1 (或更多)
// 而不是:
❌ 过滤后的待派单订单数: 0
📝 修改文件清单
前端文件
-
peidu/uniapp/src/pages/index/components/ManagerHome.vue- 第447-453行:修复过滤逻辑
-
peidu/uniapp/src/pages/booking/components/ManagerBooking.vue- 第232-238行:修复过滤逻辑
🎯 核心改进
修改前
后端返回: status=1 (待派单)
前端过滤: status === 0 (错误!)
结果: 订单被过滤掉,管理师看不到 ❌
修改后
后端返回: status=1 (待派单)
前端过滤: status === 1 && payStatus === 1 (正确!)
结果: 订单显示在待派单列表 ✅
⚠️ 注意事项
1. 状态定义一致性
确保前后端状态定义一致:
- 后端:
status=1是待派单 - 前端:过滤
status=1的订单
2. 双重验证
过滤条件包含两个验证:
status === 1:订单状态是待派单payStatus === 1:订单已支付
3. 日志调试
保留详细的日志输出,方便调试:
console.log('[管理师首页] 🚫 过滤掉非待派单订单:', item.id, 'status:', item.status, 'payStatus:', item.payStatus)
📝 总结
问题根源
前端过滤逻辑错误,把 status=1(待派单)的订单当作"非待派单"过滤掉了。
解决方案
修改前端过滤条件,从 status === 0 改为 status === 1 && payStatus === 1。
修复状态
✅ ManagerHome组件已修复
✅ ManagerBooking组件已修复
✅ 过滤逻辑已统一
✅ 可以立即测试
修复完成时间: 2026-01-25
修复人员: Kiro AI
测试状态: 待测试