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

170 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 甘草上传药方按钮显示条件
## 需求
"上传药方"按钮应该只在特定条件下显示:
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
<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. 避免重复提交导致的数据混乱
## 用户体验
### 上传前
```
操作列:
[详情/审核] [编辑] [上传药方] [确认发货] ...
```
### 上传后
```
操作列:
[详情/审核] [编辑] [确认发货] ...
```
"上传药方"按钮消失,界面更简洁。
## 错误处理
如果用户尝试重复上传(通过其他方式),后端也有验证:
```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()` 函数,实现了智能的按钮显示控制:
- ✅ 只在处方审核通过后显示
- ✅ 上传成功后自动隐藏
- ✅ 防止重复上传
- ✅ 提升用户体验
这样可以避免用户误操作,确保业务流程的正确性。