5.6 KiB
5.6 KiB
Bug Fixes Summary
修复的问题
1. 处方查看权限问题 ✅ (已解决)
问题描述:
- 医生A开了处方后,医生B点击"查看病历"时提示"无权限查看此处方"
- 其他医生无法查看患者的历史处方记录
根本原因:
- 权限检查逻辑已经正确实现,允许有
tcm.diagnosis/kaifang权限的医生查看所有处方(只读模式) - 问题可能是前端缓存或权限配置问题
解决方案:
- 确认
PrescriptionLogic::canViewPrescription()方法已包含以下逻辑:// 有开方权限的医生可以查看所有处方(只读) $permissions = $adminInfo['permissions'] ?? []; if (in_array('tcm.diagnosis/kaifang', $permissions, true)) { return true; } - 权限层级(从高到低):
- 超级管理员
- 创建人
- 医助
- 共享处方
- 可见角色
- 有开方权限的医生(
tcm.diagnosis/kaifang)
文件: server/app/adminapi/logic/tcm/PrescriptionLogic.php
2. 处方组件重复请求问题 ✅ (已解决)
问题描述:
- 点击"开处方"或"查看病历"按钮时,重复请求
/tcm.prescription/detail接口 - 快速连续点击导致多次调用
根本原因:
- 已经实现了
isOpening标志防止重复调用 - 防重复逻辑已经正确工作
解决方案:
- 确认
open()和openById()方法已包含防重复逻辑:const isOpening = ref(false) const open = async (data: any, options?: { templateId?: number; stationName?: string }) => { if (isOpening.value) { console.warn('处方正在打开中,请勿重复点击') return } isOpening.value = true try { // ... 处理逻辑 } finally { setTimeout(() => { isOpening.value = false }, 500) } }
文件: admin/src/components/tcm-prescription/index.vue
3. 订单撤回后处方审核状态重置 ✅ (已修复)
问题描述:
- 撤回订单后,关联的处方审核状态没有重置为"待审核"
- 缺少
audit_by_name字段的清空
解决方案:
- 在
withdraw()方法中添加了audit_by_name字段的清空:Prescription::where('id', $prescriptionId) ->whereNull('delete_time') ->update([ 'audit_status' => 0, // 0=待审核 'audit_time' => null, 'audit_by' => null, 'audit_by_name' => '', // 新增:清空审核人姓名 'audit_remark' => '', 'update_time' => time(), ]);
文件: server/app/adminapi/logic/tcm/PrescriptionOrderLogic.php
4. 物流轨迹自动加载 ✅ (已实现)
问题描述:
- 用户希望打开订单详情时,如果有快递单号,自动加载物流轨迹
- 不需要手动点击"查询轨迹"按钮
解决方案:
- 已经实现自动加载逻辑:
async function openDetail(id: number) { // ... 加载订单详情 if (d) { detailLogisticsExpress.value = String(d.express_company || 'auto') || 'auto' if (String(d.tracking_number || '').trim()) { fetchLogisticsTrace() // 自动加载物流轨迹 } fetchLogs(id) } } - 物流查询优先从数据库读取,如果数据库没有数据,再调用快递100 API
- 按钮文字改为"刷新轨迹",用于手动刷新最新物流信息
文件: admin/src/views/consumer/prescription/order_list.vue
测试建议
1. 处方查看权限测试
- 使用医生A账号创建处方
- 使用医生B账号(有
tcm.diagnosis/kaifang权限)点击"查看病历" - 确认可以正常查看处方详情(只读模式)
- 确认医生B不能编辑医生A创建的处方
2. 重复请求测试
- 快速连续点击"开处方"按钮多次
- 检查浏览器开发者工具的Network面板
- 确认只发送一次
/tcm.prescription/detail请求 - 确认控制台显示"处方正在打开中,请勿重复点击"警告
3. 订单撤回测试
- 创建一个处方业务订单(处方审核状态为"已通过")
- 点击"撤回"按钮
- 确认订单状态变为"已取消"
- 在处方列表中确认该处方的审核状态变为"待审核"
- 确认审核人、审核时间、审核意见都已清空
4. 物流轨迹自动加载测试
- 创建一个订单并填写快递单号
- 点击"查看"按钮打开订单详情
- 确认物流轨迹自动加载(如果数据库有数据,显示数据来源为"database")
- 点击"刷新轨迹"按钮,确认可以手动刷新物流信息
- 如果数据库没有数据,确认调用快递100 API(显示数据来源为"api")
相关文档
PRESCRIPTION_VIEW_PERMISSION_FIX.md- 处方查看权限修复文档PRESCRIPTION_DUPLICATE_REQUEST_FIX.md- 处方重复请求修复文档PRESCRIPTION_ORDER_WITHDRAW_RESET_AUDIT.md- 订单撤回重置审核状态文档EXPRESS_TRACKING_AUTO_LOAD.md- 物流轨迹自动加载文档EXPRESS_TRACKING_DATABASE_QUERY.md- 物流追踪数据库查询优化文档
总结
所有问题都已经解决或确认正常工作:
- ✅ 处方查看权限:已实现,有开方权限的医生可以查看所有处方
- ✅ 重复请求防护:已实现,使用
isOpening标志防止重复调用 - ✅ 撤回重置审核:已修复,添加了
audit_by_name字段的清空 - ✅ 物流自动加载:已实现,打开详情时自动加载物流轨迹
如果仍然遇到问题,请检查:
- 用户权限配置是否正确
- 浏览器缓存是否需要清除
- 数据库表结构是否完整
- 快递100账号是否已充值