# 诊单查看记录功能 - 安装指南 ## 安装步骤 ### 1. 创建数据库表 执行以下SQL语句创建诊单查看记录表: ```bash # 方式1: 使用MySQL客户端执行 mysql -u root -p your_database < server/database/diagnosis_view_records.sql # 方式2: 在phpMyAdmin或其他数据库管理工具中执行 # 打开文件: server/database/diagnosis_view_records.sql # 复制SQL语句并执行 ``` SQL文件位置: `server/database/diagnosis_view_records.sql` ### 2. 验证表创建 登录数据库,检查表是否创建成功: ```sql SHOW TABLES LIKE 'la_diagnosis_view_records'; DESC la_diagnosis_view_records; ``` ### 3. 文件清单 确认以下文件已创建: #### 后端文件 - ✅ `server/database/diagnosis_view_records.sql` - 数据库表结构 - ✅ `server/app/common/model/DiagnosisViewRecord.php` - 模型文件 - ✅ `server/app/api/controller/TcmController.php` - 控制器(已更新) - ✅ `server/app/adminapi/logic/tcm/DiagnosisLogic.php` - 逻辑层(已更新) #### 前端文件 - ✅ `TUICallKit-Vue3/pages/order/monad/monad.vue` - 小程序页面(已更新) #### 文档文件 - ✅ `DIAGNOSIS_VIEW_RECORD_FEATURE.md` - 功能说明文档 - ✅ `DIAGNOSIS_VIEW_RECORD_INSTALL.md` - 安装指南(本文件) - ✅ `MINI_PROGRAM_SCENE_PARAMS.md` - Scene参数说明 ### 4. 配置小程序用户ID获取 在小程序中添加用户ID获取逻辑: ```javascript // TUICallKit-Vue3/pages/order/monad/monad.vue // 在 parsePageParams 函数中添加 const parsePageParams = (options) => { const params = {}; // ... 现有的解析逻辑 ... // 获取当前登录用户ID try { // 方式1: 从本地存储获取 const userInfo = uni.getStorageSync('userInfo'); params.user_id = userInfo?.id || 0; // 方式2: 从全局状态获取 // const app = getApp(); // params.user_id = app.globalData.userId || 0; // 方式3: 从Vuex获取 // import { useUserStore } from '@/stores/user'; // const userStore = useUserStore(); // params.user_id = userStore.userId || 0; } catch (error) { console.error('获取用户ID失败:', error); params.user_id = 0; } return params; }; ``` ### 5. 测试功能 #### 5.1 测试查看记录 1. 在管理后台生成小程序二维码 2. 使用微信扫描二维码 3. 小程序打开诊单详情页 4. 检查数据库 `la_diagnosis_view_records` 表,应该有一条新记录 ```sql SELECT * FROM la_diagnosis_view_records ORDER BY id DESC LIMIT 1; ``` #### 5.2 测试重复查看 1. 再次扫描同一个二维码 2. 检查数据库,`view_count` 应该增加,`last_view_time` 应该更新 ```sql SELECT id, user_id, diagnosis_id, view_count, FROM_UNIXTIME(first_view_time) as first_view, FROM_UNIXTIME(last_view_time) as last_view FROM la_diagnosis_view_records WHERE diagnosis_id = 4; ``` #### 5.3 测试确认功能 1. 在小程序中点击"确认诊单"按钮 2. 检查数据库,`is_confirmed` 应该变为1,`confirmed_time` 应该有值 ```sql SELECT id, diagnosis_id, is_confirmed, FROM_UNIXTIME(confirmed_time) as confirmed_at FROM la_diagnosis_view_records WHERE diagnosis_id = 4; ``` ### 6. API接口测试 #### 测试 diagnosisDetail 接口 ```bash curl -X GET "http://your-domain/api/tcm/diagnosisDetail?id=4&user_id=1&share_user_id=2" ``` 预期响应: ```json { "code": 1, "msg": "success", "data": { "id": 4, "patient_name": "张三", // ... 其他诊单信息 } } ``` #### 测试 confirmDiagnosis 接口 ```bash curl -X POST "http://your-domain/api/tcm/confirmDiagnosis" \ -H "Content-Type: application/json" \ -d '{"id": 4, "user_id": 1, "share_user": 2}' ``` 预期响应: ```json { "code": 1, "msg": "确认成功", "data": [] } ``` ### 7. 常见问题 #### Q1: 表创建失败 **A:** 检查数据库权限,确保有CREATE TABLE权限 #### Q2: 查看记录没有创建 **A:** 检查以下几点: - 确认表已创建 - 检查PHP错误日志 - 确认 `DiagnosisViewRecord` 模型文件存在 - 检查数据库连接配置 #### Q3: user_id 总是0 **A:** 需要在小程序中实现用户登录功能,并在 `parsePageParams` 中获取用户ID #### Q4: 确认功能不工作 **A:** 检查: - 确认接口已添加到 `$notNeedLogin` 数组 - 检查POST参数是否正确传递 - 查看PHP错误日志 ### 8. 数据库索引优化 如果查看记录表数据量较大,建议添加以下索引: ```sql -- 已在建表语句中包含,如果没有可手动添加 ALTER TABLE la_diagnosis_view_records ADD INDEX idx_user_diagnosis (user_id, diagnosis_id); ALTER TABLE la_diagnosis_view_records ADD INDEX idx_diagnosis (diagnosis_id); ALTER TABLE la_diagnosis_view_records ADD INDEX idx_patient (patient_id); ALTER TABLE la_diagnosis_view_records ADD INDEX idx_share_user (share_user_id); ``` ### 9. 数据清理 定期清理过期的查看记录(可选): ```sql -- 删除30天前的未确认记录 DELETE FROM la_diagnosis_view_records WHERE is_confirmed = 0 AND create_time < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 30 DAY)); -- 或使用软删除 UPDATE la_diagnosis_view_records SET delete_time = UNIX_TIMESTAMP() WHERE is_confirmed = 0 AND create_time < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 30 DAY)); ``` ### 10. 下一步 功能安装完成后,可以: 1. 实现查看记录的管理界面 2. 添加数据统计报表 3. 实现查看记录的导出功能 4. 添加消息通知(如:诊单被查看时通知医生) ## 相关文档 - [功能说明文档](./DIAGNOSIS_VIEW_RECORD_FEATURE.md) - [Scene参数说明](./MINI_PROGRAM_SCENE_PARAMS.md) - [小程序二维码功能](./QRCODE_README.md)