303 lines
6.8 KiB
Markdown
303 lines
6.8 KiB
Markdown
# 修复总结 - 诊单新增"参数缺失"错误
|
||
|
||
## 问题描述
|
||
|
||
新增诊单时,保存成功后提示错误:
|
||
```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
|
||
**修复状态**: ✅ 已完成并测试通过
|