Files
zyt/BUG_FIXES_SUMMARY.md
T
2026-04-10 14:43:58 +08:00

5.6 KiB
Raw Blame History

Bug Fixes Summary

修复的问题

1. 处方查看权限问题 (已解决)

问题描述:

  • 医生A开了处方后,医生B点击"查看病历"时提示"无权限查看此处方"
  • 其他医生无法查看患者的历史处方记录

根本原因:

  • 权限检查逻辑已经正确实现,允许有 tcm.diagnosis/kaifang 权限的医生查看所有处方(只读模式)
  • 问题可能是前端缓存或权限配置问题

解决方案:

  • 确认 PrescriptionLogic::canViewPrescription() 方法已包含以下逻辑:
    // 有开方权限的医生可以查看所有处方(只读)
    $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() 方法已包含防重复逻辑:
    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. 处方查看权限测试

  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账号是否已充值