getKey();
if (empty($ids)) {
return $this->response()->error('请选择要删除的备份');
}
$deleteFiles = $request->input('delete_files', true);
$successCount = 0;
$failCount = 0;
$totalFreedSpace = 0;
$errors = [];
foreach ($ids as $backupId) {
try {
$result = CleanupService::deleteBackup($backupId, $deleteFiles);
if ($result['success']) {
$successCount++;
$totalFreedSpace += $result['data']['freed_space_bytes'] ?? 0;
} else {
$failCount++;
$errors[] = "备份 {$backupId}: " . $result['message'];
}
} catch (\Exception $e) {
$failCount++;
$errors[] = "备份 {$backupId}: " . $e->getMessage();
}
}
$message = "成功删除 {$successCount} 个备份";
if ($failCount > 0) {
$message .= ",失败 {$failCount} 个";
}
if ($totalFreedSpace > 0) {
$freedSpace = $this->formatBytes($totalFreedSpace);
$message .= ",释放空间 {$freedSpace}";
}
$response = $this->response()->success($message)->refresh();
if (!empty($errors)) {
$errorDetail = implode('
', array_slice($errors, 0, 5));
if (count($errors) > 5) {
$errorDetail .= '
...还有 ' . (count($errors) - 5) . ' 个错误';
}
$response->detail($errorDetail);
}
return $response;
} catch (\Exception $e) {
return $this->response()
->error('批量删除失败:' . $e->getMessage());
}
}
/**
* 确认对话框
*/
public function confirm()
{
return [
'确认批量删除备份?',
'⚠️ 删除后无法恢复,请谨慎操作!',
[
'delete_files' => [
'type' => 'checkbox',
'label' => '同时删除备份文件',
'checked' => true,
'help' => '取消勾选则只删除记录,保留文件',
]
]
];
}
/**
* 格式化字节大小
*/
private function formatBytes($bytes)
{
if ($bytes == 0) return '0 B';
$units = ['B', 'KB', 'MB', 'GB', 'TB'];
$base = log($bytes, 1024);
$index = floor($base);
if ($index >= count($units)) {
$index = count($units) - 1;
}
$size = round(pow(1024, $base - $index), 2);
return $size . ' ' . $units[$index];
}
}