4.2 KiB
4.2 KiB
甘草上传药方按钮显示条件
需求
"上传药方"按钮应该只在特定条件下显示:
- 处方审核已通过
- 还没有上传过甘草订单(gancao_reciperl_order_no 为空)
实现
文件:admin/src/views/consumer/prescription/order_list.vue
1. 添加条件判断函数
function canUploadGancaoRow(row: {
prescription_audit_status?: number
gancao_reciperl_order_no?: string
}) {
// 处方审核已通过(1) 且没有甘草订单号时才显示
const rxStatus = Number(row.prescription_audit_status)
const gancaoOrderNo = String(row.gancao_reciperl_order_no || '').trim()
return rxStatus === 1 && gancaoOrderNo === ''
}
逻辑说明:
prescription_audit_status === 1:处方审核状态为"已通过"gancao_reciperl_order_no为空:还没有上传过甘草订单
2. 更新按钮显示条件
<el-button
v-if="canUploadGancaoRow(row)"
v-perms="['tcm.prescriptionOrder/submitGancaoRecipel']"
type="warning"
link
:loading="gancaoSubmitId === row.id"
@click="confirmSubmitGancaoRecipel(row)"
>上传药方</el-button>
显示逻辑
场景 1:处方未审核
prescription_audit_status: 0 (待审核)
gancao_reciperl_order_no: ''
→ 按钮隐藏 ❌
场景 2:处方已驳回
prescription_audit_status: 2 (已驳回)
gancao_reciperl_order_no: ''
→ 按钮隐藏 ❌
场景 3:处方已通过,未上传
prescription_audit_status: 1 (已通过)
gancao_reciperl_order_no: ''
→ 按钮显示 ✅
场景 4:处方已通过,已上传
prescription_audit_status: 1 (已通过)
gancao_reciperl_order_no: 'GC202604150001'
→ 按钮隐藏 ❌
审核状态说明
| 状态值 | 说明 | 是否显示按钮 |
|---|---|---|
| 0 | 待审核 | ❌ |
| 1 | 已通过 | ✅ (如果未上传) |
| 2 | 已驳回 | ❌ |
业务流程
创建订单
↓
处方待审核 (prescription_audit_status = 0)
↓ 审核
处方已通过 (prescription_audit_status = 1)
↓ 显示"上传药方"按钮
点击上传
↓ 调用甘草API
上传成功,保存订单号 (gancao_reciperl_order_no = 'GC...')
↓ 按钮隐藏
订单继续履约流程
相关字段
prescription_audit_status (处方审核状态)
- 类型: tinyint(2)
- 值:
- 0: 待审核
- 1: 已通过
- 2: 已驳回
gancao_reciperl_order_no (甘草处方订单号)
- 类型: varchar(32)
- 说明: 上传甘草成功后返回的订单号
- 示例:
GC202604150001 - 空值: 表示还未上传
防止重复上传
通过检查 gancao_reciperl_order_no 字段,确保:
- 每个订单只能上传一次
- 上传成功后按钮自动隐藏
- 避免重复提交导致的数据混乱
用户体验
上传前
操作列:
[详情/审核] [编辑] [上传药方] [确认发货] ...
上传后
操作列:
[详情/审核] [编辑] [确认发货] ...
"上传药方"按钮消失,界面更简洁。
错误处理
如果用户尝试重复上传(通过其他方式),后端也有验证:
// server/app/adminapi/logic/tcm/PrescriptionOrderLogic.php
if (!self::canUploadGancaoRecipel($item, $adminId, $adminInfo, $assistantByDiag)) {
self::$error = '须处方审核通过后方可上传甘草;已完成/已取消订单不可上传;同一订单仅可上传一次';
return false;
}
测试清单
- 创建新订单,处方待审核,按钮不显示
- 处方审核通过,按钮显示
- 点击上传药方,上传成功
- 刷新页面,按钮消失
- 处方被驳回,按钮不显示
- 已上传的订单,按钮不显示
相关文件
admin/src/views/consumer/prescription/order_list.vue- 订单列表页面server/app/adminapi/logic/tcm/PrescriptionOrderLogic.php- 后端业务逻辑GANCAO_CALLBACK_SETUP.md- 甘草回调功能文档
总结
通过添加 canUploadGancaoRow() 函数,实现了智能的按钮显示控制:
- ✅ 只在处方审核通过后显示
- ✅ 上传成功后自动隐藏
- ✅ 防止重复上传
- ✅ 提升用户体验
这样可以避免用户误操作,确保业务流程的正确性。