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
+204
View File
@@ -0,0 +1,204 @@
# 处方按钮显示检查
## 问题描述
用户反馈:处方审核通过后,"开方"按钮不显示了。
## 代码分析
### 前端代码
**文件**: `admin/src/views/tcm/appointment/list.vue`
#### 按钮显示逻辑
```vue
<el-button
v-perms="['tcm.diagnosis/kaifang']"
type="primary"
link
size="small"
@click="handlePrescription(row)"
>
{{ prescriptionActionLabel(row) }}
</el-button>
```
#### 按钮文字逻辑
```typescript
function prescriptionActionLabel(row: any) {
if (
row?.prescription_audit_status === 1 &&
Number(row?.prescription_void_status) !== 1
) {
return '查看'
}
return '开方'
}
```
**逻辑说明**:
- 如果处方审核通过(`prescription_audit_status === 1`)且未作废(`prescription_void_status !== 1`),按钮文字显示"查看"
- 否则,按钮文字显示"开方"
### 后端代码
**文件**: `server/app/adminapi/lists/doctor/AppointmentLists.php`
```php
$apptId = (int) ($item['id'] ?? 0);
$apptRx = $rxByAppointmentId[$apptId] ?? null;
$item['prescription_audit_status'] = $apptRx !== null ? (int) ($apptRx['audit_status'] ?? -1) : -1;
$item['prescription_void_status'] = $apptRx !== null ? (int) ($apptRx['void_status'] ?? 0) : 0;
```
**逻辑说明**:
- 如果预约有关联的处方,返回处方的审核状态和作废状态
- 如果预约没有关联的处方,`prescription_audit_status``-1``prescription_void_status``0`
## 可能的原因
### 1. 权限问题
按钮有权限检查 `v-perms="['tcm.diagnosis/kaifang']"`,如果用户没有这个权限,按钮会被隐藏。
**检查方法**:
1. 登录用户账号
2. 检查用户角色是否有 `tcm.diagnosis/kaifang` 权限
3. 在浏览器控制台查看按钮元素是否存在
### 2. 数据问题
后端返回的 `prescription_audit_status``prescription_void_status` 字段值不正确。
**检查方法**:
1. 打开浏览器开发者工具
2. 查看预约列表接口的响应数据
3. 检查 `prescription_audit_status``prescription_void_status` 字段的值
**预期值**:
- 未开方:`prescription_audit_status = -1`, `prescription_void_status = 0`
- 待审核:`prescription_audit_status = 0`, `prescription_void_status = 0`
- 已通过:`prescription_audit_status = 1`, `prescription_void_status = 0`
- 已驳回:`prescription_audit_status = 2`, `prescription_void_status = 1`
### 3. 按钮文字问题
按钮确实显示了,但是文字从"开方"变成了"查看",用户可能误以为按钮消失了。
**检查方法**:
1. 查看预约列表
2. 找到已审核通过的处方对应的预约
3. 检查按钮文字是否显示为"查看"
## 解决方案
### 方案1:确认权限配置
确保用户角色有 `tcm.diagnosis/kaifang` 权限:
1. 进入后台管理 → 权限管理 → 角色管理
2. 找到用户所属的角色
3. 检查是否勾选了"中医诊断 → 开方"权限(`tcm.diagnosis/kaifang`
4. 如果没有勾选,勾选后保存
### 方案2:检查数据返回
在浏览器开发者工具中检查接口返回:
1. 打开浏览器开发者工具(F12
2. 切换到 Network 标签
3. 刷新预约列表页面
4. 找到预约列表接口(通常是 `/doctor.appointment/lists`
5. 查看响应数据中的 `prescription_audit_status``prescription_void_status` 字段
**示例数据**:
```json
{
"id": 123,
"patient_name": "张三",
"prescription_audit_status": 1, // 1=已通过
"prescription_void_status": 0, // 0=未作废
"has_prescription": 1
}
```
### 方案3:按钮文字说明
如果按钮文字从"开方"变成了"查看",这是正常的:
- **未开方或待审核**:按钮显示"开方",点击后可以创建或编辑处方
- **已审核通过**:按钮显示"查看",点击后只能查看处方(只读模式)
这是为了区分"可编辑"和"只读"两种模式。
## 测试步骤
### 测试1:未开方的预约
1. 找到一个未开方的预约(`has_prescription = 0`
2. 检查按钮是否显示"开方"
3. 点击按钮,应该可以创建新处方
### 测试2:待审核的处方
1. 创建一个处方(待审核状态)
2. 返回预约列表
3. 检查按钮是否显示"开方"
4. 点击按钮,应该可以编辑处方
### 测试3:已审核通过的处方
1. 创建一个处方并审核通过
2. 返回预约列表
3. 检查按钮是否显示"查看"
4. 点击按钮,应该只能查看处方(只读模式)
### 测试4:已驳回的处方
1. 创建一个处方并审核驳回
2. 返回预约列表
3. 检查按钮是否显示"开方"
4. 点击按钮,应该可以编辑处方
## 预期行为
| 处方状态 | `prescription_audit_status` | `prescription_void_status` | 按钮文字 | 点击行为 |
|---------|---------------------------|--------------------------|---------|---------|
| 未开方 | -1 | 0 | 开方 | 创建新处方 |
| 待审核 | 0 | 0 | 开方 | 编辑处方 |
| 已通过 | 1 | 0 | 查看 | 查看处方(只读) |
| 已驳回 | 2 | 1 | 开方 | 编辑处方 |
## 常见问题
### Q1: 为什么审核通过后按钮文字变成"查看"?
A: 这是为了区分"可编辑"和"只读"两种模式。已审核通过的处方不可编辑,只能查看。
### Q2: 如果需要修改已审核通过的处方怎么办?
A: 需要先撤回业务订单(如果已创建),处方审核状态会自动重置为待审核,然后才能编辑。
### Q3: 按钮完全不显示怎么办?
A: 检查用户是否有 `tcm.diagnosis/kaifang` 权限。如果没有,需要在角色管理中添加该权限。
### Q4: 点击"查看"按钮后能编辑吗?
A: 不能。已审核通过的处方只能查看,不能编辑。如果需要编辑,需要先撤回业务订单。
## 总结
按钮的显示逻辑是正确的:
- ✅ 按钮始终显示(只要有 `tcm.diagnosis/kaifang` 权限)
- ✅ 按钮文字根据处方状态动态变化("开方" 或 "查看"
- ✅ 点击行为根据处方状态不同(可编辑 或 只读)
如果用户反馈"按钮不显示",可能是以下原因:
1. 用户没有 `tcm.diagnosis/kaifang` 权限
2. 按钮文字从"开方"变成了"查看",用户误以为按钮消失了
3. 数据返回有问题,需要检查后端接口
建议先检查权限配置和数据返回,确认按钮是否真的不显示。