columnId();
$helper->columnUserId();
// 任务名称列,添加链接到任务详情
$grid->column('task.name', '任务名称')->display(function ($name) {
if (!$name) {
return '未知任务';
}
$taskId = $this->task_id ?? 0;
$url = admin_url("tasks/{$taskId}");
return "{$name}";
});
// 条件名称列
$grid->column('achievementCondition.condition.name', '条件名称')->display(function ($name) {
return $name ?: '未知条件';
});
// 任务状态列(手动查询用户任务状态)
$grid->column('task_status', '任务状态')->display(function () {
// 手动查询用户任务状态
$userTask = \App\Module\Task\Models\TaskUserTask::where('user_id', $this->user_id ?? 0)
->where('task_id', $this->task_id ?? 0)
->first();
$status = $userTask ? $userTask->status : null;
if ($status === null) {
return '未接取';
}
$statusMap = [
0 => '未接取',
1 => '进行中',
2 => '已完成',
3 => '已领取奖励',
4 => '已失败',
5 => '已过期',
];
return $statusMap[$status] ?? '未知状态';
});
$grid->column('current_value', '当前值')->display(function ($value) {
return number_format($value);
});
$grid->column('target_value', '目标值')->display(function ($value) {
return number_format($value);
});
$helper->columnCalculatedProgress();
// 最后更新时间
$grid->column('last_update_time', '最后更新')->display(function ($time) {
return $time ? $time : '从未更新';
})->sortable();
$grid->column('created_at', '创建时间')->sortable();
$grid->filter(function (Grid\Filter $filter) {
$filterHelper = new FilterHelper($filter, $this);
$filterHelper->equalId();
$filterHelper->equalUserId();
$filterHelper->equalTaskId();
$filterHelper->equal('achievement_condition_id', '达成条件ID');
$filter->between('current_value', '当前值范围');
$filter->between('target_value', '目标值范围');
$filter->between('created_at', '创建时间')->datetime();
});
});
}
/**
* 详情页构建
*
* @param mixed $id
* @return Show
*/
protected function detail($id)
{
return Show::make(TaskUserProgress::with(['task', 'achievementCondition.condition', 'userTask'])->findOrFail($id), function (Show $show) {
$helper = new ShowHelper($show, $this);
$helper->fieldId();
$show->field('user_id', '用户ID');
$show->field('task.name', '任务名称');
$show->field('task.description', '任务描述');
$show->field('achievementCondition.condition.name', '条件名称');
$show->field('achievementCondition.condition.description', '条件描述');
$show->field('current_value', '当前值')->as(function ($value) {
return number_format($value);
});
$show->field('target_value', '目标值')->as(function ($value) {
return number_format($value);
});
$helper->fieldCalculatedProgress();
// 任务状态暂时移除,可以通过用户任务管理页面查看
$show->field('last_update_time', '最后更新时间');
$helper->fieldCreatedAt();
$helper->fieldUpdatedAt();
});
}
/**
* 表单构建
*
* @return Form
*/
protected function form()
{
return Form::make(new TaskUserProgressRepository(), function (Form $form) {
$helper = new FormHelper($form, $this);
$form->display('id', 'ID');
$form->number('user_id', '用户ID')->required();
$helper->selectTask();
$form->select('achievement_condition_id', '达成条件ID')->options(function () {
return \App\Module\Task\Models\TaskAchievementCondition::with('condition')
->get()
->pluck('condition.name', 'id');
})->required();
$form->number('current_value', '当前值')->default(0)->min(0);
$form->number('target_value', '目标值')->default(1)->min(1);
$form->display('created_at', '创建时间');
$form->display('updated_at', '更新时间');
});
}
}