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]; } }