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

177 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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账号是否已充值