# 任务详情页面null值显示问题修复说明 ## 问题描述 在App任务详情页面中,任务类型和任务状态显示为"null"。 ## 问题原因 经过排查发现有两个可能的原因: ### 1. 数据库记录中字段为NULL 部分任务记录在创建时,`task_type` 或 `task_status` 字段可能未正确赋值,导致数据库中这些字段为NULL。 ### 2. 前端未处理NULL值 前端在调用 `getTaskTypeText()` 和 `getStatusText()` 方法时,如果传入NULL值,方法会返回 `typeMap[null]`,结果为undefined,最终在页面上显示为"null"字符串。 ## 解决方案 ### 前端修复(已完成) 修改了 `app/pages/task/detail.vue` 文件: 1. **增强调试日志** ```javascript loadTaskDetail() { getTask(this.taskId).then(response => { this.taskDetail = response.data || response // 打印完整数据,便于排查 console.log('任务详情完整数据:', JSON.stringify(this.taskDetail, null, 2)) console.log('任务类型字段值:', this.taskDetail.taskType) console.log('任务状态字段值:', this.taskDetail.taskStatus) }) } ``` 2. **添加NULL值处理** ```vue {{ taskDetail.taskType ? getTaskTypeText(taskDetail.taskType) : '未设置' }} {{ taskDetail.taskStatus ? getStatusText(taskDetail.taskStatus) : '未设置' }} ``` ### 后端修复(建议执行) #### 步骤1:检查数据 执行SQL脚本 `sql/fix_null_task_fields.sql` 中的检查语句: ```sql -- 检查task_type为NULL的记录数量 SELECT COUNT(*) FROM sys_task WHERE task_type IS NULL AND del_flag = '0'; -- 检查task_status为NULL的记录数量 SELECT COUNT(*) FROM sys_task WHERE task_status IS NULL AND del_flag = '0'; ``` #### 步骤2:修复数据 如果发现存在NULL记录,执行修复语句: ```sql -- 修复task_type为NULL的记录(设置为OTHER) UPDATE sys_task SET task_type = 'OTHER' WHERE task_type IS NULL AND del_flag = '0'; -- 修复task_status为NULL的记录(设置为PENDING) UPDATE sys_task SET task_status = 'PENDING' WHERE task_status IS NULL AND del_flag = '0'; ``` #### 步骤3:添加约束(可选) 为了防止未来再次出现NULL值,可以添加NOT NULL约束: ```sql ALTER TABLE sys_task MODIFY COLUMN task_type VARCHAR(50) NOT NULL DEFAULT 'OTHER'; ALTER TABLE sys_task MODIFY COLUMN task_status VARCHAR(50) NOT NULL DEFAULT 'PENDING'; ``` ### 后端Service层增强(建议) 在 `SysTaskServiceImpl.java` 的任务创建方法中,确保这些字段有默认值: ```java @Override public int insertSysTask(TaskCreateVO createVO) { SysTask task = new SysTask(); // ... 其他字段赋值 // 确保taskType和taskStatus有默认值 task.setTaskType(createVO.getTaskType() != null ? createVO.getTaskType() : "OTHER"); task.setTaskStatus("PENDING"); // 新创建的任务默认为待处理状态 // ... 后续逻辑 } ``` ## 排查步骤 如果问题仍然存在,请按以下步骤排查: ### 1. 查看控制台日志 在App中打开任务详情页,查看微信开发者工具或浏览器控制台: ``` 任务详情完整数据: { ... } 任务类型字段值: xxx 任务状态字段值: xxx ``` ### 2. 检查后端返回数据 在后端 `SysTaskController.getInfo()` 方法中添加日志: ```java @GetMapping(value = "/{taskId}") public AjaxResult getInfo(@PathVariable("taskId") Long taskId) { SysTask task = sysTaskService.getTaskDetail(taskId); logger.info("返回任务详情 - taskType: {}, taskStatus: {}", task.getTaskType(), task.getTaskStatus()); return success(task); } ``` ### 3. 直接查询数据库 ```sql SELECT task_id, task_code, task_type, task_status, create_time FROM sys_task WHERE task_id = '具体的任务ID'; ``` ## 字段值说明 ### 任务类型 (task_type) | 值 | 含义 | |---|---| | MAINTENANCE | 维修保养 | | FUEL | 加油 | | OTHER | 其他 | | EMERGENCY_TRANSFER | 急救转运 | | WELFARE | 福祉车 | ### 任务状态 (task_status) | 值 | 含义 | |---|---| | PENDING | 待处理 | | DEPARTING | 出发中 | | ARRIVED | 已到达 | | RETURNING | 返程中 | | COMPLETED | 已完成 | | CANCELLED | 已取消 | | IN_PROGRESS | 处理中(兼容旧数据)| ## 相关文件 ### 前端 - `app/pages/task/detail.vue` - 任务详情页面 - `app/api/task.js` - 任务API接口 ### 后端 - `SysTaskController.java` - 任务控制器 - `SysTaskServiceImpl.java` - 任务Service实现 - `SysTaskMapper.xml` - 任务Mapper配置 - `SysTask.java` - 任务实体类 ### 数据库 - `sys_task` - 任务主表 - `sql/fix_null_task_fields.sql` - 修复脚本 ## 注意事项 1. ⚠️ 执行数据库修复脚本前请先备份数据 2. ⚠️ 添加NOT NULL约束前需确保所有记录都已修复 3. ✅ 前端已添加NULL值防护,即使后端返回NULL也会显示"未设置" 4. ✅ 建议在创建任务时强制校验这些必填字段 --- **修复时间**: 2025-10-26 **修复人**: AI Assistant **影响范围**: App端任务详情页面显示