peixue-dev/Archive/peidu-temp-files/docs/[一次性]服务日历跳转问题-调试指南-2026-01-26.md

8.3 KiB
Raw Blame History

🔍 服务日历跳转问题 - 调试指南

日期: 2026-01-26
问题: 选择家长身份后,从服务日历点击订单仍然跳转到陪伴员端


📋 问题现象

从日志可以看到:

at teacher-package/pages/order/detail.vue:308

这说明当前跳转到了陪伴员端的订单详情页面,而不是家长端


🔍 诊断步骤

步骤1确认修改是否生效

在服务日历页面的 handleOrderClick 方法中添加调试日志:

文件: peidu/uniapp/src/user-package/pages/calendar/index.vue

handleOrderClick(order) {
  // 🔍 调试日志 - 开始
  console.log('=== 订单点击调试 ===')
  console.log('1. 订单ID:', order.id)
  
  const userInfo = uni.getStorageSync('userInfo')
  console.log('2. userInfo:', JSON.stringify(userInfo))
  console.log('3. userType:', userInfo?.userType)
  
  let detailUrl = ''
  if (userInfo?.userType === 'teacher') {
    detailUrl = `/teacher-package/pages/order/detail?id=${order.id}`
    console.log('4. 判断结果: 陪伴员端')
  } else if (userInfo?.userType === 'manager') {
    detailUrl = `/manager-package/pages/manager/work-order-detail?id=${order.id}`
    console.log('4. 判断结果: 管理师端')
  } else {
    detailUrl = `/order-package/pages/order/detail?id=${order.id}`
    console.log('4. 判断结果: 家长端 (默认)')
  }
  
  console.log('5. 跳转路径:', detailUrl)
  console.log('=== 调试结束 ===')
  // 🔍 调试日志 - 结束
  
  uni.navigateTo({ url: detailUrl })
}

步骤2查看控制台输出

点击订单后,查看控制台输出:

预期输出(家长身份):

=== 订单点击调试 ===
1. 订单ID: 332
2. userInfo: {"userType":"parent",...}
3. userType: parent
4. 判断结果: 家长端 (默认)
5. 跳转路径: /order-package/pages/order/detail?id=332
=== 调试结束 ===

实际输出(如果仍然跳转到陪伴员端):

=== 订单点击调试 ===
1. 订单ID: 332
2. userInfo: {"userType":"teacher",...}
3. userType: teacher
4. 判断结果: 陪伴员端
5. 跳转路径: /teacher-package/pages/order/detail?id=332
=== 调试结束 ===

🎯 根据输出结果采取行动

情况A没有看到调试日志

原因: 修改没有生效,缓存问题

解决方案:

  1. 执行脚本:Archive/peidu-temp-files/scripts/[一次性]强制清除缓存重新编译-2026-01-26.bat
  2. 或手动执行以下步骤:
    • 停止开发服务器Ctrl+C
    • 删除 peidu/uniapp/dist 目录
    • 删除 peidu/uniapp/unpackage 目录
    • 清除微信开发者工具缓存
    • 重新运行 npm run dev:mp-weixin
    • 在微信开发者工具中重新编译

情况B看到调试日志但 userType 是 'teacher'

原因: 用户信息中的 userType 值不正确

解决方案:

方案1检查用户信息存储

在"个人中心"页面,添加调试代码:

onShow() {
  const userInfo = uni.getStorageSync('userInfo')
  console.log('=== 个人中心 - 用户信息 ===')
  console.log('userInfo:', JSON.stringify(userInfo))
  console.log('userType:', userInfo?.userType)
}

方案2修改身份切换逻辑

找到身份切换的代码,确保正确更新 userType

// 切换到家长身份
switchToParent() {
  const userInfo = uni.getStorageSync('userInfo')
  userInfo.userType = 'parent'  // 确保设置为 'parent'
  uni.setStorageSync('userInfo', userInfo)
  console.log('已切换到家长身份:', userInfo.userType)
}

// 切换到陪伴员身份
switchToTeacher() {
  const userInfo = uni.getStorageSync('userInfo')
  userInfo.userType = 'teacher'  // 确保设置为 'teacher'
  uni.setStorageSync('userInfo', userInfo)
  console.log('已切换到陪伴员身份:', userInfo.userType)
}

方案3手动修复 userType

在控制台执行:

// 获取当前用户信息
const userInfo = uni.getStorageSync('userInfo')
console.log('当前 userInfo:', userInfo)

// 修改为家长身份
userInfo.userType = 'parent'
uni.setStorageSync('userInfo', userInfo)
console.log('已修改为家长身份')

