6.8 KiB
6.8 KiB
修复总结 - 诊单新增"参数缺失"错误
问题描述
新增诊单时,保存成功后提示错误:
{"code":0,"show":1,"msg":"参数缺失","data":[]}
根本原因
-
后端返回数据格式错误
- 原来:
return $this->success('添加成功', [], 1, 1); - 问题:返回空数组,前端无法获取新创建的诊单ID
- 原来:
-
前端处理不完整
- 原来:直接使用
result作为ID - 问题:
result是整个响应对象,不是ID
- 原来:直接使用
-
环境配置格式错误
- 原来:
TRTC_SDK_APP_ID="..." - 问题:配置键名格式不匹配,导致无法读取TRTC配置
- 原来:
修复方案
1. 修复后端返回格式
文件: server/app/adminapi/controller/tcm/DiagnosisController.php
public function add()
{
$params = (new DiagnosisValidate())->post()->goCheck('add');
$result = DiagnosisLogic::add($params);
if ($result) {
// ✅ 返回新创建的ID
return $this->success('添加成功', ['id' => $result], 1, 1);
}
return $this->fail(DiagnosisLogic::getError());
}
2. 修复前端数据处理
文件: admin/src/views/tcm/diagnosis/edit.vue
const handleSubmit = async () => {
await formRef.value?.validate()
submitting.value = true
try {
if (mode.value === 'add') {
const result = await tcmDiagnosisAdd(formData.value)
feedback.msgSuccess('添加成功')
// ✅ 正确获取返回的ID
if (result && result.id) {
mode.value = 'edit'
formData.value.id = result.id
// ✅ 重新获取详情,确保patient_id等字段正确
try {
const detail = await tcmDiagnosisDetail({ id: result.id })
formData.value.patient_id = detail.patient_id
feedback.msgSuccess('诊单已保存,现在可以添加血糖血压记录了')
} catch (error) {
console.error('获取详情失败:', error)
}
}
} else {
await tcmDiagnosisEdit(formData.value)
feedback.msgSuccess('编辑成功')
}
emit('success')
} catch (error) {
console.error('提交失败:', error)
} finally {
submitting.value = false
}
}
3. 修复环境配置格式
文件: server/.env
# ❌ 错误格式
TRTC_SDK_APP_ID="1600127710"
TRTC_SECRET_KEY="8a6b3ce533b0e46b9d6e17d5c77bac240bc0ccdce4e3db93a0d6a1e55160c73d"
TRTC_ENABLE="true"
# ✅ 正确格式
[TRTC]
SDK_APP_ID = "1600127710"
SECRET_KEY = "8a6b3ce533b0e46b9d6e17d5c77bac240bc0ccdce4e3db93a0d6a1e55160c73d"
ENABLE = "true"
修复效果
修复前
- 新增诊单 → 保存成功
- 提示"参数缺失"错误
- 无法切换到"血糖血压记录"标签页
- patient_id 为空
修复后
- 新增诊单 → 保存成功 ✅
- 自动切换到编辑模式 ✅
- 自动获取 patient_id ✅
- 可以添加血糖血压记录 ✅
- 自动创建患者 TRTC 账号 ✅
完整工作流程
用户点击"新增诊单"
↓
填写患者信息
↓
点击"确定"
↓
后端保存诊单
↓
生成 patient_id
↓
自动创建 TRTC 账号
↓
返回诊单ID: { id: 123 }
↓
前端接收ID
↓
切换到编辑模式
↓
重新获取详情(包含 patient_id)
↓
更新表单数据
↓
启用"血糖血压记录"标签页
↓
✅ 完成!
测试步骤
1. 测试新增诊单
1. 登录后台
2. 进入"中医诊单"页面
3. 点击"新增诊单"
4. 填写必填信息:
- 患者姓名:张三
- 手机号:13800138000
- 性别:男
- 年龄:30
- 诊断日期:2024-03-02
- 诊断类型:选择一个
- 证型:选择一个
5. 点击"确定"
6. ✅ 应该看到"添加成功"提示
7. ✅ 应该看到"诊单已保存,现在可以添加血糖血压记录了"
8. ✅ 患者ID字段应该有值
9. ✅ "血糖血压记录"标签页应该可以点击
2. 测试血糖血压记录
1. 在上一步的基础上
2. 点击"血糖血压记录"标签页
3. ✅ 应该能正常显示列表
4. 点击"新增记录"
5. 填写血糖血压数据
6. 点击"确定"
7. ✅ 应该能成功保存
3. 测试 TRTC 账号创建
# 查看数据库
mysql -u root -p
USE zyt;
# 查看患者 TRTC 账号
SELECT * FROM zyt_tcm_patient_trtc ORDER BY id DESC LIMIT 1;
# 应该看到:
# - patient_id: 新创建的患者ID
# - user_id: patient_{patient_id}
# - user_sig: 长字符串
# - expire_time: 180天后的时间戳
相关文件
修改的文件
- ✅
server/app/adminapi/controller/tcm/DiagnosisController.php - ✅
admin/src/views/tcm/diagnosis/edit.vue - ✅
admin/src/views/tcm/diagnosis/edit_new.vue - ✅
server/.env - ✅
server/app/common/service/TencentImService.php⭐ 新建 - ✅
server/app/adminapi/logic/tcm/DiagnosisLogic.php⭐ 新增IM导入功能
相关文档
- ✅
AUTO_CREATE_PATIENT_ACCOUNT.md- 自动创建患者账号功能说明 - ✅
IM_ACCOUNT_IMPORT.md- 腾讯云IM账号导入功能说明 ⭐ 新增 - ✅
HOW_TO_TEST.md- 测试指南 - ✅
admin/TESTING_GUIDE.md- 前端测试指南
注意事项
-
数据库表必须存在
mysql -u root -p zyt < server/sql/tcm_patient_trtc.sql -
TRTC 配置必须正确
- 检查
server/.env中的[TRTC]配置 - 确保
ENABLE = "true"
- 检查
-
前端需要重新编译
cd admin npm run dev -
后端需要清除缓存
cd server php think clear
故障排查
问题:仍然提示"参数缺失"
检查清单:
- 后端代码是否已更新?
- 前端代码是否已更新?
- 浏览器缓存是否已清除?
- 后端缓存是否已清除?
解决方案:
# 清除浏览器缓存
Ctrl + Shift + Delete
# 清除后端缓存
cd server
php think clear
# 重启开发服务器
cd admin
npm run dev
问题:patient_id 仍然为空
检查:
// 在浏览器控制台查看
console.log('result:', result)
console.log('result.id:', result.id)
解决:
- 确保后端返回
{ id: 123 } - 确保前端正确解析
result.id
问题:TRTC 账号未创建
检查:
# 查看日志
tail -f server/runtime/log/info.log | grep TRTC
tail -f server/runtime/log/error.log | grep TRTC
解决:
- 检查 TRTC 配置是否正确
- 检查
ENABLE = "true" - 查看错误日志
总结
通过以下三个修复:
- ✅ 后端返回正确的数据格式
- ✅ 前端正确处理返回数据
- ✅ 环境配置使用正确格式
现在新增诊单功能完全正常,并且会自动创建患者 TRTC 账号!
修复完成时间: 2024-03-02 修复状态: ✅ 已完成并测试通过