# 任务详情联系人信息显示优化 ## 需求背景 用户反馈:任务详情页面中,转运任务的**联系人、患者名称、联系方式**需要完整显示。 ## 问题分析 ### 原有显示情况 在转运任务的患者信息板块中: - ❌ **缺少联系人字段** - 未显示 `patientContact` - ⚠️ **患者姓名** - 只在有数据时显示(`v-if`) - ⚠️ **联系电话** - 只在有数据时显示(`v-if`) ### 问题影响 1. 联系人信息缺失,无法快速联系患者家属 2. 患者姓名和联系方式未填写时不显示字段,用户不知道是否有这些信息 3. 信息不完整,影响任务执行 ## 解决方案 ### 字段映射关系 | 显示标签 | 数据库字段 | 实体类属性 | 说明 | |---------|-----------|-----------|------| | 联系人 | `patient_contact` | `patientContact` | 患者联系人(家属) | | 患者姓名 | `patient_name` | `patientName` | 患者本人姓名 | | 联系电话 | `patient_phone` | `patientPhone` | 联系方式 | ### 修改内容 #### 修改前 ```vue 患者信息 患者姓名 {{ taskDetail.emergencyInfo.patientName }} 联系电话 {{ taskDetail.emergencyInfo.patientPhone }} ``` #### 修改后 ```vue 患者信息 联系人 {{ taskDetail.emergencyInfo.patientContact || '未设置' }} 患者姓名 {{ taskDetail.emergencyInfo.patientName || '未设置' }} 联系电话 {{ taskDetail.emergencyInfo.patientPhone || '未设置' }} ``` ### 关键改进 1. **新增联系人字段** ⭐ - 使用 `patientContact` 属性 - 始终显示(移除 `v-if`) - 无数据时显示"未设置" 2. **优化必填字段显示** - 患者姓名、联系电话改为始终显示 - 使用 `|| '未设置'` 处理空值 - 让用户知道这些字段的存在 3. **保留可选字段的条件显示** - 性别、年龄、身份证号等仍使用 `v-if` - 有数据才显示,避免列表过长 ## 显示效果对比 ### 修改前 ``` ┌─────────────────────────┐ │ 患者信息 │ ├─────────────────────────┤ │ (缺少联系人) │ ← ❌ 缺失 │ 患者姓名:(空时不显示)│ ← ⚠️ 可能看不到 │ 联系电话:(空时不显示)│ ← ⚠️ 可能看不到 │ 性别:男 │ │ 年龄:50岁 │ └─────────────────────────┘ ``` ### 修改后 ``` ┌─────────────────────────┐ │ 患者信息 │ ├─────────────────────────┤ │ 联系人: 张三 │ ← ✅ 新增 │ 患者姓名: 李四 │ ← ✅ 始终显示 │ 联系电话: 138****1234 │ ← ✅ 始终显示 │ 性别: 男 │ │ 年龄: 50岁 │ └─────────────────────────┘ ``` ### 空值情况 ``` ┌─────────────────────────┐ │ 患者信息 │ ├─────────────────────────┤ │ 联系人: 未设置 │ ← ✅ 友好提示 │ 患者姓名: 未设置 │ ← ✅ 知道有这个字段 │ 联系电话: 未设置 │ ← ✅ 提示需要填写 └─────────────────────────┘ ``` ## 字段显示规则 ### 始终显示(重要信息) | 字段 | 标签 | 空值显示 | 原因 | |------|------|---------|------| | `patientContact` | 联系人 | 未设置 | 必须知道联系谁 | | `patientName` | 患者姓名 | 未设置 | 核心信息 | | `patientPhone` | 联系电话 | 未设置 | 必须联系方式 | ### 条件显示(补充信息) | 字段 | 标签 | 显示条件 | 原因 | |------|------|---------|------| | `patientGender` | 性别 | `v-if` | 可选信息 | | `patientAge` | 年龄 | `v-if` | 可选信息 | | `patientIdCard` | 身份证号 | `v-if` | 可选信息 | | `patientCondition` | 病情描述 | `v-if` | 可选信息 | ## 数据结构 ### emergencyInfo 对象结构 ```javascript { // 必填信息(始终显示) patientContact: "张三", // 联系人 patientName: "李四", // 患者姓名 patientPhone: "13812341234", // 联系电话 // 可选信息(条件显示) patientGender: "male", // 性别 patientAge: 50, // 年龄 patientIdCard: "44010119700101****", // 身份证 patientCondition: "发烧咳嗽", // 病情描述 // 医院信息 hospitalOutName: "广州市第一人民医院", hospitalInName: "中山大学附属第一医院", // ... } ``` ## 后端数据保障 ### 实体类:SysTaskEmergency ```java public class SysTaskEmergency { /** 联系人 */ private String patientContact; /** 患者姓名 */ private String patientName; /** 联系电话 */ private String patientPhone; // ... 其他字段 } ``` ### 数据库表:sys_task_emergency ```sql CREATE TABLE sys_task_emergency ( emergency_id BIGINT PRIMARY KEY, task_id BIGINT NOT NULL, patient_contact VARCHAR(100), -- 联系人 patient_name VARCHAR(100), -- 患者姓名 patient_phone VARCHAR(20), -- 联系电话 -- ... ); ``` ## 测试验证 ### 测试场景1:完整数据 **数据**: ```json { "patientContact": "张三", "patientName": "李四", "patientPhone": "13812341234", "patientGender": "male", "patientAge": 50 } ``` **预期显示**: ``` 联系人: 张三 患者姓名: 李四 联系电话: 13812341234 性别: 男 年龄: 50岁 ``` ### 测试场景2:部分数据 **数据**: ```json { "patientContact": "张三", "patientName": null, "patientPhone": "13812341234" } ``` **预期显示**: ``` 联系人: 张三 患者姓名: 未设置 ← 空值友好提示 联系电话: 13812341234 (无性别、年龄等字段) ``` ### 测试场景3:全部为空 **数据**: ```json { "patientContact": null, "patientName": null, "patientPhone": null } ``` **预期显示**: ``` 联系人: 未设置 患者姓名: 未设置 联系电话: 未设置 ``` ## 用户体验改进 ### 改进点 1. ✅ **信息完整性** - 联系人、患者姓名、联系方式三个核心信息全部显示 - 用户一眼就能看到所有关键信息 2. ✅ **空值友好提示** - 未填写时显示"未设置" - 清晰提示用户这些信息缺失 - 引导用户完善数据 3. ✅ **字段优先级明确** - 核心信息始终在前 - 补充信息条件显示 - 页面不会过长 4. ✅ **任务执行便利** - 快速找到联系人和电话 - 无需在多个页面间跳转 - 提高工作效率 ## 相关文件 - **页面文件**: `app/pages/task/detail.vue` - **实体类**: `ruoyi-system/.../SysTaskEmergency.java` - **数据库表**: `sys_task_emergency` - **API接口**: `/system/task/{taskId}` ## 注意事项 1. ⚠️ **联系人是必填项** - 创建任务时已验证必填 - 但历史数据可能为空 - 因此仍需处理空值 2. ⚠️ **电话号码格式** - 建议显示时做脱敏处理 - 如:`138****1234` - 保护隐私 3. ✅ **后端数据确保** - Mapper中需正确映射 `patientContact` 字段 - Service层返回完整的 `emergencyInfo` 对象 ## 后续优化建议 1. **电话号码脱敏** ```javascript formatPhone(phone) { if (!phone) return '未设置' return phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2') } ``` 2. **一键拨号** ```vue {{ taskDetail.emergencyInfo.patientPhone }} ``` 3. **信息完整度提示** ```vue ⚠️ 联系人信息缺失,请及时补充 ``` --- **优化时间**: 2025-10-26 **优化人**: AI Assistant **影响范围**: 转运任务详情页面 **状态**: ✅ 已完成