// 验证
const newUserInfo = uni.getStorageSync('userInfo')
console.log('新的 userInfo:', newUserInfo)

情况C看到调试日志userType 是 'parent',但仍跳转到陪伴员端

原因: 可能有其他地方也在处理跳转逻辑

解决方案:

检查是否有多个跳转逻辑

搜索所有可能的跳转代码:

cd peidu/uniapp/src
grep -r "teacher-package/pages/order/detail" .

检查日历组件

查看 components/calendar/calendar.vue 是否也有跳转逻辑:

// 如果日历组件中有 @schedule-click 事件
handleScheduleClick(schedule) {
  // 确保这里也根据身份跳转
  const userInfo = uni.getStorageSync('userInfo')
  const userType = userInfo?.userType || 'parent'
  
  let url = ''
  if (userType === 'teacher') {
    url = `/teacher-package/pages/order/detail?id=${schedule.orderId}`
  } else if (userType === 'manager') {
    url = `/manager-package/pages/manager/work-order-detail?id=${schedule.orderId}`
  } else {
    url = `/order-package/pages/order/detail?id=${schedule.orderId}`
  }
  
  uni.navigateTo({ url })
}

🛠️ 终极解决方案

如果以上方法都不行,使用全局混入统一处理:

文件: peidu/uniapp/src/main.js

// 添加全局混入
Vue.mixin({
  methods: {
    // 统一的订单详情跳转方法
    $goToOrderDetail(orderId) {
      const userInfo = uni.getStorageSync('userInfo')
      const userType = userInfo?.userType || 'parent'
      
      console.log('[全局跳转] 订单ID:', orderId, '身份:', userType)
      
      let url = ''
      if (userType === 'teacher') {
        url = `/teacher-package/pages/order/detail?id=${orderId}`
      } else if (userType === 'manager') {
        url = `/manager-package/pages/manager/work-order-detail?id=${orderId}`
      } else {
        url = `/order-package/pages/order/detail?id=${orderId}`
      }
      
      console.log('[全局跳转] 跳转到:', url)
      uni.navigateTo({ url })
    }
  }
})

然后在所有需要跳转的地方使用:

// 服务日历页面
handleOrderClick(order) {
  this.$goToOrderDetail(order.id)
}

// 日历组件
handleScheduleClick(schedule) {
  this.$goToOrderDetail(schedule.orderId)
}

// 订单列表页面
goToDetail(orderId) {
  this.$goToOrderDetail(orderId)
}

📝 验证清单

完成修改后,按以下步骤验证:

  • 控制台显示调试日志
  • userType 的值是 'parent'
  • 跳转路径是 /order-package/pages/order/detail?id=xxx
  • 成功跳转到家长端订单详情页面
  • 订单详情页面显示"查看打卡记录"按钮
  • 点击"查看打卡记录"按钮能正常跳转

🎉 预期效果

家长身份:

  1. 点击订单 → 跳转到家长端订单详情
  2. 看到"查看打卡记录"按钮
  3. 点击按钮 → 跳转到打卡记录列表

陪伴员身份:

  1. 点击订单 → 跳转到陪伴员端订单详情
  2. 看到"接单"、"开始服务"等按钮

管理师身份:

  1. 点击订单 → 跳转到管理师端工单详情
  2. 看到"派单"、"查看详情"等按钮

💡 常见问题

Q1为什么修改后没有效果

A 可能是缓存问题。请完全清除缓存并重新编译:

  1. 停止开发服务器
  2. 删除 distunpackage 目录
  3. 清除微信开发者工具缓存
  4. 重新编译

Q2如何确认当前身份

A 在控制台执行:

const userInfo = uni.getStorageSync('userInfo')
console.log('当前身份:', userInfo?.userType)

Q3如何手动切换身份

A 在控制台执行:

// 切换到家长
const userInfo = uni.getStorageSync('userInfo')
userInfo.userType = 'parent'
uni.setStorageSync('userInfo', userInfo)

// 切换到陪伴员
userInfo.userType = 'teacher'
uni.setStorageSync('userInfo', userInfo)

// 切换到管理师
userInfo.userType = 'manager'
uni.setStorageSync('userInfo', userInfo)

📞 需要帮助?

如果问题仍然存在,请提供以下信息:

  1. 控制台完整输出
  2. userInfo 的完整内容
  3. 当前选择的身份
  4. 跳转的实际路径
  5. 是否执行了清除缓存操作

这些信息将帮助我们更快地定位问题。