8.3 KiB
8.3 KiB
🎉 家长端日历按钮显示问题彻底修复
日期: 2026-01-24
状态: ✅ 已完成
📋 问题回顾
用户反馈:
"还是家长端存在开始服务,逻辑没有实现"
根本原因:
之前只修复了订单详情页面(order-package/pages/order/detail.vue),但是服务日历列表页面(pages/order/list.vue)也在显示"开始服务"按钮,这个页面没有修复!
✅ 已修复的文件
1. 订单详情页面 (第一次修复)
文件: peidu/uniapp/src/order-package/pages/order/detail.vue
- ✅ 添加了userType字段
- ✅ 根据角色显示不同按钮
- ✅ 家长端不显示"开始服务"
2. 服务日历列表页面 (第二次修复 - 本次)
文件: peidu/uniapp/src/pages/order/list.vue
- ✅ 添加了userType字段
- ✅ 根据角色显示不同按钮
- ✅ 家长端不显示"开始服务"
- ✅ 家长端显示"联系陪伴员"
- ✅ 添加了contactTeacher方法
🔍 修改详情
修改1: 添加用户角色字段
data() {
return {
// ... 其他字段
userType: null, // ✅ 新增:用户角色
}
}
修改2: 在onLoad中获取用户角色
onLoad() {
// ... 其他代码
// ✅ 获取用户角色
const userInfo = uni.getStorageSync('userInfo')
this.userType = userInfo?.userType || 'parent'
console.log('[服务日历] 用户角色:', this.userType)
// ... 其他代码
}
修改3: 根据角色显示不同按钮
订单卡片中的按钮:
<!-- 订单底部操作 -->
<view class="order-footer">
<view class="order-no">
<text>订单号: {{ order.orderNo }}</text>
</view>
<view class="order-actions">
<!-- ========== 陪伴员端按钮 ========== -->
<template v-if="userType === 'teacher'">
<view v-if="order.status === 1" class="action-btn primary" @click.stop="startService(order)">
<text>开始服务</text>
</view>
<view v-if="order.status === 2" class="action-btn success" @click.stop="completeService(order)">
<text>完成服务</text>
</view>
</template>
<!-- ========== 家长端按钮 ========== -->
<template v-else-if="userType === 'parent' || userType === 'user'">
<view v-if="order.teacherPhone" class="action-btn primary" @click.stop="contactTeacher(order)">
<text>联系陪伴员</text>
</view>
</template>
<!-- ========== 通用按钮 ========== -->
<view class="action-btn default" @click.stop="goToOrderDetail(order)">
<text>查看详情</text>
</view>
</view>
</view>
简化列表中的按钮:
<view class="order-footer">
<view class="order-no">
<text>{{ order.serviceName || '陪伴服务' }}</text>
</view>
<!-- ========== 陪伴员端按钮 ========== -->
<view v-if="userType === 'teacher' && order.status === 1" class="action-btn primary" @click.stop="startService(order)">
<text>开始服务</text>
</view>
<!-- ========== 家长端按钮 ========== -->
<view v-else-if="(userType === 'parent' || userType === 'user') && order.teacherPhone" class="action-btn primary" @click.stop="contactTeacher(order)">
<text>联系陪伴员</text>
</view>
</view>
修改4: 添加家长端专属方法
// ========== 家长端方法(新增 2026-01-24)==========
// 联系陪伴员
contactTeacher(order) {
if (!order.teacherPhone) {
uni.showToast({
title: '暂无陪伴员联系方式',
icon: 'none'
})
return
}
uni.showModal({
title: '联系陪伴员',
content: `是否拨打陪伴员电话:${order.teacherPhone}?`,
success: (res) => {
if (res.confirm) {
uni.makePhoneCall({
phoneNumber: order.teacherPhone.replace(/\*/g, '')
})
}
}
})
}
📊 修改前后对比
修改前:
<!-- 所有用户都看到相同的按钮 -->
<view v-if="order.status === 1" class="action-btn primary" @click.stop="startService(order)">
<text>开始服务</text>
</view>
修改后:
<!-- 根据用户角色显示不同按钮 -->
<!-- 陪伴员端 -->
<template v-if="userType === 'teacher'">
<view v-if="order.status === 1" class="action-btn primary" @click.stop="startService(order)">
<text>开始服务</text>
</view>
</template>
<!-- 家长端 -->
<template v-else-if="userType === 'parent' || userType === 'user'">
<view v-if="order.teacherPhone" class="action-btn primary" @click.stop="contactTeacher(order)">
<text>联系陪伴员</text>
</view>
</template>
🎯 功能区分
家长端服务日历:
- ✅ 查看服务安排
- ✅ 查看订单详情
- ✅ 联系陪伴员
- ❌ 不显示"开始服务"
- ❌ 不显示"完成服务"
陪伴员端服务日历:
- ✅ 查看工作安排
- ✅ 开始服务(签到)
- ✅ 完成服务(签退)
- ✅ 查看订单详情
- ❌ 不显示"联系陪伴员"
🧪 测试验证
测试步骤:
-
家长端测试
登录家长账号 → 进入服务日历 → 查看订单列表 预期结果: - ✅ 显示"联系陪伴员"按钮 - ✅ 显示"查看详情"按钮 - ❌ 不显示"开始服务"按钮 -
陪伴员端测试
登录陪伴员账号 → 进入服务日历 → 查看订单列表 预期结果: - ✅ 显示"开始服务"按钮 - ✅ 显示"完成服务"按钮 - ✅ 显示"查看详情"按钮 - ❌ 不显示"联系陪伴员"按钮 -
功能测试
家长端: - 点击"联系陪伴员" → 弹出拨号确认框 → 拨打电话 陪伴员端: - 点击"开始服务" → 跳转到签到页面 - 点击"完成服务" → 弹出确认框 → 完成服务
📝 修复的页面清单
| 页面 | 路径 | 状态 | 说明 |
|---|---|---|---|
| 订单详情 | order-package/pages/order/detail.vue | ✅ 已修复 | 第一次修复 |
| 服务日历列表 | pages/order/list.vue | ✅ 已修复 | 第二次修复(本次) |
🚀 下一步
1. 重新编译前端
# 在HBuilderX中
# 运行 → 运行到浏览器/小程序
2. 清除缓存
# 在微信开发者工具中
# 点击"清缓存" → "全部清除"
3. 测试验证
- 使用家长账号测试服务日历
- 使用陪伴员账号测试服务日历
- 确认按钮显示正确
💡 经验总结
为什么会出现这个问题?
-
多个页面显示相同内容
- 订单详情页面:
order-package/pages/order/detail.vue - 服务日历列表:
pages/order/list.vue - 需要同时修复所有相关页面
- 订单详情页面:
-
没有统一的权限管理
- 每个页面都需要单独判断用户角色
- 容易遗漏某些页面
改进建议:
-
创建权限指令
// 创建 v-permission 指令 Vue.directive('permission', { inserted(el, binding) { const userType = uni.getStorageSync('userInfo')?.userType const requiredType = binding.value if (userType !== requiredType) { el.parentNode && el.parentNode.removeChild(el) } } }) // 使用 <button v-permission="'teacher'">开始服务</button> -
使用Vuex统一管理用户信息
// store/user.js export default { state: { userInfo: null, userType: null }, getters: { isTeacher: state => state.userType === 'teacher', isParent: state => state.userType === 'parent' } } -
创建权限组件
<!-- Permission.vue --> <template> <view v-if="hasPermission"> <slot></slot> </view> </template> <script> export default { props: ['role'], computed: { hasPermission() { const userType = uni.getStorageSync('userInfo')?.userType return userType === this.role } } } </script> <!-- 使用 --> <Permission role="teacher"> <button>开始服务</button> </Permission>
✅ 总结
已彻底修复家长端日历按钮显示问题:
- ✅ 修复了订单详情页面
- ✅ 修复了服务日历列表页面
- ✅ 添加了用户角色判断逻辑
- ✅ 家长端不再显示"开始服务"按钮
- ✅ 家长端显示"联系陪伴员"按钮
- ✅ 陪伴员端显示"开始服务"按钮
现在家长端和陪伴员端的功能已经完全区分开来,不会再出现混淆的情况!