ExportLogsAction.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. <?php
  2. namespace App\Module\Cleanup\AdminControllers\Actions;
  3. use App\Module\Cleanup\Services\CleanupService;
  4. use Dcat\Admin\Grid\Tools\AbstractTool;
  5. use Dcat\Admin\Actions\Response;
  6. use Illuminate\Http\Request;
  7. /**
  8. * 导出日志Action
  9. *
  10. * 用于导出清理日志
  11. */
  12. class ExportLogsAction extends AbstractTool
  13. {
  14. /**
  15. * 按钮标题
  16. */
  17. protected $title = '导出日志';
  18. /**
  19. * 处理请求
  20. */
  21. public function handle(Request $request)
  22. {
  23. try {
  24. $format = $request->input('format', 'csv');
  25. $dateRange = $request->input('date_range', '7');
  26. $includeErrors = $request->input('include_errors', false);
  27. // 调用服务导出日志
  28. $result = CleanupService::exportLogs([
  29. 'format' => $format,
  30. 'date_range' => $dateRange,
  31. 'include_errors' => $includeErrors,
  32. ]);
  33. if (!$result['success']) {
  34. return $this->response()
  35. ->error('导出失败:' . $result['message']);
  36. }
  37. $data = $result['data'];
  38. return $this->response()
  39. ->success('导出完成!')
  40. ->detail("
  41. 导出格式:{$data['format']}<br>
  42. 导出记录数:" . number_format($data['records_count']) . "<br>
  43. 文件大小:{$data['file_size']}<br>
  44. <br>
  45. <a href='{$data['download_url']}' class='btn btn-primary' target='_blank'>
  46. <i class='fa fa-download'></i> 下载文件
  47. </a>
  48. ");
  49. } catch (\Exception $e) {
  50. return $this->response()
  51. ->error('导出失败:' . $e->getMessage());
  52. }
  53. }
  54. /**
  55. * 确认对话框
  56. */
  57. public function confirm()
  58. {
  59. return [
  60. '导出清理日志',
  61. '请选择导出格式和时间范围。',
  62. [
  63. 'format' => [
  64. 'type' => 'select',
  65. 'label' => '导出格式',
  66. 'options' => [
  67. 'csv' => 'CSV格式',
  68. 'excel' => 'Excel格式',
  69. 'json' => 'JSON格式',
  70. ],
  71. 'default' => 'csv',
  72. 'required' => true,
  73. ],
  74. 'date_range' => [
  75. 'type' => 'select',
  76. 'label' => '时间范围',
  77. 'options' => [
  78. '1' => '最近1天',
  79. '7' => '最近7天',
  80. '30' => '最近30天',
  81. '90' => '最近90天',
  82. 'all' => '全部',
  83. ],
  84. 'default' => '7',
  85. 'required' => true,
  86. ],
  87. 'include_errors' => [
  88. 'type' => 'checkbox',
  89. 'label' => '仅包含错误日志',
  90. 'checked' => false,
  91. 'help' => '勾选则只导出有错误的日志记录',
  92. ]
  93. ]
  94. ];
  95. }
  96. }