# 处方按钮显示检查 ## 问题描述 用户反馈:处方审核通过后,"开方"按钮不显示了。 ## 代码分析 ### 前端代码 **文件**: `admin/src/views/tcm/appointment/list.vue` #### 按钮显示逻辑 ```vue {{ prescriptionActionLabel(row) }} ``` #### 按钮文字逻辑 ```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. 数据返回有问题,需要检查后端接口 建议先检查权限配置和数据返回,确认按钮是否真的不显示。