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

92 lines
2.9 KiB
Markdown

# 检查处方用量字段是否已添加到数据库
## 问题描述
处方的用量相关字段(`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. **查看处方详情**
- 在订单详情中查看处方
- 确认用量和代煎信息正确显示