6.2 KiB
6.2 KiB
甘草预下单测试功能
功能概述
在订单编辑表单中添加"甘草预下单测试"功能,允许用户在不真实提交订单的情况下,测试当前配置的甘草预下单价格。测试结果以抽屉形式展示,包含完整的价格、配送、规则检查和药材明细信息。
实现内容
1. 后端接口
控制器方法 (server/app/adminapi/controller/tcm/PrescriptionOrderController.php)
public function previewGancaoRecipel()
- 调用验证器场景:
previewGancaoRecipel - 调用逻辑方法:
PrescriptionOrderLogic::previewGancaoRecipel() - 返回预览结果(包含价格信息)
逻辑方法 (server/app/adminapi/logic/tcm/PrescriptionOrderLogic.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)
export function prescriptionOrderPreviewGancaoRecipel(params: { id: number })
UI组件 (admin/src/views/consumer/prescription/order_list.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克)
接口返回数据结构
{
"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)
- 成功后自动打开抽屉展示结果
- 失败时显示错误提示消息
使用流程
- 打开订单编辑对话框
- 配置剂数(
dose_count)和剂量单位(dose_unit) - 点击"测试价格"按钮
- 系统调用甘草
CTM_PREVIEW接口 - 自动打开抽屉展示完整的预下单结果
注意事项
- 预下单测试不会真实提交订单到甘草
- 预下单测试不会扣费
- 仅用于验证配置和查看价格
- 需要先保存订单才能测试(
editForm.id必须存在) - 测试结果会检查:
- 药材是否匹配甘草药ID
- 规则是否拦截
- 药材是否缺货
- 抽屉关闭时自动销毁内容(
destroy-on-close)
相关文件
后端
server/app/adminapi/controller/tcm/PrescriptionOrderController.phpserver/app/adminapi/logic/tcm/PrescriptionOrderLogic.phpserver/app/adminapi/validate/tcm/PrescriptionOrderValidate.phpserver/app/common/service/gancao/GancaoScmRecipelService.php
前端
admin/src/api/tcm.tsadmin/src/views/consumer/prescription/order_list.vue
测试要点
- 点击"测试价格"按钮能正常调用接口
- 成功时自动打开抽屉展示结果
- 价格信息显示正确(药材成本、加工费、物流费、总计)
- 配送信息显示完整(调配中心、服用天数范围)
- 规则检查按类型显示不同颜色
- 药材明细表格显示完整(名称、用量、单价、小计、库存状态)
- 订单信息显示正确(订单号、剂数)
- 失败时显示清晰的错误信息
- 按钮加载状态正常显示
- 价格单位正确(分转元)
- 仅在编辑已存在订单时显示测试按钮
- 测试不会真实提交订单到甘草
- 测试不会修改订单状态
- 抽屉关闭后内容正确销毁