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

6.2 KiB
Raw Blame History

甘草预下单测试功能

功能概述

在订单编辑表单中添加"甘草预下单测试"功能,允许用户在不真实提交订单的情况下,测试当前配置的甘草预下单价格。测试结果以抽屉形式展示,包含完整的价格、配送、规则检查和药材明细信息。

实现内容

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_available1=有货/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
  • 成功后自动打开抽屉展示结果
  • 失败时显示错误提示消息

使用流程

  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

测试要点

  • 点击"测试价格"按钮能正常调用接口
  • 成功时自动打开抽屉展示结果
  • 价格信息显示正确(药材成本、加工费、物流费、总计)
  • 配送信息显示完整(调配中心、服用天数范围)
  • 规则检查按类型显示不同颜色
  • 药材明细表格显示完整(名称、用量、单价、小计、库存状态)
  • 订单信息显示正确(订单号、剂数)
  • 失败时显示清晰的错误信息
  • 按钮加载状态正常显示
  • 价格单位正确(分转元)
  • 仅在编辑已存在订单时显示测试按钮
  • 测试不会真实提交订单到甘草
  • 测试不会修改订单状态
  • 抽屉关闭后内容正确销毁