8.3 KiB
8.3 KiB
🔍 服务日历跳转问题 - 调试指南
日期: 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:没有看到调试日志
原因: 修改没有生效,缓存问题
解决方案:
- 执行脚本:
Archive/peidu-temp-files/scripts/[一次性]强制清除缓存重新编译-2026-01-26.bat - 或手动执行以下步骤:
- 停止开发服务器(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 - 成功跳转到家长端订单详情页面
- 订单详情页面显示"查看打卡记录"按钮
- 点击"查看打卡记录"按钮能正常跳转
🎉 预期效果
家长身份:
- 点击订单 → 跳转到家长端订单详情
- 看到"查看打卡记录"按钮
- 点击按钮 → 跳转到打卡记录列表
陪伴员身份:
- 点击订单 → 跳转到陪伴员端订单详情
- 看到"接单"、"开始服务"等按钮
管理师身份:
- 点击订单 → 跳转到管理师端工单详情
- 看到"派单"、"查看详情"等按钮
💡 常见问题
Q1:为什么修改后没有效果?
A: 可能是缓存问题。请完全清除缓存并重新编译:
- 停止开发服务器
- 删除
dist和unpackage目录 - 清除微信开发者工具缓存
- 重新编译
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)
📞 需要帮助?
如果问题仍然存在,请提供以下信息:
- 控制台完整输出
userInfo的完整内容- 当前选择的身份
- 跳转的实际路径
- 是否执行了清除缓存操作
这些信息将帮助我们更快地定位问题。