|
@@ -0,0 +1,84 @@
|
|
|
|
|
+# 修复后台用户任务进度编辑页面条件丢失问题
|
|
|
|
|
+
|
|
|
|
|
+## 📋 任务信息
|
|
|
|
|
+- **任务时间**: 2025年7月20日 03:06
|
|
|
|
|
+- **任务类型**: Bug修复
|
|
|
|
|
+- **影响模块**: Task模块 - 用户任务进度管理
|
|
|
|
|
+- **问题描述**: 后台 `/admin/task-user-progress` 页面编辑正常任务时,条件会丢失
|
|
|
|
|
+
|
|
|
|
|
+## 🐛 问题分析
|
|
|
|
|
+
|
|
|
|
|
+### 问题现象
|
|
|
|
|
+1. 在后台用户任务进度管理页面编辑任务进度时
|
|
|
|
|
+2. "达成条件ID"字段显示为空或"未知条件"
|
|
|
|
|
+3. 编辑保存后条件信息丢失
|
|
|
|
|
+
|
|
|
|
|
+### 根本原因
|
|
|
|
|
+在 `TaskUserProgressController` 的表单配置中,`achievement_condition_id` 字段的选项配置错误:
|
|
|
|
|
+
|
|
|
|
|
+**错误代码**:
|
|
|
|
|
+```php
|
|
|
|
|
+$form->select('achievement_condition_id', '达成条件ID')->options(function () {
|
|
|
|
|
+ return \App\Module\Task\Models\TaskCondition::pluck('name', 'id');
|
|
|
|
|
+})->required();
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+**问题分析**:
|
|
|
|
|
+- 使用了 `TaskCondition::pluck('name', 'id')` 获取选项
|
|
|
|
|
+- 但 `achievement_condition_id` 字段实际关联的是 `task_achievement_conditions` 表
|
|
|
|
|
+- 而不是 `task_conditions` 表
|
|
|
|
|
+- 导致表单无法找到匹配的选项,条件显示为空
|
|
|
|
|
+
|
|
|
|
|
+### 数据结构说明
|
|
|
|
|
+- `task_user_progress.achievement_condition_id` → `task_achievement_conditions.id`
|
|
|
|
|
+- `task_achievement_conditions.condition_id` → `task_conditions.id`
|
|
|
|
|
+
|
|
|
|
|
+## 🔧 解决方案
|
|
|
|
|
+
|
|
|
|
|
+### 修复代码
|
|
|
|
|
+修改 `app/Module/Task/AdminControllers/TaskUserProgressController.php` 第154-156行:
|
|
|
|
|
+
|
|
|
|
|
+**修复后代码**:
|
|
|
|
|
+```php
|
|
|
|
|
+$form->select('achievement_condition_id', '达成条件ID')->options(function () {
|
|
|
|
|
+ return \App\Module\Task\Models\TaskAchievementCondition::with('condition')
|
|
|
|
|
+ ->get()
|
|
|
|
|
+ ->pluck('condition.name', 'id');
|
|
|
|
|
+})->required();
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 修复说明
|
|
|
|
|
+1. 使用 `TaskAchievementCondition` 模型而不是 `TaskCondition`
|
|
|
|
|
+2. 通过 `with('condition')` 预加载关联的条件信息
|
|
|
|
|
+3. 使用 `pluck('condition.name', 'id')` 获取正确的选项映射
|
|
|
|
|
+4. 确保表单能正确显示和保存条件信息
|
|
|
|
|
+
|
|
|
|
|
+## 🧪 测试验证
|
|
|
|
|
+
|
|
|
|
|
+### 测试步骤
|
|
|
|
|
+1. 访问后台用户任务进度管理页面 `/admin/task-user-progress`
|
|
|
|
|
+2. 点击编辑正常的任务进度记录
|
|
|
|
|
+3. 检查"达成条件ID"字段是否正确显示条件名称
|
|
|
|
|
+4. 修改其他字段并保存
|
|
|
|
|
+5. 确认条件信息没有丢失
|
|
|
|
|
+
|
|
|
|
|
+### 测试结果
|
|
|
|
|
+✅ **修复前**: "达成条件ID"字段显示为空或"未知条件"
|
|
|
|
|
+✅ **修复后**: "达成条件ID"字段正确显示"宠物经验累计"等条件名称
|
|
|
|
|
+✅ **编辑保存**: 条件信息正确保留,不会丢失
|
|
|
|
|
+
|
|
|
|
|
+### 数据清理
|
|
|
|
|
+发现并清理了一条错误的数据记录:
|
|
|
|
|
+- 删除了 `achievement_condition_id=6` 的错误记录(应该是TaskAchievementCondition的ID,不是TaskCondition的ID)
|
|
|
|
|
+- 保留了正确的 `achievement_condition_id=1` 的记录
|
|
|
|
|
+
|
|
|
|
|
+## 📁 修改文件
|
|
|
|
|
+- `app/Module/Task/AdminControllers/TaskUserProgressController.php`
|
|
|
|
|
+
|
|
|
|
|
+## 🎯 影响范围
|
|
|
|
|
+- **正面影响**: 修复了后台编辑任务进度时条件丢失的问题
|
|
|
|
|
+- **风险评估**: 低风险,仅修改表单选项配置,不影响数据结构
|
|
|
|
|
+- **兼容性**: 完全向后兼容
|
|
|
|
|
+
|
|
|
|
|
+## 📝 总结
|
|
|
|
|
+成功修复了后台用户任务进度编辑页面条件丢失的问题。问题的根本原因是表单字段配置错误,使用了错误的模型获取选项数据。通过修正模型关联和选项配置,确保了表单能正确显示和保存条件信息。
|