# 检查处方用量字段是否已添加到数据库 ## 问题描述 处方的用量相关字段(`dosage_amount`、`dosage_unit`、`need_decoction`)没有保存到数据库。 ## 检查步骤 ### 1. 检查数据库表结构 执行以下SQL查询,检查字段是否存在: ```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. 如果字段不存在,执行迁移 如果上述查询返回空结果,说明字段还未添加,需要执行迁移文件: ```bash mysql -u用户名 -p数据库名 < add_prescription_dosage_fields.sql ``` 或者直接在数据库中执行: ```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_amount`、`dosage_unit`、`need_decoction` 字段 - 有 `watch` 监听处方类型变化,自动设置单位 ### 后端代码 ✅ - `server/app/adminapi/logic/tcm/PrescriptionLogic.php` 的 `add()` 方法已包含这些字段 - `server/app/adminapi/logic/tcm/PrescriptionLogic.php` 的 `edit()` 方法已包含这些字段 ### 数据库模型 ✅ - `server/app/common/model/tcm/Prescription.php` 已配置类型转换: ```php protected $type = [ 'dosage_amount' => 'float', 'need_decoction' => 'integer', ]; ``` ## 结论 代码层面一切正常,问题很可能是**数据库迁移未执行**。 请执行上述步骤1检查数据库表结构,如果字段不存在,执行步骤2的迁移SQL。 ## 测试步骤 迁移完成后,测试以下场景: 1. **创建新处方** - 选择"浓缩水丸",用量应为 1-10g 下拉选择 - 选择"饮片",用量应为 50-250ml 下拉选择,并显示代煎选项 - 选择其他类型,用量应为自由输入 - 保存后检查数据库,确认字段已保存 2. **编辑已有处方** - 打开已有处方 - 修改用量和代煎选项 - 保存后检查数据库,确认字段已更新 3. **查看处方详情** - 在订单详情中查看处方 - 确认用量和代煎信息正确显示