This commit is contained in:
Your Name
2026-04-15 16:31:25 +08:00
parent 906684c1ed
commit 3d9c5dd8f5
47 changed files with 7963 additions and 10 deletions
+169
View File
@@ -0,0 +1,169 @@
# 甘草上传药方按钮显示条件
## 需求
"上传药方"按钮应该只在特定条件下显示:
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()` 函数,实现了智能的按钮显示控制:
- ✅ 只在处方审核通过后显示
- ✅ 上传成功后自动隐藏
- ✅ 防止重复上传
- ✅ 提升用户体验
这样可以避免用户误操作,确保业务流程的正确性。