335 lines
8.3 KiB
Markdown
335 lines
8.3 KiB
Markdown
# 🔍 服务日历跳转问题 - 调试指南
|
||
|
||
**日期:** 2026-01-26
|
||
**问题:** 选择家长身份后,从服务日历点击订单仍然跳转到陪伴员端
|
||
|
||
---
|
||
|
||
## 📋 问题现象
|
||
|
||
从日志可以看到:
|
||
```
|
||
at teacher-package/pages/order/detail.vue:308
|
||
```
|
||
|
||
这说明当前跳转到了**陪伴员端**的订单详情页面,而不是**家长端**。
|
||
|
||
---
|
||
|
||
## 🔍 诊断步骤
|
||
|
||
### 步骤1:确认修改是否生效
|
||
|
||
在服务日历页面的 `handleOrderClick` 方法中添加调试日志:
|
||
|
||
**文件:** `peidu/uniapp/src/user-package/pages/calendar/index.vue`
|
||
|
||
```javascript
|
||
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:检查用户信息存储
|
||
|
||
在"个人中心"页面,添加调试代码:
|
||
|
||
```javascript
|
||
onShow() {
|
||
const userInfo = uni.getStorageSync('userInfo')
|
||
console.log('=== 个人中心 - 用户信息 ===')
|
||
console.log('userInfo:', JSON.stringify(userInfo))
|
||
console.log('userType:', userInfo?.userType)
|
||
}
|
||
```
|
||
|
||
#### 方案2:修改身份切换逻辑
|
||
|
||
找到身份切换的代码,确保正确更新 `userType`:
|
||
|
||
```javascript
|
||
// 切换到家长身份
|
||
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
|
||
|
||
在控制台执行:
|
||
|
||
```javascript
|
||
// 获取当前用户信息
|
||
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',但仍跳转到陪伴员端
|
||
|
||
**原因:** 可能有其他地方也在处理跳转逻辑
|
||
|
||
**解决方案:**
|
||
|
||
#### 检查是否有多个跳转逻辑
|
||
|
||
搜索所有可能的跳转代码:
|
||
|
||
```bash
|
||
cd peidu/uniapp/src
|
||
grep -r "teacher-package/pages/order/detail" .
|
||
```
|
||
|
||
#### 检查日历组件
|
||
|
||
查看 `components/calendar/calendar.vue` 是否也有跳转逻辑:
|
||
|
||
```javascript
|
||
// 如果日历组件中有 @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`
|
||
|
||
```javascript
|
||
// 添加全局混入
|
||
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 })
|
||
}
|
||
}
|
||
})
|
||
```
|
||
|
||
然后在所有需要跳转的地方使用:
|
||
|
||
```javascript
|
||
// 服务日历页面
|
||
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. 删除 `dist` 和 `unpackage` 目录
|
||
3. 清除微信开发者工具缓存
|
||
4. 重新编译
|
||
|
||
### Q2:如何确认当前身份?
|
||
|
||
**A:** 在控制台执行:
|
||
```javascript
|
||
const userInfo = uni.getStorageSync('userInfo')
|
||
console.log('当前身份:', userInfo?.userType)
|
||
```
|
||
|
||
### Q3:如何手动切换身份?
|
||
|
||
**A:** 在控制台执行:
|
||
```javascript
|
||
// 切换到家长
|
||
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. 是否执行了清除缓存操作
|
||
|
||
这些信息将帮助我们更快地定位问题。
|