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