2.9 KiB
2.9 KiB
检查处方用量字段是否已添加到数据库
问题描述
处方的用量相关字段(dosage_amount、dosage_unit、need_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_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已配置类型转换:protected $type = [ 'dosage_amount' => 'float', 'need_decoction' => 'integer', ];
结论
代码层面一切正常,问题很可能是数据库迁移未执行。
请执行上述步骤1检查数据库表结构,如果字段不存在,执行步骤2的迁移SQL。
测试步骤
迁移完成后,测试以下场景:
-
创建新处方
- 选择"浓缩水丸",用量应为 1-10g 下拉选择
- 选择"饮片",用量应为 50-250ml 下拉选择,并显示代煎选项
- 选择其他类型,用量应为自由输入
- 保存后检查数据库,确认字段已保存
-
编辑已有处方
- 打开已有处方
- 修改用量和代煎选项
- 保存后检查数据库,确认字段已更新
-
查看处方详情
- 在订单详情中查看处方
- 确认用量和代煎信息正确显示