Files
zyt/FIXES_SUMMARY.md
T
2026-03-04 15:32:30 +08:00

6.8 KiB

修复总结 - 诊单新增"参数缺失"错误

问题描述

新增诊单时,保存成功后提示错误:

{"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

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"

修复效果

修复前

  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 账号创建

# 查看数据库
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. 数据库表必须存在

    mysql -u root -p zyt < server/sql/tcm_patient_trtc.sql
    
  2. TRTC 配置必须正确

    • 检查 server/.env 中的 [TRTC] 配置
    • 确保 ENABLE = "true"
  3. 前端需要重新编译

    cd admin
    npm run dev
    
  4. 后端需要清除缓存

    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"
  • 查看错误日志

总结

通过以下三个修复:

  1. 后端返回正确的数据格式
  2. 前端正确处理返回数据
  3. 环境配置使用正确格式

现在新增诊单功能完全正常,并且会自动创建患者 TRTC 账号!


修复完成时间: 2024-03-02 修复状态: 已完成并测试通过