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

2.9 KiB

检查处方用量字段是否已添加到数据库

问题描述

处方的用量相关字段(dosage_amountdosage_unitneed_decoction)没有保存到数据库。

检查步骤

1. 检查数据库表结构

执行以下SQL查询,检查字段是否存在:

SELECT COLUMN_NAME, DATA_TYPE, COLUMN_DEFAULT, COLUMN_COMMENT 
FROM information_schema.COLUMNS 
WHERE TABLE_SCHEMA = DATABASE() 
  AND TABLE_NAME = 'zyt_tcm_prescription' 
  AND COLUMN_NAME IN ('dosage_amount', 'dosage_unit', 'need_decoction')
ORDER BY ORDINAL_POSITION;

2. 如果字段不存在,执行迁移

如果上述查询返回空结果,说明字段还未添加,需要执行迁移文件:

mysql -u用户名 -p数据库名 < add_prescription_dosage_fields.sql

或者直接在数据库中执行:

ALTER TABLE `zyt_tcm_prescription`
ADD COLUMN `dosage_amount` decimal(10,2) DEFAULT NULL COMMENT '用量数值' AFTER `prescription_type`,
ADD COLUMN `dosage_unit` varchar(10) NOT NULL DEFAULT '' COMMENT '用量单位(g/ml)' AFTER `dosage_amount`,
ADD COLUMN `need_decoction` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否代煎(0否1是,仅饮片)' AFTER `dosage_unit`;

3. 验证字段已添加

再次执行步骤1的查询,应该看到3个字段:

COLUMN_NAME DATA_TYPE COLUMN_DEFAULT COLUMN_COMMENT
dosage_amount decimal NULL 用量数值
dosage_unit varchar '' 用量单位(g/ml)
need_decoction tinyint 0 是否代煎(0否1是,仅饮片)

代码检查

前端代码

  • admin/src/components/tcm-prescription/index.vue 已正确实现
  • 包含 dosage_amountdosage_unitneed_decoction 字段
  • watch 监听处方类型变化,自动设置单位

后端代码

  • server/app/adminapi/logic/tcm/PrescriptionLogic.phpadd() 方法已包含这些字段
  • server/app/adminapi/logic/tcm/PrescriptionLogic.phpedit() 方法已包含这些字段

数据库模型

  • server/app/common/model/tcm/Prescription.php 已配置类型转换:
    protected $type = [
        'dosage_amount' => 'float',
        'need_decoction' => 'integer',
    ];
    

结论

代码层面一切正常,问题很可能是数据库迁移未执行

请执行上述步骤1检查数据库表结构,如果字段不存在,执行步骤2的迁移SQL。

测试步骤

迁移完成后,测试以下场景:

  1. 创建新处方

    • 选择"浓缩水丸",用量应为 1-10g 下拉选择
    • 选择"饮片",用量应为 50-250ml 下拉选择,并显示代煎选项
    • 选择其他类型,用量应为自由输入
    • 保存后检查数据库,确认字段已保存
  2. 编辑已有处方

    • 打开已有处方
    • 修改用量和代煎选项
    • 保存后检查数据库,确认字段已更新
  3. 查看处方详情

    • 在订单详情中查看处方
    • 确认用量和代煎信息正确显示