ManageTextbookSeries.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <?php
  2. namespace App\Filament\Resources\TextbookSeriesResource\Pages;
  3. use Illuminate\Database\Eloquent\Builder;
  4. use App\Filament\Resources\TextbookSeriesResource;
  5. use App\Services\TextbookApiService;
  6. use Filament\Actions;
  7. use Filament\Resources\Pages\ManageRecords;
  8. use Filament\Notifications\Notification;
  9. use Illuminate\Database\Eloquent\Model;
  10. class ManageTextbookSeries extends ManageRecords
  11. {
  12. protected static string $resource = TextbookSeriesResource::class;
  13. protected function getHeaderActions(): array
  14. {
  15. return [
  16. Actions\CreateAction::make()
  17. ->label('新建系列')
  18. ->mutateFormDataUsing(function (array $data): array {
  19. // 调用 API 创建教材系列
  20. try {
  21. $apiService = app(TextbookApiService::class);
  22. $result = $apiService->createTextbookSeries($data);
  23. if ($result) {
  24. Notification::make()
  25. ->title('教材系列创建成功')
  26. ->success()
  27. ->send();
  28. }
  29. return $data;
  30. } catch (\Exception $e) {
  31. Notification::make()
  32. ->title('教材系列创建失败')
  33. ->body($e->getMessage())
  34. ->danger()
  35. ->send();
  36. return $data;
  37. }
  38. }),
  39. ];
  40. }
  41. protected function mutateTableQueryUsing(Builder $query): Builder
  42. {
  43. // 由于数据在 PostgreSQL 中,这里返回空查询
  44. // 实际数据通过 API 获取
  45. return $query->whereRaw('1=0');
  46. }
  47. public function mount(): void
  48. {
  49. parent::mount();
  50. // 初始化时从 API 获取数据
  51. $this->refreshTableDataFromApi();
  52. }
  53. protected function refreshTableDataFromApi(): void
  54. {
  55. // 通过 API 获取教材系列数据
  56. try {
  57. $apiService = app(TextbookApiService::class);
  58. $seriesData = $apiService->getTextbookSeries();
  59. // 将 API 数据转换为 Eloquent 集合(用于显示)
  60. // 这里需要根据实际 API 响应格式调整
  61. // 由于 Filament 表格需要 Eloquent 模型,这里只是示例
  62. // 实际项目中可能需要创建临时的资源类来处理 API 数据
  63. } catch (\Exception $e) {
  64. Notification::make()
  65. ->title('获取数据失败')
  66. ->body($e->getMessage())
  67. ->danger()
  68. ->send();
  69. }
  70. }
  71. }