column('id', 'ID')->sortable();
$grid->column('task_name', '任务名称')->sortable();
// 关联计划
$grid->column('plan.plan_name', '关联计划')->sortable();
// 任务状态
$grid->column('status', '任务状态')->using([
1 => '待执行',
2 => '备份中',
3 => '执行中',
4 => '已完成',
5 => '已失败',
6 => '已取消',
7 => '已暂停',
])->label([
1 => 'secondary',
2 => 'info',
3 => 'primary',
4 => 'success',
5 => 'danger',
6 => 'warning',
7 => 'dark',
])->sortable();
// 进度信息
$grid->column('progress', '执行进度')->display(function ($progress) {
$color = 'secondary';
if ($progress >= 100) $color = 'success';
elseif ($progress >= 50) $color = 'primary';
elseif ($progress > 0) $color = 'info';
return "
";
});
$grid->column('current_step', '当前步骤');
// 统计信息
$grid->column('processed_tables', '处理进度')->display(function () {
return "{$this->processed_tables}/{$this->total_tables}";
});
$grid->column('deleted_records', '删除记录数')->display(function ($value) {
return number_format($value);
});
// 执行时间
$grid->column('execution_time', '执行时间(秒)')->display(function ($value) {
return number_format($value, 3);
});
// 时间信息
$grid->column('started_at', '开始时间')->sortable();
$grid->column('completed_at', '完成时间')->sortable();
$grid->column('created_at', '创建时间')->sortable();
// 筛选器
$grid->filter(function (Grid\Filter $filter) {
$filter->equal('status', '任务状态')->select([
1 => '待执行',
2 => '备份中',
3 => '执行中',
4 => '已完成',
5 => '已失败',
6 => '已取消',
7 => '已暂停',
]);
$filter->equal('plan_id', '关联计划')->select(
\App\Module\Cleanup\Models\CleanupPlan::pluck('plan_name', 'id')->toArray()
);
$filter->like('task_name', '任务名称');
$filter->between('created_at', '创建时间')->datetime();
$filter->between('started_at', '开始时间')->datetime();
$filter->between('completed_at', '完成时间')->datetime();
});
// 行操作
$grid->actions(function (Grid\Displayers\Actions $actions) {
$row = $actions->row;
// 根据状态显示不同操作
if ($row->status == 1) { // 待执行
$actions->append(new \App\Module\Cleanup\AdminControllers\Actions\StartTaskAction());
} elseif ($row->status == 3) { // 执行中
$actions->append(new \App\Module\Cleanup\AdminControllers\Actions\PauseTaskAction());
$actions->append(new \App\Module\Cleanup\AdminControllers\Actions\CancelTaskAction());
} elseif ($row->status == 7) { // 已暂停
$actions->append(new \App\Module\Cleanup\AdminControllers\Actions\ResumeTaskAction());
$actions->append(new \App\Module\Cleanup\AdminControllers\Actions\CancelTaskAction());
}
$actions->append(new \App\Module\Cleanup\AdminControllers\Actions\ViewTaskLogsAction());
if ($row->backup_id) {
$actions->append(new \App\Module\Cleanup\AdminControllers\Actions\ViewBackupAction());
}
});
// 批量操作
$grid->batchActions([
new \App\Module\Cleanup\AdminControllers\Actions\BatchCancelTaskAction(),
]);
// 工具栏
$grid->tools([
new \App\Module\Cleanup\AdminControllers\Actions\CreateTaskAction(),
]);
// 设置每页显示数量
$grid->paginate(20);
// 默认排序
$grid->model()->orderBy('created_at', 'desc');
});
}
/**
* 详情页面
*/
protected function detail($id): Show
{
return Show::make($id, new CleanupTaskRepository(), function (Show $show) {
$show->field('id', 'ID');
$show->field('task_name', '任务名称');
$show->field('plan.plan_name', '关联计划');
$show->field('status', '任务状态')->using([
1 => '待执行',
2 => '备份中',
3 => '执行中',
4 => '已完成',
5 => '已失败',
6 => '已取消',
7 => '已暂停',
]);
$show->field('progress', '执行进度')->display(function ($progress) {
return $progress . '%';
});
$show->field('current_step', '当前步骤');
// 统计信息
$show->field('total_tables', '总表数');
$show->field('processed_tables', '已处理表数');
$show->field('total_records', '总记录数')->display(function ($value) {
return number_format($value);
});
$show->field('deleted_records', '已删除记录数')->display(function ($value) {
return number_format($value);
});
// 性能信息
$show->field('backup_size', '备份大小')->display(function ($value) {
return \App\Module\Cleanup\Helpers\FormatHelper::formatBytes($value);
});
$show->field('execution_time', '执行时间')->display(function ($value) {
return number_format($value, 3) . ' 秒';
});
$show->field('backup_time', '备份时间')->display(function ($value) {
return number_format($value, 3) . ' 秒';
});
// 时间信息
$show->field('started_at', '开始时间');
$show->field('backup_completed_at', '备份完成时间');
$show->field('completed_at', '完成时间');
$show->field('error_message', '错误信息');
$show->field('created_by', '创建者ID');
$show->field('created_at', '创建时间');
$show->field('updated_at', '更新时间');
// 显示任务日志
$show->relation('logs', '执行日志', function ($model) {
$grid = new Grid(new \App\Module\Cleanup\Models\CleanupLog());
$grid->model()->where('task_id', $model->id);
$grid->column('table_name', '表名');
$grid->column('cleanup_type', '清理类型')->using([
1 => '清空表',
2 => '删除所有',
3 => '按时间删除',
4 => '按用户删除',
5 => '按条件删除',
]);
$grid->column('before_count', '清理前记录数')->display(function ($value) {
return number_format($value);
});
$grid->column('after_count', '清理后记录数')->display(function ($value) {
return number_format($value);
});
$grid->column('deleted_records', '删除记录数')->display(function ($value) {
return number_format($value);
});
$grid->column('execution_time', '执行时间(秒)');
$grid->column('created_at', '执行时间');
$grid->disableActions();
$grid->disableCreateButton();
$grid->disableFilter();
$grid->disablePagination();
return $grid;
});
});
}
/**
* 创建表单
*/
protected function form(): Form
{
return Form::make(new CleanupTaskRepository(), function (Form $form) {
$form->display('id', 'ID');
$form->text('task_name', '任务名称')->required();
$form->select('plan_id', '关联计划')
->options(\App\Module\Cleanup\Models\CleanupPlan::where('is_enabled', 1)->pluck('plan_name', 'id'))
->required();
$form->hidden('status')->value(1); // 待执行
$form->hidden('created_by')->value(admin_user_id());
$form->display('created_at', '创建时间');
$form->display('updated_at', '更新时间');
// 禁用编辑(任务创建后不允许修改)
$form->editing(function (Form $form) {
$form->display('task_name', '任务名称');
$form->display('plan.plan_name', '关联计划');
$form->display('status', '任务状态')->using([
1 => '待执行',
2 => '备份中',
3 => '执行中',
4 => '已完成',
5 => '已失败',
6 => '已取消',
7 => '已暂停',
]);
});
});
}
}