getKey();
$restoreMode = $request->input('restore_mode', 'append');
$selectedTables = $request->input('selected_tables', []);
// 调用服务恢复备份
$result = CleanupService::restoreBackup($backupId, [
'restore_mode' => $restoreMode,
'selected_tables' => $selectedTables,
]);
if (!$result['success']) {
return $this->response()
->error('恢复失败:' . $result['message']);
}
$data = $result['data'];
return $this->response()
->success('数据恢复成功!')
->detail("
恢复模式:{$data['restore_mode_name']}
恢复表数:{$data['restored_tables']}
恢复记录数:" . number_format($data['restored_records']) . "
执行时间:{$data['execution_time']}秒
");
} catch (\Exception $e) {
return $this->response()
->error('恢复失败:' . $e->getMessage());
}
}
/**
* 确认对话框
*/
public function confirm()
{
return [
'确认恢复数据?',
'⚠️ 数据恢复操作不可逆,请谨慎操作!',
[
'restore_mode' => [
'type' => 'select',
'label' => '恢复模式',
'options' => [
'append' => '追加模式(保留现有数据)',
'replace' => '替换模式(清空后恢复)',
'merge' => '合并模式(智能合并)',
],
'default' => 'append',
'required' => true,
],
'selected_tables' => [
'type' => 'checkbox',
'label' => '选择表',
'options' => [], // 这里应该动态获取备份中的表列表
'help' => '不选择则恢复所有表',
]
]
];
}
/**
* 权限检查
*/
public function allowed()
{
$row = $this->row;
return $row->backup_status == 2; // 只有已完成的备份可以恢复
}
/**
* 渲染按钮
*/
public function render()
{
return <<
{$this->title}
HTML;
}
}