peixue-dev/Archive/peidu-temp-files/docs/[一次性]管理师端前端过滤逻辑错误修复-2026-01-25.md

5.6 KiB
Raw Blame History

管理师端前端过滤逻辑错误修复

修复时间: 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:确保订单已支付
  • 两个条件都满足,才显示在待派单列表

🧪 测试验证

测试步骤

  1. 家长端支付

    • 创建订单status=0
    • 完成支付status=1, payStatus=1
  2. 管理师端验证

    • 刷新管理师首页
    • 查看"待派单"数量
    • 应该显示 > 0
    • 点击"查看全部"
    • 应该看到刚才支付的订单
  3. 日志验证

// 应该看到:
 过滤后的待派单订单数: 1 (或更多)
// 而不是:
 过滤后的待派单订单数: 0

📝 修改文件清单

前端文件

  1. peidu/uniapp/src/pages/index/components/ManagerHome.vue

    • 第447-453行修复过滤逻辑
  2. 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
测试状态: 待测试