| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- <?php
- namespace App\Module\Cleanup\AdminControllers\Actions;
- use App\Module\Cleanup\Services\CleanupService;
- use Dcat\Admin\Grid\BatchAction;
- use Dcat\Admin\Actions\Response;
- use Illuminate\Http\Request;
- /**
- * 批量删除备份Action
- *
- * 用于批量删除备份记录和文件
- */
- class BatchDeleteBackupAction extends BatchAction
- {
- /**
- * 按钮标题
- */
- protected $title = '批量删除';
- /**
- * 处理请求
- */
- public function handle(Request $request)
- {
- try {
- // 获取选中的ID
- $ids = $this->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('<br>', array_slice($errors, 0, 5));
- if (count($errors) > 5) {
- $errorDetail .= '<br>...还有 ' . (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];
- }
- }
|