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

205 lines
6.2 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.
# 处方按钮显示检查
## 问题描述
用户反馈:处方审核通过后,"开方"按钮不显示了。
## 代码分析
### 前端代码
**文件**: `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. 数据返回有问题,需要检查后端接口
建议先检查权限配置和数据返回,确认按钮是否真的不显示。