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

213 lines
6.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. 后端接口
#### 控制器方法 (`server/app/adminapi/controller/tcm/PrescriptionOrderController.php`)
```php
public function previewGancaoRecipel()
```
- 调用验证器场景:`previewGancaoRecipel`
- 调用逻辑方法:`PrescriptionOrderLogic::previewGancaoRecipel()`
- 返回预览结果(包含价格信息)
#### 逻辑方法 (`server/app/adminapi/logic/tcm/PrescriptionOrderLogic.php`)
```php
public static function previewGancaoRecipel(int $id, int $adminId, array $adminInfo)
```
- 验证订单和处方存在性
- 检查药材是否能匹配甘草药ID
- 获取甘草token
- 调用 `CTM_PREVIEW` 接口
- 检查规则拦截和药材可用性
- 返回完整的预览数据(不提交订单)
#### 验证器 (`server/app/adminapi/validate/tcm/PrescriptionOrderValidate.php`)
- 添加场景:`previewGancaoRecipel => ['id']`
### 2. 前端实现
#### API接口 (`admin/src/api/tcm.ts`)
```typescript
export function prescriptionOrderPreviewGancaoRecipel(params: { id: number })
```
#### UI组件 (`admin/src/views/consumer/prescription/order_list.vue`)
**测试按钮位置**:在"剂数"和"剂量单位"字段后,"上次医生"字段前
**组件结构**
```vue
<el-button @click="testGancaoPreview">测试价格</el-button>
<el-drawer v-model="gancaoPreviewDrawerVisible">
<!-- 价格信息 -->
<!-- 配送信息 -->
<!-- 规则检查 -->
<!-- 药材明细 -->
<!-- 订单信息 -->
</el-drawer>
```
### 3. 抽屉展示内容
#### 价格信息卡片
- **药材成本** (`m_cost`): 橙色显示,单位:元
- **加工费** (`proces_cost`): 蓝色显示,单位:分转元
- **物流费** (`lis_cost`): 绿色显示,单位:分转元
- **总计**: 红色加粗显示,自动计算总和
#### 配送信息卡片
- 调配中心名称 (`ds_name`)
- 调配中心ID (`ds_id`)
- 服用天数范围 (`take_days.min` - `take_days.max`)
- 默认服用天数 (`take_days.default`)
#### 规则检查卡片
- 显示所有规则检查结果 (`rule_check`)
- 根据 `type` 显示不同颜色:
- `type >= 2`: 错误(红色)
- `type === 1`: 警告(黄色)
- `type === 0`: 信息(蓝色)
- 显示规则代码 (`code`) 和消息 (`msg`)
#### 药材明细表格
- 序号
- 药材名称 (`title`)
- 用量 (`quantity` + `unit`)
- 单价 (`price`,元/克,保留4位小数)
- 小计(单价 × 用量,橙色显示)
- 库存状态 (`is_available`1=有货/0=缺货)
- 备注 (`brief`)
#### 订单信息卡片
- 订单号 (`order_no`):跨2列显示
- 剂数 (`dose_count`):显示格式"X剂"(如:5剂)
- 单剂量:自动计算所有药材用量总和,显示格式"X克"(如:196克)
## 接口返回数据结构
```json
{
"code": 1,
"msg": "预下单成功",
"data": {
"success": true,
"fee": {
"m_cost": "112.88",
"proces_cost": 80,
"lis_cost": 0
},
"result": {
"aa_id": 73,
"ds_id": 135,
"ds_name": "郑州-甘草调配中心√",
"take_days": {
"min": 7,
"max": 35,
"default": 28
},
"rule_check": [
{
"code": "pill_yield_notice",
"msg": "出丸量约98g±5%",
"type": 0
}
],
"fee": {
"m_cost": "112.88",
"proces_cost": 80,
"lis_cost": 0
},
"m_list": [
{
"id": 420,
"title": "龙胆",
"price": 0.405028,
"unit": "克",
"quantity": "6",
"is_available": 1,
"brief": ""
}
]
},
"order_no": "PO20260414160525788214",
"dose_count": 5
}
}
```
## UI设计特点
### 布局
- 使用 `el-drawer` 抽屉组件,宽度 800px
- 内容分为5个卡片区域,使用 `el-card` 组件
- 使用 `el-descriptions` 展示键值对信息
- 使用 `el-table` 展示药材明细列表
### 颜色方案
- 药材成本:橙色 (`text-orange-600`)
- 加工费:蓝色 (`text-blue-600`)
- 物流费:绿色 (`text-green-600`)
- 总计:红色加粗 (`text-red-600 font-bold`)
- 小计:橙色 (`text-orange-600`)
### 交互
- 点击"测试价格"按钮触发预下单
- 按钮显示加载状态(loading
- 成功后自动打开抽屉展示结果
- 失败时显示错误提示消息
## 使用流程
1. 打开订单编辑对话框
2. 配置剂数(`dose_count`)和剂量单位(`dose_unit`
3. 点击"测试价格"按钮
4. 系统调用甘草 `CTM_PREVIEW` 接口
5. 自动打开抽屉展示完整的预下单结果
## 注意事项
- 预下单测试**不会**真实提交订单到甘草
- 预下单测试**不会**扣费
- 仅用于验证配置和查看价格
- 需要先保存订单才能测试(`editForm.id` 必须存在)
- 测试结果会检查:
- 药材是否匹配甘草药ID
- 规则是否拦截
- 药材是否缺货
- 抽屉关闭时自动销毁内容(`destroy-on-close`
## 相关文件
### 后端
- `server/app/adminapi/controller/tcm/PrescriptionOrderController.php`
- `server/app/adminapi/logic/tcm/PrescriptionOrderLogic.php`
- `server/app/adminapi/validate/tcm/PrescriptionOrderValidate.php`
- `server/app/common/service/gancao/GancaoScmRecipelService.php`
### 前端
- `admin/src/api/tcm.ts`
- `admin/src/views/consumer/prescription/order_list.vue`
## 测试要点
- [ ] 点击"测试价格"按钮能正常调用接口
- [ ] 成功时自动打开抽屉展示结果
- [ ] 价格信息显示正确(药材成本、加工费、物流费、总计)
- [ ] 配送信息显示完整(调配中心、服用天数范围)
- [ ] 规则检查按类型显示不同颜色
- [ ] 药材明细表格显示完整(名称、用量、单价、小计、库存状态)
- [ ] 订单信息显示正确(订单号、剂数)
- [ ] 失败时显示清晰的错误信息
- [ ] 按钮加载状态正常显示
- [ ] 价格单位正确(分转元)
- [ ] 仅在编辑已存在订单时显示测试按钮
- [ ] 测试不会真实提交订单到甘草
- [ ] 测试不会修改订单状态
- [ ] 抽屉关闭后内容正确销毁