# 甘草上传药方按钮显示条件 ## 需求 "上传药方"按钮应该只在特定条件下显示: 1. 处方审核已通过 2. 还没有上传过甘草订单(gancao_reciperl_order_no 为空) ## 实现 ### 文件:`admin/src/views/consumer/prescription/order_list.vue` #### 1. 添加条件判断函数 ```typescript 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. 更新按钮显示条件 ```vue 上传药方 ``` ## 显示逻辑 ### 场景 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. 避免重复提交导致的数据混乱 ## 用户体验 ### 上传前 ``` 操作列: [详情/审核] [编辑] [上传药方] [确认发货] ... ``` ### 上传后 ``` 操作列: [详情/审核] [编辑] [确认发货] ... ``` "上传药方"按钮消失,界面更简洁。 ## 错误处理 如果用户尝试重复上传(通过其他方式),后端也有验证: ```php // 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()` 函数,实现了智能的按钮显示控制: - ✅ 只在处方审核通过后显示 - ✅ 上传成功后自动隐藏 - ✅ 防止重复上传 - ✅ 提升用户体验 这样可以避免用户误操作,确保业务流程的正确性。