Files
zyt/GANCAO_UPLOAD_BUTTON_CONDITION.md
T
2026-04-15 16:31:25 +08:00

4.2 KiB
Raw Blame History

甘草上传药方按钮显示条件

需求

"上传药方"按钮应该只在特定条件下显示:

  1. 处方审核已通过
  2. 还没有上传过甘草订单(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 字段,确保:

  1. 每个订单只能上传一次
  2. 上传成功后按钮自动隐藏
  3. 避免重复提交导致的数据混乱

用户体验

上传前

操作列:
[详情/审核] [编辑] [上传药方] [确认发货] ...

上传后

操作列:
[详情/审核] [编辑] [确认发货] ...

"上传药方"按钮消失,界面更简洁。

错误处理

如果用户尝试重复上传(通过其他方式),后端也有验证:

// 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() 函数,实现了智能的按钮显示控制:

  • 只在处方审核通过后显示
  • 上传成功后自动隐藏
  • 防止重复上传
  • 提升用户体验

这样可以避免用户误操作,确保业务流程的正确性。