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

303 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 修复总结 - 诊单新增"参数缺失"错误
## 问题描述
新增诊单时,保存成功后提示错误:
```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
**修复状态**: ✅ 已完成并测试通过