This commit is contained in:
Your Name
2026-04-10 14:43:58 +08:00
parent fdf714f833
commit 4909ec6daa
38 changed files with 6549 additions and 735 deletions
+176
View File
@@ -0,0 +1,176 @@
# 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账号是否已充值