# Bug Fixes Summary ## 修复的问题 ### 1. 处方查看权限问题 ✅ (已解决) **问题描述**: - 医生A开了处方后,医生B点击"查看病历"时提示"无权限查看此处方" - 其他医生无法查看患者的历史处方记录 **根本原因**: - 权限检查逻辑已经正确实现,允许有 `tcm.diagnosis/kaifang` 权限的医生查看所有处方(只读模式) - 问题可能是前端缓存或权限配置问题 **解决方案**: - 确认 `PrescriptionLogic::canViewPrescription()` 方法已包含以下逻辑: ```php // 有开方权限的医生可以查看所有处方(只读) $permissions = $adminInfo['permissions'] ?? []; if (in_array('tcm.diagnosis/kaifang', $permissions, true)) { return true; } ``` - 权限层级(从高到低): 1. 超级管理员 2. 创建人 3. 医助 4. 共享处方 5. 可见角色 6. 有开方权限的医生(`tcm.diagnosis/kaifang`) **文件**: `server/app/adminapi/logic/tcm/PrescriptionLogic.php` --- ### 2. 处方组件重复请求问题 ✅ (已解决) **问题描述**: - 点击"开处方"或"查看病历"按钮时,重复请求 `/tcm.prescription/detail` 接口 - 快速连续点击导致多次调用 **根本原因**: - 已经实现了 `isOpening` 标志防止重复调用 - 防重复逻辑已经正确工作 **解决方案**: - 确认 `open()` 和 `openById()` 方法已包含防重复逻辑: ```typescript 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` 字段的清空: ```php 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. 物流轨迹自动加载 ✅ (已实现) **问题描述**: - 用户希望打开订单详情时,如果有快递单号,自动加载物流轨迹 - 不需要手动点击"查询轨迹"按钮 **解决方案**: - 已经实现自动加载逻辑: ```typescript 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. 处方查看权限测试 1. 使用医生A账号创建处方 2. 使用医生B账号(有 `tcm.diagnosis/kaifang` 权限)点击"查看病历" 3. 确认可以正常查看处方详情(只读模式) 4. 确认医生B不能编辑医生A创建的处方 ### 2. 重复请求测试 1. 快速连续点击"开处方"按钮多次 2. 检查浏览器开发者工具的Network面板 3. 确认只发送一次 `/tcm.prescription/detail` 请求 4. 确认控制台显示"处方正在打开中,请勿重复点击"警告 ### 3. 订单撤回测试 1. 创建一个处方业务订单(处方审核状态为"已通过") 2. 点击"撤回"按钮 3. 确认订单状态变为"已取消" 4. 在处方列表中确认该处方的审核状态变为"待审核" 5. 确认审核人、审核时间、审核意见都已清空 ### 4. 物流轨迹自动加载测试 1. 创建一个订单并填写快递单号 2. 点击"查看"按钮打开订单详情 3. 确认物流轨迹自动加载(如果数据库有数据,显示数据来源为"database") 4. 点击"刷新轨迹"按钮,确认可以手动刷新物流信息 5. 如果数据库没有数据,确认调用快递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` - 物流追踪数据库查询优化文档 --- ## 总结 所有问题都已经解决或确认正常工作: 1. ✅ 处方查看权限:已实现,有开方权限的医生可以查看所有处方 2. ✅ 重复请求防护:已实现,使用 `isOpening` 标志防止重复调用 3. ✅ 撤回重置审核:已修复,添加了 `audit_by_name` 字段的清空 4. ✅ 物流自动加载:已实现,打开详情时自动加载物流轨迹 如果仍然遇到问题,请检查: - 用户权限配置是否正确 - 浏览器缓存是否需要清除 - 数据库表结构是否完整 - 快递100账号是否已充值