170 lines
4.2 KiB
Markdown
170 lines
4.2 KiB
Markdown
# 甘草上传药方按钮显示条件
|
||
|
||
## 需求
|
||
"上传药方"按钮应该只在特定条件下显示:
|
||
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()` 函数,实现了智能的按钮显示控制:
|
||
- ✅ 只在处方审核通过后显示
|
||
- ✅ 上传成功后自动隐藏
|
||
- ✅ 防止重复上传
|
||
- ✅ 提升用户体验
|
||
|
||
这样可以避免用户误操作,确保业务流程的正确性。
|