# 修复总结 - 诊单新增"参数缺失"错误 ## 问题描述 新增诊单时,保存成功后提示错误: ```json {"code":0,"show":1,"msg":"参数缺失","data":[]} ``` ## 根本原因 1. **后端返回数据格式错误** - 原来:`return $this->success('添加成功', [], 1, 1);` - 问题:返回空数组,前端无法获取新创建的诊单ID 2. **前端处理不完整** - 原来:直接使用 `result` 作为ID - 问题:`result` 是整个响应对象,不是ID 3. **环境配置格式错误** - 原来:`TRTC_SDK_APP_ID="..."` - 问题:配置键名格式不匹配,导致无法读取TRTC配置 ## 修复方案 ### 1. 修复后端返回格式 **文件**: `server/app/adminapi/controller/tcm/DiagnosisController.php` ```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` ```javascript 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` ```env # ❌ 错误格式 TRTC_SDK_APP_ID="1600127710" TRTC_SECRET_KEY="8a6b3ce533b0e46b9d6e17d5c77bac240bc0ccdce4e3db93a0d6a1e55160c73d" TRTC_ENABLE="true" # ✅ 正确格式 [TRTC] SDK_APP_ID = "1600127710" SECRET_KEY = "8a6b3ce533b0e46b9d6e17d5c77bac240bc0ccdce4e3db93a0d6a1e55160c73d" ENABLE = "true" ``` ## 修复效果 ### 修复前 1. 新增诊单 → 保存成功 2. 提示"参数缺失"错误 3. 无法切换到"血糖血压记录"标签页 4. patient_id 为空 ### 修复后 1. 新增诊单 → 保存成功 ✅ 2. 自动切换到编辑模式 ✅ 3. 自动获取 patient_id ✅ 4. 可以添加血糖血压记录 ✅ 5. 自动创建患者 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 账号创建 ```bash # 查看数据库 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` - 前端测试指南 ## 注意事项 1. **数据库表必须存在** ```bash mysql -u root -p zyt < server/sql/tcm_patient_trtc.sql ``` 2. **TRTC 配置必须正确** - 检查 `server/.env` 中的 `[TRTC]` 配置 - 确保 `ENABLE = "true"` 3. **前端需要重新编译** ```bash cd admin npm run dev ``` 4. **后端需要清除缓存** ```bash cd server php think clear ``` ## 故障排查 ### 问题:仍然提示"参数缺失" **检查清单**: - [ ] 后端代码是否已更新? - [ ] 前端代码是否已更新? - [ ] 浏览器缓存是否已清除? - [ ] 后端缓存是否已清除? **解决方案**: ```bash # 清除浏览器缓存 Ctrl + Shift + Delete # 清除后端缓存 cd server php think clear # 重启开发服务器 cd admin npm run dev ``` ### 问题:patient_id 仍然为空 **检查**: ```javascript // 在浏览器控制台查看 console.log('result:', result) console.log('result.id:', result.id) ``` **解决**: - 确保后端返回 `{ id: 123 }` - 确保前端正确解析 `result.id` ### 问题:TRTC 账号未创建 **检查**: ```bash # 查看日志 tail -f server/runtime/log/info.log | grep TRTC tail -f server/runtime/log/error.log | grep TRTC ``` **解决**: - 检查 TRTC 配置是否正确 - 检查 `ENABLE = "true"` - 查看错误日志 ## 总结 通过以下三个修复: 1. ✅ 后端返回正确的数据格式 2. ✅ 前端正确处理返回数据 3. ✅ 环境配置使用正确格式 现在新增诊单功能完全正常,并且会自动创建患者 TRTC 账号! --- **修复完成时间**: 2024-03-02 **修复状态**: ✅ 已完成并测试通过