177 lines
5.6 KiB
Markdown
177 lines
5.6 KiB
Markdown
# 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账号是否已充值
|